fix(ui): проверять ревизии и сохранять ошибки истории
This commit is contained in:
1 parent
46d62c98b8
commit
4a8d696e4e
11 files changed
+183
-98
No files matched your search
+31
-1
@@ -1,12 +1,42 @@
|
||||
import { z } from "zod"
|
||||
|
||||
export type ConfigRevisionSource = "apply" | "rollback" | "observed" | "copy"
|
||||
|
||||
export interface ConfigRevisionDto {
|
||||
id: string
|
||||
serverId: string
|
||||
section: "filters" | "recursive-routes" | "firewall" | "wireguard" | "gre"
|
||||
section: "filters" | "recursive-routes" | "firewall" | "wireguard" | "gre" | "ipsec"
|
||||
source: ConfigRevisionSource
|
||||
fingerprint: string
|
||||
createdAt: string
|
||||
note: string | null
|
||||
itemCount: number
|
||||
}
|
||||
|
||||
const revisionsSchema = z.object({ revisions: z.array(z.object({
|
||||
id: z.string().min(1),
|
||||
serverId: z.string().min(1),
|
||||
section: z.enum(["filters", "recursive-routes", "firewall", "wireguard", "gre", "ipsec"]),
|
||||
source: z.enum(["apply", "rollback", "observed", "copy"]),
|
||||
fingerprint: z.string(),
|
||||
createdAt: z.string().refine(value => Number.isFinite(Date.parse(value))),
|
||||
note: z.string().nullable(),
|
||||
itemCount: z.number().int().nonnegative(),
|
||||
})) })
|
||||
|
||||
const sectionLabels: Record<ConfigRevisionDto["section"], string> = {
|
||||
filters: "Filters", "recursive-routes": "рекурсивных маршрутов", firewall: "Firewall",
|
||||
wireguard: "WireGuard", gre: "GRE", ipsec: "IPsec",
|
||||
}
|
||||
|
||||
export function parseConfigRevisions(
|
||||
payload: unknown,
|
||||
serverId: string,
|
||||
section: ConfigRevisionDto["section"],
|
||||
): ConfigRevisionDto[] {
|
||||
const result = revisionsSchema.safeParse(payload)
|
||||
if (!result.success || result.data.revisions.some(revision => revision.serverId !== serverId || revision.section !== section)) {
|
||||
throw new Error("Некорректный ответ истории " + sectionLabels[section])
|
||||
}
|
||||
return result.data.revisions
|
||||
}
|
||||
Reference in new issue
Block a user