| import { apiGetWrapped } from './api' | |
| import type { TaskRecord } from './tasks' | |
| export type ErrorSummaryResponse = { | |
| scan_limit: number | |
| scanned: number | |
| error_kind_counts: Record<string, number> | |
| tasks: TaskRecord[] | |
| total: number | |
| limit: number | |
| offset: number | |
| } | |
| export type ErrorSummaryParams = { | |
| scan_limit?: number | |
| limit: number | |
| offset: number | |
| status?: string[] | |
| error_kind?: string[] | |
| } | |
| function join(values?: string[]) { | |
| const parts = (values || []).map((v) => String(v).trim()).filter((v) => v !== '') | |
| return parts.length ? parts.join(',') : undefined | |
| } | |
| export async function getErrorSummary(params: ErrorSummaryParams) { | |
| const search = new URLSearchParams() | |
| search.set('limit', String(params.limit)) | |
| search.set('offset', String(params.offset)) | |
| if (typeof params.scan_limit === 'number' && Number.isFinite(params.scan_limit) && params.scan_limit > 0) { | |
| search.set('scan_limit', String(Math.floor(params.scan_limit))) | |
| } | |
| const status = join(params.status) | |
| const errorKind = join(params.error_kind) | |
| if (status) search.set('status', status) | |
| if (errorKind) search.set('error_kind', errorKind) | |
| return apiGetWrapped<ErrorSummaryResponse>(`errors/summary?${search.toString()}`) | |
| } | |