{"path":"apps/api-server/src/app.ts","size":963,"locked":false,"binary":false,"truncated":false,"content":"import express, { type Express, type Request, type Response, type NextFunction } from \"express\";\nimport cors from \"cors\";\nimport pinoHttp from \"pino-http\";\nimport router from \"./routes\";\nimport { logger } from \"./lib/logger\";\n\nconst app: Express = express();\n\napp.use(\n  pinoHttp({\n    logger,\n    serializers: {\n      req(req) {\n        return {\n          id: req.id,\n          method: req.method,\n          url: req.url?.split(\"?\")[0],\n        };\n      },\n      res(res) {\n        return {\n          statusCode: res.statusCode,\n        };\n      },\n    },\n  }),\n);\napp.use(cors());\napp.use(express.json());\napp.use(express.urlencoded({ extended: true }));\n\napp.use(\"/api\", router);\n\n// Global error handler — prevents stack trace leaks in non-production\napp.use((err: Error, _req: Request, res: Response, _next: NextFunction) => {\n  logger.error({ err }, \"Unhandled error\");\n  res.status(500).json({ error: \"Internal server error\" });\n});\n\nexport default app;\n"}