From 4861ab4aa7fd69cfcc7d0d9dbc9a2087adda2eba Mon Sep 17 00:00:00 2001 From: TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com> Date: Sun, 3 Jul 2022 15:03:23 -0400 Subject: [PATCH 01/38] Dynamic Rarity - Read historical spawn data from RDM, needs testing to know to skip MAD - Read current DB when querying for available to determine current rarity - Fix release action --- .github/workflows/release.yml | 5 ++ public/base-locales/en.json | 5 +- server/scripts/generateMasterfile.js | 80 ++++++++++++------- server/src/configs/default.json | 8 +- server/src/data/defaultRarity.json | 7 +- server/src/index.js | 24 +++--- server/src/models/Pokemon.js | 19 ++++- server/src/services/DbCheck.js | 64 ++++++++++++++- server/src/services/EventManager.js | 6 +- server/src/services/initialization.js | 1 + server/src/services/ui/advMenus.js | 54 ++++++++----- .../layout/dialogs/filters/Options.jsx | 2 +- .../dialogs/filters/OptionsContainer.jsx | 4 +- src/hooks/useFilter.js | 21 ++++- src/services/filtering/genPokemon.js | 3 +- 15 files changed, 225 insertions(+), 78 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fb5a2af6d..207898138 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -21,3 +21,8 @@ jobs: - name: Sentry Build run: yarn release + env: + SENTRY_AUTH_TOKEN: ${{secrets.SENTRY_AUTH_TOKEN}} + SENTRY_DSN: ${{secrets.SENTRY_DSN}} + SENTRY_ORG: ${{secrets.SENTRY_ORG}} + SENTRY_PROJECT: ${{secrets.SENTRY_PROJECT}} diff --git a/public/base-locales/en.json b/public/base-locales/en.json index cd3acd484..1aab20329 100644 --- a/public/base-locales/en.json +++ b/public/base-locales/en.json @@ -37,7 +37,7 @@ "generations": "Generations", "types": "Types", "forms": "Forms", - "rarity": "Rarity", + "rarity": "Current Rarity", "others": "Others", "categories": "Categories", "rank": "Rank", @@ -546,5 +546,6 @@ "poi_color": "POI Color", "quest_condition": "Quest Condition", "always_show_labels": "Always Show Labels", - "scan_areas_options": "Scan Areas Options" + "scan_areas_options": "Scan Areas Options", + "historic_rarity": "Historic Rarity" } diff --git a/server/scripts/generateMasterfile.js b/server/scripts/generateMasterfile.js index ed57b315b..55986e9b7 100644 --- a/server/scripts/generateMasterfile.js +++ b/server/scripts/generateMasterfile.js @@ -1,51 +1,72 @@ -/* eslint-disable no-console */ -/* eslint-disable no-restricted-syntax */ const fs = require('fs') -const path = require('path') -const { rarity } = require('../src/services/config') +const { resolve } = require('path') +const { rarity: customRarity } = require('../src/services/config') const fetchJson = require('../src/services/api/fetchJson') const defaultRarity = require('../src/data/defaultRarity.json') -const getRarityLevel = (id, pkmn) => { - let pkmnRarity - for (const [tier, pokemon] of Object.entries(defaultRarity)) { - if (rarity?.[tier]?.length) { - if (rarity[tier].includes(parseInt(id))) { - pkmnRarity = tier - } - } else if (pokemon.includes(parseInt(id))) { - pkmnRarity = tier - } +const rarityObj = {} +Object.entries(defaultRarity).forEach(([tier, pokemon]) => { + if (customRarity?.[tier]?.length) { + customRarity[tier].forEach((mon) => (rarityObj[mon] = tier)) + } else { + pokemon.forEach((mon) => (rarityObj[mon] = tier)) } - if (pkmn.legendary) pkmnRarity = 'legendary' - if (pkmn.mythical) pkmnRarity = 'mythical' - if (pkmn.ultraBeast) pkmnRarity = 'ultraBeast' - return pkmnRarity -} +}) -const generate = async (save) => { +const generate = async ( + save = false, + historicRarity = new Map(), + dbRarity = new Map(), +) => { try { const masterfile = await fetchJson( 'https://raw.githubusercontent.com/WatWowMap/Masterfile-Generator/master/master-latest-react-map.json', ) - Object.values(masterfile.pokemon).forEach((pokemon) => { - pokemon.rarity = getRarityLevel(pokemon.pokedexId, pokemon) - pokemon.types = pokemon.types || [] - delete pokemon.mythical - delete pokemon.legendary - }) + const newMf = { + ...masterfile, + pokemon: Object.fromEntries( + Object.values(masterfile.pokemon).map((pokemon) => { + const { legendary, mythical, ultraBeast, ...rest } = pokemon + const historic = historicRarity.get(pokemon.pokedexId) || 'never' + + let rarity = + (dbRarity.size + ? dbRarity.get(`${pokemon.pokedexId}-${pokemon.defaultFormId}`) + : rarityObj[pokemon.pokedexId]) || 'never' + if (legendary) rarity = 'legendary' + if (mythical) rarity = 'mythical' + if (ultraBeast) rarity = 'ultraBeast' + if (rarityObj[pokemon.pokedexId] === 'regional') rarity = 'regional' + + const forms = Object.fromEntries( + Object.entries(pokemon.forms || {}).map(([formId, form]) => [ + formId, + { + ...form, + rarity: + +formId === pokemon.defaultFormId + ? rarity + : dbRarity.get(`${pokemon.pokedexId}-${formId}`) || 'never', + }, + ]), + ) + return [pokemon.pokedexId, { ...rest, forms, rarity, historic }] + }), + ), + } if (save) { fs.writeFileSync( - path.resolve(`${__dirname}/../src/data/masterfile.json`), - JSON.stringify(masterfile, null, 2), + resolve(`${__dirname}/../src/data/masterfile.json`), + JSON.stringify(newMf, null, 2), 'utf8', () => {}, ) } - return masterfile + return newMf } catch (e) { + // eslint-disable-next-line no-console console.warn('[WARN] Unable to generate new masterfile, using existing.', e) } } @@ -53,5 +74,6 @@ const generate = async (save) => { module.exports.generate = generate if (require.main === module) { + // eslint-disable-next-line no-console generate(true).then(() => console.log('Masterfile generated')) } diff --git a/server/src/configs/default.json b/server/src/configs/default.json index 718171d47..3dc3c35ef 100644 --- a/server/src/configs/default.json +++ b/server/src/configs/default.json @@ -699,12 +699,18 @@ } }, "rarity": { + "percents": { + "uncommon": 0.25, + "rare": 0.1, + "ultraRare": 0.01 + }, "common": [], "uncommon": [], "rare": [], "ultraRare": [], "regional": [], - "event": [] + "event": [], + "never": [] }, "manualAreas": [] } \ No newline at end of file diff --git a/server/src/data/defaultRarity.json b/server/src/data/defaultRarity.json index 5bd194937..9fa61caf1 100644 --- a/server/src/data/defaultRarity.json +++ b/server/src/data/defaultRarity.json @@ -6,7 +6,7 @@ 2,5,8,11,14,17,20,22,24,26,30,33,36,38,40,42,44,47,49,51,53,55,57,59,61,64,67,70,73,75,78,80,82,85,87,89,91,93,97,99,101,103,105,110,112,117,119,121,124,125,126,127,139,141,153,156,159,162,164,166,168,171,178,180,184,185,188,195,202,203,205,206,210,211,213,217,219,221,224,226,227,229,234,253,256,259,262,264,266,268,271,274,277,279,281,284,286,288,294,297,301,302,305,308,310,317,319,323,326,329,332,340,342,344,346,348,354,356,362,364,388,391,394,397,400,402,419,426,428,432,435,437,450,452,454,457,460,496,499,502,505,507,510,520,522,524,528,536,541,544,547,549,552,558,563,569,573,578,581,583,586,587,591,595,603,606,614,615,620,651,654,657,660,662,668 ], "rare": [ - 3,6,9,12,15,18,28,31,34,45,62,65,68,71,76,94,106,107,108,113,114,130,131,132,134135,136,137,142,143,144,154,157,160,169,176,181,189,232,235,237,241,242,254,257,260,267,269,272,275,282,289,295,306,330,358,365,389,392,395,398,408,409,410,411,413,414,497,500,503,508,518,521,523,525,526,530,531,537,542,545,553,554,555,564,565,566,567,571,574,575,576,579,584,589,593,594,596,597,598,604,617,618,621,622,623,625,630,636,637,652,655,658 + 3,6,9,12,15,18,28,31,34,45,62,65,68,71,76,94,106,107,108,113,114,130,131,132,134,135,136,137,142,143,144,154,157,160,169,176,181,189,232,235,237,241,242,254,257,260,267,269,272,275,282,289,295,306,330,358,365,389,392,395,398,408,409,410,411,413,414,497,500,503,508,518,521,523,525,526,530,531,537,542,545,553,554,555,564,565,566,567,571,574,575,576,579,584,589,593,594,596,597,598,604,617,618,621,622,623,625,630,636,637,652,655,658 ], "ultraRare": [ 147,148,149,201,246,247,248,371,372,373,374,375,376,443,444,445,607,608,609,610,611,612,633,634,635,714,715 @@ -14,7 +14,8 @@ "regional": [ 83,115,122,128,214,222,313,314,324,335,336,337,338,357,369,417,422,423,439,441,455,480,481,482,511,512,513,514,515,516,538,539,550,556,561,626,631,632,707 ], - "event": [ + "never": [ 172,173,174,175,182,186,192,196,197,199,208,212,225,230,233,236,238,239,240,290,291,292,298,303,321,327,334,350,352,359,360,367,368,403,404,405,406,407,416,424,429,430,433,438,439,440,442,446,447,448,458,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,532,533,534,559,560,599,600,601,627,628,677,678 - ] + ], + "event": [] } diff --git a/server/src/index.js b/server/src/index.js index b00b839aa..292b12c2c 100644 --- a/server/src/index.js +++ b/server/src/index.js @@ -196,20 +196,24 @@ app.use((err, req, res, next) => { Db.determineType().then(async () => { await Promise.all([ - Event.getUicons(config.icons.styles), - Event.getMasterfile(), - Event.getInvasions(), - Event.getWebhooks(config), + Db.initRarity(), Event.setAvailable('gyms', 'Gym', Db), Event.setAvailable('pokestops', 'Pokestop', Db), Event.setAvailable('pokemon', 'Pokemon', Db), Event.setAvailable('nests', 'Nest', Db), - ]).then(() => { - Event.addAvailable() - app.listen(config.port, config.interface, () => { - console.log( - `[INIT] Server is now listening at http://${config.interface}:${config.port}`, - ) + ]).then(async () => { + await Promise.all([ + Event.getUicons(config.icons.styles), + Event.getMasterfile(Db.historical, Db.rarity), + Event.getInvasions(), + Event.getWebhooks(config), + ]).then(() => { + Event.addAvailable() + app.listen(config.port, config.interface, () => { + console.log( + `[INIT] Server is now listening at http://${config.interface}:${config.port}`, + ) + }) }) }) }) diff --git a/server/src/models/Pokemon.js b/server/src/models/Pokemon.js index dd476b90f..7e520467d 100644 --- a/server/src/models/Pokemon.js +++ b/server/src/models/Pokemon.js @@ -416,8 +416,8 @@ module.exports = class Pokemon extends Model { static async getAvailable({ isMad }) { const ts = Math.floor(new Date().getTime() / 1000) - const results = await this.query() - .select('pokemon_id', 'form') + const availableQuery = this.query() + .select(['pokemon_id', 'form']) .where( isMad ? 'disappear_time' : 'expire_timestamp', '>=', @@ -425,8 +425,21 @@ module.exports = class Pokemon extends Model { ) .groupBy('pokemon_id', 'form') .orderBy('pokemon_id', 'form') + const rarityQuery = this.query() + .select(['pokemon_id AS id', 'form as formId']) + .count('pokemon_id AS count') + .groupBy('pokemon_id', 'form') + .where( + isMad ? 'disappear_time' : 'expire_timestamp', + '>=', + isMad ? this.knex().fn.now() : ts, + ) + + const [available, rarity] = await Promise.all([availableQuery, rarityQuery]) + return { - available: results.map((pkmn) => `${pkmn.pokemon_id}-${pkmn.form}`), + available: available.map((pkmn) => `${pkmn.pokemon_id}-${pkmn.form}`), + rarity: Object.fromEntries(rarity.map((pkmn) => [`${pkmn.id}-${pkmn.formId}`, pkmn.count])), } } diff --git a/server/src/services/DbCheck.js b/server/src/services/DbCheck.js index ff8b66eaa..964243114 100644 --- a/server/src/services/DbCheck.js +++ b/server/src/services/DbCheck.js @@ -4,12 +4,15 @@ const { raw } = require('objection') const extend = require('extend') module.exports = class DbCheck { - constructor(validModels, dbSettings, queryDebug, apiSettings, distanceUnit) { + constructor(validModels, dbSettings, queryDebug, apiSettings, distanceUnit, rarityPercents) { this.validModels = validModels.flatMap((s) => s.useFor) this.singleModels = ['User', 'Badge', 'Session'] this.searchLimit = apiSettings.searchLimit + this.rarityPercents = rarityPercents this.models = {} this.questConditions = {} + this.rarity = new Map() + this.historical = new Map() this.connections = dbSettings.schemas .filter((s) => s.useFor.length) .map((schema, i) => { @@ -108,6 +111,48 @@ module.exports = class DbCheck { ) } + setRarity(id, percent, historical = false) { + if (percent === 0) { + this[historical ? 'historical' : 'rarity'].set(id, 'never') + } else if (percent < this.rarityPercents.ultraRare) { + this[historical ? 'historical' : 'rarity'].set(id, 'ultraRare') + } else if (percent < this.rarityPercents.rare) { + this[historical ? 'historical' : 'rarity'].set(id, 'rare') + } else if (percent < this.rarityPercents.uncommon) { + this[historical ? 'historical' : 'rarity'].set(id, 'uncommon') + } else { + this[historical ? 'historical' : 'rarity'].set(id, 'common') + } + } + + async initRarity() { + const results = await Promise.all( + this.models.Pokemon.map(async (source) => + source.isMad + ? () => [] + : source.SubModel.query() + .select('pokemon_id', raw('SUM(count) as total')) + .from('pokemon_stats') + .groupBy('pokemon_id'), + ), + ) + const consolidated = {} + let total = 0 + results.forEach((result) => { + result.forEach((row) => { + if (consolidated[row.pokemon_id]) { + consolidated[row.pokemon_id] += +row.total + } else { + consolidated[row.pokemon_id] = +row.total + } + total += +row.total + }) + }) + Object.entries(consolidated).forEach(([id, count]) => { + this.setRarity(+id, (count / total) * 100, true) + }) + } + bindConnections(models) { try { Object.entries(this.models).forEach(([model, sources]) => { @@ -239,6 +284,23 @@ module.exports = class DbCheck { ]), ) } + if (model === 'Pokemon') { + const base = {} + let total = 0 + results.forEach((result) => { + Object.entries(result.rarity).forEach(([key, count]) => { + if (key in base) { + base[key] += count + } else { + base[key] = count + } + total += count + }) + }) + Object.entries(base).forEach(([id, count]) => { + this.setRarity(id, (count / total) * 100) + }) + } if (results.length === 1) return results[0].available if (results.length > 1) { const returnSet = new Set() diff --git a/server/src/services/EventManager.js b/server/src/services/EventManager.js index 106ba476e..60233fe00 100644 --- a/server/src/services/EventManager.js +++ b/server/src/services/EventManager.js @@ -54,7 +54,7 @@ module.exports = class EventManager { await this.getInvasions() }, 1000 * 60 * 60 * (config.map.invasionCacheHrs || 1)) setInterval(async () => { - await this.getMasterfile() + await this.getMasterfile(Db.historical, Db.rarity) }, 1000 * 60 * 60 * (config.map.masterfileCacheHrs || 6)) if (Pvp) { setInterval(async () => { @@ -154,10 +154,10 @@ module.exports = class EventManager { } } - async getMasterfile() { + async getMasterfile(historical, dbRarity) { console.log('[EVENT] Fetching Latest Masterfile') try { - const newMf = await generate() + const newMf = await generate(false, historical, dbRarity) this.masterfile = newMf ?? this.masterfile this.addAvailable() } catch (e) { diff --git a/server/src/services/initialization.js b/server/src/services/initialization.js index 382101509..0dd56cb3e 100644 --- a/server/src/services/initialization.js +++ b/server/src/services/initialization.js @@ -20,6 +20,7 @@ const Db = new DbCheck( config.devOptions.queryDebug, config.api, config.map.distanceUnit, + config.rarity.percents ) const Pvp = config.api.pvp.reactMapHandlesPvp ? new PvpWrapper(config.api.pvp) diff --git a/server/src/services/ui/advMenus.js b/server/src/services/ui/advMenus.js index 798835950..f106afc64 100644 --- a/server/src/services/ui/advMenus.js +++ b/server/src/services/ui/advMenus.js @@ -21,30 +21,46 @@ if (map.enableQuestRewardTypeFilters) { categories.pokestops.push('general') } -const pokemonFilters = { - generations: [ - ...new Set( - Object.values(Event.masterfile.pokemon).map( - (val) => `generation_${val.genId}`, - ), - ), - ].filter((val) => val !== undefined), - types: Object.keys(Event.masterfile.types) - .map((key) => `poke_type_${key}`) - .filter((val) => val !== 'poke_type_0'), - rarity: [ - ...new Set( - Object.values(Event.masterfile.pokemon).map((val) => val.rarity), - ), - ].filter((val) => val !== undefined), - forms: ['normalForms', 'altForms', 'Alola', 'Galarian'], - others: ['reverse', 'selected', 'unselected', 'onlyAvailable'], -} +const baseRarity = [ + 'common', + 'uncommon', + 'rare', + 'ultraRare', + 'regional', + 'ultraBeast', + 'legendary', + 'mythical', + 'never', +] module.exports = function buildMenus() { const menuFilters = {} const returnedItems = {} + const rarityTiers = new Set( + Object.values(Event.masterfile.pokemon).map((val) => val.rarity), + ) + const historicalTiers = new Set( + Object.values(Event.masterfile.pokemon).map((val) => val.historic), + ) + + const pokemonFilters = { + generations: [ + ...new Set( + Object.values(Event.masterfile.pokemon).map( + (val) => `generation_${val.genId}`, + ), + ), + ].filter((val) => val !== undefined), + types: Object.keys(Event.masterfile.types) + .map((key) => `poke_type_${key}`) + .filter((val) => val !== 'poke_type_0'), + rarity: baseRarity.filter((tier) => rarityTiers.has(tier)), + historicRarity: baseRarity.filter((tier) => historicalTiers.has(tier)), + forms: ['normalForms', 'altForms', 'Alola', 'Galarian'], + others: ['reverse', 'selected', 'unselected', 'onlyAvailable'], + } + Object.entries(pokemonFilters).forEach(([key, items]) => { menuFilters[key] = Object.fromEntries(items.map((item) => [item, false])) }) diff --git a/src/components/layout/dialogs/filters/Options.jsx b/src/components/layout/dialogs/filters/Options.jsx index 49d482c8a..d6aa1b836 100644 --- a/src/components/layout/dialogs/filters/Options.jsx +++ b/src/components/layout/dialogs/filters/Options.jsx @@ -37,7 +37,7 @@ export default function FilterOptions({ {Object.keys(options).map((key) => ( { if (bool && options[filter] !== undefined) { - applied.push(filter) + applied.push(`${cat}-${filter}`) } }, ) @@ -110,7 +110,7 @@ export default function OptionsContainer({ {applied.map((x) => ( s.menuFilters, [])) const { - filters: { generations, types, rarity, forms, others, categories }, + filters: { + generations, + types, + rarity, + historicRarity, + forms, + others, + categories, + }, } = menus[category] const tempAdvFilter = {} const filteredArr = [] @@ -41,9 +49,11 @@ export default function useFilter( menus[category].filters[subCategory], ).every((val) => val === false) }) - tempAdvFilter.all = Object.values(tempAdvFilter).every((val) => val === true) - if ((others.selected && others.unselected) || tempAdvFilter.all) { + if ( + (others.selected && others.unselected) || + Object.values(tempAdvFilter).every((val) => val === true) + ) { switchKey = 'all' } else if (others.selected) { switchKey = 'selected' @@ -138,6 +148,8 @@ export default function useFilter( ((tempAdvFilter.generations || generations[item.genId]) && (tempAdvFilter.types || typeResolver(item.formTypes)) && (tempAdvFilter.rarity || rarity[item.rarity]) && + (tempAdvFilter.historicRarity || + historicRarity[item.historic]) && (tempAdvFilter.categories || categories[subCategory]) && (tempAdvFilter.forms || forms[item.formName] || @@ -167,6 +179,8 @@ export default function useFilter( ((tempAdvFilter.generations || generations[item.genId]) && (tempAdvFilter.types || typeResolver(item.formTypes)) && (tempAdvFilter.rarity || rarity[item.rarity]) && + (tempAdvFilter.historicRarity || + historicRarity[item.historic]) && (tempAdvFilter.categories || categories[subCategory]) && (tempAdvFilter.forms || forms[item.formName] || @@ -211,6 +225,7 @@ export default function useFilter( generations[item.genId] || item.formTypes.some((x) => types[x]) || rarity[item.rarity] || + historicRarity[item.historic] || forms[item.name] || (forms.altForms && item.formId != item.defaultFormId) || (forms.normalForms && item.formId === item.defaultFormId) || diff --git a/src/services/filtering/genPokemon.js b/src/services/filtering/genPokemon.js index 4dfbb77f3..b091fdc5c 100644 --- a/src/services/filtering/genPokemon.js +++ b/src/services/filtering/genPokemon.js @@ -34,7 +34,8 @@ export default function genPokemon(t, pokemon, categories) { pokeName, formName, formTypes, - rarity: pkmn.rarity, + rarity: form.rarity || pkmn.rarity, + historic: pkmn.historic, genId: `generation_${pkmn.genId}`, perms: ['pokemon', 'raids', 'quests', 'nests'], family: pkmn.family, From fdb77dd909265591c487a17b86145326a7601680 Mon Sep 17 00:00:00 2001 From: TurtIeSocks Date: Sun, 3 Jul 2022 19:03:46 +0000 Subject: [PATCH 02/38] Synced docker env vars with latest config Files changed:\nM server/src/configs/custom-environment-variables.json --- .../configs/custom-environment-variables.json | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/server/src/configs/custom-environment-variables.json b/server/src/configs/custom-environment-variables.json index 0efb11b23..c65ed769f 100644 --- a/server/src/configs/custom-environment-variables.json +++ b/server/src/configs/custom-environment-variables.json @@ -1407,6 +1407,20 @@ } }, "rarity": { + "percents": { + "uncommon": { + "__name": "RARITY_PERCENTS_UNCOMMON", + "__format": "number" + }, + "rare": { + "__name": "RARITY_PERCENTS_RARE", + "__format": "number" + }, + "ultraRare": { + "__name": "RARITY_PERCENTS_ULTRA_RARE", + "__format": "number" + } + }, "common": { "__name": "RARITY_COMMON", "__format": "json" @@ -1430,6 +1444,10 @@ "event": { "__name": "RARITY_EVENT", "__format": "json" + }, + "never": { + "__name": "RARITY_NEVER", + "__format": "json" } }, "manualAreas": { From 727503bbe1fbdc22b005c13b3097dfd487c61f27 Mon Sep 17 00:00:00 2001 From: TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com> Date: Sun, 3 Jul 2022 22:27:46 -0400 Subject: [PATCH 03/38] Cleanup Perms Functions - For loops in areaPerms to allow an early return if an areaRestriction rule doesn't have areas (fixes a bug) - Remove old, unused function - Cleanup for scanner and webhook perm fns --- server/src/services/Utility.js | 5 -- server/src/services/functions/areaPerms.js | 37 ++++++------ server/src/services/functions/permissions.js | 59 ------------------- server/src/services/functions/scannerPerms.js | 7 +-- server/src/services/functions/webhookPerms.js | 21 +++---- 5 files changed, 28 insertions(+), 101 deletions(-) delete mode 100644 server/src/services/functions/permissions.js diff --git a/server/src/services/Utility.js b/server/src/services/Utility.js index d4d2d114e..5ce5dd65d 100644 --- a/server/src/services/Utility.js +++ b/server/src/services/Utility.js @@ -6,7 +6,6 @@ const primaryUi = require('./ui/primary') const advMenus = require('./ui/advMenus') const clientOptions = require('./ui/clientOptions') const dbSelection = require('./functions/dbSelection') -const permissions = require('./functions/permissions') const webhook = require('./ui/webhook') const geocoder = require('./geocoder') const areaPerms = require('./functions/areaPerms') @@ -48,10 +47,6 @@ module.exports = class Utility { return dbSelection(...args) } - static permissions(...args) { - return permissions(...args) - } - static webhookUi(...args) { return webhook(...args) } diff --git a/server/src/services/functions/areaPerms.js b/server/src/services/functions/areaPerms.js index fd93d6cce..85495331a 100644 --- a/server/src/services/functions/areaPerms.js +++ b/server/src/services/functions/areaPerms.js @@ -1,25 +1,24 @@ -const areas = require('../areas') -const config = require('../config') +const { names } = require('../areas') +const { + authentication: { areaRestrictions }, +} = require('../config') module.exports = function areaPerms(roles) { - let perms = [] - if (areas.names.length) { - roles.forEach((group) => { - config.authentication.areaRestrictions.forEach((rule) => { - if (rule.roles.includes(group)) { - if (rule.areas.length) { - rule.areas.forEach((areaName) => { - if (areas.names.includes(areaName)) { - perms.push(areaName) - } - }) + const perms = [] + for (let i = 0; i < roles.length; i += 1) { + for (let j = 0; j < areaRestrictions.length; j += 1) { + if (areaRestrictions[j].roles.includes(roles[i])) { + if (areaRestrictions[j].areas.length) { + for (let k = 0; k < areaRestrictions[j].areas.length; k += 1) { + if (names.includes(areaRestrictions[j].areas[k])) { + perms.push(areaRestrictions[j].areas[k]) + } } + } else { + return [] } - }) - }) + } + } } - if (perms.length) { - perms = [...new Set(perms)] - } - return perms + return [...new Set(perms)] } diff --git a/server/src/services/functions/permissions.js b/server/src/services/functions/permissions.js deleted file mode 100644 index 78e876b8e..000000000 --- a/server/src/services/functions/permissions.js +++ /dev/null @@ -1,59 +0,0 @@ -module.exports = function permissionManager(permToCheck, perms) { - if (permToCheck.startsWith('quick')) { - permToCheck = permToCheck.replace('quick', '').toLowerCase() - } - switch (permToCheck) { - case 'map': - return perms.map - case 'team': - case 'teams': - case 'gym': - case 'gyms': - return perms.gyms - case 'egg': - case 'eggs': - case 'raid': - case 'raids': - return perms.raids - case 'monster': - case 'monsters': - case 'pokemon': - case 'pokemons': - return perms.pokemon - case 'iv': - case 'ivs': - return perms.iv - case 'pvp': - case 'pvps': - return perms.pvp - case 'nest': - case 'nests': - return perms.nests - case 'pokestop': - case 'pokestops': - return perms.pokestops - case 'quest': - case 'quests': - return perms.quests - case 'lure': - case 'lures': - return perms.lures - case 'invasion': - case 'invasions': - return perms.invasions - case 'scanArea': - case 'scanAreas': - return perms.scanAreas - case 'spawnpoint': - case 'spawnpoints': - return perms.spawnpoints - case 'webhook': - case 'setLocation': - case 'setAreas': - case 'switchProfile': - case 'webhooks': - return perms.webhooks - default: - return false - } -} diff --git a/server/src/services/functions/scannerPerms.js b/server/src/services/functions/scannerPerms.js index 86a3e12a3..dc95f632f 100644 --- a/server/src/services/functions/scannerPerms.js +++ b/server/src/services/functions/scannerPerms.js @@ -1,7 +1,7 @@ const { scanner } = require('../config') module.exports = function scannerPerms(roles, provider) { - let perms = [] + const perms = [] roles.forEach((role) => { Object.keys(scanner).forEach((mode) => { if ( @@ -14,8 +14,5 @@ module.exports = function scannerPerms(roles, provider) { } }) }) - if (perms.length) { - perms = [...new Set(perms)] - } - return perms + return [...new Set(perms)] } diff --git a/server/src/services/functions/webhookPerms.js b/server/src/services/functions/webhookPerms.js index 3f6574594..77ef034b5 100644 --- a/server/src/services/functions/webhookPerms.js +++ b/server/src/services/functions/webhookPerms.js @@ -1,18 +1,13 @@ const { webhooks } = require('../config') module.exports = function webhookPerms(roles, provider) { - let perms = [] - if (webhooks.length) { - roles.forEach((role) => { - webhooks.forEach((webhook) => { - if (webhook?.[provider]?.includes(role)) { - perms.push(webhook.name) - } - }) + const perms = [] + roles.forEach((role) => { + webhooks.forEach((webhook) => { + if (webhook?.[provider]?.includes(role)) { + perms.push(webhook.name) + } }) - } - if (perms.length) { - perms = [...new Set(perms)] - } - return perms + }) + return [...new Set(perms)] } From 2ef734b7c346ee7aaa55464d4137a206da42a039 Mon Sep 17 00:00:00 2001 From: TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com> Date: Sun, 3 Jul 2022 22:40:14 -0400 Subject: [PATCH 04/38] Extra Ranges - Adds 40m lure range - Adds 300m gym range Resolves #526 Resolves #499 --- public/base-locales/en.json | 4 +++- server/src/configs/default.json | 2 ++ server/src/services/ui/clientOptions.js | 2 ++ src/components/tiles/Gym.jsx | 9 +++++++++ src/components/tiles/Pokestop.jsx | 8 ++++++++ 5 files changed, 24 insertions(+), 1 deletion(-) diff --git a/public/base-locales/en.json b/public/base-locales/en.json index cd3acd484..8b35aeba2 100644 --- a/public/base-locales/en.json +++ b/public/base-locales/en.json @@ -546,5 +546,7 @@ "poi_color": "POI Color", "quest_condition": "Quest Condition", "always_show_labels": "Always Show Labels", - "scan_areas_options": "Scan Areas Options" + "scan_areas_options": "Scan Areas Options", + "300m_range": "300m Range", + "lure_range": "Lure Range" } diff --git a/server/src/configs/default.json b/server/src/configs/default.json index 718171d47..e5858484a 100644 --- a/server/src/configs/default.json +++ b/server/src/configs/default.json @@ -230,6 +230,7 @@ "clustering": true, "raidTimers": false, "interactionRanges": false, + "300mRange": false, "showExBadge": false, "showArBadge": false, "raidLevelBadges": false, @@ -240,6 +241,7 @@ "invasionTimers": false, "lureTimers": false, "interactionRanges": false, + "lureRange": false, "madQuestText": false, "hasQuestIndicator": true, "showArBadge": false diff --git a/server/src/services/ui/clientOptions.js b/server/src/services/ui/clientOptions.js index 34aa9c947..b6eaad6e6 100644 --- a/server/src/services/ui/clientOptions.js +++ b/server/src/services/ui/clientOptions.js @@ -17,6 +17,7 @@ module.exports = function clientOptions(perms) { clustering: { type: 'bool', perm: ['gyms', 'raids'] }, raidTimers: { type: 'bool', perm: ['raids'] }, interactionRanges: { type: 'bool', perm: ['gyms', 'raids'] }, + "300mRange": { type: 'bool', perm: ['raids'] }, showExBadge: { type: 'bool', perm: ['gyms'] }, showArBadge: { type: 'bool', perm: ['gyms'] }, raidLevelBadges: { type: 'bool', perm: ['raids'] }, @@ -27,6 +28,7 @@ module.exports = function clientOptions(perms) { invasionTimers: { type: 'bool', perm: ['invasions'] }, lureTimers: { type: 'bool', perm: ['lures'] }, interactionRanges: { type: 'bool', perm: ['pokestops'] }, + lureRange: { type: 'bool', perm: ['lures'] }, hasQuestIndicator: { type: 'bool', perm: ['quests'] }, showArBadge: { type: 'bool', perm: ['pokestops'] }, }, diff --git a/src/components/tiles/Gym.jsx b/src/components/tiles/Gym.jsx index 1f40adf18..c02d8d63c 100644 --- a/src/components/tiles/Gym.jsx +++ b/src/components/tiles/Gym.jsx @@ -32,6 +32,8 @@ const GymTile = ({ params, showCircles, setParams, + config, + zoom, }) => { const markerRef = useRef({}) const [done, setDone] = useState(false) @@ -116,6 +118,13 @@ const GymTile = ({ pathOptions={{ color: getColor(item.team_id), weight: 1 }} /> )} + {userSettings['300mRange'] && zoom >= config.interactionRangeZoom && ( + + )} ) ) diff --git a/src/components/tiles/Pokestop.jsx b/src/components/tiles/Pokestop.jsx index 0130ccf20..58957ab83 100644 --- a/src/components/tiles/Pokestop.jsx +++ b/src/components/tiles/Pokestop.jsx @@ -21,6 +21,7 @@ const PokestopTile = ({ showCircles, config, setParams, + zoom, }) => { const markerRef = useRef({}) const [done, setDone] = useState(false) @@ -107,6 +108,13 @@ const PokestopTile = ({ pathOptions={{ color: '#0DA8E7', weight: 1 }} /> )} + {userSettings.lureRange && zoom >= config.interactionRangeZoom && ( + + )} ) ) From f3a6677546eea0fe25bd98bb5fd08d2caa913f6f Mon Sep 17 00:00:00 2001 From: TurtIeSocks Date: Mon, 4 Jul 2022 02:40:40 +0000 Subject: [PATCH 05/38] Synced docker env vars with latest config Files changed:\nM server/src/configs/custom-environment-variables.json --- server/src/configs/custom-environment-variables.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/server/src/configs/custom-environment-variables.json b/server/src/configs/custom-environment-variables.json index 0efb11b23..6648dfaa1 100644 --- a/server/src/configs/custom-environment-variables.json +++ b/server/src/configs/custom-environment-variables.json @@ -529,6 +529,10 @@ "__name": "CLIENT_SIDE_OPTIONS_GYMS_INTERACTION_RANGES", "__format": "boolean" }, + "300mRange": { + "__name": "CLIENT_SIDE_OPTIONS_GYMS_300M_RANGE", + "__format": "boolean" + }, "showExBadge": { "__name": "CLIENT_SIDE_OPTIONS_GYMS_SHOW_EX_BADGE", "__format": "boolean" @@ -563,6 +567,10 @@ "__name": "CLIENT_SIDE_OPTIONS_POKESTOPS_INTERACTION_RANGES", "__format": "boolean" }, + "lureRange": { + "__name": "CLIENT_SIDE_OPTIONS_POKESTOPS_LURE_RANGE", + "__format": "boolean" + }, "madQuestText": { "__name": "CLIENT_SIDE_OPTIONS_POKESTOPS_MAD_QUEST_TEXT", "__format": "boolean" From 96b46c25ce8b046227787c5b329598ab4263163f Mon Sep 17 00:00:00 2001 From: TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com> Date: Sun, 3 Jul 2022 22:41:57 -0400 Subject: [PATCH 06/38] linting --- server/src/services/functions/scannerPerms.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/services/functions/scannerPerms.js b/server/src/services/functions/scannerPerms.js index dc95f632f..fbfbb0724 100644 --- a/server/src/services/functions/scannerPerms.js +++ b/server/src/services/functions/scannerPerms.js @@ -14,5 +14,5 @@ module.exports = function scannerPerms(roles, provider) { } }) }) - return [...new Set(perms)] + return [...new Set(perms)] } From 38322584ab2f040fb2eba84b7fa20e3e12b18fa5 Mon Sep 17 00:00:00 2001 From: TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com> Date: Sun, 3 Jul 2022 23:32:03 -0400 Subject: [PATCH 07/38] Split up Wayfarer - Let users select s14/s17/rings - Cleanup primary ui fn a bit Resolve #506 --- public/base-locales/en.json | 3 +- server/src/configs/default.json | 5 +- server/src/graphql/resolvers.js | 4 +- .../defaultFilters/buildDefaultFilters.js | 3 + .../services/functions/getPlacementCells.js | 2 +- server/src/services/ui/primary.js | 169 +++++++++--------- src/components/layout/drawer/WithSubItems.jsx | 38 +++- 7 files changed, 132 insertions(+), 92 deletions(-) diff --git a/public/base-locales/en.json b/public/base-locales/en.json index cd3acd484..37d55edeb 100644 --- a/public/base-locales/en.json +++ b/public/base-locales/en.json @@ -546,5 +546,6 @@ "poi_color": "POI Color", "quest_condition": "Quest Condition", "always_show_labels": "Always Show Labels", - "scan_areas_options": "Scan Areas Options" + "scan_areas_options": "Scan Areas Options", + "poi": "Points of Interest" } diff --git a/server/src/configs/default.json b/server/src/configs/default.json index 718171d47..f80890ff1 100644 --- a/server/src/configs/default.json +++ b/server/src/configs/default.json @@ -417,7 +417,10 @@ "enabled": false }, "submissionCells": { - "enabled": false + "enabled": false, + "rings": true, + "s17Cells": true, + "s14Cells": true }, "weather": { "enabled": true diff --git a/server/src/graphql/resolvers.js b/server/src/graphql/resolvers.js index d0be2763f..c97179794 100644 --- a/server/src/graphql/resolvers.js +++ b/server/src/graphql/resolvers.js @@ -299,10 +299,10 @@ module.exports = { return [ { placementCells: - args.zoom >= config.map.submissionZoom + args.zoom >= config.map.submissionZoom && args.filters.onlyS17Cells ? Utility.getPlacementCells(args, pokestops, gyms) : [], - typeCells: Utility.getTypeCells(args, pokestops, gyms), + typeCells: args.filters.onlyS14Cells ? Utility.getTypeCells(args, pokestops, gyms) : [], }, ] } diff --git a/server/src/services/defaultFilters/buildDefaultFilters.js b/server/src/services/defaultFilters/buildDefaultFilters.js index 92ff1c658..715ed5009 100644 --- a/server/src/services/defaultFilters/buildDefaultFilters.js +++ b/server/src/services/defaultFilters/buildDefaultFilters.js @@ -106,6 +106,9 @@ module.exports = function buildDefault(perms, available) { submissionCells: perms.submissionCells ? { enabled: defaultFilters.submissionCells.enabled, + rings: defaultFilters.submissionCells.rings, + s17Cells: defaultFilters.submissionCells.s17Cells, + s14Cells: defaultFilters.submissionCells.s14Cells, filter: { global: new GenericFilter() }, } : undefined, diff --git a/server/src/services/functions/getPlacementCells.js b/server/src/services/functions/getPlacementCells.js index 8805ebbee..f507071a5 100644 --- a/server/src/services/functions/getPlacementCells.js +++ b/server/src/services/functions/getPlacementCells.js @@ -46,7 +46,7 @@ module.exports = function getPlacementCells(bounds, pokestops, gyms) { cell.blocked = true } } - const rings = allCoords.map((poi) => new Ring(poi.id, poi.lat, poi.lon)) + const rings = bounds.filters.onlyRings ? allCoords.map((poi) => new Ring(poi.id, poi.lat, poi.lon)) : [] return { cells: Object.values(indexedCells), diff --git a/server/src/services/ui/primary.js b/server/src/services/ui/primary.js index 10d327e18..8e753e577 100644 --- a/server/src/services/ui/primary.js +++ b/server/src/services/ui/primary.js @@ -1,100 +1,98 @@ -/* eslint-disable no-restricted-syntax */ const { api: { pvp: { leagues }, }, defaultFilters: { - nests: { avgSliderStep }, + nests: { avgSliderStep, avgFilter }, }, } = require('../config') +const refSliders = { + pokemon: { + primary: [ + { + name: 'iv', + label: '%', + min: 0, + max: 100, + perm: 'iv', + color: 'secondary', + }, + ], + secondary: [ + { + name: 'level', + label: '', + min: 1, + max: 35, + perm: 'iv', + }, + { + name: 'atk_iv', + label: '', + min: 0, + max: 15, + perm: 'iv', + }, + { + name: 'def_iv', + label: '', + min: 0, + max: 15, + perm: 'iv', + }, + { + name: 'sta_iv', + label: '', + min: 0, + max: 15, + perm: 'iv', + }, + ], + }, + nests: { + secondary: [ + { + name: 'avgFilter', + i18nKey: 'spawns_per_hour', + label: '', + min: avgFilter[0], + max: avgFilter[1], + perm: 'nests', + step: avgSliderStep, + }, + ], + }, +} + +leagues.forEach((league) => + refSliders.pokemon.primary.push({ + name: league.name, + label: 'rank', + min: league.minRank || 1, + max: league.maxRank || 100, + perm: 'pvp', + color: 'primary', + }), +) + +const ignoredKeys = [ + 'enabled', + 'filter', + 'showQuestSet', + 'badge', + 'avgFilter', + 'raidTier', +] + module.exports = function generateUi(filters, perms) { const ui = {} - const ignoredKeys = [ - 'enabled', - 'filter', - 'showQuestSet', - 'badge', - 'avgFilter', - 'raidTier', - ] // builds the initial categories - for (const [key, value] of Object.entries(filters)) { + Object.entries(filters).forEach(([key, value]) => { let sliders if (value) { switch (key) { - case 'nests': - ui[key] = {} - sliders = { - secondary: [ - { - name: 'avgFilter', - i18nKey: 'spawns_per_hour', - label: '', - min: filters.nests.avgFilter[0], - max: filters.nests.avgFilter[1], - perm: 'nests', - step: avgSliderStep, - }, - ], - } - break - case 'pokemon': - ui[key] = {} - sliders = { - primary: [ - { - name: 'iv', - label: '%', - min: 0, - max: 100, - perm: 'iv', - color: 'secondary', - }, - ], - secondary: [ - { - name: 'level', - label: '', - min: 1, - max: 35, - perm: 'iv', - }, - { - name: 'atk_iv', - label: '', - min: 0, - max: 15, - perm: 'iv', - }, - { - name: 'def_iv', - label: '', - min: 0, - max: 15, - perm: 'iv', - }, - { - name: 'sta_iv', - label: '', - min: 0, - max: 15, - perm: 'iv', - }, - ], - } - leagues.forEach((league) => - sliders.primary.push({ - name: league.name, - label: 'rank', - min: league.minRank || 1, - max: league.maxRank || 100, - perm: 'pvp', - color: 'primary', - }), - ) - break case 'submissionCells': case 'portals': if (!ui.wayfarer) ui.wayfarer = {} @@ -108,10 +106,11 @@ module.exports = function generateUi(filters, perms) { break default: ui[key] = {} + sliders = refSliders[key] break } // builds each subcategory - for (const [subKey, subValue] of Object.entries(value)) { + Object.entries(value).forEach(([subKey, subValue]) => { if ( (!ignoredKeys.includes(subKey) && subValue !== undefined) || key === 'weather' || @@ -136,7 +135,7 @@ module.exports = function generateUi(filters, perms) { break } } - } + }) // adds any sliders present if (sliders) { ui[key].sliders = sliders @@ -150,7 +149,7 @@ module.exports = function generateUi(filters, perms) { }) } } - } + }) // deletes any menus that do not have any items/perms Object.keys(ui).forEach((category) => { diff --git a/src/components/layout/drawer/WithSubItems.jsx b/src/components/layout/drawer/WithSubItems.jsx index 50c668dc8..5a720ca67 100644 --- a/src/components/layout/drawer/WithSubItems.jsx +++ b/src/components/layout/drawer/WithSubItems.jsx @@ -1,6 +1,6 @@ -import React from 'react' +import React, { Fragment } from 'react' import { Grid, Typography, Switch, Select, MenuItem } from '@material-ui/core' -import { useTranslation } from 'react-i18next' +import { Trans, useTranslation } from 'react-i18next' import Utility from '@services/Utility' @@ -148,6 +148,40 @@ export default function WithSubItems({ )} + {category === 'wayfarer' && subItem === 'submissionCells' && ( + <> + {['rings', 's14Cells', 's17Cells'].map((item, i) => ( + + + + {i ? ( + + {{ level: i === 1 ? 14 : 17 }} + + ) : ( + t('poi') + )} + + + + { + setFilters({ + ...filters, + [subItem]: { + ...filters[subItem], + [item]: !filters[subItem][item], + }, + }) + }} + disabled={!filters[subItem].enabled} + /> + + + ))} + + )} ) } From 4169d36293434e8dde9b6674cf9d010a7ea05423 Mon Sep 17 00:00:00 2001 From: TurtIeSocks Date: Mon, 4 Jul 2022 03:32:41 +0000 Subject: [PATCH 08/38] Synced docker env vars with latest config Files changed:\nM server/src/configs/custom-environment-variables.json --- server/src/configs/custom-environment-variables.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/server/src/configs/custom-environment-variables.json b/server/src/configs/custom-environment-variables.json index 0efb11b23..e787f5f57 100644 --- a/server/src/configs/custom-environment-variables.json +++ b/server/src/configs/custom-environment-variables.json @@ -868,6 +868,18 @@ "enabled": { "__name": "DEFAULT_FILTERS_SUBMISSION_CELLS_ENABLED", "__format": "boolean" + }, + "rings": { + "__name": "DEFAULT_FILTERS_SUBMISSION_CELLS_RINGS", + "__format": "boolean" + }, + "s17Cells": { + "__name": "DEFAULT_FILTERS_SUBMISSION_CELLS_S17CELLS", + "__format": "boolean" + }, + "s14Cells": { + "__name": "DEFAULT_FILTERS_SUBMISSION_CELLS_S14CELLS", + "__format": "boolean" } }, "weather": { From 414d39e7df6536599fc1b97f0cd58bc7bcb4575f Mon Sep 17 00:00:00 2001 From: TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com> Date: Mon, 4 Jul 2022 08:23:46 -0400 Subject: [PATCH 09/38] Update WithSubItems.jsx --- src/components/layout/drawer/WithSubItems.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/layout/drawer/WithSubItems.jsx b/src/components/layout/drawer/WithSubItems.jsx index 5a720ca67..527c93d77 100644 --- a/src/components/layout/drawer/WithSubItems.jsx +++ b/src/components/layout/drawer/WithSubItems.jsx @@ -156,7 +156,7 @@ export default function WithSubItems({ {i ? ( - {{ level: i === 1 ? 14 : 17 }} + {{ level: item.substring(1, 3) }} ) : ( t('poi') From 09efcc1dcdd7820ed4d16f936060861cc899384e Mon Sep 17 00:00:00 2001 From: TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com> Date: Mon, 4 Jul 2022 08:24:52 -0400 Subject: [PATCH 10/38] Linting --- server/src/graphql/resolvers.js | 7 +++++-- server/src/services/functions/getPlacementCells.js | 4 +++- server/src/services/ui/clientOptions.js | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/server/src/graphql/resolvers.js b/server/src/graphql/resolvers.js index c97179794..3eceb79b9 100644 --- a/server/src/graphql/resolvers.js +++ b/server/src/graphql/resolvers.js @@ -299,10 +299,13 @@ module.exports = { return [ { placementCells: - args.zoom >= config.map.submissionZoom && args.filters.onlyS17Cells + args.zoom >= config.map.submissionZoom && + args.filters.onlyS17Cells ? Utility.getPlacementCells(args, pokestops, gyms) : [], - typeCells: args.filters.onlyS14Cells ? Utility.getTypeCells(args, pokestops, gyms) : [], + typeCells: args.filters.onlyS14Cells + ? Utility.getTypeCells(args, pokestops, gyms) + : [], }, ] } diff --git a/server/src/services/functions/getPlacementCells.js b/server/src/services/functions/getPlacementCells.js index f507071a5..05120f14a 100644 --- a/server/src/services/functions/getPlacementCells.js +++ b/server/src/services/functions/getPlacementCells.js @@ -46,7 +46,9 @@ module.exports = function getPlacementCells(bounds, pokestops, gyms) { cell.blocked = true } } - const rings = bounds.filters.onlyRings ? allCoords.map((poi) => new Ring(poi.id, poi.lat, poi.lon)) : [] + const rings = bounds.filters.onlyRings + ? allCoords.map((poi) => new Ring(poi.id, poi.lat, poi.lon)) + : [] return { cells: Object.values(indexedCells), diff --git a/server/src/services/ui/clientOptions.js b/server/src/services/ui/clientOptions.js index b6eaad6e6..6e8e44045 100644 --- a/server/src/services/ui/clientOptions.js +++ b/server/src/services/ui/clientOptions.js @@ -17,7 +17,7 @@ module.exports = function clientOptions(perms) { clustering: { type: 'bool', perm: ['gyms', 'raids'] }, raidTimers: { type: 'bool', perm: ['raids'] }, interactionRanges: { type: 'bool', perm: ['gyms', 'raids'] }, - "300mRange": { type: 'bool', perm: ['raids'] }, + '300mRange': { type: 'bool', perm: ['raids'] }, showExBadge: { type: 'bool', perm: ['gyms'] }, showArBadge: { type: 'bool', perm: ['gyms'] }, raidLevelBadges: { type: 'bool', perm: ['raids'] }, From 80d9eb268c5ef6c613c6217935700eb0a04cd87f Mon Sep 17 00:00:00 2001 From: TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com> Date: Mon, 4 Jul 2022 08:33:11 -0400 Subject: [PATCH 11/38] Version Bump (and linting) --- package.json | 2 +- server/src/models/Pokemon.js | 4 +++- server/src/services/DbCheck.js | 9 ++++++++- server/src/services/initialization.js | 2 +- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index dcd278f47..f058b10ba 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "reactmap", - "version": "1.3.0", + "version": "1.3.1", "description": "React based frontend map.", "main": "ReactMap.mjs", "author": "TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com>", diff --git a/server/src/models/Pokemon.js b/server/src/models/Pokemon.js index 7e520467d..b96c2cf49 100644 --- a/server/src/models/Pokemon.js +++ b/server/src/models/Pokemon.js @@ -439,7 +439,9 @@ module.exports = class Pokemon extends Model { return { available: available.map((pkmn) => `${pkmn.pokemon_id}-${pkmn.form}`), - rarity: Object.fromEntries(rarity.map((pkmn) => [`${pkmn.id}-${pkmn.formId}`, pkmn.count])), + rarity: Object.fromEntries( + rarity.map((pkmn) => [`${pkmn.id}-${pkmn.formId}`, pkmn.count]), + ), } } diff --git a/server/src/services/DbCheck.js b/server/src/services/DbCheck.js index 964243114..5870c6982 100644 --- a/server/src/services/DbCheck.js +++ b/server/src/services/DbCheck.js @@ -4,7 +4,14 @@ const { raw } = require('objection') const extend = require('extend') module.exports = class DbCheck { - constructor(validModels, dbSettings, queryDebug, apiSettings, distanceUnit, rarityPercents) { + constructor( + validModels, + dbSettings, + queryDebug, + apiSettings, + distanceUnit, + rarityPercents, + ) { this.validModels = validModels.flatMap((s) => s.useFor) this.singleModels = ['User', 'Badge', 'Session'] this.searchLimit = apiSettings.searchLimit diff --git a/server/src/services/initialization.js b/server/src/services/initialization.js index 0dd56cb3e..a365e699e 100644 --- a/server/src/services/initialization.js +++ b/server/src/services/initialization.js @@ -20,7 +20,7 @@ const Db = new DbCheck( config.devOptions.queryDebug, config.api, config.map.distanceUnit, - config.rarity.percents + config.rarity.percents, ) const Pvp = config.api.pvp.reactMapHandlesPvp ? new PvpWrapper(config.api.pvp) From 29cc5c7e41aaf75099959315693feac51f453f03 Mon Sep 17 00:00:00 2001 From: TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com> Date: Mon, 4 Jul 2022 18:05:05 -0400 Subject: [PATCH 12/38] Wayfarer Tweaks & Fixes - Bring circles into their own pane with a higher zIndex - Better filtering on backend --- server/src/graphql/resolvers.js | 3 +-- server/src/services/functions/getPlacementCells.js | 2 +- src/components/Container.jsx | 3 ++- src/components/tiles/submissionCells/Ring.jsx | 1 + 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/server/src/graphql/resolvers.js b/server/src/graphql/resolvers.js index 3eceb79b9..afd3fd72d 100644 --- a/server/src/graphql/resolvers.js +++ b/server/src/graphql/resolvers.js @@ -299,8 +299,7 @@ module.exports = { return [ { placementCells: - args.zoom >= config.map.submissionZoom && - args.filters.onlyS17Cells + args.zoom >= config.map.submissionZoom ? Utility.getPlacementCells(args, pokestops, gyms) : [], typeCells: args.filters.onlyS14Cells diff --git a/server/src/services/functions/getPlacementCells.js b/server/src/services/functions/getPlacementCells.js index 05120f14a..c56096fbb 100644 --- a/server/src/services/functions/getPlacementCells.js +++ b/server/src/services/functions/getPlacementCells.js @@ -51,7 +51,7 @@ module.exports = function getPlacementCells(bounds, pokestops, gyms) { : [] return { - cells: Object.values(indexedCells), + cells: bounds.filters.onlyS17Cells ? Object.values(indexedCells) : [], rings, } } diff --git a/src/components/Container.jsx b/src/components/Container.jsx index 2f9040d24..417d3e6af 100644 --- a/src/components/Container.jsx +++ b/src/components/Container.jsx @@ -1,5 +1,5 @@ import React from 'react' -import { MapContainer } from 'react-leaflet' +import { MapContainer, Pane } from 'react-leaflet' import useGenerate from '@hooks/useGenerate' import useRefresh from '@hooks/useRefresh' @@ -21,6 +21,7 @@ export default function Container({ serverSettings, params, location, zoom }) { {serverSettings.user && serverSettings.user.perms.map && ( )} + ) } diff --git a/src/components/tiles/submissionCells/Ring.jsx b/src/components/tiles/submissionCells/Ring.jsx index 6fc5937ff..f7cf53c8f 100644 --- a/src/components/tiles/submissionCells/Ring.jsx +++ b/src/components/tiles/submissionCells/Ring.jsx @@ -10,6 +10,7 @@ const RingTile = ({ ring, userSettings }) => ( fillColor: userSettings.poiColor, color: userSettings.poiColor, }} + pane="circlePane" /> ) From e91403bac248e11fabf4771b1ce023eda97c9a97 Mon Sep 17 00:00:00 2001 From: TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com> Date: Mon, 4 Jul 2022 18:24:18 -0400 Subject: [PATCH 13/38] fix click events --- src/components/Container.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Container.jsx b/src/components/Container.jsx index 417d3e6af..7b0b15da0 100644 --- a/src/components/Container.jsx +++ b/src/components/Container.jsx @@ -21,7 +21,7 @@ export default function Container({ serverSettings, params, location, zoom }) { {serverSettings.user && serverSettings.user.perms.map && ( )} - + ) } From 18415b04a095f75400d6adb5229c6e1f46208286 Mon Sep 17 00:00:00 2001 From: TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com> Date: Mon, 4 Jul 2022 18:48:11 -0400 Subject: [PATCH 14/38] fix mad --- server/src/services/DbCheck.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/services/DbCheck.js b/server/src/services/DbCheck.js index 5870c6982..acc573f3b 100644 --- a/server/src/services/DbCheck.js +++ b/server/src/services/DbCheck.js @@ -136,7 +136,7 @@ module.exports = class DbCheck { const results = await Promise.all( this.models.Pokemon.map(async (source) => source.isMad - ? () => [] + ? [] : source.SubModel.query() .select('pokemon_id', raw('SUM(count) as total')) .from('pokemon_stats') From a0ecadc6095ec365e9306799470a397b040b5fbe Mon Sep 17 00:00:00 2001 From: TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com> Date: Tue, 5 Jul 2022 20:28:53 -0400 Subject: [PATCH 15/38] Add 0iv glow to default.json --- server/src/configs/default.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/server/src/configs/default.json b/server/src/configs/default.json index b35d402d5..17694250d 100644 --- a/server/src/configs/default.json +++ b/server/src/configs/default.json @@ -265,6 +265,13 @@ "value": "#ff1744", "op": "=" }, + { + "name": "Nundo", + "perm": "iv", + "num": 0, + "value": "#000000", + "op": "=" + }, { "name": "Top 3 Ranks", "perm": "pvp", From 021272801fab8d10cf229d01684c6ba19e01d303 Mon Sep 17 00:00:00 2001 From: TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com> Date: Wed, 6 Jul 2022 23:13:11 -0400 Subject: [PATCH 16/38] Add historical rarity to the event loop - Rerun historical rarity every 6 hours by default - Cleanup some code in DbCheck class - Check for strings in both hash maps - Fix some spacing issues in scanAreas menu --- server/scripts/generateMasterfile.js | 2 +- server/src/configs/default.json | 3 +- server/src/index.js | 2 +- server/src/services/DbCheck.js | 84 +++++++++++------------ server/src/services/EventManager.js | 3 + src/components/layout/drawer/AreaTile.jsx | 18 ++--- 6 files changed, 58 insertions(+), 54 deletions(-) diff --git a/server/scripts/generateMasterfile.js b/server/scripts/generateMasterfile.js index 55986e9b7..a437f3999 100644 --- a/server/scripts/generateMasterfile.js +++ b/server/scripts/generateMasterfile.js @@ -28,7 +28,7 @@ const generate = async ( pokemon: Object.fromEntries( Object.values(masterfile.pokemon).map((pokemon) => { const { legendary, mythical, ultraBeast, ...rest } = pokemon - const historic = historicRarity.get(pokemon.pokedexId) || 'never' + const historic = historicRarity.get(pokemon.pokedexId.toString()) || 'never' let rarity = (dbRarity.size diff --git a/server/src/configs/default.json b/server/src/configs/default.json index 17694250d..89c607bcd 100644 --- a/server/src/configs/default.json +++ b/server/src/configs/default.json @@ -34,7 +34,8 @@ "pokemon": 0.25, "quests": 0.5, "raids": 0.2, - "nests": 1 + "nests": 1, + "historicalRarity": 6 }, "queryOnSessionInit": { "pokemon": false, diff --git a/server/src/index.js b/server/src/index.js index 292b12c2c..f6d9850b5 100644 --- a/server/src/index.js +++ b/server/src/index.js @@ -196,7 +196,7 @@ app.use((err, req, res, next) => { Db.determineType().then(async () => { await Promise.all([ - Db.initRarity(), + Db.historicalRarity(), Event.setAvailable('gyms', 'Gym', Db), Event.setAvailable('pokestops', 'Pokestop', Db), Event.setAvailable('pokemon', 'Pokemon', Db), diff --git a/server/src/services/DbCheck.js b/server/src/services/DbCheck.js index acc573f3b..58194754b 100644 --- a/server/src/services/DbCheck.js +++ b/server/src/services/DbCheck.js @@ -118,21 +118,40 @@ module.exports = class DbCheck { ) } - setRarity(id, percent, historical = false) { - if (percent === 0) { - this[historical ? 'historical' : 'rarity'].set(id, 'never') - } else if (percent < this.rarityPercents.ultraRare) { - this[historical ? 'historical' : 'rarity'].set(id, 'ultraRare') - } else if (percent < this.rarityPercents.rare) { - this[historical ? 'historical' : 'rarity'].set(id, 'rare') - } else if (percent < this.rarityPercents.uncommon) { - this[historical ? 'historical' : 'rarity'].set(id, 'uncommon') - } else { - this[historical ? 'historical' : 'rarity'].set(id, 'common') - } + setRarity(results, historical = false) { + const base = {} + const mapKey = historical ? 'historical' : 'rarity' + let total = 0 + results.forEach((result) => { + Object.entries(historical ? result : result.rarity).forEach( + ([key, count]) => { + if (key in base) { + base[key] += count + } else { + base[key] = count + } + total += count + }, + ) + }) + Object.entries(base).forEach(([id, count]) => { + const percent = (count / total) * 100 + if (percent === 0) { + this[mapKey].set(id, 'never') + } else if (percent < this.rarityPercents.ultraRare) { + this[mapKey].set(id, 'ultraRare') + } else if (percent < this.rarityPercents.rare) { + this[mapKey].set(id, 'rare') + } else if (percent < this.rarityPercents.uncommon) { + this[mapKey].set(id, 'uncommon') + } else { + this[mapKey].set(id, 'common') + } + }) } - async initRarity() { + async historicalRarity() { + console.log('[DB] Setting historical rarity stats') const results = await Promise.all( this.models.Pokemon.map(async (source) => source.isMad @@ -143,21 +162,14 @@ module.exports = class DbCheck { .groupBy('pokemon_id'), ), ) - const consolidated = {} - let total = 0 - results.forEach((result) => { - result.forEach((row) => { - if (consolidated[row.pokemon_id]) { - consolidated[row.pokemon_id] += +row.total - } else { - consolidated[row.pokemon_id] = +row.total - } - total += +row.total - }) - }) - Object.entries(consolidated).forEach(([id, count]) => { - this.setRarity(+id, (count / total) * 100, true) - }) + this.setRarity( + results.map((result) => + Object.fromEntries( + result.map((pkmn) => [`${pkmn.pokemon_id}`, +pkmn.total]), + ), + ), + true, + ) } bindConnections(models) { @@ -292,21 +304,7 @@ module.exports = class DbCheck { ) } if (model === 'Pokemon') { - const base = {} - let total = 0 - results.forEach((result) => { - Object.entries(result.rarity).forEach(([key, count]) => { - if (key in base) { - base[key] += count - } else { - base[key] = count - } - total += count - }) - }) - Object.entries(base).forEach(([id, count]) => { - this.setRarity(id, (count / total) * 100) - }) + this.setRarity(results, false) } if (results.length === 1) return results[0].available if (results.length > 1) { diff --git a/server/src/services/EventManager.js b/server/src/services/EventManager.js index 60233fe00..56bbe4be3 100644 --- a/server/src/services/EventManager.js +++ b/server/src/services/EventManager.js @@ -53,6 +53,9 @@ module.exports = class EventManager { setInterval(async () => { await this.getInvasions() }, 1000 * 60 * 60 * (config.map.invasionCacheHrs || 1)) + setInterval(async () => { + await Db.historicalRarity() + }, 1000 * 60 * 60 * (config.api.queryUpdateHours.historicalRarity || 6)) setInterval(async () => { await this.getMasterfile(Db.historical, Db.rarity) }, 1000 * 60 * 60 * (config.map.masterfileCacheHrs || 6)) diff --git a/src/components/layout/drawer/AreaTile.jsx b/src/components/layout/drawer/AreaTile.jsx index 168154b66..f54e0928f 100644 --- a/src/components/layout/drawer/AreaTile.jsx +++ b/src/components/layout/drawer/AreaTile.jsx @@ -61,14 +61,14 @@ export default function AreaTile({ {name || feature.properties.name ? ( - Utility.getProperName(name || feature.properties.name) - .split(' ') - .join('\n') + Utility.getProperName( + name || + feature.properties.formattedName || + feature.properties.name, + ) ) : ( <>  )} @@ -94,13 +94,15 @@ export default function AreaTile({ } style={{ color: - !childAreas.length || hasManual + !childAreas.length || hasManual || !feature.properties.name ? feature?.properties?.fillColor || feature?.properties?.fill || '#212121' : 'none', }} - disabled={!childAreas.length || hasManual} + disabled={ + !childAreas.length || hasManual || !feature.properties.name + } /> From 67ffb2f00d75121368ea6f96a484711419294aac Mon Sep 17 00:00:00 2001 From: TurtIeSocks Date: Thu, 7 Jul 2022 03:13:33 +0000 Subject: [PATCH 17/38] Synced docker env vars with latest config Files changed:\nM server/src/configs/custom-environment-variables.json --- server/src/configs/custom-environment-variables.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/src/configs/custom-environment-variables.json b/server/src/configs/custom-environment-variables.json index 4a7d06da3..67e0f6917 100644 --- a/server/src/configs/custom-environment-variables.json +++ b/server/src/configs/custom-environment-variables.json @@ -103,6 +103,10 @@ "nests": { "__name": "API_QUERY_UPDATE_HOURS_NESTS", "__format": "number" + }, + "historicalRarity": { + "__name": "API_QUERY_UPDATE_HOURS_HISTORICAL_RARITY", + "__format": "number" } }, "queryOnSessionInit": { From 02e06bdb8701ae213215d487e3b3b4e9acf47c5d Mon Sep 17 00:00:00 2001 From: TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com> Date: Wed, 6 Jul 2022 23:15:12 -0400 Subject: [PATCH 18/38] Linting --- server/scripts/generateMasterfile.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/scripts/generateMasterfile.js b/server/scripts/generateMasterfile.js index a437f3999..90089e245 100644 --- a/server/scripts/generateMasterfile.js +++ b/server/scripts/generateMasterfile.js @@ -28,7 +28,8 @@ const generate = async ( pokemon: Object.fromEntries( Object.values(masterfile.pokemon).map((pokemon) => { const { legendary, mythical, ultraBeast, ...rest } = pokemon - const historic = historicRarity.get(pokemon.pokedexId.toString()) || 'never' + const historic = + historicRarity.get(pokemon.pokedexId.toString()) || 'never' let rarity = (dbRarity.size From 063d52565254e56f4b3fed440f3e8e6467435f30 Mon Sep 17 00:00:00 2001 From: TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com> Date: Wed, 6 Jul 2022 23:17:05 -0400 Subject: [PATCH 19/38] Update nodemon --- yarn.lock | 472 +++--------------------------------------------------- 1 file changed, 22 insertions(+), 450 deletions(-) diff --git a/yarn.lock b/yarn.lock index a542826cc..a637bc70b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -438,18 +438,6 @@ "@sentry/types" "6.19.7" tslib "^1.9.3" -"@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== - -"@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== - dependencies: - defer-to-connect "^1.0.1" - "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" @@ -852,13 +840,6 @@ ajv@^8.6.2: require-from-string "^2.0.2" uri-js "^4.2.2" -ansi-align@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" - integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== - dependencies: - string-width "^4.1.0" - ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -869,7 +850,7 @@ ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-styles@^4.0.0, ansi-styles@^4.1.0: +ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== @@ -1148,20 +1129,6 @@ body-parser@1.19.0, body-parser@^1.19.0: raw-body "2.4.0" type-is "~1.6.17" -boxen@^5.0.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" - integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== - dependencies: - ansi-align "^3.0.0" - camelcase "^6.2.0" - chalk "^4.1.0" - cli-boxes "^2.2.1" - string-width "^4.2.2" - type-fest "^0.20.2" - widest-line "^3.1.0" - wrap-ansi "^7.0.0" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -1192,19 +1159,6 @@ bytes@3.1.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== -cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^3.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" - call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -1218,12 +1172,7 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -chalk@^4.0.0, chalk@^4.1.0: +chalk@^4.0.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -1251,23 +1200,6 @@ chownr@^2.0.0: resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -cli-boxes@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" - integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== - -clone-response@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - integrity sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q== - dependencies: - mimic-response "^1.0.0" - clone@2.x: version "2.1.2" resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" @@ -1354,18 +1286,6 @@ config@^3.3.6: dependencies: json5 "^2.1.1" -configstore@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" - integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== - dependencies: - dot-prop "^5.2.0" - graceful-fs "^4.1.2" - make-dir "^3.0.0" - unique-string "^2.0.0" - write-file-atomic "^3.0.0" - xdg-basedir "^4.0.0" - confusing-browser-globals@^1.0.10: version "1.0.11" resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" @@ -1437,11 +1357,6 @@ cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - css-vendor@^2.0.8: version "2.0.8" resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-2.0.8.tgz#e47f91d3bd3117d49180a3c935e62e3d9f7f449d" @@ -1541,13 +1456,6 @@ decimal.js@^10.3.1: resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== - dependencies: - mimic-response "^1.0.0" - deep-equal@1.x, deep-equal@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" @@ -1560,21 +1468,11 @@ deep-equal@1.x, deep-equal@^1.0.0: object-keys "^1.1.1" regexp.prototype.flags "^1.2.0" -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== -defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== - define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -1660,23 +1558,11 @@ domexception@^2.0.1: dependencies: webidl-conversions "^5.0.0" -dot-prop@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - dotenv@^10.0.0: version "10.0.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha512-CEj8FwwNA4cVH2uFCoHUrmojhYh1vmCdOaneKJXwkeY1i9jnlslVo9dx+hQ5Hl9GnH/Bwy/IjxAyOePyPKYnzA== - ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -1697,13 +1583,6 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= -end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - es-abstract@^1.19.0, es-abstract@^1.19.1: version "1.19.1" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3" @@ -1890,11 +1769,6 @@ escalade@^3.1.1: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== -escape-goat@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" - integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== - escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -2394,20 +2268,6 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: has "^1.0.3" has-symbols "^1.0.1" -get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - get-symbol-description@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" @@ -2447,13 +2307,6 @@ glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -global-dirs@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686" - integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA== - dependencies: - ini "2.0.0" - globals@^13.6.0, globals@^13.9.0: version "13.12.1" resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.1.tgz#ec206be932e6c77236677127577aa8e50bf1c5cb" @@ -2461,28 +2314,6 @@ globals@^13.6.0, globals@^13.9.0: dependencies: type-fest "^0.20.2" -got@^9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" - -graceful-fs@^4.1.2: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - graphql-tag@^2.11.0: version "2.12.6" resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.6.tgz#d441a569c1d2537ef10ca3d1633b48725329b5f1" @@ -2539,11 +2370,6 @@ has-unicode@^2.0.0, has-unicode@^2.0.1: resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= -has-yarn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" - integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== - has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -2584,11 +2410,6 @@ html-parse-stringify@^3.0.1: dependencies: void-elements "3.1.0" -http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - http-errors@1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" @@ -2696,11 +2517,6 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A== - imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -2731,16 +2547,6 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" - integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== - -ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - internal-slot@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" @@ -2795,13 +2601,6 @@ is-callable@^1.1.4, is-callable@^1.2.4: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - is-core-module@^2.2.0: version "2.8.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548" @@ -2852,24 +2651,11 @@ is-in-browser@^1.0.2, is-in-browser@^1.1.3: resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" integrity sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU= -is-installed-globally@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" - integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== - dependencies: - global-dirs "^3.0.0" - is-path-inside "^3.0.2" - is-negative-zero@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== -is-npm@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" - integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== - is-number-object@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" @@ -2882,16 +2668,6 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-path-inside@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - is-potential-custom-element-name@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" @@ -2929,11 +2705,6 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - is-weakref@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -2941,11 +2712,6 @@ is-weakref@^1.0.1: dependencies: call-bind "^1.0.2" -is-yarn-global@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" - integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== - isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -3001,11 +2767,6 @@ jsdom@^17.0.0: ws "^8.0.0" xml-name-validator "^3.0.0" -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== - json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -3114,13 +2875,6 @@ jss@10.6.0, jss@^10.5.1: array-includes "^3.1.3" object.assign "^4.1.2" -keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== - dependencies: - json-buffer "3.0.0" - knex@^0.95.11: version "0.95.15" resolved "https://registry.yarnpkg.com/knex/-/knex-0.95.15.tgz#39d7e7110a6e2ad7de5d673d2dea94143015e0e7" @@ -3152,13 +2906,6 @@ language-tags@^1.0.5: dependencies: language-subtag-registry "~0.3.2" -latest-version@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" - integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== - dependencies: - package-json "^6.3.0" - leaflet.locatecontrol@^0.73.0: version "0.73.0" resolved "https://registry.yarnpkg.com/leaflet.locatecontrol/-/leaflet.locatecontrol-0.73.0.tgz#768d9edb0470f86c913ea6c2a70ec62380fd45c5" @@ -3250,16 +2997,6 @@ loose-envify@^1.1.0, loose-envify@^1.4.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - lru-cache@^4.1.3: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -3275,7 +3012,7 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -make-dir@^3.0.0, make-dir@^3.1.0: +make-dir@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== @@ -3331,11 +3068,6 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mimic-response@^1.0.0, mimic-response@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - minimatch@^3.0.4: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -3482,9 +3214,9 @@ node-geocoder@^4.0.0: node-fetch "^2.6.0" nodemon@^2.0.7: - version "2.0.18" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.18.tgz#0f5a3aa7b4587f2626e6f01369deba89cb0462a2" - integrity sha512-uAvrKipi2zAz8E7nkSz4qW4F4zd5fs2wNGsTx+xXlP8KXqd9ucE0vY9wankOsPboeDyuUGN9vsXGV1pLn80l/A== + version "2.0.19" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.19.tgz#cac175f74b9cb8b57e770d47841995eebe4488bd" + integrity sha512-4pv1f2bMDj0Eeg/MhGqxrtveeQ5/G/UVe9iO6uTZzjnRluSA4PVWf8CW99LUPwGB3eNIA7zUFoP77YuI7hOc0A== dependencies: chokidar "^3.5.2" debug "^3.2.7" @@ -3492,10 +3224,10 @@ nodemon@^2.0.7: minimatch "^3.0.4" pstree.remy "^1.1.8" semver "^5.7.1" + simple-update-notifier "^1.0.7" supports-color "^5.5.0" touch "^3.1.0" undefsafe "^2.0.5" - update-notifier "^5.1.0" nodes2ts@^2.0.0: version "2.0.0" @@ -3523,11 +3255,6 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-url@^4.1.0: - version "4.5.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" - integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== - npmlog@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" @@ -3660,7 +3387,7 @@ on-headers@~1.0.2: resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== -once@^1.3.0, once@^1.3.1, once@^1.4.0: +once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= @@ -3699,11 +3426,6 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== - p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -3723,16 +3445,6 @@ p-try@^1.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= -package-json@^6.3.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" - integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== - dependencies: - got "^9.6.0" - registry-auth-token "^4.0.0" - registry-url "^5.0.0" - semver "^6.2.0" - parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -3863,11 +3575,6 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== - prettier@^2.6.2: version "2.7.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" @@ -3944,26 +3651,11 @@ pstree.remy@^1.1.8: resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -pupa@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" - integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== - dependencies: - escape-goat "^2.0.0" - qs@6.7.0: version "6.7.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" @@ -4001,16 +3693,6 @@ rbush@^3.0.1: dependencies: quickselect "^2.0.0" -rc@1.2.8, rc@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - react-dom@17.0.2: version "17.0.2" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" @@ -4177,20 +3859,6 @@ regexpp@^3.2.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== -registry-auth-token@^4.0.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.2.tgz#f02d49c3668884612ca031419491a13539e21fac" - integrity sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg== - dependencies: - rc "1.2.8" - -registry-url@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" - integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== - dependencies: - rc "^1.2.8" - require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" @@ -4231,13 +3899,6 @@ resolve@^2.0.0-next.3: is-core-module "^2.2.0" path-parse "^1.0.6" -responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== - dependencies: - lowercase-keys "^1.0.0" - retry@0.13.1: version "0.13.1" resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" @@ -4285,30 +3946,16 @@ scheduler@^0.20.2: loose-envify "^1.1.0" object-assign "^4.1.1" -semver-diff@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" - integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== - dependencies: - semver "^6.3.0" - semver@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: +semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.4: - version "7.3.7" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== - dependencies: - lru-cache "^6.0.0" - semver@^7.3.5: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" @@ -4316,6 +3963,11 @@ semver@^7.3.5: dependencies: lru-cache "^6.0.0" +semver@~7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -4399,10 +4051,12 @@ signal-exit@^3.0.0: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== -signal-exit@^3.0.2: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +simple-update-notifier@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz#7edf75c5bdd04f88828d632f762b2bc32996a9cc" + integrity sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew== + dependencies: + semver "~7.0.0" source-map@~0.6.1: version "0.6.1" @@ -4433,7 +4087,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.2, string-width@^4.2.3: +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -4493,7 +4147,7 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: +strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -4510,11 +4164,6 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - suncalc@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/suncalc/-/suncalc-1.8.0.tgz#1d9898109563078750f4994a959e654d876acbf5" @@ -4586,11 +4235,6 @@ tiny-warning@^1.0.2: resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== -to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -4702,13 +4346,6 @@ type-is@~1.6.17, type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - uid-safe@~2.1.5: version "2.1.5" resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.5.tgz#2b3d5c7240e8fc2e58f8aa269e5ee49c0857bd3a" @@ -4741,13 +4378,6 @@ underscore@1.13.1: resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.1.tgz#0c1c6bd2df54b6b69f2314066d65b6cde6fcf9d1" integrity sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g== -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== - dependencies: - crypto-random-string "^2.0.0" - universalify@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" @@ -4758,26 +4388,6 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= -update-notifier@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9" - integrity sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw== - dependencies: - boxen "^5.0.0" - chalk "^4.1.0" - configstore "^5.0.1" - has-yarn "^2.1.0" - import-lazy "^2.1.0" - is-ci "^2.0.0" - is-installed-globally "^0.4.0" - is-npm "^5.0.0" - is-yarn-global "^0.3.0" - latest-version "^5.1.0" - pupa "^2.1.1" - semver "^7.3.4" - semver-diff "^3.1.1" - xdg-basedir "^4.0.0" - uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -4785,13 +4395,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== - dependencies: - prepend-http "^2.0.0" - use-sync-external-store@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.1.0.tgz#3343c3fe7f7e404db70f8c687adf5c1652d34e82" @@ -4932,42 +4535,16 @@ wide-align@^1.1.0, wide-align@^1.1.2: dependencies: string-width "^1.0.2 || 2 || 3 || 4" -widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== - dependencies: - string-width "^4.0.0" - word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - ws@^7.4.4: version "7.5.3" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74" @@ -4978,11 +4555,6 @@ ws@^8.0.0: resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== -xdg-basedir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" - integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== - xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" From acf752b5eaf7c1ee2ce4e2cc36e874a9823c5d2b Mon Sep 17 00:00:00 2001 From: TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com> Date: Wed, 6 Jul 2022 23:22:26 -0400 Subject: [PATCH 20/38] Update AreaTile.jsx --- src/components/layout/drawer/AreaTile.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/layout/drawer/AreaTile.jsx b/src/components/layout/drawer/AreaTile.jsx index f54e0928f..41638ee71 100644 --- a/src/components/layout/drawer/AreaTile.jsx +++ b/src/components/layout/drawer/AreaTile.jsx @@ -94,14 +94,14 @@ export default function AreaTile({ } style={{ color: - !childAreas.length || hasManual || !feature.properties.name + !childAreas.length || hasManual || !feature?.properties?.name ? feature?.properties?.fillColor || feature?.properties?.fill || '#212121' : 'none', }} disabled={ - !childAreas.length || hasManual || !feature.properties.name + !childAreas.length || hasManual || !feature?.properties?.name } /> From 5dcd5fb8481c0202b9e4614160029f6540a0211f Mon Sep 17 00:00:00 2001 From: TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com> Date: Wed, 6 Jul 2022 23:28:04 -0400 Subject: [PATCH 21/38] Add Tap To Toggle Option - Client side option to toggle whether area polygons are selectable when tapping/clicking on them on the map --- public/base-locales/en.json | 3 ++- server/src/configs/default.json | 3 ++- server/src/services/ui/clientOptions.js | 1 + src/components/tiles/ScanArea.jsx | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/public/base-locales/en.json b/public/base-locales/en.json index fcd33dfb6..8199a4a10 100644 --- a/public/base-locales/en.json +++ b/public/base-locales/en.json @@ -550,5 +550,6 @@ "historic_rarity": "Historic Rarity", "poi": "Points of Interest", "300m_range": "300m Range", - "lure_range": "Lure Range" + "lure_range": "Lure Range", + "tap_to_toggle": "Tap To Toggle" } diff --git a/server/src/configs/default.json b/server/src/configs/default.json index 89c607bcd..aae9bbf16 100644 --- a/server/src/configs/default.json +++ b/server/src/configs/default.json @@ -300,7 +300,8 @@ "poiColor": "#03ffff" }, "scanAreas": { - "alwaysShowLabels": true + "alwaysShowLabels": true, + "tapToToggle": true }, "weather": { "clickableIcon": false, diff --git a/server/src/services/ui/clientOptions.js b/server/src/services/ui/clientOptions.js index 6e8e44045..6720dd0a6 100644 --- a/server/src/services/ui/clientOptions.js +++ b/server/src/services/ui/clientOptions.js @@ -57,6 +57,7 @@ module.exports = function clientOptions(perms) { }, scanAreas: { alwaysShowLabels: { type: 'bool', perm: ['scanAreas'] }, + tapToToggle: { type: 'bool', perm: ['scanAreas'] }, }, weather: { clickableIcon: { type: 'bool', perm: ['weather'] }, diff --git a/src/components/tiles/ScanArea.jsx b/src/components/tiles/ScanArea.jsx index 05386c8dc..4ed47d393 100644 --- a/src/components/tiles/ScanArea.jsx +++ b/src/components/tiles/ScanArea.jsx @@ -55,7 +55,7 @@ export function ScanAreaTile({ } if (webhookMode) { layer.on('click', () => handleClick(name.toLowerCase())) - } else if (!feature.properties.manual) { + } else if (!feature.properties.manual && userSettings?.tapToToggle) { layer.on('click', () => setAreas(name, names)) } } From d8086c20d7769ee9ff3be3007109ddc5f061daa2 Mon Sep 17 00:00:00 2001 From: TurtIeSocks Date: Thu, 7 Jul 2022 03:28:27 +0000 Subject: [PATCH 22/38] Synced docker env vars with latest config Files changed:\nM server/src/configs/custom-environment-variables.json --- server/src/configs/custom-environment-variables.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/src/configs/custom-environment-variables.json b/server/src/configs/custom-environment-variables.json index 67e0f6917..108be64c4 100644 --- a/server/src/configs/custom-environment-variables.json +++ b/server/src/configs/custom-environment-variables.json @@ -653,6 +653,10 @@ "alwaysShowLabels": { "__name": "CLIENT_SIDE_OPTIONS_SCAN_AREAS_ALWAYS_SHOW_LABELS", "__format": "boolean" + }, + "tapToToggle": { + "__name": "CLIENT_SIDE_OPTIONS_SCAN_AREAS_TAP_TO_TOGGLE", + "__format": "boolean" } }, "weather": { From 960d7d6b0b07f033e9f752dd9888c2c227de8232 Mon Sep 17 00:00:00 2001 From: TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com> Date: Thu, 7 Jul 2022 00:27:12 -0400 Subject: [PATCH 23/38] Poi Power Up Filtering - Adds a multi button for filtering powered up gyms and stops - Includes backend support for both gyms and stops --- public/base-locales/en.json | 3 ++- server/src/configs/default.json | 2 ++ server/src/models/Gym.js | 4 ++++ server/src/models/Pokestop.js | 3 +++ .../defaultFilters/buildDefaultFilters.js | 2 ++ server/src/services/ui/primary.js | 1 + src/components/layout/drawer/WithSubItems.jsx | 18 ++++++++++++++++++ 7 files changed, 32 insertions(+), 1 deletion(-) diff --git a/public/base-locales/en.json b/public/base-locales/en.json index 8199a4a10..7695d4dc0 100644 --- a/public/base-locales/en.json +++ b/public/base-locales/en.json @@ -551,5 +551,6 @@ "poi": "Points of Interest", "300m_range": "300m Range", "lure_range": "Lure Range", - "tap_to_toggle": "Tap To Toggle" + "tap_to_toggle": "Tap To Toggle", + "power_up": "Power Up" } diff --git a/server/src/configs/default.json b/server/src/configs/default.json index aae9bbf16..f92f97cc1 100644 --- a/server/src/configs/default.json +++ b/server/src/configs/default.json @@ -316,6 +316,7 @@ "gyms": { "enabled": true, "allGyms": true, + "levels": "all", "exEligible": false, "inBattle": false, "raids": true, @@ -356,6 +357,7 @@ }, "pokestops": { "enabled": false, + "levels": "all", "lures": true, "quests": true, "questSet": "both", diff --git a/server/src/models/Gym.js b/server/src/models/Gym.js index 265614c49..9633e5e4e 100644 --- a/server/src/models/Gym.js +++ b/server/src/models/Gym.js @@ -61,6 +61,7 @@ module.exports = class Gym extends Model { gymBadges, } = perms const { + onlyLevels, onlyAllGyms, onlyRaids, onlyExEligible, @@ -211,6 +212,9 @@ module.exports = class Gym extends Model { } } + if (onlyLevels !== 'all' && !isMad) { + query.andWhere('power_up_level', onlyLevels) + } query.andWhere((gym) => { if (onlyExEligible && gymPerms) { gym.orWhere((ex) => { diff --git a/server/src/models/Pokestop.js b/server/src/models/Pokestop.js index 1f57edc08..3dc6a02c8 100644 --- a/server/src/models/Pokestop.js +++ b/server/src/models/Pokestop.js @@ -63,6 +63,7 @@ module.exports = class Pokestop extends Model { ) { const { filters: { + onlyLevels, onlyLures, onlyQuests, onlyInvasions, @@ -462,6 +463,8 @@ module.exports = class Pokestop extends Model { }) } }) + } else if (onlyLevels !== 'all' && !isMad) { + query.andWhere('power_up_level', onlyLevels) } const results = await query const normalized = isMad diff --git a/server/src/services/defaultFilters/buildDefaultFilters.js b/server/src/services/defaultFilters/buildDefaultFilters.js index 715ed5009..e5308af07 100644 --- a/server/src/services/defaultFilters/buildDefaultFilters.js +++ b/server/src/services/defaultFilters/buildDefaultFilters.js @@ -26,6 +26,7 @@ module.exports = function buildDefault(perms, available) { ? { enabled: defaultFilters.gyms.enabled, allGyms: perms.gyms ? defaultFilters.gyms.enabled : undefined, + levels: perms.gyms ? defaultFilters.gyms.levels : undefined, raids: perms.raids ? defaultFilters.gyms.raids : undefined, exEligible: perms.gyms ? defaultFilters.gyms.exEligible : undefined, inBattle: perms.gyms ? defaultFilters.gyms.exEligible : undefined, @@ -56,6 +57,7 @@ module.exports = function buildDefault(perms, available) { allPokestops: perms.pokestops ? defaultFilters.pokestops.enabled : undefined, + levels: perms.pokestops ? defaultFilters.pokestops.levels : undefined, lures: perms.lures ? defaultFilters.pokestops.lures : undefined, quests: perms.quests ? defaultFilters.pokestops.quests : undefined, showQuestSet: defaultFilters.pokestops.questSet, diff --git a/server/src/services/ui/primary.js b/server/src/services/ui/primary.js index 8e753e577..21e9b40da 100644 --- a/server/src/services/ui/primary.js +++ b/server/src/services/ui/primary.js @@ -83,6 +83,7 @@ const ignoredKeys = [ 'badge', 'avgFilter', 'raidTier', + 'levels', ] module.exports = function generateUi(filters, perms) { diff --git a/src/components/layout/drawer/WithSubItems.jsx b/src/components/layout/drawer/WithSubItems.jsx index 527c93d77..319ea96e8 100644 --- a/src/components/layout/drawer/WithSubItems.jsx +++ b/src/components/layout/drawer/WithSubItems.jsx @@ -98,6 +98,24 @@ export default function WithSubItems({ /> )} + {((category === 'pokestops' && subItem === 'allPokestops') || + (category === 'gyms' && subItem === 'allGyms')) && + filters[category][subItem] === true && ( + <> + + {t('power_up')} + + + + + + )} {category === 'gyms' && subItem === 'gymBadges' && filters[category].gymBadges === true && ( From ba487f281d90657239c423e5d69542b8f41e2df3 Mon Sep 17 00:00:00 2001 From: TurtIeSocks Date: Thu, 7 Jul 2022 04:27:40 +0000 Subject: [PATCH 24/38] Synced docker env vars with latest config Files changed:\nM server/src/configs/custom-environment-variables.json --- server/src/configs/custom-environment-variables.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/src/configs/custom-environment-variables.json b/server/src/configs/custom-environment-variables.json index 108be64c4..157c8b357 100644 --- a/server/src/configs/custom-environment-variables.json +++ b/server/src/configs/custom-environment-variables.json @@ -684,6 +684,7 @@ "__name": "DEFAULT_FILTERS_GYMS_ALL_GYMS", "__format": "boolean" }, + "levels": "DEFAULT_FILTERS_GYMS_LEVELS", "exEligible": { "__name": "DEFAULT_FILTERS_GYMS_EX_ELIGIBLE", "__format": "boolean" @@ -752,6 +753,7 @@ "__name": "DEFAULT_FILTERS_POKESTOPS_ENABLED", "__format": "boolean" }, + "levels": "DEFAULT_FILTERS_POKESTOPS_LEVELS", "lures": { "__name": "DEFAULT_FILTERS_POKESTOPS_LURES", "__format": "boolean" From 0a5e50ecac1bc064c4626d785f2eb2f27692238a Mon Sep 17 00:00:00 2001 From: TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com> Date: Thu, 7 Jul 2022 00:30:07 -0400 Subject: [PATCH 25/38] version bump --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f058b10ba..047ec4a6f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "reactmap", - "version": "1.3.1", + "version": "1.3.2", "description": "React based frontend map.", "main": "ReactMap.mjs", "author": "TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com>", From 5b4dd6fd7094f8bbbe0f67999cd7e882de05fbc9 Mon Sep 17 00:00:00 2001 From: TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com> Date: Thu, 7 Jul 2022 19:18:31 -0400 Subject: [PATCH 26/38] Minor logic adjustment --- src/components/layout/drawer/AreaTile.jsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/components/layout/drawer/AreaTile.jsx b/src/components/layout/drawer/AreaTile.jsx index 41638ee71..bcb0e934c 100644 --- a/src/components/layout/drawer/AreaTile.jsx +++ b/src/components/layout/drawer/AreaTile.jsx @@ -94,14 +94,16 @@ export default function AreaTile({ } style={{ color: - !childAreas.length || hasManual || !feature?.properties?.name + hasManual || + (name ? !childAreas.length : !feature.properties.name) ? feature?.properties?.fillColor || feature?.properties?.fill || '#212121' : 'none', }} disabled={ - !childAreas.length || hasManual || !feature?.properties?.name + (name ? !childAreas.length : !feature.properties.name) || + hasManual } /> From 95b90b6674f14135d8f24de4bb637d63de416a62 Mon Sep 17 00:00:00 2001 From: TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com> Date: Thu, 7 Jul 2022 19:36:04 -0400 Subject: [PATCH 27/38] Fixes --- server/src/models/Gym.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/server/src/models/Gym.js b/server/src/models/Gym.js index 9633e5e4e..ceebd50c0 100644 --- a/server/src/models/Gym.js +++ b/server/src/models/Gym.js @@ -212,7 +212,7 @@ module.exports = class Gym extends Model { } } - if (onlyLevels !== 'all' && !isMad) { + if (onlyAllGyms && onlyLevels !== 'all' && !isMad) { query.andWhere('power_up_level', onlyLevels) } query.andWhere((gym) => { @@ -407,10 +407,12 @@ module.exports = class Gym extends Model { .then((r) => { const unique = new Set() r.forEach((result) => { - if (result.slots) { - unique.add(`g${result.team}-${result.slots}`) - } else { - unique.add(`t${result.team}-0`) + if (result.team) { + if (result.slots) { + unique.add(`g${result.team}-${result.slots}`) + } else { + unique.add(`t${result.team}-0`) + } } }) return [...unique] From 34db64f96972b49bbbdba31cce83a59efa4c59e2 Mon Sep 17 00:00:00 2001 From: TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com> Date: Thu, 7 Jul 2022 20:32:35 -0400 Subject: [PATCH 28/38] Update Icons.js --- src/services/Icons.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/services/Icons.js b/src/services/Icons.js index f885bd3a4..9266f9e44 100644 --- a/src/services/Icons.js +++ b/src/services/Icons.js @@ -174,11 +174,11 @@ export default class UIcons { const costumeSuffixes = costume ? [`_c${costume}`, ''] : [''] const genderSuffixes = gender ? [`_g${gender}`, ''] : [''] const shinySuffixes = shiny ? ['_shiny', ''] : [''] - for (let f = 0; f < formSuffixes.length; f += 1) { - for (let c = 0; c < costumeSuffixes.length; c += 1) { - for (let g = 0; g < genderSuffixes.length; g += 1) { - for (let s = 0; s < shinySuffixes.length; s += 1) { - for (let e = 0; e < evolutionSuffixes.length; e += 1) { + for (let e = 0; e < evolutionSuffixes.length; e += 1) { + for (let f = 0; f < formSuffixes.length; f += 1) { + for (let c = 0; c < costumeSuffixes.length; c += 1) { + for (let g = 0; g < genderSuffixes.length; g += 1) { + for (let s = 0; s < shinySuffixes.length; s += 1) { const result = `${pokemonId}${evolutionSuffixes[e]}${formSuffixes[f]}${costumeSuffixes[c]}${genderSuffixes[g]}${shinySuffixes[s]}.png` if (this[this.selected.pokemon].pokemon.has(result)) { return `${baseUrl}/${result}` From 31c00b4b958a17a4da4166e3fc0d1359497be90f Mon Sep 17 00:00:00 2001 From: TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com> Date: Fri, 8 Jul 2022 22:54:21 -0400 Subject: [PATCH 29/38] Translations - Add alternative for never for @kamieniarz / PL - Add some German translations from @Fabio1988 --- public/base-locales/de.json | 4 +++- public/base-locales/en.json | 3 ++- src/components/popups/SubmissionCell.jsx | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/public/base-locales/de.json b/public/base-locales/de.json index fda761679..da7fa45b3 100644 --- a/public/base-locales/de.json +++ b/public/base-locales/de.json @@ -551,5 +551,7 @@ "ultra_beast": "Ultrabestie", "quest_condition": "Questbedingung", "always_show_labels": "Labels immer anzeigen", - "scan_areas_options": "Optionen für Scanbereiche" + "scan_areas_options": "Optionen für Scanbereiche", + "tap_to_toggle": "Tippen zum Umschalten", + "power_up": "Aufladung" } diff --git a/public/base-locales/en.json b/public/base-locales/en.json index 7695d4dc0..1c9a4a5e9 100644 --- a/public/base-locales/en.json +++ b/public/base-locales/en.json @@ -552,5 +552,6 @@ "300m_range": "300m Range", "lure_range": "Lure Range", "tap_to_toggle": "Tap To Toggle", - "power_up": "Power Up" + "power_up": "Power Up", + "never_alt": "Never" } diff --git a/src/components/popups/SubmissionCell.jsx b/src/components/popups/SubmissionCell.jsx index f12eaf41b..cb594a0da 100644 --- a/src/components/popups/SubmissionCell.jsx +++ b/src/components/popups/SubmissionCell.jsx @@ -7,7 +7,7 @@ import Utility from '@services/Utility' export default function SubmissionCellPopup({ cell }) { const { t } = useTranslation() const gymThreshold = [2, 6, 20] - let untilNextGym = t('never') + let untilNextGym = t('never_alt', t('never')) if (cell.count_gyms < 3) { untilNextGym = gymThreshold[cell.count_gyms] - cell.count } From 5090af892ef7c9a7baf07234300ef708a28b5c31 Mon Sep 17 00:00:00 2001 From: TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com> Date: Tue, 12 Jul 2022 14:02:22 -0400 Subject: [PATCH 30/38] Configurable Pogo Endpoints - Moves the masterfile, invasions, and translations API endpoints to the config - Doesn't update if the value is set to "" --- server/scripts/createLocales.js | 6 +- server/scripts/generateMasterfile.js | 8 +-- server/src/configs/default.json | 7 ++- server/src/index.js | 2 +- server/src/services/EventManager.js | 84 +++++++++++++++------------- 5 files changed, 59 insertions(+), 48 deletions(-) diff --git a/server/scripts/createLocales.js b/server/scripts/createLocales.js index bdce8cd2f..029c8036b 100644 --- a/server/scripts/createLocales.js +++ b/server/scripts/createLocales.js @@ -1,6 +1,7 @@ /* eslint-disable no-console */ const fs = require('fs') const path = require('path') +const { api } = require('../src/services/config') const fetchJson = require('../src/services/api/fetchJson') @@ -9,6 +10,7 @@ const finalLocalesFolder = path.resolve(__dirname, '../../public/locales') const missingFolder = path.resolve(__dirname, '../../public/missing-locales') const locales = async () => { + if (!api.pogoApiEndpoints.translations) console.error('[LOCALES] No translations endpoint') const localTranslations = await fs.promises.readdir(appLocalesFolder) const englishRef = fs.readFileSync( path.resolve(appLocalesFolder, 'en.json'), @@ -22,7 +24,7 @@ const locales = async () => { ) const availableRemote = await fetchJson( - 'https://raw.githubusercontent.com/WatWowMap/pogo-translations/master/index.json', + `${api.pogoApiEndpoints.translations}/index.json`, ) await Promise.all( @@ -41,7 +43,7 @@ const locales = async () => { try { const hasRemote = availableRemote.includes(locale) const remoteFiles = await fetchJson( - `https://raw.githubusercontent.com/WatWowMap/pogo-translations/master/static/locales/${ + `${api.pogoApiEndpoints.translations}/static/locales/${ hasRemote ? baseName : 'en' }.json`, ) diff --git a/server/scripts/generateMasterfile.js b/server/scripts/generateMasterfile.js index 90089e245..238802bee 100644 --- a/server/scripts/generateMasterfile.js +++ b/server/scripts/generateMasterfile.js @@ -1,6 +1,6 @@ const fs = require('fs') const { resolve } = require('path') -const { rarity: customRarity } = require('../src/services/config') +const { rarity: customRarity, api } = require('../src/services/config') const fetchJson = require('../src/services/api/fetchJson') const defaultRarity = require('../src/data/defaultRarity.json') @@ -19,9 +19,9 @@ const generate = async ( dbRarity = new Map(), ) => { try { - const masterfile = await fetchJson( - 'https://raw.githubusercontent.com/WatWowMap/Masterfile-Generator/master/master-latest-react-map.json', - ) + if (!api.pogoApiEndpoints.masterfile) throw new Error('No masterfile endpoint') + + const masterfile = await fetchJson(api.pogoApiEndpoints.masterfile) const newMf = { ...masterfile, diff --git a/server/src/configs/default.json b/server/src/configs/default.json index f92f97cc1..c229fa347 100644 --- a/server/src/configs/default.json +++ b/server/src/configs/default.json @@ -82,7 +82,12 @@ "hideOldGyms": false, "stopValidDataLimit": 30, "hideOldPokestops": false, - "fetchTimeoutMs": 3000 + "fetchTimeoutMs": 3000, + "pogoApiEndpoints": { + "invasions": "https://raw.githubusercontent.com/ccev/pogoinfo/v2/active/grunts.json", + "masterfile": "https://raw.githubusercontent.com/WatWowMap/Masterfile-Generator/master/master-latest-react-map.json", + "translations": "https://raw.githubusercontent.com/WatWowMap/pogo-translations/master" + } }, "multiDomains": [], "map": { diff --git a/server/src/index.js b/server/src/index.js index f6d9850b5..c42a986e6 100644 --- a/server/src/index.js +++ b/server/src/index.js @@ -205,7 +205,7 @@ Db.determineType().then(async () => { await Promise.all([ Event.getUicons(config.icons.styles), Event.getMasterfile(Db.historical, Db.rarity), - Event.getInvasions(), + Event.getInvasions(config.api.pogoApiEndpoints.invasions), Event.getWebhooks(config), ]).then(() => { Event.addAvailable() diff --git a/server/src/services/EventManager.js b/server/src/services/EventManager.js index 56bbe4be3..125ac31bb 100644 --- a/server/src/services/EventManager.js +++ b/server/src/services/EventManager.js @@ -50,15 +50,19 @@ module.exports = class EventManager { setInterval(async () => { await this.getUicons(config.icons.styles) }, 1000 * 60 * 60 * (config.icons.cacheHrs || 3)) - setInterval(async () => { - await this.getInvasions() - }, 1000 * 60 * 60 * (config.map.invasionCacheHrs || 1)) + if (config.api.pogoApiEndpoints.invasions) { + setInterval(async () => { + await this.getInvasions(config.api.pogoApiEndpoints.invasions) + }, 1000 * 60 * 60 * (config.map.invasionCacheHrs || 1)) + } setInterval(async () => { await Db.historicalRarity() }, 1000 * 60 * 60 * (config.api.queryUpdateHours.historicalRarity || 6)) - setInterval(async () => { - await this.getMasterfile(Db.historical, Db.rarity) - }, 1000 * 60 * 60 * (config.map.masterfileCacheHrs || 6)) + if (config.api.pogoApiEndpoints.masterfile) { + setInterval(async () => { + await this.getMasterfile(Db.historical, Db.rarity) + }, 1000 * 60 * 60 * (config.map.masterfileCacheHrs || 6)) + } if (Pvp) { setInterval(async () => { console.log('[EVENT] Fetching Latest PVP Masterfile') @@ -120,40 +124,40 @@ module.exports = class EventManager { this.uicons = this.uicons.filter(Boolean) } - async getInvasions() { - console.log('[EVENT] Fetching Latest Invasions') - try { - this.invasions = await fetchJson( - 'https://raw.githubusercontent.com/ccev/pogoinfo/v2/active/grunts.json', - ).then((response) => - response - ? Object.fromEntries( - Object.entries(this.invasions).map(([type, info]) => { - const latest = response[type] - const newInvasion = this.invasions[type] - if (info.encounters) { - Object.keys(info.encounters).forEach((position, i) => { - if (latest?.active) { - newInvasion.encounters[position] = latest.lineup.team[ - i - ].map((pkmn, j) => - pkmn.template === 'UNSET' && - info.encounters[position][j] - ? info.encounters[position][j] - : { id: pkmn.id, form: pkmn.form }, - ) - newInvasion.second_reward = - latest.lineup.rewards.length > 1 - } - }) - } - return [type, newInvasion] - }), - ) - : this.invasions, - ) - } catch (e) { - console.warn('[WARN] Unable to generate latest invasions:\n', e.message) + async getInvasions(endpoint) { + if (endpoint) { + console.log('[EVENT] Fetching Latest Invasions') + try { + this.invasions = await fetchJson(endpoint).then((response) => + response + ? Object.fromEntries( + Object.entries(this.invasions).map(([type, info]) => { + const latest = response[type] + const newInvasion = this.invasions[type] + if (info.encounters) { + Object.keys(info.encounters).forEach((position, i) => { + if (latest?.active) { + newInvasion.encounters[position] = latest.lineup.team[ + i + ].map((pkmn, j) => + pkmn.template === 'UNSET' && + info.encounters[position][j] + ? info.encounters[position][j] + : { id: pkmn.id, form: pkmn.form }, + ) + newInvasion.second_reward = + latest.lineup.rewards.length > 1 + } + }) + } + return [type, newInvasion] + }), + ) + : this.invasions, + ) + } catch (e) { + console.warn('[WARN] Unable to generate latest invasions:\n', e.message) + } } } From d9f970d95ca84b1607fc43417f4d1156093d6aaa Mon Sep 17 00:00:00 2001 From: TurtIeSocks Date: Tue, 12 Jul 2022 18:02:52 +0000 Subject: [PATCH 31/38] Synced docker env vars with latest config Files changed:\nM server/src/configs/custom-environment-variables.json --- server/src/configs/custom-environment-variables.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/server/src/configs/custom-environment-variables.json b/server/src/configs/custom-environment-variables.json index 157c8b357..73b3ce828 100644 --- a/server/src/configs/custom-environment-variables.json +++ b/server/src/configs/custom-environment-variables.json @@ -217,6 +217,11 @@ "fetchTimeoutMs": { "__name": "API_FETCH_TIMEOUT_MS", "__format": "number" + }, + "pogoApiEndpoints": { + "invasions": "API_POGO_API_ENDPOINTS_INVASIONS", + "masterfile": "API_POGO_API_ENDPOINTS_MASTERFILE", + "translations": "API_POGO_API_ENDPOINTS_TRANSLATIONS" } }, "multiDomains": { From b31a6a2ec216921502d0acacd890fc7bd5405f58 Mon Sep 17 00:00:00 2001 From: TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com> Date: Tue, 12 Jul 2022 14:06:10 -0400 Subject: [PATCH 32/38] linting... --- server/scripts/createLocales.js | 3 ++- server/scripts/generateMasterfile.js | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/server/scripts/createLocales.js b/server/scripts/createLocales.js index 029c8036b..88768e077 100644 --- a/server/scripts/createLocales.js +++ b/server/scripts/createLocales.js @@ -10,7 +10,8 @@ const finalLocalesFolder = path.resolve(__dirname, '../../public/locales') const missingFolder = path.resolve(__dirname, '../../public/missing-locales') const locales = async () => { - if (!api.pogoApiEndpoints.translations) console.error('[LOCALES] No translations endpoint') + if (!api.pogoApiEndpoints.translations) + console.error('[LOCALES] No translations endpoint') const localTranslations = await fs.promises.readdir(appLocalesFolder) const englishRef = fs.readFileSync( path.resolve(appLocalesFolder, 'en.json'), diff --git a/server/scripts/generateMasterfile.js b/server/scripts/generateMasterfile.js index 238802bee..9e86819b4 100644 --- a/server/scripts/generateMasterfile.js +++ b/server/scripts/generateMasterfile.js @@ -19,8 +19,9 @@ const generate = async ( dbRarity = new Map(), ) => { try { - if (!api.pogoApiEndpoints.masterfile) throw new Error('No masterfile endpoint') - + if (!api.pogoApiEndpoints.masterfile) + throw new Error('No masterfile endpoint') + const masterfile = await fetchJson(api.pogoApiEndpoints.masterfile) const newMf = { From 89c2b8bb95fe85af19a0bfd4e266307014bf3185 Mon Sep 17 00:00:00 2001 From: TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com> Date: Tue, 12 Jul 2022 14:11:20 -0400 Subject: [PATCH 33/38] Update config.js --- server/src/services/config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/src/services/config.js b/server/src/services/config.js index 077f51351..c230767cd 100644 --- a/server/src/services/config.js +++ b/server/src/services/config.js @@ -53,7 +53,7 @@ if (!fs.existsSync(resolve(`${__dirname}/../configs/local.json`))) { ], }) } else { - throw new Error( + console.error( 'Missing scanner database config! \nCheck to make sure you have SCANNER_DB_HOST,SCANNER_DB_PORT, SCANNER_DB_NAME, SCANNER_DB_USERNAME, and SCANNER_DB_PASSWORD', ) } @@ -73,7 +73,7 @@ if (!fs.existsSync(resolve(`${__dirname}/../configs/local.json`))) { useFor: ['session', 'user', 'nest', 'portal'], }) } else { - throw new Error( + console.error( 'Missing manual database config! \nCheck to make sure you have MANUAL_DB_HOST,MANUAL_DB_PORT, MANUAL_DB_NAME, MANUAL_DB_USERNAME, and MANUAL_DB_PASSWORD', ) } From 5f008bf404193a91b786d5d03dd16a2fbfc9c43b Mon Sep 17 00:00:00 2001 From: TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com> Date: Mon, 18 Jul 2022 09:58:30 -0400 Subject: [PATCH 34/38] Update default invasions endpoint (temp) --- server/src/configs/default.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/configs/default.json b/server/src/configs/default.json index c229fa347..582b64a38 100644 --- a/server/src/configs/default.json +++ b/server/src/configs/default.json @@ -84,7 +84,7 @@ "hideOldPokestops": false, "fetchTimeoutMs": 3000, "pogoApiEndpoints": { - "invasions": "https://raw.githubusercontent.com/ccev/pogoinfo/v2/active/grunts.json", + "invasions": "https://raw.githubusercontent.com/WatWowMap/Masterfile-Generator/master/custom-invasions.json", "masterfile": "https://raw.githubusercontent.com/WatWowMap/Masterfile-Generator/master/master-latest-react-map.json", "translations": "https://raw.githubusercontent.com/WatWowMap/pogo-translations/master" } From 796a0964ffeea39ba95be7af83116a9ce2405859 Mon Sep 17 00:00:00 2001 From: TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com> Date: Mon, 18 Jul 2022 18:53:02 -0400 Subject: [PATCH 35/38] Extra Lure Support - Scatter lure pokemon - Captioning for non-encounter spawns to explain to the user --- public/base-locales/en.json | 7 ++++++- src/components/popups/Pokemon.jsx | 17 ++++++++++++----- src/components/tiles/Pokemon.jsx | 7 ++++--- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/public/base-locales/en.json b/public/base-locales/en.json index 1c9a4a5e9..958786ec5 100644 --- a/public/base-locales/en.json +++ b/public/base-locales/en.json @@ -553,5 +553,10 @@ "lure_range": "Lure Range", "tap_to_toggle": "Tap To Toggle", "power_up": "Power Up", - "never_alt": "Never" + "never_alt": "Never", + "seen_nearby_stop": "Seen Nearby", + "seen_nearby_cell": "Seen in this Cell", + "seen_lure_encounter": "Lure Encounter", + "seen_lure_wild": "Lure Spawn", + "seen_wild": "Wild Spawn" } diff --git a/src/components/popups/Pokemon.jsx b/src/components/popups/Pokemon.jsx index 5729696cf..c6ba1268b 100644 --- a/src/components/popups/Pokemon.jsx +++ b/src/components/popups/Pokemon.jsx @@ -80,12 +80,19 @@ export default function PokemonPopup({ classes={classes} isTutorial={isTutorial} /> - {Boolean(pokemon.expire_timestamp) && ( - + {pokemon.seen_type !== 'encounter' && ( + + + {t(`seen_${pokemon.seen_type}`, '')} + + )} {pokemon.seen_type === 'nearby_cell' && ( {t('pokemon_cell')} )} + {!!pokemon.expire_timestamp && ( + + )} {hasStats && pokePerms.iv && ( <> @@ -103,7 +110,7 @@ export default function PokemonPopup({ pokemon={pokemon} popups={popups} setPopups={setPopups} - hasPvp={Boolean(hasLeagues.length)} + hasPvp={!!hasLeagues.length} classes={classes} Icons={Icons} /> @@ -243,7 +250,7 @@ const Header = ({ { }} /> )} - {Boolean(gender) && ( + {!!gender && ( {{ diff --git a/src/components/tiles/Pokemon.jsx b/src/components/tiles/Pokemon.jsx index 024680c21..f5a83e691 100644 --- a/src/components/tiles/Pokemon.jsx +++ b/src/components/tiles/Pokemon.jsx @@ -106,9 +106,10 @@ const PokemonTile = ({ const pvpCheck = item.bestPvp !== null && item.bestPvp < 4 const weatherCheck = item.weather && userSettings.weatherIndicator - const finalLocation = item.seen_type?.startsWith('nearby') - ? getOffset([item.lat, item.lon], item.seen_type, item.id) - : [item.lat, item.lon] + const finalLocation = + item.seen_type?.startsWith('nearby') || item.seen_type?.includes('lure') + ? getOffset([item.lat, item.lon], item.seen_type, item.id) + : [item.lat, item.lon] useForcePopup(item.id, markerRef, params, setParams, done) From 35376ed8e537f9c383b2f9711fe26291145ef3b1 Mon Sep 17 00:00:00 2001 From: TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com> Date: Mon, 1 Aug 2022 19:26:38 -0400 Subject: [PATCH 36/38] remove configurable drawer --- server/src/configs/default.json | 3 +-- server/src/routes/rootRouter.js | 4 ---- src/components/layout/drawer/Drawer.jsx | 3 +-- 3 files changed, 2 insertions(+), 8 deletions(-) diff --git a/server/src/configs/default.json b/server/src/configs/default.json index 582b64a38..13be60930 100644 --- a/server/src/configs/default.json +++ b/server/src/configs/default.json @@ -164,8 +164,7 @@ "theme": { "style": "dark", "primary": "#ff5722", - "secondary": "#00b0ff", - "drawer": "temporary" + "secondary": "#00b0ff" }, "clustering": { "gyms": { diff --git a/server/src/routes/rootRouter.js b/server/src/routes/rootRouter.js index 5c25903d6..dded45a46 100644 --- a/server/src/routes/rootRouter.js +++ b/server/src/routes/rootRouter.js @@ -151,10 +151,6 @@ rootRouter.get('/settings', async (req, res) => { navigation: Object.fromEntries( config.navigation.map((n) => [n.name, n]), ), - drawer: { - temporary: {}, - persistent: {}, - }, navigationControls: { react: {}, leaflet: {}, diff --git a/src/components/layout/drawer/Drawer.jsx b/src/components/layout/drawer/Drawer.jsx index d20a44639..9f537feae 100644 --- a/src/components/layout/drawer/Drawer.jsx +++ b/src/components/layout/drawer/Drawer.jsx @@ -29,7 +29,6 @@ export default function Sidebar({ toggleDialog, Icons, }) { - const { drawer: drawerStyle } = useStore((state) => state.settings) const sidebar = useStore((state) => state.sidebar) const setSidebar = useStore((state) => state.setSidebar) const classes = useStyles() @@ -156,7 +155,7 @@ export default function Sidebar({ return ( Date: Mon, 1 Aug 2022 23:27:13 +0000 Subject: [PATCH 37/38] Synced docker env vars with latest config Files changed:\nM server/src/configs/custom-environment-variables.json --- server/src/configs/custom-environment-variables.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/server/src/configs/custom-environment-variables.json b/server/src/configs/custom-environment-variables.json index 73b3ce828..339c1d088 100644 --- a/server/src/configs/custom-environment-variables.json +++ b/server/src/configs/custom-environment-variables.json @@ -379,8 +379,7 @@ "theme": { "style": "MAP_THEME_STYLE", "primary": "MAP_THEME_PRIMARY", - "secondary": "MAP_THEME_SECONDARY", - "drawer": "MAP_THEME_DRAWER" + "secondary": "MAP_THEME_SECONDARY" }, "clustering": { "gyms": { From eeba0a533a1d577b4b0d5e0b25c0e215ea28df1a Mon Sep 17 00:00:00 2001 From: TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com> Date: Mon, 1 Aug 2022 21:30:19 -0400 Subject: [PATCH 38/38] Update Invasions Endpoint - Use new invasions endpoint - Version bump --- package.json | 2 +- server/src/configs/default.json | 2 +- server/src/services/EventManager.js | 31 ++++------------------------- src/components/popups/Pokestop.jsx | 13 +++++++----- 4 files changed, 14 insertions(+), 34 deletions(-) diff --git a/package.json b/package.json index 047ec4a6f..db33f3d0c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "reactmap", - "version": "1.3.2", + "version": "1.3.3", "description": "React based frontend map.", "main": "ReactMap.mjs", "author": "TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com>", diff --git a/server/src/configs/default.json b/server/src/configs/default.json index 13be60930..5d477b61d 100644 --- a/server/src/configs/default.json +++ b/server/src/configs/default.json @@ -84,7 +84,7 @@ "hideOldPokestops": false, "fetchTimeoutMs": 3000, "pogoApiEndpoints": { - "invasions": "https://raw.githubusercontent.com/WatWowMap/Masterfile-Generator/master/custom-invasions.json", + "invasions": "https://raw.githubusercontent.com/WatWowMap/event-info/main/grunts/formatted.json", "masterfile": "https://raw.githubusercontent.com/WatWowMap/Masterfile-Generator/master/master-latest-react-map.json", "translations": "https://raw.githubusercontent.com/WatWowMap/pogo-translations/master" } diff --git a/server/src/services/EventManager.js b/server/src/services/EventManager.js index 125ac31bb..f0bffa1d1 100644 --- a/server/src/services/EventManager.js +++ b/server/src/services/EventManager.js @@ -128,33 +128,10 @@ module.exports = class EventManager { if (endpoint) { console.log('[EVENT] Fetching Latest Invasions') try { - this.invasions = await fetchJson(endpoint).then((response) => - response - ? Object.fromEntries( - Object.entries(this.invasions).map(([type, info]) => { - const latest = response[type] - const newInvasion = this.invasions[type] - if (info.encounters) { - Object.keys(info.encounters).forEach((position, i) => { - if (latest?.active) { - newInvasion.encounters[position] = latest.lineup.team[ - i - ].map((pkmn, j) => - pkmn.template === 'UNSET' && - info.encounters[position][j] - ? info.encounters[position][j] - : { id: pkmn.id, form: pkmn.form }, - ) - newInvasion.second_reward = - latest.lineup.rewards.length > 1 - } - }) - } - return [type, newInvasion] - }), - ) - : this.invasions, - ) + const newInvasions = await fetchJson(endpoint) + if (newInvasions) { + this.invasions = newInvasions + } } catch (e) { console.warn('[WARN] Unable to generate latest invasions:\n', e.message) } diff --git a/src/components/popups/Pokestop.jsx b/src/components/popups/Pokestop.jsx index e1a762278..86e702a79 100644 --- a/src/components/popups/Pokestop.jsx +++ b/src/components/popups/Pokestop.jsx @@ -633,16 +633,19 @@ const Invasion = ({ pokestop, Icons, t }) => { ) const getRewardPercent = (grunt) => { - if (grunt.type === 'Giovanni') { - return { third: '100%' } - } if (grunt.type.startsWith('NPC')) { return {} } - if (grunt.second_reward) { + if (grunt.secondReward) { return { first: '85%', second: '15%' } } - return { first: '100%' } + if (grunt.thirdReward) { + return { third: '100%' } + } + if (grunt.firstReward) { + return { first: '100%' } + } + return {} } return invasions.map((invasion) => (