import type { RuntimeMode } from "../shared/api"; import { createApiError, jsonResponse } from "./helpers"; const MAX_PAGE_SIZE = 200; export function validatePagination( pageParam: null | string, pageSizeParam: null | string, mode: RuntimeMode, ): Response | { page: number; pageSize: number } { let page = 1; let pageSize = 20; if (pageParam !== null) { page = Number(pageParam); if (!Number.isInteger(page) || page <= 0) { return jsonResponse(createApiError("Invalid page parameter", 400), { mode, status: 400 }); } } if (pageSizeParam !== null) { pageSize = Number(pageSizeParam); if (!Number.isInteger(pageSize) || pageSize <= 0) { return jsonResponse(createApiError("Invalid pageSize parameter", 400), { mode, status: 400 }); } if (pageSize > MAX_PAGE_SIZE) { return jsonResponse(createApiError(`pageSize must not exceed ${MAX_PAGE_SIZE}`, 400), { mode, status: 400 }); } } return { page, pageSize }; } export function validateTargetId(idStr: string, mode: RuntimeMode): Response | { id: number } { const id = Number(idStr); if (!Number.isInteger(id) || id <= 0) { return jsonResponse(createApiError("Invalid target ID", 400), { mode, status: 400 }); } return { id }; } export function validateTimeRange( from: null | string, to: null | string, mode: RuntimeMode, ): Response | { from: string; to: string } { if (!from || !to) { return jsonResponse(createApiError("from and to parameters are required", 400), { mode, status: 400 }); } if (isNaN(new Date(from).getTime()) || isNaN(new Date(to).getTime())) { return jsonResponse(createApiError("Invalid from or to parameter format", 400), { mode, status: 400 }); } return { from, to }; }