2025-06-26 15:30:01 -07:00
|
|
|
import chokidar from "chokidar";
|
2025-07-04 17:40:06 -07:00
|
|
|
import { logger } from "@/src/utils/logger";
|
2025-07-17 05:04:30 -07:00
|
|
|
import { config, configPath, loadConfig, syncConfigWithDatabase } from "@/src/services/configService";
|
2025-07-05 06:23:10 -07:00
|
|
|
import { saveConfig, shouldReloadConfig } from "@/src/services/configWriterService";
|
2025-07-04 17:40:06 -07:00
|
|
|
import { getWebPorts, startWebServer, stopWebServer } from "@/src/services/webService";
|
|
|
|
import { sendWsBroadcast } from "@/src/services/wsService";
|
2025-07-04 15:18:41 -07:00
|
|
|
import varzia from "@/static/fixed_responses/worldState/varzia.json";
|
2025-04-05 06:50:57 -07:00
|
|
|
|
2025-06-26 15:30:01 -07:00
|
|
|
chokidar.watch(configPath).on("change", () => {
|
2025-07-05 06:23:10 -07:00
|
|
|
if (shouldReloadConfig()) {
|
2025-06-18 11:34:12 -07:00
|
|
|
logger.info("Detected a change to config file, reloading its contents.");
|
2025-04-05 06:50:57 -07:00
|
|
|
try {
|
|
|
|
loadConfig();
|
|
|
|
} catch (e) {
|
2025-06-29 11:54:20 -07:00
|
|
|
logger.error("Config changes were not applied: " + (e as Error).message);
|
|
|
|
return;
|
2025-04-05 06:50:57 -07:00
|
|
|
}
|
|
|
|
validateConfig();
|
2025-06-25 08:04:03 -07:00
|
|
|
syncConfigWithDatabase();
|
2025-05-24 01:48:25 -07:00
|
|
|
|
|
|
|
const webPorts = getWebPorts();
|
|
|
|
if (config.httpPort != webPorts.http || config.httpsPort != webPorts.https) {
|
|
|
|
logger.info(`Restarting web server to apply port changes.`);
|
2025-06-20 14:00:55 -07:00
|
|
|
|
|
|
|
// Tell webui clients to reload with new port
|
|
|
|
sendWsBroadcast({ ports: { http: config.httpPort, https: config.httpsPort } });
|
|
|
|
|
2025-05-24 01:48:25 -07:00
|
|
|
void stopWebServer().then(startWebServer);
|
2025-06-20 14:00:55 -07:00
|
|
|
} else {
|
|
|
|
sendWsBroadcast({ config_reloaded: true });
|
2025-05-24 01:48:25 -07:00
|
|
|
}
|
2025-04-05 06:50:57 -07:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
export const validateConfig = (): void => {
|
2025-06-07 02:15:35 -07:00
|
|
|
let modified = false;
|
|
|
|
if (config.administratorNames) {
|
|
|
|
if (!Array.isArray(config.administratorNames)) {
|
|
|
|
config.administratorNames = [config.administratorNames];
|
|
|
|
modified = true;
|
|
|
|
}
|
|
|
|
for (let i = 0; i != config.administratorNames.length; ++i) {
|
|
|
|
if (typeof config.administratorNames[i] != "string") {
|
|
|
|
config.administratorNames[i] = String(config.administratorNames[i]);
|
|
|
|
modified = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2025-06-25 08:04:03 -07:00
|
|
|
if (
|
|
|
|
config.worldState?.galleonOfGhouls &&
|
|
|
|
config.worldState.galleonOfGhouls != 1 &&
|
|
|
|
config.worldState.galleonOfGhouls != 2 &&
|
|
|
|
config.worldState.galleonOfGhouls != 3
|
|
|
|
) {
|
|
|
|
config.worldState.galleonOfGhouls = 0;
|
|
|
|
modified = true;
|
|
|
|
}
|
2025-07-04 15:18:41 -07:00
|
|
|
if (
|
|
|
|
config.worldState?.varziaOverride &&
|
|
|
|
!varzia.primeDualPacks.some(p => p.ItemType === config.worldState?.varziaOverride)
|
|
|
|
) {
|
|
|
|
config.worldState.varziaOverride = "";
|
|
|
|
modified = true;
|
|
|
|
}
|
2025-06-07 02:15:35 -07:00
|
|
|
if (modified) {
|
2025-06-18 11:34:12 -07:00
|
|
|
logger.info(`Updating config file to fix some issues with it.`);
|
2025-04-05 06:50:57 -07:00
|
|
|
void saveConfig();
|
|
|
|
}
|
|
|
|
};
|