import express, { Request, Response, NextFunction } from "express"; import cors from "cors"; import { config } from "./config"; import healthRouter from "./routes/health"; import racesRouter from "./routes/races"; export function createApp(): express.Express { const app = express(); // TEMP: compare Host vs Origin for 200 vs 401 debugging — remove when done app.use((req, res, next) => { const host = req.headers.host; const origin = req.headers.origin; res.on("finish", () => { console.log( JSON.stringify({ tag: "temp-req-headers", host, origin: origin ?? null, method: req.method, path: req.originalUrl ?? req.url, status: res.statusCode, }), ); }); next(); }); app.use( cors({ origin: config.corsOrigin, methods: ["GET", "POST", "PATCH", "DELETE", "OPTIONS"] }), ); app.use(express.json()); app.use("/api", healthRouter); app.use("/api", racesRouter); app.use((err: unknown, _req: Request, res: Response, _next: NextFunction) => { if (err instanceof SyntaxError && "body" in err) { res.status(400).json({ error: "validation_error", details: ["Invalid JSON in request body"] }); return; } console.error("[app] Unhandled error:", err); res.status(500).json({ error: "unknown_error", details: ["Internal server error"] }); }); return app; }