Files
overlord/Overlord-Server/src/server/http-dispatch.ts
T
2026-05-06 18:24:33 -05:00

22 lines
807 B
TypeScript

export type RouteHandler = (req: Request, url: URL, server: unknown) => Promise<Response | null>;
export function createHttpFetchHandler(deps: {
metrics: { withHttpMetrics: (fn: () => Promise<Response>) => Promise<Response> };
CORS_HEADERS: Record<string, string>;
routes: RouteHandler[];
}) {
return async function fetchHandler(req: Request, server: unknown): Promise<Response> {
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 });
});
};
}