export type RouteHandler = (req: Request, url: URL, server: unknown) => Promise; export function createHttpFetchHandler(deps: { metrics: { withHttpMetrics: (fn: () => Promise) => Promise }; CORS_HEADERS: Record; routes: RouteHandler[]; }) { return async function fetchHandler(req: Request, server: unknown): Promise { return deps.metrics.withHttpMetrics(async () => { if (req.method === "OPTIONS") { return new Response("", { headers: deps.CORS_HEADERS }); } const url = new URL(req.url); for (const route of deps.routes) { const response = await route(req, url, server); if (response) return response; } return new Response("Not found", { status: 404 }); }); }; }