From 895e76b45e28aaf474e79780806fbb2dfd5f9f07 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Sun, 24 Aug 2025 15:30:31 -0700 Subject: [PATCH] chore: automatically remove deleted options from config.json (#2689) Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2689 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com> --- src/services/configService.ts | 37 +++++++++++++++++++++++++++- src/services/configWatcherService.ts | 15 ++++++++++- 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/src/services/configService.ts b/src/services/configService.ts index ad465d25..f257b453 100644 --- a/src/services/configService.ts +++ b/src/services/configService.ts @@ -4,7 +4,7 @@ import { repoDir } from "@/src/helpers/pathHelper"; import { args } from "@/src/helpers/commandLineArguments"; import { Inbox } from "@/src/models/inboxModel"; -export interface IConfig { +export interface IConfig extends IConfigRemovedOptions { mongodbUrl: string; logger: { files: boolean; @@ -92,6 +92,41 @@ export interface IConfig { }; } +export const configRemovedOptionsKeys = [ + "infiniteCredits", + "infinitePlatinum", + "infiniteEndo", + "infiniteRegalAya", + "infiniteHelminthMaterials", + "claimingBlueprintRefundsIngredients", + "dontSubtractPurchaseCreditCost", + "dontSubtractPurchasePlatinumCost", + "dontSubtractPurchaseItemCost", + "dontSubtractPurchaseStandingCost", + "dontSubtractVoidTraces", + "dontSubtractConsumables", + "universalPolarityEverywhere", + "unlockDoubleCapacityPotatoesEverywhere", + "unlockExilusEverywhere", + "unlockArcanesEverywhere", + "noDailyStandingLimits", + "noDailyFocusLimit", + "noArgonCrystalDecay", + "noMasteryRankUpCooldown", + "noVendorPurchaseLimits", + "noDeathMarks", + "noKimCooldowns", + "syndicateMissionsRepeatable", + "instantFinishRivenChallenge", + "instantResourceExtractorDrones", + "noResourceExtractorDronesDamage", + "skipClanKeyCrafting" +] as const; + +type IConfigRemovedOptions = { + [K in (typeof configRemovedOptionsKeys)[number]]?: boolean; +}; + export const configPath = path.join(repoDir, args.configPath ?? "config.json"); export const config: IConfig = { diff --git a/src/services/configWatcherService.ts b/src/services/configWatcherService.ts index d028b8ee..19b5c870 100644 --- a/src/services/configWatcherService.ts +++ b/src/services/configWatcherService.ts @@ -1,6 +1,12 @@ import chokidar from "chokidar"; import { logger } from "@/src/utils/logger"; -import { config, configPath, loadConfig, syncConfigWithDatabase } from "@/src/services/configService"; +import { + config, + configPath, + configRemovedOptionsKeys, + loadConfig, + syncConfigWithDatabase +} from "@/src/services/configService"; import { saveConfig, shouldReloadConfig } from "@/src/services/configWriterService"; import { getWebPorts, startWebServer, stopWebServer } from "@/src/services/webService"; import { sendWsBroadcast } from "@/src/services/wsService"; @@ -34,6 +40,13 @@ chokidar.watch(configPath).on("change", () => { export const validateConfig = (): void => { let modified = false; + for (const key of configRemovedOptionsKeys) { + if (config[key] !== undefined) { + logger.debug(`Spotted removed option ${key} with value ${config[key]} in config.json.`); + delete config[key]; + modified = true; + } + } if (config.administratorNames) { if (!Array.isArray(config.administratorNames)) { config.administratorNames = [config.administratorNames];