node.ts 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import { z } from 'zod';
  2. export const NodeRecordSchema = z.object({
  3. id: z.number(),
  4. name: z.string().optional(),
  5. remark: z.string().optional(),
  6. scheme: z.string().optional(),
  7. address: z.string().optional(),
  8. port: z.number().optional(),
  9. basePath: z.string().optional(),
  10. apiToken: z.string().optional(),
  11. enable: z.boolean().optional(),
  12. status: z.string().optional(),
  13. latencyMs: z.number().optional(),
  14. cpuPct: z.number().optional(),
  15. memPct: z.number().optional(),
  16. xrayVersion: z.string().optional(),
  17. panelVersion: z.string().optional(),
  18. uptimeSecs: z.number().optional(),
  19. inboundCount: z.number().optional(),
  20. clientCount: z.number().optional(),
  21. onlineCount: z.number().optional(),
  22. depletedCount: z.number().optional(),
  23. lastHeartbeat: z.number().optional(),
  24. lastError: z.string().optional(),
  25. allowPrivateAddress: z.boolean().optional(),
  26. tlsVerifyMode: z.enum(['verify', 'skip', 'pin']).optional(),
  27. pinnedCertSha256: z.string().optional(),
  28. }).loose();
  29. export const NodeListSchema = z.array(NodeRecordSchema);
  30. export const ProbeResultSchema = z.object({
  31. status: z.string(),
  32. latencyMs: z.number().optional(),
  33. xrayVersion: z.string().optional(),
  34. error: z.string().optional(),
  35. }).loose();
  36. export const NodeFormSchema = z.object({
  37. id: z.number().optional(),
  38. name: z.string().trim().min(1, 'pages.nodes.toasts.fillRequired'),
  39. remark: z.string().optional(),
  40. scheme: z.enum(['http', 'https']),
  41. address: z.string().trim().min(1, 'pages.nodes.toasts.fillRequired'),
  42. port: z.number().int().min(1).max(65535),
  43. basePath: z.string(),
  44. apiToken: z.string().trim().min(1, 'pages.nodes.toasts.fillRequired'),
  45. enable: z.boolean(),
  46. allowPrivateAddress: z.boolean(),
  47. tlsVerifyMode: z.enum(['verify', 'skip', 'pin']),
  48. pinnedCertSha256: z.string().optional().default(''),
  49. });
  50. export type NodeRecord = z.infer<typeof NodeRecordSchema>;
  51. export type ProbeResult = z.infer<typeof ProbeResultSchema>;
  52. export type NodeFormValues = z.infer<typeof NodeFormSchema>;