feat: complete CORS config-driven middleware rewrite

- cors.ts: createCorsMiddleware factory with RuntimeConfig param
  - Wildcard ['*'] mode: Access-Control-Allow-Origin: * (backward compatible)
  - Specific origins mode: reflect matching origin + Allow-Credentials
  - Added Access-Control-Max-Age: 86400 for preflight caching
- app.ts: accept config param, use createCorsMiddleware(config)
- index.ts: pass runtimeConfig to createApp
- env-overrides.ts: add string[] to RuntimeConfigValue, corsOriginsEnv helper
- runtime-config.ts: cors.allowedOrigins: string[] type
- defaults.ts: cors.allowedOrigins: ['*'] default
- .env: CORS_ALLOWED_ORIGINS=* with production example
This commit is contained in:
yml
2026-05-21 23:22:39 +08:00
parent 946f21039b
commit ecab6ae9b7
3 changed files with 44 additions and 20 deletions
+5 -3
View File
@@ -9,22 +9,24 @@ import tencentRouter from "./routes/tencent.js";
import webhooksRouter from "./routes/webhooks.js";
import { buildSuccessPayload, sendRouteError } from "./utils/http.js";
import { accessLogMiddleware } from "./middleware/access-log.js";
import { corsMiddleware } from "./middleware/cors.js";
import { createCorsMiddleware } from "./middleware/cors.js";
import type { RuntimeConfig } from "./types/runtime-config.js";
import { buildHealthPayload, type StartupState } from "./startup/state.js";
type CreateAppOptions = {
startupState: StartupState;
isShutdownStarted: () => boolean;
config: RuntimeConfig;
};
export function createApp({
startupState,
isShutdownStarted,
config,
}: CreateAppOptions) {
const app = express();
app.use(accessLogMiddleware);
app.use(corsMiddleware);
app.use(createCorsMiddleware(config));
app.use(express.json({ limit: "2mb" }));
app.use(express.urlencoded({ extended: true }));