import { readConfigFile } from "./config-file.js"; type DatabaseMode = "embedded-postgres" | "postgres"; export interface Config { port: number; databaseMode: DatabaseMode; databaseUrl: string | undefined; embeddedPostgresDataDir: string; embeddedPostgresPort: number; serveUi: boolean; uiDevMiddleware: boolean; heartbeatSchedulerEnabled: boolean; heartbeatSchedulerIntervalMs: number; } export function loadConfig(): Config { const fileConfig = readConfigFile(); const fileDatabaseMode = (fileConfig?.database.mode === "postgres" ? "postgres" : "embedded-postgres") as DatabaseMode; const fileDbUrl = fileDatabaseMode === "postgres" ? fileConfig?.database.connectionString : undefined; return { port: Number(process.env.PORT) || fileConfig?.server.port || 3100, databaseMode: fileDatabaseMode, databaseUrl: process.env.DATABASE_URL ?? fileDbUrl, embeddedPostgresDataDir: fileConfig?.database.embeddedPostgresDataDir ?? "./data/embedded-postgres", embeddedPostgresPort: fileConfig?.database.embeddedPostgresPort ?? 54329, serveUi: process.env.SERVE_UI !== undefined ? process.env.SERVE_UI === "true" : fileConfig?.server.serveUi ?? false, uiDevMiddleware: process.env.PAPERCLIP_UI_DEV_MIDDLEWARE === "true", heartbeatSchedulerEnabled: process.env.HEARTBEAT_SCHEDULER_ENABLED !== "false", heartbeatSchedulerIntervalMs: Math.max(10000, Number(process.env.HEARTBEAT_SCHEDULER_INTERVAL_MS) || 30000), }; }