/** * Default backend base URL — the operator-set fallback used when no specific * instance is active. Resolution order: * * 1. window.__APP_CONFIG__.apiBaseUrl — runtime, injected by the container * at start from $PUBLIC_API_BASE_URL (see public/config.js). Lets one * prebuilt image point at any backend origin without rebuilding. * 2. import.meta.env.PUBLIC_API_BASE_URL — build-time default (rsbuild inlines * PUBLIC_* vars). Used in local dev and as a baked fallback. * 3. '/api/v1' — same-origin relative path (works behind a reverse proxy). * * The user's chosen instance still wins over all of these — see * runtime-config.ts / instances.ts. */ function runtimeApiBaseUrl(): string | undefined { if (typeof window === 'undefined') return undefined; const value = window.__APP_CONFIG__?.apiBaseUrl; return value ? value : undefined; } export const DEFAULT_API_BASE_URL = runtimeApiBaseUrl() ?? import.meta.env.PUBLIC_API_BASE_URL ?? '/api/v1'; /** * Whether the public sign-up UI is shown. Same precedence as the base URL: * runtime operator config (injected into `window.__APP_CONFIG__` at container * start) wins over the build-time `PUBLIC_ENABLE_REGISTRATION` env, which * defaults to enabled. This only gates the *UI*; the backend independently * enforces `ALLOW_REGISTRATION` and is the real authority. */ function parseFlag(value: string | undefined): boolean | undefined { if (value == null || value === '') return undefined; return value !== 'false' && value !== '0'; } export const REGISTRATION_ENABLED: boolean = (typeof window !== 'undefined' ? window.__APP_CONFIG__?.enableRegistration : undefined) ?? parseFlag(import.meta.env.PUBLIC_ENABLE_REGISTRATION) ?? true;