From 4047c52f2d8aa8f1ffceb65fe7c2bbc5b2513412 Mon Sep 17 00:00:00 2001 From: Rory& Date: Thu, 4 Dec 2025 11:01:06 +0100 Subject: validate that endpoitns are configured --- src/util/util/Config.ts | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/util/util/Config.ts b/src/util/util/Config.ts index 2fd9c0fb..a79c908d 100644 --- a/src/util/util/Config.ts +++ b/src/util/util/Config.ts @@ -54,7 +54,9 @@ export class Config { config = OrmUtils.mergeDeep({}, { ...new ConfigValue() }, config); - return this.set(config); + await this.set(config); + validateFinalConfig(config); + return config; }; public static get() { if (!config) { @@ -169,3 +171,38 @@ const validateConfig = async () => { return config; }; + +function validateFinalConfig(config: ConfigValue) { + let hasErrors = false; + function assertConfig(path: string, condition: (val: any) => boolean, recommendedValue: string) { + // _ to separate keys + const keys = path.split("_"); + let obj: any = config; + + for (const key of keys) { + if (obj == null || !(key in obj)) { + console.warn(`[Config] Missing config value for '${path}'. Recommended value: ${recommendedValue}`); + return; + } + obj = obj[key]; + } + + if (!condition(obj)) { + console.warn(`[Config] Invalid config value for '${path}': ${obj}. Recommended value: ${recommendedValue}`); + hasErrors = true; + } + } + + assertConfig("api_endpointPublic", v => v != null, "A valid public API endpoint URL, ex. \"http://localhost:3001/api/v9\""); + assertConfig("cdn_endpointPublic", v => v != null, "A valid public CDN endpoint URL, ex. \"http://localhost:3002/\""); + assertConfig("cdn_endpointPrivate", v => v != null, "A valid private CDN endpoint URL, ex. \"http://localhost:3002/\" - must be routable from the API server!"); + assertConfig("gateway_endpointPublic", v => v != null, "A valid public gateway endpoint URL, ex. \"ws://localhost:3003/\""); + + if (hasErrors) { + console.error( + "[Config] Your config has invalid values. Fix them first https://docs.spacebar.chat/setup/server/configuration", + ); + console.error("[Config] Hint: if you're just testing with bundle (`npm run start`), you can set all endpoint URLs to [proto]://localhost:3001"); + process.exit(1); + } else console.log("[Config] Configuration validated successfully."); +} \ No newline at end of file -- cgit 1.5.1