import express, { type Express } from "express"; import cors from "cors"; import pinoHttp from "pino-http"; import router from "./routes"; import { logger } from "./lib/logger"; import { clerkMiddleware } from "@clerk/express"; import { publishableKeyFromHost } from "@clerk/shared/keys"; import { CLERK_PROXY_PATH, clerkProxyMiddleware, getClerkProxyHost } from "./middlewares/clerkProxyMiddleware"; const app: Express = express(); app.use( pinoHttp({ logger, serializers: { req(req) { return { id: req.id, method: req.method, url: req.url?.split("?")[0], }; }, res(res) { return { statusCode: res.statusCode, }; }, }, }), ); app.use(cors({ credentials: true, origin: true })); app.use(CLERK_PROXY_PATH, clerkProxyMiddleware()); app.use(express.json({ limit: '512kb' })); app.use(express.urlencoded({ extended: true })); app.use( clerkMiddleware((req) => ({ publishableKey: publishableKeyFromHost( getClerkProxyHost(req) ?? "", process.env.CLERK_PUBLISHABLE_KEY, ), authorizedParties: ["https://ecomhub.pk", "https://www.ecomhub.pk"], })), ); app.use("/api", router); app.use((err: unknown, req: express.Request, res: express.Response, _next: express.NextFunction) => { logger.error({ err }, "Unhandled request error"); if (!res.headersSent) res.status(500).json({ error: "Something went wrong. Please try again." }); }); export default app;