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) });
});