File size: 1,231 Bytes
98277cb | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | 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()}`)
}
|