import { readFileSync } from "fs"; import { join } from "path"; interface Config { canvasWidth: number; canvasHeight: number; defaultCooldown: number; enableAutomaticEvents: boolean; eventDurationMinutes: number; eventIntervalHours: number; autoExportIntervalSeconds: number; exportPath: string; adminKey: string; enableKeycloak: boolean; keycloakRealm: string; keycloakAuthUrl: string; keycloakClientId: string; } function parseConfigFile(): Config { try { const configPath = join(process.cwd(), "config.cfg"); const configContent = readFileSync(configPath, "utf-8"); const configMap = new Map(); configContent.split("\n").forEach(line => { line = line.trim(); if (line.startsWith("#") || !line.includes("=")) return; const [key, value] = line.split("="); configMap.set(key.trim(), value.trim()); }); return { canvasWidth: parseInt(configMap.get('CANVAS_WIDTH') || '500'), canvasHeight: parseInt(configMap.get('CANVAS_HEIGHT') || '200'), defaultCooldown: parseInt(configMap.get('DEFAULT_COOLDOWN') || '10'), enableAutomaticEvents: configMap.get('ENABLE_AUTOMATIC_EVENTS') === 'true', eventDurationMinutes: parseInt(configMap.get('EVENT_DURATION_MINUTES') || '30'), eventIntervalHours: parseInt(configMap.get('EVENT_INTERVAL_HOURS') || '1'), autoExportIntervalSeconds: parseInt(configMap.get('AUTO_EXPORT_INTERVAL_SECONDS') || '60'), exportPath: configMap.get('EXPORT_PATH') || './exports/', adminKey: configMap.get('ADMIN_KEY') || 'admin123', enableKeycloak: configMap.get('ENABLE_KEYCLOAK') === 'true', keycloakRealm: configMap.get('KEYCLOAK_REALM') || 'rplace', keycloakAuthUrl: configMap.get('KEYCLOAK_AUTH_URL') || 'http://localhost:8080/auth', keycloakClientId: configMap.get('KEYCLOAK_CLIENT_ID') || 'rplace-client', }; } catch (error) { console.error("Error reading config file, using defaults:", error); return { canvasWidth: 500, canvasHeight: 200, defaultCooldown: 10, enableAutomaticEvents: false, eventDurationMinutes: 30, eventIntervalHours: 1, autoExportIntervalSeconds: 60, exportPath: "./exports/", adminKey: 'admin123', enableKeycloak: false, keycloakRealm: "rplace", keycloakAuthUrl: "http://localhost:8080/auth", keycloakClientId: "rplace-client", }; } } export const config = parseConfigFile();