gitscope
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/modules/hosts/dialogs/mutation/profiles/general/schema.ts · v0.7.1
Source
1 3b7feef Mrdn 2y ago import { z } from "zod";
2 d636f3f Dawsh 2y ago import { HostSchema, TlsSchema } from "@marzneshin/modules/hosts";
3 4056c66 Dawsh 1y ago import { SplitHttpSettingsSchema } from "./split-http-settings.schema";
4 4056c66 Dawsh 1y ago import { MuxSettingsSchema } from "./mux-settings.schema";
5 0b152b5 Mrdn 2y ago import i18n from "i18next";
6 0b152b5 Mrdn 2y ago
7 0b152b5 Mrdn 2y ago const numberInterval = (v: string | null | undefined) => {
8 0b152b5 Mrdn 2y ago return v ? /^[\d-]{1,32}$/.test(v) : false;
9 0b152b5 Mrdn 2y ago };
10 0b152b5 Mrdn 2y ago
11 0b152b5 Mrdn 2y ago const packetsInterval = (v: string | null | undefined) => {
12 0b152b5 Mrdn 2y ago return v ? /^(:?tlshello|[\d-]{1,32})$/.test(v) : false;
13 0b152b5 Mrdn 2y ago };
14 3b7feef Mrdn 2y ago
15 cba39e7 Mardin 2y ago export const alpnOptions = [
16 cba39e7 Mardin 2y ago "none",
17 cba39e7 Mardin 2y ago "h2",
18 cba39e7 Mardin 2y ago "h3",
19 cba39e7 Mardin 2y ago "h3,h2",
20 cba39e7 Mardin 2y ago "http/1.1",
21 cba39e7 Mardin 2y ago "h2,http/1.1",
22 4056c66 Dawsh 1y ago "h3,h2,http/1.1",
23 4056c66 Dawsh 1y ago ];
24 4056c66 Dawsh 1y ago
25 4056c66 Dawsh 1y ago export const noiseTypes = ["rand", "str", "base64"] as const;
26 4056c66 Dawsh 1y ago
27 4056c66 Dawsh 1y ago const FragmentSchema = z.object({
28 4056c66 Dawsh 1y ago interval: z
29 4056c66 Dawsh 1y ago .string()
30 4056c66 Dawsh 1y ago .refine(
31 4056c66 Dawsh 1y ago (v) => numberInterval(v),
32 4056c66 Dawsh 1y ago i18n.t("page.hosts.fragment.interval-error"),
33 4056c66 Dawsh 1y ago ),
34 4056c66 Dawsh 1y ago length: z
35 4056c66 Dawsh 1y ago .string()
36 4056c66 Dawsh 1y ago .refine(
37 4056c66 Dawsh 1y ago (v) => numberInterval(v),
38 4056c66 Dawsh 1y ago i18n.t("page.hosts.fragment.length-error"),
39 4056c66 Dawsh 1y ago ),
40 4056c66 Dawsh 1y ago packets: z
41 4056c66 Dawsh 1y ago .string()
42 4056c66 Dawsh 1y ago .refine(
43 4056c66 Dawsh 1y ago (v) => packetsInterval(v),
44 4056c66 Dawsh 1y ago i18n.t("page.hosts.fragment.packets-error"),
45 4056c66 Dawsh 1y ago ),
46 4056c66 Dawsh 1y ago });
47 4056c66 Dawsh 1y ago
48 4056c66 Dawsh 1y ago const NoiseSchema = z.array(
49 4056c66 Dawsh 1y ago z.object({
50 4056c66 Dawsh 1y ago delay: z
51 4056c66 Dawsh 1y ago .string()
52 4056c66 Dawsh 1y ago .refine(
53 4056c66 Dawsh 1y ago (v) => numberInterval(v),
54 4056c66 Dawsh 1y ago i18n.t("page.hosts.noise.delay-error"),
55 4056c66 Dawsh 1y ago ),
56 4056c66 Dawsh 1y ago type: z.enum(noiseTypes).default("rand"),
57 4056c66 Dawsh 1y ago packet: z.string(),
58 4056c66 Dawsh 1y ago }),
59 4056c66 Dawsh 1y ago );
60 4056c66 Dawsh 1y ago
61 4056c66 Dawsh 1y ago const FingerprintSchema = z.enum([
62 4056c66 Dawsh 1y ago "",
63 4056c66 Dawsh 1y ago "none",
64 4056c66 Dawsh 1y ago "chrome",
65 4056c66 Dawsh 1y ago "firefox",
66 4056c66 Dawsh 1y ago "safari",
67 4056c66 Dawsh 1y ago "ios",
68 4056c66 Dawsh 1y ago "android",
69 4056c66 Dawsh 1y ago "edge",
70 4056c66 Dawsh 1y ago "360",
71 4056c66 Dawsh 1y ago "qq",
72 4056c66 Dawsh 1y ago "random",
73 4056c66 Dawsh 1y ago "randomized",
74 4056c66 Dawsh 1y ago ]);
75 cba39e7 Mardin 2y ago
76 d636f3f Dawsh 2y ago export const GeneralSchema = HostSchema.merge(TlsSchema).extend({
77 4056c66 Dawsh 1y ago path: z.string().nullable().optional().nullish().default(null),
78 7683c69 Mrdn 2y ago host: z.string().nullable().optional(),
79 4056c66 Dawsh 1y ago mux_settings: MuxSettingsSchema.nullable().optional().default(null),
80 4056c66 Dawsh 1y ago http_headers: z.any().nullable().optional().default(null),
81 4056c66 Dawsh 1y ago fragment: FragmentSchema.nullable().optional().default(null),
82 4056c66 Dawsh 1y ago fingerprint: FingerprintSchema.optional().default("none"),
83 4056c66 Dawsh 1y ago splithttp_settings: SplitHttpSettingsSchema.nullable()
84 4056c66 Dawsh 1y ago .optional()
85 4056c66 Dawsh 1y ago .default(null),
86 4056c66 Dawsh 1y ago noise: NoiseSchema.nullable().optional(),
87 4056c66 Dawsh 1y ago early_data: z.preprocess(
88 4056c66 Dawsh 1y ago (val) =>
89 4056c66 Dawsh 1y ago val === "" || val === undefined || val === null
90 4056c66 Dawsh 1y ago ? null
91 4056c66 Dawsh 1y ago : Number(val),
92 4056c66 Dawsh 1y ago z.union([
93 4056c66 Dawsh 1y ago z
94 4056c66 Dawsh 1y ago .number()
95 4056c66 Dawsh 1y ago .int()
96 4056c66 Dawsh 1y ago .gte(1, "Port must be more than 1")
97 4056c66 Dawsh 1y ago .lte(65535, "Port cannot be more than 65535"),
98 4056c66 Dawsh 1y ago z.null(),
99 4056c66 Dawsh 1y ago ]),
100 4056c66 Dawsh 1y ago ),
101 0b152b5 Mrdn 2y ago security: z
102 0b152b5 Mrdn 2y ago .enum(["inbound_default", "none", "tls"])
103 0b152b5 Mrdn 2y ago .default("inbound_default"),
104 3b7feef Mrdn 2y ago });
105 d636f3f Dawsh 2y ago
106 d636f3f Dawsh 2y ago export type GeneralSchemaType = z.infer<typeof GeneralSchema>;