Files
EJClaw/src/web-dashboard-routes.ts
2026-04-28 17:43:20 +09:00

36 lines
1.1 KiB
TypeScript

import type { StatusSnapshot } from './status-dashboard.js';
import type { ScheduledTask } from './types.js';
import { sanitizeScheduledTask } from './web-dashboard-data.js';
import { serveValidatedAttachment } from './web-dashboard-attachments.js';
type JsonResponse = (
value: unknown,
init?: ResponseInit,
request?: Request,
) => Response;
interface SimpleGetRouteContext {
url: URL;
statusMaxAgeMs: number;
readSnapshots: (maxAgeMs: number) => StatusSnapshot[];
loadTasks: () => ScheduledTask[];
jsonResponse: JsonResponse;
}
export function handleSimpleGetRoute({
url,
statusMaxAgeMs,
readSnapshots,
loadTasks,
jsonResponse,
}: SimpleGetRouteContext): Response | null {
const simpleGetRoutes: Record<string, () => Response> = {
'/api/health': () => jsonResponse({ ok: true }),
'/api/status-snapshots': () => jsonResponse(readSnapshots(statusMaxAgeMs)),
'/api/tasks': () => jsonResponse(loadTasks().map(sanitizeScheduledTask)),
'/api/attachments': () => serveValidatedAttachment(url),
};
const route = simpleGetRoutes[url.pathname];
return route ? route() : null;
}