16 lines
1.1 KiB
TypeScript
16 lines
1.1 KiB
TypeScript
import { z } from "zod"
|
|
const response = z.object({ output: z.string().max(1024 * 1024) }).strict()
|
|
export function readProbeOutput(raw: unknown): string {
|
|
const result = response.safeParse(raw)
|
|
if (!result.success) throw new Error("Некорректный ответ API: результат диагностики не подтверждён.")
|
|
if (/^error:/i.test(result.data.output.trimStart())) throw new Error(result.data.output.trim())
|
|
return result.data.output
|
|
}
|
|
|
|
export const probeServersSchema = z.array(z.object({
|
|
id: z.number().int().positive(), name: z.string(), host: z.string().min(1), enabled: z.boolean(),
|
|
status: z.enum(["online", "offline", "degraded", "unknown"]).nullable(),
|
|
site: z.string().optional(), country: z.string().optional(), asn: z.string().optional(),
|
|
type: z.enum(["jump-host", "exit-node", "home-router"]), latency: z.number().finite().nonnegative().nullable().optional(),
|
|
})).refine(rows => new Set(rows.map(row => row.id)).size === rows.length, "Повторяющийся идентификатор устройства")
|