/** * Environment-driven server configuration. * * All values are read from `process.env` at import time with sensible * defaults so the server boots with zero configuration for local dev. */ function env(key: string, fallback: string): string { const value = process.env[key]; return value === undefined || value === "" ? fallback : value; } function envInt(key: string, fallback: number): number { const raw = process.env[key]; if (raw === undefined || raw === "") return fallback; const n = Number.parseInt(raw, 10); return Number.isFinite(n) ? n : fallback; } export interface ServerConfig { /** Path to the SQLite database file. */ dbPath: string; /** Port the HTTP server listens on. */ port: number; /** Origin allowed for CORS. */ origin: string; /** Email of the bootstrap admin user. */ adminEmail: string; /** Session token TTL in seconds. */ tokenTtl: number; /** Version string reported by /api/version. */ version: string; } export const config: ServerConfig = { dbPath: env("PUBSCRIPT_DB", "./data/pubscript.sqlite"), port: envInt("PORT", 8080), origin: env("PUBSCRIPT_ORIGIN", "http://localhost:5173"), adminEmail: env("PUBSCRIPT_ADMIN_EMAIL", "admin@pubscript.local"), tokenTtl: envInt("PUBSCRIPT_TOKEN_TTL", 60 * 60 * 24 * 30), version: env("PUBSCRIPT_VERSION", "0.1.0"), };