forked from OpenWF/SpaceNinjaServer
56 lines
1.7 KiB
TypeScript
56 lines
1.7 KiB
TypeScript
import path from "path";
|
|
import fs from "fs";
|
|
import fsPromises from "fs/promises";
|
|
import { logger } from "@/src/utils/logger";
|
|
|
|
const rootDir = path.join(__dirname, "../..");
|
|
const repoDir = path.basename(rootDir) == "build" ? path.join(rootDir, "..") : rootDir;
|
|
const configPath = path.join(repoDir, "config.json");
|
|
export const config: IConfig = JSON.parse(fs.readFileSync(configPath, "utf-8"));
|
|
|
|
let amnesia = false;
|
|
fs.watchFile(configPath, () => {
|
|
if (amnesia) {
|
|
amnesia = false;
|
|
} else {
|
|
logger.info("Detected a change to config.json, reloading its contents.");
|
|
Object.assign(config, JSON.parse(fs.readFileSync(configPath, "utf-8")));
|
|
}
|
|
});
|
|
|
|
interface IConfig {
|
|
mongodbUrl: string;
|
|
logger: ILoggerConfig;
|
|
myAddress: string;
|
|
httpPort?: number;
|
|
httpsPort?: number;
|
|
myIrcAddresses?: string[];
|
|
autoCreateAccount?: boolean;
|
|
skipStoryModeChoice?: boolean;
|
|
skipTutorial?: boolean;
|
|
skipAllDialogue?: boolean;
|
|
unlockAllScans?: boolean;
|
|
unlockAllMissions?: boolean;
|
|
unlockAllQuests?: boolean;
|
|
completeAllQuests?: boolean;
|
|
infiniteCredits?: boolean;
|
|
infinitePlatinum?: boolean;
|
|
unlockAllShipFeatures?: boolean;
|
|
unlockAllShipDecorations?: boolean;
|
|
unlockAllFlavourItems?: boolean;
|
|
unlockAllSkins?: boolean;
|
|
universalPolarityEverywhere?: boolean;
|
|
spoofMasteryRank?: number;
|
|
}
|
|
|
|
interface ILoggerConfig {
|
|
files: boolean;
|
|
level: string; // "fatal" | "error" | "warn" | "info" | "http" | "debug" | "trace";
|
|
}
|
|
|
|
export const updateConfig = async (data: string) => {
|
|
amnesia = true;
|
|
await fsPromises.writeFile(configPath, data);
|
|
Object.assign(config, JSON.parse(data));
|
|
};
|