fix(ui): проверять данные VXLAN и гонки загрузки

This commit is contained in:
Denozordec committed 2026-09-30 09:47:51 +07:00
1 parent e163a9ed9d
commit 14be83a869
6 files changed
+103 -13

No files matched your search

+20
View File
@@ -0,0 +1,20 @@
import { z } from "zod"
export const vxlanResponseSchema = z.object({
tunnels: z.array(z.object({
id: z.string().min(1), name: z.string().min(1), serverId: z.string().min(1),
vni: z.number().int().min(0).max(16777215),
port: z.number().int().min(0).max(65535), dstPort: z.number().int().min(1).max(65535),
vtepIp: z.string(), remoteVteps: z.array(z.string()), l2mtu: z.number().int().nonnegative(),
arpProxy: z.boolean(), macLearning: z.boolean(), comment: z.string(), enabled: z.boolean(),
status: z.enum(["up", "down"]),
})).refine(rows => new Set(rows.map(row => JSON.stringify([row.serverId, row.id]))).size === rows.length),
failures: z.array(z.object({ serverId: z.string().min(1), serverName: z.string().optional(), error: z.string() })).default([]),
})
export const vxlanServersSchema = z.array(z.object({
id: z.number().int().positive(), name: z.string(), host: z.string(), country: z.string(), enabled: z.boolean(),
type: z.enum(["jump-host", "exit-node", "home-router"]).optional(), site: z.string().optional(),
asn: z.string().optional(), status: z.enum(["online", "offline", "degraded"]).optional(),
latency: z.number().finite().nullable().optional(),
}))