diff --git a/src/api/server.ts b/src/api/server.ts index b6becc1..aa31876 100644 --- a/src/api/server.ts +++ b/src/api/server.ts @@ -70,6 +70,14 @@ const RELAYED_EVENTS = [ "settingsUpdated", ] as const; +function parseBoundedLimit( + raw: string | undefined, + { fallback, max, min = 1 }: { fallback: number; max: number; min?: number }, +): number { + if (!raw) return fallback; + return Math.max(min, Math.min(max, Number(raw))); +} + const PLACEHOLDER_HTML = ` Symphony @@ -128,8 +136,7 @@ export function createServer({ .map((t) => t.trim()) .filter((t) => t.length > 0) : DEFAULT_ERROR_EVENT_TYPES; - const limitRaw = c.req.query("limit"); - const limit = limitRaw ? Math.max(1, Math.min(200, Number(limitRaw))) : 50; + const limit = parseBoundedLimit(c.req.query("limit"), { fallback: 50, max: 200 }); return c.json({ events: logger.listRecentEvents(types, limit) }); }); @@ -187,8 +194,7 @@ export function createServer({ app.get("/api/search", (c) => { const q = c.req.query("q") ?? ""; - const limitRaw = c.req.query("limit"); - const limit = limitRaw ? Math.max(1, Math.min(500, Number(limitRaw))) : 100; + const limit = parseBoundedLimit(c.req.query("limit"), { fallback: 100, max: 500 }); return c.json({ query: q, matches: logger.search(q, limit) }); });