/** * Next.js Instrumentation Hook(启动期守卫) * * 关联:ARCHITECTURE.md §3.4 V3-A2 / §6.1 / §10 P0-5 * * 在生产环境(NODE_ENV=production)下,DEV_MODE 必须为 false; * 若 NEXT_PUBLIC_DEV_MODE=true(或非 "false")则启动即抛错退出, * 防止"生产永久绕过认证"(见 §1.3-F4 / §6.1)。 * * 验收命令: * NODE_ENV=production NEXT_PUBLIC_DEV_MODE=true pnpm start * → 进程退出,stderr 输出包含 "NEXT_PUBLIC_DEV_MODE must be false in production" * * 开发态(NODE_ENV !== "production")放行,由 middleware 提供 dev-token 合成身份。 */ export async function register(): Promise { const nodeEnv = process.env.NODE_ENV ?? ""; const devModeRaw = process.env.NEXT_PUBLIC_DEV_MODE ?? ""; if (nodeEnv !== "production") { return; } // 仅生产环境校验;DEV_MODE 必须显式为 "false"(或等价 falsy) const devModeEnabled = devModeRaw !== "false" && devModeRaw !== "0" && devModeRaw !== ""; if (devModeEnabled) { const msg = "[portal-shell] FATAL: NEXT_PUBLIC_DEV_MODE must be false in production " + `(got NEXT_PUBLIC_DEV_MODE=${JSON.stringify(devModeRaw)}). ` + "Aborting startup to prevent authentication bypass " + "(ARCHITECTURE.md §10 P0-5)."; console.error(msg); // 非零退出码,触发进程管理器/容器重启策略 process.exit(1); } }