gitscope
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/features/hosts/schema/hosts-schema.ts · v0.5.6
Source
1 3b7feef Mrdn 2y ago import { z } from "zod";
2 0b152b5 Mrdn 2y ago import i18n from "i18next";
3 0b152b5 Mrdn 2y ago
4 0b152b5 Mrdn 2y ago const numberInterval = (v: string | null | undefined) => {
5 0b152b5 Mrdn 2y ago return v ? /^[\d-]{1,32}$/.test(v) : false;
6 0b152b5 Mrdn 2y ago };
7 0b152b5 Mrdn 2y ago
8 0b152b5 Mrdn 2y ago const packetsInterval = (v: string | null | undefined) => {
9 0b152b5 Mrdn 2y ago return v ? /^(:?tlshello|[\d-]{1,32})$/.test(v) : false;
10 0b152b5 Mrdn 2y ago };
11 3b7feef Mrdn 2y ago
12 cba39e7 Mardin 2y ago export const alpnOptions = [
13 cba39e7 Mardin 2y ago "none",
14 cba39e7 Mardin 2y ago "h2",
15 cba39e7 Mardin 2y ago "h3",
16 cba39e7 Mardin 2y ago "h3,h2",
17 cba39e7 Mardin 2y ago "http/1.1",
18 cba39e7 Mardin 2y ago "h2,http/1.1",
19 cba39e7 Mardin 2y ago "h3,h2,http/1.1"
20 cba39e7 Mardin 2y ago ]
21 cba39e7 Mardin 2y ago
22 3b7feef Mrdn 2y ago export const HostSchema = z.object({
23 0b152b5 Mrdn 2y ago remark: z.string().min(1, "Remark is required"),
24 0b152b5 Mrdn 2y ago address: z.string().min(1, "Address is required"),
25 e422d72 Dawsh 2y ago weight: z.coerce
26 e422d72 Dawsh 2y ago .number().int()
27 e422d72 Dawsh 2y ago .nullable()
28 e422d72 Dawsh 2y ago .optional(),
29 0b152b5 Mrdn 2y ago port: z.coerce
30 0b152b5 Mrdn 2y ago .number()
31 0b152b5 Mrdn 2y ago .gte(1, "Port must be more than 1")
32 0b152b5 Mrdn 2y ago .lte(65535, "Port can not be more than 65535")
33 0b152b5 Mrdn 2y ago .or(z.string())
34 0b152b5 Mrdn 2y ago .nullable()
35 0b152b5 Mrdn 2y ago .optional(),
36 7683c69 Mrdn 2y ago path: z.string().nullable().optional(),
37 7683c69 Mrdn 2y ago sni: z.string().nullable().optional(),
38 7683c69 Mrdn 2y ago host: z.string().nullable().optional(),
39 0b152b5 Mrdn 2y ago mux: z.boolean().nullable().optional(),
40 0b152b5 Mrdn 2y ago fragment: z
41 0b152b5 Mrdn 2y ago .object({
42 0b152b5 Mrdn 2y ago interval: z
43 0b152b5 Mrdn 2y ago .string()
44 0b152b5 Mrdn 2y ago .refine(
45 0b152b5 Mrdn 2y ago (v) => numberInterval(v),
46 0b152b5 Mrdn 2y ago i18n.t("page.hosts.fragment.interval-error"),
47 0b152b5 Mrdn 2y ago ),
48 0b152b5 Mrdn 2y ago length: z
49 0b152b5 Mrdn 2y ago .string()
50 0b152b5 Mrdn 2y ago .refine(
51 0b152b5 Mrdn 2y ago (v) => numberInterval(v),
52 0b152b5 Mrdn 2y ago i18n.t("page.hosts.fragment.length-error"),
53 0b152b5 Mrdn 2y ago ),
54 0b152b5 Mrdn 2y ago packets: z
55 0b152b5 Mrdn 2y ago .string()
56 0b152b5 Mrdn 2y ago .refine(
57 0b152b5 Mrdn 2y ago (v) => packetsInterval(v),
58 0b152b5 Mrdn 2y ago i18n.t("page.hosts.fragment.packets-error"),
59 0b152b5 Mrdn 2y ago ),
60 0b152b5 Mrdn 2y ago })
61 0b152b5 Mrdn 2y ago .nullable()
62 0b152b5 Mrdn 2y ago .optional(),
63 0b152b5 Mrdn 2y ago security: z
64 0b152b5 Mrdn 2y ago .enum(["inbound_default", "none", "tls"])
65 0b152b5 Mrdn 2y ago .default("inbound_default"),
66 0b152b5 Mrdn 2y ago alpn: z
67 cba39e7 Mardin 2y ago .enum(["", ...alpnOptions])
68 0b152b5 Mrdn 2y ago .optional()
69 0b152b5 Mrdn 2y ago .default("none"),
70 7428e12 Mrdn 2y ago allowinsecure: z.boolean().default(false).optional(),
71 0b152b5 Mrdn 2y ago fingerprint: z
72 0b152b5 Mrdn 2y ago .enum([
73 0b152b5 Mrdn 2y ago "",
74 0b152b5 Mrdn 2y ago "none",
75 0b152b5 Mrdn 2y ago "chrome",
76 0b152b5 Mrdn 2y ago "firefox",
77 0b152b5 Mrdn 2y ago "safari",
78 0b152b5 Mrdn 2y ago "ios",
79 0b152b5 Mrdn 2y ago "android",
80 0b152b5 Mrdn 2y ago "edge",
81 0b152b5 Mrdn 2y ago "360",
82 0b152b5 Mrdn 2y ago "qq",
83 0b152b5 Mrdn 2y ago "random",
84 0b152b5 Mrdn 2y ago "randomized",
85 0b152b5 Mrdn 2y ago ])
86 0b152b5 Mrdn 2y ago .optional()
87 0b152b5 Mrdn 2y ago .default("none"),
88 a88ed47 Mardin 2y ago is_disabled: z.boolean(),
89 3b7feef Mrdn 2y ago });