/** * 环境配置 —— 只在 app/ 层读环境变量;模块内一律经 port 注入(§5.3)。 */ import { join } from 'node:path'; export type AppConfig = { readonly nodeEnv: 'development' | 'test' | 'production'; readonly port: number; readonly databaseUrl: string; /** 原件存档根目录 —— 信封的原件指针指向这里 */ readonly attachmentRoot: string; /** 派发器轮询间隔(毫秒) */ readonly dispatchIntervalMs: number; }; const DEFAULT_DATABASE_URL = 'postgres://jcai:jcai@localhost:54329/jcai'; export function loadConfig(env: NodeJS.ProcessEnv = process.env): AppConfig { const nodeEnv = env['NODE_ENV']; return { nodeEnv: nodeEnv === 'production' || nodeEnv === 'test' ? nodeEnv : 'development', port: Number(env['PORT'] ?? 8787), databaseUrl: env['DATABASE_URL'] ?? DEFAULT_DATABASE_URL, attachmentRoot: env['JCAI_ATTACHMENT_ROOT'] ?? join(process.cwd(), '.data', 'attachments'), dispatchIntervalMs: Number(env['JCAI_DISPATCH_INTERVAL_MS'] ?? 2000), }; }