Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
2a9cbbf
fix: battle/raid filtering race condition
Mygod Dec 9, 2025
cd01a92
fix: ground raid/battle icons
Mygod Dec 9, 2025
3717c2e
chore: centralize overlay logic
Mygod Dec 9, 2025
21b50f5
fix: weather icon in pokemon background popup
Mygod Dec 10, 2025
640c5ad
chore(release): v1.40.2-develop.1 [skip ci]
semantic-release-bot Dec 10, 2025
4f5aace
feat: support stationed pokemon extras
Mygod Dec 10, 2025
907ca33
fix: no scrollbars plz
Mygod Dec 11, 2025
8a0447c
feat: dynamic placed Pokemon dropdown height
Mygod Dec 11, 2025
497f350
fix: battle/raid icon max height
Mygod Dec 11, 2025
b2ea525
chore(release): v1.41.0-develop.1 [skip ci]
semantic-release-bot Dec 11, 2025
0f157ed
fix: remove extra Forms
Mygod Dec 11, 2025
e46ea5b
chore(release): v1.41.0-develop.2 [skip ci]
semantic-release-bot Dec 15, 2025
a2c7f17
fix: logic bug in loading non-clustered elements (#1161)
ComplementaryPogo Dec 15, 2025
bce4be5
chore: sync config [skip ci]
turtlesocks-bot Dec 15, 2025
d3ea283
feat: default clientPrompt to none to skip permission reapproval
Mygod Dec 16, 2025
d7ecbde
chore: sync config [skip ci]
turtlesocks-bot Dec 16, 2025
b579ded
fix: more robust discord handling (#1181)
Mygod Dec 16, 2025
11c75e0
chore(release): v1.41.0-develop.3 [skip ci]
semantic-release-bot Dec 16, 2025
cea3141
fix: area reload
Mygod Dec 31, 2025
5c907c5
chore(release): v1.41.0-develop.4 [skip ci]
semantic-release-bot Dec 31, 2025
7bd5ce1
fix: escape gpx xml (#1186)
josh-vin Jan 8, 2026
5b32067
chore(release): v1.41.0-develop.5 [skip ci]
semantic-release-bot Jan 8, 2026
8adba28
feat: ar/no-ar quest dot badge
Mygod Feb 16, 2026
b626d3d
fix: showcase icons display
Mygod Feb 16, 2026
4b73e0e
chore: sync config [skip ci]
turtlesocks-bot Feb 16, 2026
d418fed
chore(deps): bump lodash-es from 4.17.21 to 4.17.23 (#1188)
dependabot[bot] Feb 16, 2026
f9f05d9
chore(deps): bump @apollo/server from 4.11.0 to 5.4.0 (#1190)
dependabot[bot] Feb 16, 2026
6b9eb0c
chore(deps): bump lodash from 4.17.21 to 4.17.23 (#1189)
dependabot[bot] Feb 16, 2026
ce37e2a
fix: im dumdum
Mygod Feb 16, 2026
a106233
chore(release): v1.41.0-develop.6 [skip ci]
semantic-release-bot Feb 16, 2026
3907656
fix: properly migrate to express 5
Mygod Feb 17, 2026
55ba38a
chore(release): v1.41.0-develop.7 [skip ci]
semantic-release-bot Feb 17, 2026
018ba93
fix: hidden power in raids are fighting type
Mygod Feb 18, 2026
12f0012
chore(release): v1.41.0-develop.8 [skip ci]
semantic-release-bot Feb 18, 2026
ee176da
fix: pokemon onlyManualId filter in expert sql mode
Mygod Feb 19, 2026
dfda729
chore(release): v1.41.0-develop.9 [skip ci]
semantic-release-bot Feb 19, 2026
647a175
fix: ditto shenanigans (#1193)
Mygod Mar 10, 2026
a4d5d85
chore(release): v1.41.0-develop.10 [skip ci]
semantic-release-bot Mar 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
98 changes: 98 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,101 @@
# [1.41.0-develop.10](https://github.com/WatWowMap/ReactMap/compare/v1.41.0-develop.9...v1.41.0-develop.10) (2026-03-10)


### Bug Fixes

* ditto shenanigans ([#1193](https://github.com/WatWowMap/ReactMap/issues/1193)) ([647a175](https://github.com/WatWowMap/ReactMap/commit/647a1758e6c3ab0dc4340c7a4b6fe8cc88e00084))

# [1.41.0-develop.9](https://github.com/WatWowMap/ReactMap/compare/v1.41.0-develop.8...v1.41.0-develop.9) (2026-02-19)


### Bug Fixes

* pokemon onlyManualId filter in expert sql mode ([ee176da](https://github.com/WatWowMap/ReactMap/commit/ee176da3749c27b33aa659ba432706ad5c19951b))

# [1.41.0-develop.8](https://github.com/WatWowMap/ReactMap/compare/v1.41.0-develop.7...v1.41.0-develop.8) (2026-02-18)


### Bug Fixes

* hidden power in raids are fighting type ([018ba93](https://github.com/WatWowMap/ReactMap/commit/018ba93642eee0a08d2a864c1a04998ff63503a9))

# [1.41.0-develop.7](https://github.com/WatWowMap/ReactMap/compare/v1.41.0-develop.6...v1.41.0-develop.7) (2026-02-17)


### Bug Fixes

* properly migrate to express 5 ([3907656](https://github.com/WatWowMap/ReactMap/commit/390765696dbdcd89ed2fd57b16d41ecc2725a1b9))

# [1.41.0-develop.6](https://github.com/WatWowMap/ReactMap/compare/v1.41.0-develop.5...v1.41.0-develop.6) (2026-02-16)


### Bug Fixes

* im dumdum ([ce37e2a](https://github.com/WatWowMap/ReactMap/commit/ce37e2a9123ea2808cde3f3f130361055141ae63))
* showcase icons display ([b626d3d](https://github.com/WatWowMap/ReactMap/commit/b626d3d37c18b5ef6261f02b105796fdb8ce011f))


### Features

* ar/no-ar quest dot badge ([8adba28](https://github.com/WatWowMap/ReactMap/commit/8adba286fea81d194e0dd4b7da5c680f6499b697))

# [1.41.0-develop.5](https://github.com/WatWowMap/ReactMap/compare/v1.41.0-develop.4...v1.41.0-develop.5) (2026-01-08)


### Bug Fixes

* escape gpx xml ([#1186](https://github.com/WatWowMap/ReactMap/issues/1186)) ([7bd5ce1](https://github.com/WatWowMap/ReactMap/commit/7bd5ce10d3e8aa6f64faac8d3d9773c589d6a28e))

# [1.41.0-develop.4](https://github.com/WatWowMap/ReactMap/compare/v1.41.0-develop.3...v1.41.0-develop.4) (2025-12-31)


### Bug Fixes

* area reload ([cea3141](https://github.com/WatWowMap/ReactMap/commit/cea3141386d804f502e83e89b9bf92da93102a5d))

# [1.41.0-develop.3](https://github.com/WatWowMap/ReactMap/compare/v1.41.0-develop.2...v1.41.0-develop.3) (2025-12-16)


### Bug Fixes

* logic bug in loading non-clustered elements ([#1161](https://github.com/WatWowMap/ReactMap/issues/1161)) ([a2c7f17](https://github.com/WatWowMap/ReactMap/commit/a2c7f17e02ff7cd5467d4bf5ccd8b13a444ba725))
* more robust discord handling ([#1181](https://github.com/WatWowMap/ReactMap/issues/1181)) ([b579ded](https://github.com/WatWowMap/ReactMap/commit/b579dedeb196fb4d8b1da025e325049bfd7833e8))


### Features

* default clientPrompt to none to skip permission reapproval ([d3ea283](https://github.com/WatWowMap/ReactMap/commit/d3ea283b5eacda18b9f4725e50e5353a955a363d))

# [1.41.0-develop.2](https://github.com/WatWowMap/ReactMap/compare/v1.41.0-develop.1...v1.41.0-develop.2) (2025-12-15)


### Bug Fixes

* remove extra Forms ([0f157ed](https://github.com/WatWowMap/ReactMap/commit/0f157edba37eb727fdb9f4a5b96bdf417298cdfc))

# [1.41.0-develop.1](https://github.com/WatWowMap/ReactMap/compare/v1.40.2-develop.1...v1.41.0-develop.1) (2025-12-11)


### Bug Fixes

* battle/raid icon max height ([497f350](https://github.com/WatWowMap/ReactMap/commit/497f3504a4ea6000184c9df30c5a3c3e76d65d80))
* no scrollbars plz ([907ca33](https://github.com/WatWowMap/ReactMap/commit/907ca331beb1fe81dd671732d5ebe1980d8d6faa))


### Features

* dynamic placed Pokemon dropdown height ([8a0447c](https://github.com/WatWowMap/ReactMap/commit/8a0447c3e9d7df9c4aa9add657a234a1bc59b412))
* support stationed pokemon extras ([4f5aace](https://github.com/WatWowMap/ReactMap/commit/4f5aace285285d55e3a946fb2f465b7609a9caea))

## [1.40.2-develop.1](https://github.com/WatWowMap/ReactMap/compare/v1.40.1...v1.40.2-develop.1) (2025-12-10)


### Bug Fixes

* battle/raid filtering race condition ([2a9cbbf](https://github.com/WatWowMap/ReactMap/commit/2a9cbbf180313064830a524f86eae62f41b6b87b))
* ground raid/battle icons ([cd01a92](https://github.com/WatWowMap/ReactMap/commit/cd01a92bda81f786ca2c14f10df8cc4489163fd6))
* weather icon in pokemon background popup ([21b50f5](https://github.com/WatWowMap/ReactMap/commit/21b50f51b81bf6f7723753a4f77289ead99c51e7))

## [1.40.1](https://github.com/WatWowMap/ReactMap/compare/v1.40.0...v1.40.1) (2025-12-09)


Expand Down
8 changes: 8 additions & 0 deletions config/custom-environment-variables.json
Original file line number Diff line number Diff line change
Expand Up @@ -829,6 +829,14 @@
"__name": "CLIENT_SIDE_OPTIONS_POKESTOPS_HAS_QUEST_INDICATOR",
"__format": "boolean"
},
"showArQuestDotBadge": {
"__name": "CLIENT_SIDE_OPTIONS_POKESTOPS_SHOW_AR_QUEST_DOT_BADGE",
"__format": "boolean"
},
"showNoArQuestDotBadge": {
"__name": "CLIENT_SIDE_OPTIONS_POKESTOPS_SHOW_NO_AR_QUEST_DOT_BADGE",
"__format": "boolean"
},
"showArBadge": {
"__name": "CLIENT_SIDE_OPTIONS_POKESTOPS_SHOW_AR_BADGE",
"__format": "boolean"
Expand Down
4 changes: 3 additions & 1 deletion config/default.json
Original file line number Diff line number Diff line change
Expand Up @@ -380,6 +380,8 @@
"customRange": 0,
"madQuestText": false,
"hasQuestIndicator": true,
"showArQuestDotBadge": false,
"showNoArQuestDotBadge": true,
"showArBadge": false,
"enablePokestopPopupCoords": false,
"invasionOpacity": true,
Expand Down Expand Up @@ -719,7 +721,7 @@
"allowedGuilds": [],
"blockedGuilds": [],
"allowedUsers": [],
"clientPrompt": "consent",
"clientPrompt": "none",
"thumbnailUrl": "https://user-images.githubusercontent.com/58572875/167069223-745a139d-f485-45e3-a25c-93ec4d09779c.png",
"trialPeriod": {
"start": {
Expand Down
11 changes: 6 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "reactmap",
"version": "1.40.1",
"version": "1.41.0-develop.10",
"private": true,
"description": "React based frontend map.",
"license": "MIT",
Expand Down Expand Up @@ -99,7 +99,8 @@
},
"dependencies": {
"@apollo/client": "3.11.4",
"@apollo/server": "4.11.0",
"@apollo/server": "5.4.0",
"@as-integrations/express5": "1.1.2",
"@emotion/react": "11.14.0",
"@emotion/styled": "11.13.0",
"@graphql-tools/graphql-file-loader": "8.0.1",
Expand Down Expand Up @@ -140,7 +141,7 @@
"express-rate-limit": "7.4.0",
"express-session": "^1.18.1",
"geo-tz": "^7.0.7",
"graphql": "16.9.0",
"graphql": "16.11.0",
"graphql-type-json": "0.3.2",
"helmet": "7.1.0",
"i18next": "23.12.3",
Expand All @@ -151,7 +152,7 @@
"leaflet": "1.9.4",
"leaflet-arrowheads": "^1.4.0",
"leaflet.locatecontrol": "0.85.1",
"lodash": "^4.17.21",
"lodash": "^4.17.23",
"long": "^4.0.0",
"moment-timezone": "^0.6.0",
"mysql2": "3.11.0",
Expand Down Expand Up @@ -219,7 +220,7 @@
"tmp": ">=0.2.4"
},
"engines": {
"node": ">=18",
"node": ">=20",
"yarn": "^1.22.x"
}
}
2 changes: 1 addition & 1 deletion packages/config/.configref
Original file line number Diff line number Diff line change
@@ -1 +1 @@
26702
26772
2 changes: 2 additions & 0 deletions packages/locales/lib/human/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -412,6 +412,8 @@
"webhook_selection": "{{name}} Selection",
"message_of_the_day": "Message of the Day",
"has_quest_indicator": "Alternative Color for Stops with Quests",
"show_ar_quest_dot_badge": "Show AR Quest Dot Badge",
"show_no_ar_quest_dot_badge": "Show No-AR Quest Dot Badge",
"show_ar_badge": "Show AR Badge",
"all_gyms": "All Gyms",
"general": "General",
Expand Down
5 changes: 1 addition & 4 deletions packages/types/lib/scanner.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -372,11 +372,8 @@ export interface Route {

export type FullRoute = FullModel<Route, RouteModel.Route>

export interface StationPokemon {
export interface StationPokemon extends PokemonDisplay {
pokemon_id: number
form: number
costume: number
gender: number
bread_mode: number
}

Expand Down
19 changes: 9 additions & 10 deletions server/src/filters/builder/pokemon.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// @ts-check
const { state } = require('../../services/state')
const { BaseFilter } = require('../Base')
const { getWildFilterKey } = require('../pokemon/getWildFilterKey')

/**
*
Expand Down Expand Up @@ -36,20 +37,18 @@ function buildPokemon(defaults, base, custom) {
Object.entries(state.event.masterfile.pokemon).forEach(([id, pkmn]) => {
pokemon.quests[`${id}`] = new BaseFilter(defaults.pokestops.pokemon)
Object.keys(pkmn.forms).forEach((form) => {
pokemon.full[`${id}-${form}`] = base
pokemon.raids[`${id}-${form}`] = new BaseFilter(defaults.gyms.pokemon)
pokemon.stations[`${id}-${form}`] = new BaseFilter(
defaults.stations.pokemon,
)
pokemon.quests[`${id}-${form}`] = new BaseFilter(
defaults.pokestops.pokemon,
)
const filterKey = getWildFilterKey(id, form)
const rawKey = `${id}-${form}`
pokemon.full[filterKey] = base
pokemon.raids[rawKey] = new BaseFilter(defaults.gyms.pokemon)
pokemon.stations[rawKey] = new BaseFilter(defaults.stations.pokemon)
pokemon.quests[rawKey] = new BaseFilter(defaults.pokestops.pokemon)
if (state.db.filterContext.Pokestop.hasConfirmedInvasions) {
pokemon.rocket[`a${id}-${form}`] = new BaseFilter(
pokemon.rocket[`a${rawKey}`] = new BaseFilter(
defaults.pokestops.invasionPokemon,
)
}
pokemon.nests[`${id}-${form}`] = new BaseFilter(defaults.nests.allPokemon)
pokemon.nests[rawKey] = new BaseFilter(defaults.nests.allPokemon)
})
if ('family' in pkmn) {
if (pkmn.family === +id) {
Expand Down
3 changes: 2 additions & 1 deletion server/src/filters/pokemon/Backend.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
const config = require('@rm/config')
const { log, TAGS } = require('@rm/logger')
const { AND_KEYS, BASE_KEYS } = require('./constants')
const { getWildFilterKey } = require('./getWildFilterKey')
const {
deepCompare,
between,
Expand Down Expand Up @@ -372,7 +373,7 @@ class PkmnBackend {
return true
if (
!this.mods.onlyLinkGlobal ||
(this.pokemon === pokemon.pokemon_id && this.form === pokemon.form)
this.id === getWildFilterKey(pokemon.pokemon_id, pokemon.form)
) {
if (!this.expertFilter || !this.expertGlobal) return true
if (this.expertFilter(pokemon)) {
Expand Down
25 changes: 25 additions & 0 deletions server/src/filters/pokemon/getWildFilterKey.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
const DITTO_ID = 132

const normalizePokemonId = (pokemonId) => {
const parsedPokemonId = Number.parseInt(`${pokemonId}`, 10)
return Number.isNaN(parsedPokemonId) ? 0 : parsedPokemonId
}

const normalizePokemonForm = (pokemonId, formId = 0) => {
if (normalizePokemonId(pokemonId) === DITTO_ID) {
// Confirmed wild Ditto is already treated as species-based upstream.
// Golbat/MEM keeps the scanner lookup on `pokemon_id = 132, form = 0`,
// while the raw form field may still carry the disguise form for display.
return 0
}
const parsedFormId = Number.parseInt(`${formId ?? 0}`, 10)
return Number.isNaN(parsedFormId) ? 0 : parsedFormId
}

const getWildFilterKey = (pokemonId, formId = 0) =>
`${normalizePokemonId(pokemonId)}-${normalizePokemonForm(pokemonId, formId)}`

module.exports = {
DITTO_ID,
getWildFilterKey,
}
6 changes: 6 additions & 0 deletions server/src/graphql/typeDefs/scanner.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -323,5 +323,11 @@ type StationPokemon {
form: Int
costume: Int
gender: Int
shiny: Boolean
temp_evolution: Int
temp_evolution_finish_ms: Float
alignment: Int
badge: Int
background: Int
bread_mode: Int
}
2 changes: 1 addition & 1 deletion server/src/middleware/apollo.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// @ts-check
const { expressMiddleware } = require('@apollo/server/express4')
const { expressMiddleware } = require('@as-integrations/express5')
const { ApolloServerErrorCode } = require('@apollo/server/errors')
const { GraphQLError } = require('graphql')
const { parse } = require('graphql')
Expand Down
Loading