client.ts 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. import { z } from 'zod';
  2. const nullableStringArray = z.array(z.string()).nullable().transform((v) => v ?? []);
  3. const nullableNumberArray = z.array(z.number()).nullable().transform((v) => v ?? []);
  4. export const ClientTrafficSchema = z.object({
  5. up: z.number().optional(),
  6. down: z.number().optional(),
  7. total: z.number().optional(),
  8. expiryTime: z.number().optional(),
  9. enable: z.boolean().optional(),
  10. lastOnline: z.number().optional(),
  11. });
  12. export const ClientRecordSchema = z.object({
  13. id: z.number().optional(),
  14. email: z.string(),
  15. subId: z.string().optional(),
  16. uuid: z.string().optional(),
  17. password: z.string().optional(),
  18. auth: z.string().optional(),
  19. flow: z.string().optional(),
  20. security: z.string().optional(),
  21. totalGB: z.number().optional(),
  22. expiryTime: z.number().optional(),
  23. limitIp: z.number().optional(),
  24. tgId: z.union([z.number(), z.string()]).optional(),
  25. comment: z.string().optional(),
  26. enable: z.boolean().optional(),
  27. reset: z.number().optional(),
  28. inboundIds: nullableNumberArray.optional(),
  29. traffic: ClientTrafficSchema.nullable().optional(),
  30. reverse: z.object({ tag: z.string().optional() }).loose().nullable().optional(),
  31. createdAt: z.number().optional(),
  32. updatedAt: z.number().optional(),
  33. }).loose();
  34. export const InboundOptionSchema = z.object({
  35. id: z.number(),
  36. remark: z.string().optional(),
  37. protocol: z.string().optional(),
  38. port: z.number().optional(),
  39. tlsFlowCapable: z.boolean().optional(),
  40. }).loose();
  41. export const InboundOptionsSchema = z.array(InboundOptionSchema);
  42. export const ClientsSummarySchema = z.object({
  43. total: z.number(),
  44. active: z.number(),
  45. online: nullableStringArray,
  46. depleted: nullableStringArray,
  47. expiring: nullableStringArray,
  48. deactive: nullableStringArray,
  49. });
  50. const nullableClientArray = z.array(ClientRecordSchema).nullable().transform((v) => v ?? []);
  51. export const ClientPageResponseSchema = z.object({
  52. items: nullableClientArray,
  53. total: z.number(),
  54. filtered: z.number(),
  55. page: z.number(),
  56. pageSize: z.number(),
  57. summary: ClientsSummarySchema.nullable().optional(),
  58. });
  59. export const ClientHydrateSchema = z.object({
  60. client: ClientRecordSchema,
  61. inboundIds: nullableNumberArray,
  62. });
  63. export const BulkAdjustResultSchema = z.object({
  64. adjusted: z.number(),
  65. skipped: z
  66. .array(z.object({ email: z.string(), reason: z.string() }))
  67. .optional(),
  68. });
  69. export const BulkDeleteResultSchema = z.object({
  70. deleted: z.number(),
  71. skipped: z
  72. .array(z.object({ email: z.string(), reason: z.string() }))
  73. .optional(),
  74. });
  75. export const BulkCreateResultSchema = z.object({
  76. created: z.number(),
  77. skipped: z
  78. .array(z.object({ email: z.string(), reason: z.string() }))
  79. .optional(),
  80. });
  81. export const DelDepletedResultSchema = z.object({
  82. deleted: z.number().optional(),
  83. });
  84. export const OnlinesSchema = nullableStringArray;
  85. export const ClientFormSchema = z.object({
  86. email: z.string().trim().min(1, 'pages.clients.email'),
  87. subId: z.string(),
  88. uuid: z.string(),
  89. password: z.string(),
  90. auth: z.string(),
  91. flow: z.string(),
  92. reverseTag: z.string(),
  93. totalGB: z.number().min(0),
  94. delayedStart: z.boolean(),
  95. delayedDays: z.number().int().min(0),
  96. limitIp: z.number().int().min(0),
  97. tgId: z.number().int().min(0),
  98. comment: z.string(),
  99. enable: z.boolean(),
  100. inboundIds: z.array(z.number()),
  101. });
  102. export const ClientCreateFormSchema = ClientFormSchema.extend({
  103. inboundIds: z.array(z.number()).min(1, 'pages.clients.selectInbound'),
  104. });
  105. export const ClientBulkAdjustFormSchema = z
  106. .object({
  107. addDays: z.number().int(),
  108. addGB: z.number(),
  109. })
  110. .refine((v) => v.addDays !== 0 || v.addGB !== 0, {
  111. message: 'pages.clients.bulkAdjustNothing',
  112. });
  113. export const ClientBulkAddFormSchema = z.object({
  114. emailMethod: z.number().int().min(0).max(4),
  115. firstNum: z.number().int().min(1),
  116. lastNum: z.number().int().min(1),
  117. emailPrefix: z.string(),
  118. emailPostfix: z.string(),
  119. quantity: z.number().int().min(1).max(100),
  120. subId: z.string(),
  121. comment: z.string(),
  122. flow: z.string(),
  123. limitIp: z.number().int().min(0),
  124. totalGB: z.number().min(0),
  125. expiryTime: z.number(),
  126. inboundIds: z.array(z.number()).min(1, 'pages.clients.selectInbound'),
  127. });
  128. export type ClientRecord = z.infer<typeof ClientRecordSchema>;
  129. export type ClientTraffic = z.infer<typeof ClientTrafficSchema>;
  130. export type InboundOption = z.infer<typeof InboundOptionSchema>;
  131. export type ClientsSummary = z.infer<typeof ClientsSummarySchema>;
  132. export type ClientPageResponse = z.infer<typeof ClientPageResponseSchema>;
  133. export type ClientHydrate = z.infer<typeof ClientHydrateSchema>;
  134. export type BulkAdjustResult = z.infer<typeof BulkAdjustResultSchema>;
  135. export type BulkDeleteResult = z.infer<typeof BulkDeleteResultSchema>;
  136. export type BulkCreateResult = z.infer<typeof BulkCreateResultSchema>;
  137. export type ClientBulkAddFormValues = z.infer<typeof ClientBulkAddFormSchema>;
  138. export type ClientBulkAdjustFormValues = z.infer<typeof ClientBulkAdjustFormSchema>;
  139. export type ClientFormValues = z.infer<typeof ClientFormSchema>;