fix(api): проверить каталог speed-проб и изолировать источник

This commit is contained in:
Denozordec committed 2026-10-04 10:31:02 +07:00
1 parent f30319ac55
commit d4f2961f76
13 files changed
+123 -51

No files matched your search

+7 -12
View File
@@ -1,13 +1,8 @@
import {z} from "zod"
const metric=z.number().finite().nonnegative().nullable()
const timestamp=z.string().refine(v=>Number.isFinite(Date.parse(v))).nullable()
export const speedProbeSchema=z.object({
id:z.string().min(1),srcServerId:z.string().regex(/^[1-9]\d*$/),dstServerId:z.string().regex(/^[1-9]\d*$/),srcInterface:z.string(),dstInterface:z.string(),
protocol:z.enum(["tcp","udp"]),direction:z.enum(["both","transmit","receive"]),durationSec:z.string().regex(/^\d+$/).refine(v=>Number.isSafeInteger(Number(v))&&Number(v)>=3),enabled:z.boolean(),
lastRunAt:timestamp,lastTxAvgMbps:metric,lastRxAvgMbps:metric,lastStatus:z.enum(["done","error"]).nullable(),lastError:z.string().nullable()
})
const response=z.object({probes:z.array(speedProbeSchema).refine(rows=>new Set(rows.map(r=>r.id)).size===rows.length)})
export type SpeedProbeApiRow=z.infer<typeof speedProbeSchema>
export function readProbeSchedule(raw:unknown):SpeedProbeApiRow[]{
const parsed=response.safeParse(raw);if(!parsed.success)throw Error("Данные проб скорости не подтверждены сервером.");return parsed.data.probes
import { speedProbesResponseSchema, type SpeedProbeRead } from "@mmapp/contracts"
export { speedProbeReadSchema as speedProbeSchema } from "@mmapp/contracts"
export type SpeedProbeApiRow = SpeedProbeRead
export function readProbeSchedule(raw: unknown): SpeedProbeApiRow[] {
const parsed = speedProbesResponseSchema.safeParse(raw)
if (!parsed.success) throw Error("Данные проб скорости не подтверждены сервером.")
return parsed.data.probes
}