zod.ts 36 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160
  1. // Code generated by tools/openapigen. DO NOT EDIT.
  2. import { z } from 'zod';
  3. export const GeoKindSchema = z.string();
  4. export type GeoKind = z.infer<typeof GeoKindSchema>;
  5. export const OnlineAPISupportSchema = z.number().int();
  6. export type OnlineAPISupport = z.infer<typeof OnlineAPISupportSchema>;
  7. export const ProcessStateSchema = z.string();
  8. export type ProcessState = z.infer<typeof ProcessStateSchema>;
  9. export const ProtocolSchema = z.string();
  10. export type Protocol = z.infer<typeof ProtocolSchema>;
  11. export const addrFamilySchema = z.number().int();
  12. export type addrFamily = z.infer<typeof addrFamilySchema>;
  13. export const staticEgressResolverSchema = z.string();
  14. export type staticEgressResolver = z.infer<typeof staticEgressResolverSchema>;
  15. export const trafficLocalApplyActionSchema = z.number().int();
  16. export type trafficLocalApplyAction = z.infer<typeof trafficLocalApplyActionSchema>;
  17. export const transportBitsSchema = z.number().int();
  18. export type transportBits = z.infer<typeof transportBitsSchema>;
  19. export const AllSettingSchema = z.object({
  20. datepicker: z.string(),
  21. discordAdminIds: z.string(),
  22. discordBotBackup: z.boolean(),
  23. discordBotEnable: z.boolean(),
  24. discordBotToken: z.string(),
  25. discordChannelId: z.string(),
  26. discordCpu: z.number().int().min(0).max(100),
  27. discordEnabledEvents: z.string(),
  28. discordLang: z.string(),
  29. discordMemory: z.number().int().min(0).max(100),
  30. discordRunTime: z.string(),
  31. expireDiff: z.number().int().min(0),
  32. externalSubUserAgent: z.string(),
  33. externalTrafficInformEnable: z.boolean(),
  34. externalTrafficInformURI: z.string(),
  35. happLinkEnable: z.boolean(),
  36. ipLimitAllowlist: z.string(),
  37. ldapAutoCreate: z.boolean(),
  38. ldapAutoDelete: z.boolean(),
  39. ldapBaseDN: z.string(),
  40. ldapBindDN: z.string(),
  41. ldapDefaultExpiryDays: z.number().int().min(0),
  42. ldapDefaultLimitIP: z.number().int().min(0),
  43. ldapDefaultTotalGB: z.number().int().min(0),
  44. ldapEnable: z.boolean(),
  45. ldapFlagField: z.string(),
  46. ldapHost: z.string(),
  47. ldapInboundTags: z.string(),
  48. ldapInsecureSkipVerify: z.boolean(),
  49. ldapInvertFlag: z.boolean(),
  50. ldapPassword: z.string(),
  51. ldapPort: z.number().int().min(0).max(65535),
  52. ldapSyncCron: z.string(),
  53. ldapTruthyValues: z.string(),
  54. ldapUseTLS: z.boolean(),
  55. ldapUserAttr: z.string(),
  56. ldapUserFilter: z.string(),
  57. ldapVlessField: z.string(),
  58. outboundDownThreshold: z.number().int().min(1).max(100),
  59. pageSize: z.number().int().min(0).max(1000),
  60. panelOutbound: z.string(),
  61. realityScanCandidates: z.string(),
  62. remarkTemplate: z.string(),
  63. restartXrayOnClientDisable: z.boolean(),
  64. sessionMaxAge: z.number().int().min(1).max(525600),
  65. smtpCpu: z.number().int().min(0).max(100),
  66. smtpEnable: z.boolean(),
  67. smtpEnabledEvents: z.string(),
  68. smtpEncryptionType: z.string(),
  69. smtpFrom: z.string(),
  70. smtpFromName: z.string(),
  71. smtpHost: z.string(),
  72. smtpMemory: z.number().int().min(0).max(100),
  73. smtpPassword: z.string(),
  74. smtpPort: z.number().int().min(1).max(65535),
  75. smtpTo: z.string(),
  76. smtpUsername: z.string(),
  77. subAnnounce: z.string(),
  78. subCalendarExpireInclusive: z.boolean(),
  79. subCertFile: z.string(),
  80. subClashAutoDetect: z.boolean(),
  81. subClashEnable: z.boolean(),
  82. subClashEnableRouting: z.boolean(),
  83. subClashPath: z.string(),
  84. subClashRules: z.string(),
  85. subClashURI: z.string(),
  86. subClashUserAgentRegex: z.string(),
  87. subDomain: z.string(),
  88. subEnable: z.boolean(),
  89. subEnableRouting: z.boolean(),
  90. subEncrypt: z.boolean(),
  91. subExpiredTemplate: z.string(),
  92. subHappAlwaysHwid: z.boolean(),
  93. subHappAutoConnect: z.boolean(),
  94. subHappAutoConnectType: z.string(),
  95. subHappAutoDetect: z.boolean(),
  96. subHappColorProfile: z.string(),
  97. subHappExcludeApns: z.boolean(),
  98. subHappExcludeRoutes: z.string(),
  99. subHappFallbackUrl: z.string(),
  100. subHappLocalProxyAuth: z.string(),
  101. subHappNewUrl: z.string(),
  102. subHappNoLimit: z.boolean(),
  103. subHappNotificationExpire: z.boolean(),
  104. subHappPerAppList: z.string(),
  105. subHappPerAppMode: z.string(),
  106. subHappPingType: z.string(),
  107. subHappProviderId: z.string(),
  108. subHappSubExpire: z.boolean(),
  109. subHappSubExpireButtonLink: z.string(),
  110. subHappSubInfoButtonLink: z.string(),
  111. subHappSubInfoButtonText: z.string(),
  112. subHappSubInfoColor: z.string(),
  113. subHappSubInfoText: z.string(),
  114. subHappTunMode: z.string(),
  115. subHappTunType: z.string(),
  116. subHideSettings: z.boolean(),
  117. subIncyAnnounceUrl: z.string(),
  118. subIncyAppAutoDetect: z.boolean(),
  119. subIncyBannerBgColor: z.string(),
  120. subIncyBannerButtonColor: z.string(),
  121. subIncyBannerButtonText: z.string(),
  122. subIncyBannerButtonUrl: z.string(),
  123. subIncyBannerText: z.string(),
  124. subIncyEnableRouting: z.boolean(),
  125. subIncyFragmentInterval: z.string(),
  126. subIncyFragmentLength: z.string(),
  127. subIncyFragmentPackets: z.string(),
  128. subIncyFragmentationEnable: z.string(),
  129. subIncyHideCheck: z.string(),
  130. subIncyHideUrl: z.string(),
  131. subIncyNoLimitEnabled: z.string(),
  132. subIncyNoisesDelay: z.string(),
  133. subIncyNoisesEnable: z.string(),
  134. subIncyNoisesPacket: z.string(),
  135. subIncyNoisesType: z.string(),
  136. subIncyPerAppEnable: z.string(),
  137. subIncyPerAppList: z.string(),
  138. subIncyPerAppMode: z.string(),
  139. subIncyPremiumUrl: z.string(),
  140. subIncyProfileDescription: z.string(),
  141. subIncyResolveDnsDomain: z.string(),
  142. subIncyResolveDnsIp: z.string(),
  143. subIncyResolveEnable: z.string(),
  144. subIncyRoutingRules: z.string(),
  145. subIncySortOrder: z.string(),
  146. subIncySupportEmail: z.string(),
  147. subInfoNodeEnable: z.boolean(),
  148. subJsonAlwaysArray: z.boolean(),
  149. subJsonAutoDetect: z.boolean(),
  150. subJsonDns: z.string(),
  151. subJsonEnable: z.boolean(),
  152. subJsonFinalMask: z.string(),
  153. subJsonMux: z.string(),
  154. subJsonObservatory: z.string(),
  155. subJsonPath: z.string(),
  156. subJsonRoutingRules: z.string(),
  157. subJsonRules: z.string(),
  158. subJsonURI: z.string(),
  159. subJsonUserAgentRegex: z.string(),
  160. subKeyFile: z.string(),
  161. subListen: z.string(),
  162. subPath: z.string(),
  163. subPort: z.number().int().min(1).max(65535),
  164. subProfileMode: z.string(),
  165. subProfileUrl: z.string(),
  166. subRoutingRules: z.string(),
  167. subShowIdentityOnAllLinks: z.boolean(),
  168. subSupportUrl: z.string(),
  169. subThemeDir: z.string(),
  170. subTitle: z.string(),
  171. subTrafficDepletedTemplate: z.string(),
  172. subURI: z.string(),
  173. subUpdates: z.number().int().min(0).max(525600),
  174. tgBotAPIServer: z.string(),
  175. tgBotBackup: z.boolean(),
  176. tgBotChatId: z.string(),
  177. tgBotEnable: z.boolean(),
  178. tgBotProxy: z.string(),
  179. tgBotToken: z.string(),
  180. tgCpu: z.number().int().min(0).max(100),
  181. tgEnabledEvents: z.string(),
  182. tgLang: z.string(),
  183. tgMemory: z.number().int().min(0).max(100),
  184. tgRunTime: z.string(),
  185. timeLocation: z.string(),
  186. trafficDiff: z.number().int().min(0).max(100),
  187. trustedProxyCIDRs: z.string(),
  188. twoFactorEnable: z.boolean(),
  189. twoFactorToken: z.string(),
  190. warpUpdateInterval: z.number().int().min(0),
  191. webBasePath: z.string(),
  192. webCertFile: z.string(),
  193. webDomain: z.string(),
  194. webKeyFile: z.string(),
  195. webListen: z.string(),
  196. webPort: z.number().int().min(1).max(65535),
  197. });
  198. export type AllSetting = z.infer<typeof AllSettingSchema>;
  199. export const AllSettingViewSchema = z.object({
  200. datepicker: z.string(),
  201. discordAdminIds: z.string(),
  202. discordBotBackup: z.boolean(),
  203. discordBotEnable: z.boolean(),
  204. discordBotToken: z.string(),
  205. discordChannelId: z.string(),
  206. discordCpu: z.number().int().min(0).max(100),
  207. discordEnabledEvents: z.string(),
  208. discordLang: z.string(),
  209. discordMemory: z.number().int().min(0).max(100),
  210. discordRunTime: z.string(),
  211. expireDiff: z.number().int().min(0),
  212. externalSubUserAgent: z.string(),
  213. externalTrafficInformEnable: z.boolean(),
  214. externalTrafficInformURI: z.string(),
  215. happLinkEnable: z.boolean(),
  216. hasApiToken: z.boolean(),
  217. hasDiscordBotToken: z.boolean(),
  218. hasLdapPassword: z.boolean(),
  219. hasNordSecret: z.boolean(),
  220. hasSmtpPassword: z.boolean(),
  221. hasTgBotToken: z.boolean(),
  222. hasTwoFactorToken: z.boolean(),
  223. hasWarpSecret: z.boolean(),
  224. ipLimitAllowlist: z.string(),
  225. ldapAutoCreate: z.boolean(),
  226. ldapAutoDelete: z.boolean(),
  227. ldapBaseDN: z.string(),
  228. ldapBindDN: z.string(),
  229. ldapDefaultExpiryDays: z.number().int().min(0),
  230. ldapDefaultLimitIP: z.number().int().min(0),
  231. ldapDefaultTotalGB: z.number().int().min(0),
  232. ldapEnable: z.boolean(),
  233. ldapFlagField: z.string(),
  234. ldapHost: z.string(),
  235. ldapInboundTags: z.string(),
  236. ldapInsecureSkipVerify: z.boolean(),
  237. ldapInvertFlag: z.boolean(),
  238. ldapPassword: z.string(),
  239. ldapPort: z.number().int().min(0).max(65535),
  240. ldapSyncCron: z.string(),
  241. ldapTruthyValues: z.string(),
  242. ldapUseTLS: z.boolean(),
  243. ldapUserAttr: z.string(),
  244. ldapUserFilter: z.string(),
  245. ldapVlessField: z.string(),
  246. outboundDownThreshold: z.number().int().min(1).max(100),
  247. pageSize: z.number().int().min(0).max(1000),
  248. panelOutbound: z.string(),
  249. realityScanCandidates: z.string(),
  250. remarkTemplate: z.string(),
  251. restartXrayOnClientDisable: z.boolean(),
  252. sessionMaxAge: z.number().int().min(1).max(525600),
  253. smtpCpu: z.number().int().min(0).max(100),
  254. smtpEnable: z.boolean(),
  255. smtpEnabledEvents: z.string(),
  256. smtpEncryptionType: z.string(),
  257. smtpFrom: z.string(),
  258. smtpFromName: z.string(),
  259. smtpHost: z.string(),
  260. smtpMemory: z.number().int().min(0).max(100),
  261. smtpPassword: z.string(),
  262. smtpPort: z.number().int().min(1).max(65535),
  263. smtpTo: z.string(),
  264. smtpUsername: z.string(),
  265. subAnnounce: z.string(),
  266. subCalendarExpireInclusive: z.boolean(),
  267. subCertFile: z.string(),
  268. subClashAutoDetect: z.boolean(),
  269. subClashEnable: z.boolean(),
  270. subClashEnableRouting: z.boolean(),
  271. subClashPath: z.string(),
  272. subClashRules: z.string(),
  273. subClashURI: z.string(),
  274. subClashUserAgentRegex: z.string(),
  275. subDomain: z.string(),
  276. subEnable: z.boolean(),
  277. subEnableRouting: z.boolean(),
  278. subEncrypt: z.boolean(),
  279. subExpiredTemplate: z.string(),
  280. subHappAlwaysHwid: z.boolean(),
  281. subHappAutoConnect: z.boolean(),
  282. subHappAutoConnectType: z.string(),
  283. subHappAutoDetect: z.boolean(),
  284. subHappColorProfile: z.string(),
  285. subHappExcludeApns: z.boolean(),
  286. subHappExcludeRoutes: z.string(),
  287. subHappFallbackUrl: z.string(),
  288. subHappLocalProxyAuth: z.string(),
  289. subHappNewUrl: z.string(),
  290. subHappNoLimit: z.boolean(),
  291. subHappNotificationExpire: z.boolean(),
  292. subHappPerAppList: z.string(),
  293. subHappPerAppMode: z.string(),
  294. subHappPingType: z.string(),
  295. subHappProviderId: z.string(),
  296. subHappSubExpire: z.boolean(),
  297. subHappSubExpireButtonLink: z.string(),
  298. subHappSubInfoButtonLink: z.string(),
  299. subHappSubInfoButtonText: z.string(),
  300. subHappSubInfoColor: z.string(),
  301. subHappSubInfoText: z.string(),
  302. subHappTunMode: z.string(),
  303. subHappTunType: z.string(),
  304. subHideSettings: z.boolean(),
  305. subIncyAnnounceUrl: z.string(),
  306. subIncyAppAutoDetect: z.boolean(),
  307. subIncyBannerBgColor: z.string(),
  308. subIncyBannerButtonColor: z.string(),
  309. subIncyBannerButtonText: z.string(),
  310. subIncyBannerButtonUrl: z.string(),
  311. subIncyBannerText: z.string(),
  312. subIncyEnableRouting: z.boolean(),
  313. subIncyFragmentInterval: z.string(),
  314. subIncyFragmentLength: z.string(),
  315. subIncyFragmentPackets: z.string(),
  316. subIncyFragmentationEnable: z.string(),
  317. subIncyHideCheck: z.string(),
  318. subIncyHideUrl: z.string(),
  319. subIncyNoLimitEnabled: z.string(),
  320. subIncyNoisesDelay: z.string(),
  321. subIncyNoisesEnable: z.string(),
  322. subIncyNoisesPacket: z.string(),
  323. subIncyNoisesType: z.string(),
  324. subIncyPerAppEnable: z.string(),
  325. subIncyPerAppList: z.string(),
  326. subIncyPerAppMode: z.string(),
  327. subIncyPremiumUrl: z.string(),
  328. subIncyProfileDescription: z.string(),
  329. subIncyResolveDnsDomain: z.string(),
  330. subIncyResolveDnsIp: z.string(),
  331. subIncyResolveEnable: z.string(),
  332. subIncyRoutingRules: z.string(),
  333. subIncySortOrder: z.string(),
  334. subIncySupportEmail: z.string(),
  335. subInfoNodeEnable: z.boolean(),
  336. subJsonAlwaysArray: z.boolean(),
  337. subJsonAutoDetect: z.boolean(),
  338. subJsonDns: z.string(),
  339. subJsonEnable: z.boolean(),
  340. subJsonFinalMask: z.string(),
  341. subJsonMux: z.string(),
  342. subJsonObservatory: z.string(),
  343. subJsonPath: z.string(),
  344. subJsonRoutingRules: z.string(),
  345. subJsonRules: z.string(),
  346. subJsonURI: z.string(),
  347. subJsonUserAgentRegex: z.string(),
  348. subKeyFile: z.string(),
  349. subListen: z.string(),
  350. subPath: z.string(),
  351. subPort: z.number().int().min(1).max(65535),
  352. subProfileMode: z.string(),
  353. subProfileUrl: z.string(),
  354. subRoutingRules: z.string(),
  355. subShowIdentityOnAllLinks: z.boolean(),
  356. subSupportUrl: z.string(),
  357. subThemeDir: z.string(),
  358. subTitle: z.string(),
  359. subTrafficDepletedTemplate: z.string(),
  360. subURI: z.string(),
  361. subUpdates: z.number().int().min(0).max(525600),
  362. tgBotAPIServer: z.string(),
  363. tgBotBackup: z.boolean(),
  364. tgBotChatId: z.string(),
  365. tgBotEnable: z.boolean(),
  366. tgBotProxy: z.string(),
  367. tgBotToken: z.string(),
  368. tgCpu: z.number().int().min(0).max(100),
  369. tgEnabledEvents: z.string(),
  370. tgLang: z.string(),
  371. tgMemory: z.number().int().min(0).max(100),
  372. tgRunTime: z.string(),
  373. timeLocation: z.string(),
  374. trafficDiff: z.number().int().min(0).max(100),
  375. trustedProxyCIDRs: z.string(),
  376. twoFactorEnable: z.boolean(),
  377. twoFactorToken: z.string(),
  378. warpUpdateInterval: z.number().int().min(0),
  379. webBasePath: z.string(),
  380. webCertFile: z.string(),
  381. webDomain: z.string(),
  382. webKeyFile: z.string(),
  383. webListen: z.string(),
  384. webPort: z.number().int().min(1).max(65535),
  385. });
  386. export type AllSettingView = z.infer<typeof AllSettingViewSchema>;
  387. export const AmneziaWGLogsSchema = z.object({
  388. events: z.array(z.string()),
  389. peers: z.array(z.lazy(() => PeerActivitySchema)),
  390. running: z.boolean(),
  391. });
  392. export type AmneziaWGLogs = z.infer<typeof AmneziaWGLogsSchema>;
  393. export const ApiTokenSchema = z.object({
  394. createdAt: z.number().int(),
  395. enabled: z.boolean(),
  396. expiresAt: z.number().int(),
  397. id: z.number().int(),
  398. name: z.string(),
  399. scope: z.string(),
  400. token: z.string(),
  401. });
  402. export type ApiToken = z.infer<typeof ApiTokenSchema>;
  403. export const ApiTokenViewSchema = z.object({
  404. createdAt: z.number().int(),
  405. enabled: z.boolean(),
  406. expiresAt: z.number().int(),
  407. id: z.number().int(),
  408. name: z.string(),
  409. scope: z.string(),
  410. token: z.string().optional(),
  411. });
  412. export type ApiTokenView = z.infer<typeof ApiTokenViewSchema>;
  413. export const ClientSchema = z.object({
  414. adTag: z.string().optional(),
  415. allowedIPs: z.array(z.string()).optional(),
  416. allowedIPsByInbound: z.record(z.number().int(), z.array(z.string())).optional(),
  417. auth: z.string().optional(),
  418. comment: z.string(),
  419. created_at: z.number().int().optional(),
  420. email: z.string(),
  421. enable: z.boolean(),
  422. expiryTime: z.number().int(),
  423. flow: z.string().optional(),
  424. forwardedPorts: z.string().optional(),
  425. group: z.string().optional(),
  426. id: z.string().optional(),
  427. keepAlive: z.number().int().nullable().optional(),
  428. limitIp: z.number().int(),
  429. password: z.string().optional(),
  430. preSharedKey: z.string().optional(),
  431. privateKey: z.string().optional(),
  432. publicKey: z.string().optional(),
  433. reset: z.number().int(),
  434. resetDay: z.number().int(),
  435. resetMax: z.number().int(),
  436. resetWeekday: z.number().int(),
  437. reverse: z.lazy(() => ClientReverseSchema).nullable().optional(),
  438. secret: z.string().optional(),
  439. security: z.string(),
  440. subId: z.string(),
  441. tgId: z.number().int(),
  442. totalGB: z.number().int(),
  443. trafficReset: z.enum(['never', 'hourly', 'daily', 'weekly', 'monthly']).optional(),
  444. trafficResetDay: z.number().int().min(1).max(31).optional(),
  445. updated_at: z.number().int().optional(),
  446. });
  447. export type Client = z.infer<typeof ClientSchema>;
  448. export const ClientInboundSchema = z.object({
  449. clientId: z.number().int(),
  450. createdAt: z.number().int(),
  451. flowOverride: z.string(),
  452. inboundId: z.number().int(),
  453. });
  454. export type ClientInbound = z.infer<typeof ClientInboundSchema>;
  455. export const ClientPageResponseSchema = z.object({
  456. filtered: z.number().int(),
  457. groups: z.array(z.string()),
  458. items: z.array(z.lazy(() => ClientSlimSchema)),
  459. page: z.number().int(),
  460. pageSize: z.number().int(),
  461. summary: z.lazy(() => ClientsSummarySchema),
  462. total: z.number().int(),
  463. });
  464. export type ClientPageResponse = z.infer<typeof ClientPageResponseSchema>;
  465. export const ClientRecordSchema = z.object({
  466. adTag: z.string(),
  467. allowedIPs: z.string(),
  468. auth: z.string(),
  469. comment: z.string(),
  470. createdAt: z.number().int(),
  471. email: z.string(),
  472. enable: z.boolean(),
  473. expiryTime: z.number().int(),
  474. flow: z.string(),
  475. forwardedPorts: z.string(),
  476. group: z.string(),
  477. id: z.number().int(),
  478. keepAlive: z.number().int(),
  479. limitHwid: z.number().int(),
  480. limitIp: z.number().int(),
  481. password: z.string(),
  482. preSharedKey: z.string(),
  483. privateKey: z.string(),
  484. publicKey: z.string(),
  485. reset: z.number().int(),
  486. resetDay: z.number().int(),
  487. resetMax: z.number().int(),
  488. resetWeekday: z.number().int(),
  489. reverse: z.unknown(),
  490. secret: z.string(),
  491. security: z.string(),
  492. subId: z.string(),
  493. tgId: z.number().int(),
  494. totalGB: z.number().int(),
  495. trafficReset: z.string(),
  496. trafficResetDay: z.number().int(),
  497. updatedAt: z.number().int(),
  498. uuid: z.string(),
  499. });
  500. export type ClientRecord = z.infer<typeof ClientRecordSchema>;
  501. export const ClientRenewalPreviewSchema = z.object({
  502. canRenew: z.boolean(),
  503. delayedStart: z.boolean(),
  504. nextExpiry: z.string(),
  505. renewAt: z.string(),
  506. renewals: z.number().int(),
  507. suggestedExpiry: z.string(),
  508. suggestedExpiryTime: z.number().int(),
  509. timeZone: z.string(),
  510. validThrough: z.string(),
  511. });
  512. export type ClientRenewalPreview = z.infer<typeof ClientRenewalPreviewSchema>;
  513. export const ClientRenewalPreviewRequestSchema = z.object({
  514. expiryTime: z.number().int(),
  515. reset: z.number().int(),
  516. resetCount: z.number().int(),
  517. resetDay: z.number().int(),
  518. resetMax: z.number().int(),
  519. resetWeekday: z.number().int(),
  520. });
  521. export type ClientRenewalPreviewRequest = z.infer<typeof ClientRenewalPreviewRequestSchema>;
  522. export const ClientReverseSchema = z.object({
  523. tag: z.string(),
  524. });
  525. export type ClientReverse = z.infer<typeof ClientReverseSchema>;
  526. export const ClientSlimSchema = z.object({
  527. comment: z.string().optional(),
  528. createdAt: z.number().int(),
  529. email: z.string(),
  530. enable: z.boolean(),
  531. expiryTime: z.number().int(),
  532. group: z.string().optional(),
  533. inboundIds: z.array(z.number().int()),
  534. limitHwid: z.number().int(),
  535. limitIp: z.number().int(),
  536. reset: z.number().int(),
  537. resetDay: z.number().int(),
  538. resetMax: z.number().int(),
  539. resetWeekday: z.number().int(),
  540. subId: z.string(),
  541. totalGB: z.number().int(),
  542. traffic: z.lazy(() => ClientTrafficSchema).nullable().optional(),
  543. updatedAt: z.number().int(),
  544. });
  545. export type ClientSlim = z.infer<typeof ClientSlimSchema>;
  546. export const ClientTrafficSchema = z.object({
  547. down: z.number().int(),
  548. email: z.string(),
  549. enable: z.boolean(),
  550. expiryTime: z.number().int(),
  551. id: z.number().int(),
  552. inboundId: z.number().int(),
  553. lastOnline: z.number().int(),
  554. lastSubFetch: z.number().int(),
  555. reset: z.number().int(),
  556. resetCount: z.number().int(),
  557. resetDay: z.number().int(),
  558. resetMax: z.number().int(),
  559. resetWeekday: z.number().int(),
  560. subId: z.string(),
  561. total: z.number().int(),
  562. up: z.number().int(),
  563. uuid: z.string(),
  564. });
  565. export type ClientTraffic = z.infer<typeof ClientTrafficSchema>;
  566. export const ClientsSummarySchema = z.object({
  567. active: z.number().int(),
  568. deactive: z.array(z.string()),
  569. deactiveCount: z.number().int(),
  570. depleted: z.array(z.string()),
  571. depletedCount: z.number().int(),
  572. expiring: z.array(z.string()),
  573. expiringCount: z.number().int(),
  574. online: z.array(z.string()),
  575. onlineCount: z.number().int(),
  576. total: z.number().int(),
  577. });
  578. export type ClientsSummary = z.infer<typeof ClientsSummarySchema>;
  579. export const FallbackParentInfoSchema = z.object({
  580. masterId: z.number().int(),
  581. path: z.string().optional(),
  582. });
  583. export type FallbackParentInfo = z.infer<typeof FallbackParentInfoSchema>;
  584. export const GeoCategorySchema = z.object({
  585. attributes: z.array(z.string()),
  586. code: z.string(),
  587. entries: z.number().int(),
  588. });
  589. export type GeoCategory = z.infer<typeof GeoCategorySchema>;
  590. export const GeoCategoryPageSchema = z.object({
  591. items: z.array(z.lazy(() => GeoCategorySchema)),
  592. total: z.number().int(),
  593. });
  594. export type GeoCategoryPage = z.infer<typeof GeoCategoryPageSchema>;
  595. export const GeoEntrySchema = z.object({
  596. kind: z.string(),
  597. value: z.string(),
  598. });
  599. export type GeoEntry = z.infer<typeof GeoEntrySchema>;
  600. export const GeoEntryPageSchema = z.object({
  601. items: z.array(z.lazy(() => GeoEntrySchema)),
  602. total: z.number().int(),
  603. });
  604. export type GeoEntryPage = z.infer<typeof GeoEntryPageSchema>;
  605. export const GeoFileSchema = z.object({
  606. categories: z.number().int(),
  607. error: z.string().optional(),
  608. kind: z.lazy(() => GeoKindSchema),
  609. modifiedAt: z.number().int(),
  610. name: z.string(),
  611. size: z.number().int(),
  612. });
  613. export type GeoFile = z.infer<typeof GeoFileSchema>;
  614. export const GeodataTokenIssueSchema = z.object({
  615. code: z.string().optional(),
  616. file: z.string().optional(),
  617. reason: z.string(),
  618. token: z.string(),
  619. });
  620. export type GeodataTokenIssue = z.infer<typeof GeodataTokenIssueSchema>;
  621. export const HappLinkResultSchema = z.object({
  622. encryptedLink: z.string(),
  623. });
  624. export type HappLinkResult = z.infer<typeof HappLinkResultSchema>;
  625. export const HistoryOfSeedersSchema = z.object({
  626. id: z.number().int(),
  627. seederName: z.string(),
  628. });
  629. export type HistoryOfSeeders = z.infer<typeof HistoryOfSeedersSchema>;
  630. export const HostSchema = z.object({
  631. address: z.string(),
  632. allowInsecure: z.boolean(),
  633. alpn: z.array(z.string()),
  634. cipherSuites: z.string(),
  635. createdAt: z.number().int(),
  636. echConfigList: z.string(),
  637. excludeFromSubTypes: z.array(z.string()),
  638. finalMask: z.string(),
  639. fingerprint: z.string(),
  640. groupId: z.string(),
  641. hostHeader: z.string(),
  642. id: z.number().int(),
  643. inboundId: z.number().int(),
  644. isDisabled: z.boolean(),
  645. isHidden: z.boolean(),
  646. keepSniBlank: z.boolean(),
  647. mihomoIpVersion: z.enum(['dual', 'ipv4', 'ipv6', 'ipv4-prefer', 'ipv6-prefer']),
  648. mihomoX25519: z.boolean(),
  649. muxParams: z.unknown(),
  650. nodeGuids: z.array(z.string()).optional(),
  651. overrideSniFromAddress: z.boolean(),
  652. path: z.string(),
  653. pinnedPeerCertSha256: z.array(z.string()),
  654. port: z.number().int().min(0).max(65535),
  655. remark: z.string().max(256),
  656. security: z.enum(['same', 'tls', 'none', 'reality']),
  657. serverDescription: z.string().max(64),
  658. shuffleHost: z.boolean(),
  659. sni: z.string(),
  660. sockoptParams: z.unknown(),
  661. sortOrder: z.number().int(),
  662. tags: z.array(z.string()),
  663. updatedAt: z.number().int(),
  664. verifyPeerCertByName: z.string(),
  665. vlessRoute: z.string(),
  666. });
  667. export type Host = z.infer<typeof HostSchema>;
  668. export const HostGroupSchema = z.object({
  669. allowInsecure: z.boolean(),
  670. alpn: z.array(z.string()),
  671. cipherSuites: z.string(),
  672. echConfigList: z.string(),
  673. excludeFromSubTypes: z.array(z.string()),
  674. finalMask: z.string(),
  675. fingerprint: z.string(),
  676. groupId: z.string(),
  677. hostHeader: z.string(),
  678. hosts: z.array(z.string()),
  679. inboundIds: z.array(z.number().int()),
  680. isDisabled: z.boolean(),
  681. isHidden: z.boolean(),
  682. keepSniBlank: z.boolean(),
  683. mihomoIpVersion: z.enum(['dual', 'ipv4', 'ipv6', 'ipv4-prefer', 'ipv6-prefer']),
  684. mihomoX25519: z.boolean(),
  685. muxParams: z.string(),
  686. nodeGuids: z.array(z.string()),
  687. overrideSniFromAddress: z.boolean(),
  688. path: z.string(),
  689. pinnedPeerCertSha256: z.array(z.string()),
  690. port: z.number().int().min(0).max(65535),
  691. remark: z.string().max(256),
  692. security: z.enum(['same', 'tls', 'none', 'reality']),
  693. serverDescription: z.string().max(64),
  694. shuffleHost: z.boolean(),
  695. sni: z.string(),
  696. sockoptParams: z.string(),
  697. sortOrder: z.number().int(),
  698. tags: z.array(z.string()),
  699. verifyPeerCertByName: z.string(),
  700. vlessRoute: z.string(),
  701. });
  702. export type HostGroup = z.infer<typeof HostGroupSchema>;
  703. export const HwidSlotStatusSchema = z.object({
  704. active: z.boolean(),
  705. full: z.boolean(),
  706. limit: z.number().int(),
  707. registered: z.number().int(),
  708. remaining: z.number().int(),
  709. });
  710. export type HwidSlotStatus = z.infer<typeof HwidSlotStatusSchema>;
  711. export const InboundSchema = z.object({
  712. clientStats: z.array(z.lazy(() => ClientTrafficSchema)),
  713. disableFlow: z.boolean(),
  714. down: z.number().int(),
  715. enable: z.boolean(),
  716. expiryTime: z.number().int(),
  717. fallbackParent: z.lazy(() => FallbackParentInfoSchema).nullable().optional(),
  718. id: z.number().int(),
  719. lastTrafficResetTime: z.number().int(),
  720. listen: z.string(),
  721. nodeId: z.number().int().nullable().optional(),
  722. originNodeGuid: z.string().optional(),
  723. port: z.number().int().min(0).max(65535),
  724. protocol: z.enum(['vmess', 'vless', 'trojan', 'shadowsocks', 'wireguard', 'hysteria', 'http', 'mixed', 'tunnel', 'tun', 'mtproto', 'amneziawg', 'tuic']),
  725. remark: z.string(),
  726. settings: z.unknown(),
  727. shareAddr: z.string(),
  728. shareAddrStrategy: z.enum(['node', 'listen', 'custom']),
  729. sniffing: z.unknown(),
  730. streamSettings: z.unknown(),
  731. subSortIndex: z.number().int(),
  732. tag: z.string(),
  733. total: z.number().int(),
  734. trafficReset: z.enum(['never', 'hourly', 'daily', 'weekly', 'monthly']),
  735. trafficResetDay: z.number().int().min(1).max(31),
  736. up: z.number().int(),
  737. });
  738. export type Inbound = z.infer<typeof InboundSchema>;
  739. export const InboundClientIpsSchema = z.object({
  740. clientEmail: z.string(),
  741. id: z.number().int(),
  742. ips: z.unknown(),
  743. });
  744. export type InboundClientIps = z.infer<typeof InboundClientIpsSchema>;
  745. export const InboundFallbackSchema = z.object({
  746. alpn: z.string(),
  747. childId: z.number().int(),
  748. dest: z.string(),
  749. id: z.number().int(),
  750. masterId: z.number().int(),
  751. name: z.string(),
  752. path: z.string(),
  753. sortOrder: z.number().int(),
  754. xver: z.number().int(),
  755. });
  756. export type InboundFallback = z.infer<typeof InboundFallbackSchema>;
  757. export const InboundOptionSchema = z.object({
  758. awgServer: z.lazy(() => ServerSettingsSchema).nullable().optional(),
  759. enable: z.boolean(),
  760. id: z.number().int(),
  761. listen: z.string().optional(),
  762. mtprotoDomain: z.string().optional(),
  763. network: z.string().optional(),
  764. nodeAddress: z.string().optional(),
  765. nodeId: z.number().int().nullable().optional(),
  766. port: z.number().int(),
  767. protocol: z.string(),
  768. remark: z.string(),
  769. security: z.string().optional(),
  770. shareAddr: z.string().optional(),
  771. shareAddrStrategy: z.string().optional(),
  772. ssMethod: z.string(),
  773. tag: z.string(),
  774. tlsFlowCapable: z.boolean(),
  775. tuicServer: z.lazy(() => TuicServerSettingsSchema).nullable().optional(),
  776. wgDns: z.string().optional(),
  777. wgMtu: z.number().int().optional(),
  778. wgPublicKey: z.string().optional(),
  779. });
  780. export type InboundOption = z.infer<typeof InboundOptionSchema>;
  781. export const InboundTrafficSummarySchema = z.object({
  782. down: z.number().int(),
  783. enable: z.boolean(),
  784. id: z.number().int(),
  785. total: z.number().int(),
  786. up: z.number().int(),
  787. });
  788. export type InboundTrafficSummary = z.infer<typeof InboundTrafficSummarySchema>;
  789. export const LogEntrySchema = z.object({
  790. DateTime: z.string(),
  791. Email: z.string(),
  792. Event: z.number().int(),
  793. FromAddress: z.string(),
  794. Inbound: z.string(),
  795. Outbound: z.string(),
  796. ToAddress: z.string(),
  797. });
  798. export type LogEntry = z.infer<typeof LogEntrySchema>;
  799. export const MLDSA65ResponseSchema = z.object({
  800. seed: z.string(),
  801. verify: z.string(),
  802. });
  803. export type MLDSA65Response = z.infer<typeof MLDSA65ResponseSchema>;
  804. export const MLKEM768ResponseSchema = z.object({
  805. client: z.string(),
  806. seed: z.string(),
  807. });
  808. export type MLKEM768Response = z.infer<typeof MLKEM768ResponseSchema>;
  809. export const MsgSchema = z.object({
  810. msg: z.string(),
  811. obj: z.unknown(),
  812. success: z.boolean(),
  813. });
  814. export type Msg = z.infer<typeof MsgSchema>;
  815. export const NewUUIDResponseSchema = z.object({
  816. uuid: z.string(),
  817. });
  818. export type NewUUIDResponse = z.infer<typeof NewUUIDResponseSchema>;
  819. export const NodeSchema = z.object({
  820. activeCount: z.number().int(),
  821. address: z.string(),
  822. allowPrivateAddress: z.boolean(),
  823. basePath: z.string(),
  824. clientCount: z.number().int(),
  825. configDirty: z.boolean(),
  826. configDirtyAt: z.number().int(),
  827. cpuPct: z.number(),
  828. createdAt: z.number().int(),
  829. depletedCount: z.number().int(),
  830. disabledCount: z.number().int(),
  831. enable: z.boolean(),
  832. guid: z.string(),
  833. id: z.number().int(),
  834. inboundCount: z.number().int(),
  835. inboundSyncMode: z.enum(['all', 'selected']),
  836. inboundTags: z.array(z.string()),
  837. lastError: z.string(),
  838. lastHeartbeat: z.number().int(),
  839. latencyMs: z.number().int(),
  840. memPct: z.number(),
  841. name: z.string(),
  842. netDown: z.number().int(),
  843. netUp: z.number().int(),
  844. onlineCount: z.number().int(),
  845. outboundTag: z.string(),
  846. panelVersion: z.string(),
  847. parentGuid: z.string().optional(),
  848. pinnedCertSha256: z.string(),
  849. port: z.number().int().min(1).max(65535),
  850. remark: z.string(),
  851. scheme: z.enum(['http', 'https']),
  852. status: z.string(),
  853. tlsVerifyMode: z.enum(['verify', 'skip', 'pin', 'mtls']),
  854. transitive: z.boolean().optional(),
  855. updatedAt: z.number().int(),
  856. uptimeSecs: z.number().int(),
  857. xrayError: z.string(),
  858. xrayState: z.string(),
  859. xrayVersion: z.string(),
  860. });
  861. export type Node = z.infer<typeof NodeSchema>;
  862. export const NodeMutationRequestSchema = z.object({
  863. address: z.string(),
  864. allowPrivateAddress: z.boolean(),
  865. apiToken: z.string().nullable().optional(),
  866. basePath: z.string(),
  867. clearApiToken: z.boolean().optional(),
  868. enable: z.boolean(),
  869. id: z.number().int(),
  870. inboundSyncMode: z.enum(['all', 'selected']),
  871. inboundTags: z.array(z.string()),
  872. name: z.string(),
  873. outboundTag: z.string(),
  874. pinnedCertSha256: z.string(),
  875. port: z.number().int().min(1).max(65535),
  876. remark: z.string(),
  877. scheme: z.enum(['http', 'https']),
  878. tlsVerifyMode: z.enum(['verify', 'skip', 'pin', 'mtls']),
  879. });
  880. export type NodeMutationRequest = z.infer<typeof NodeMutationRequestSchema>;
  881. export const NodeViewSchema = z.object({
  882. activeCount: z.number().int(),
  883. address: z.string(),
  884. allowPrivateAddress: z.boolean(),
  885. basePath: z.string(),
  886. clientCount: z.number().int(),
  887. configDirty: z.boolean(),
  888. configDirtyAt: z.number().int(),
  889. cpuPct: z.number(),
  890. createdAt: z.number().int(),
  891. depletedCount: z.number().int(),
  892. disabledCount: z.number().int(),
  893. enable: z.boolean(),
  894. guid: z.string(),
  895. hasApiToken: z.boolean(),
  896. id: z.number().int(),
  897. inboundCount: z.number().int(),
  898. inboundSyncMode: z.string(),
  899. inboundTags: z.array(z.string()),
  900. lastError: z.string(),
  901. lastHeartbeat: z.number().int(),
  902. latencyMs: z.number().int(),
  903. memPct: z.number(),
  904. name: z.string(),
  905. netDown: z.number().int(),
  906. netUp: z.number().int(),
  907. onlineCount: z.number().int(),
  908. outboundTag: z.string(),
  909. panelVersion: z.string(),
  910. parentGuid: z.string().optional(),
  911. pinnedCertSha256: z.string(),
  912. port: z.number().int(),
  913. remark: z.string(),
  914. scheme: z.string(),
  915. status: z.string(),
  916. tlsVerifyMode: z.string(),
  917. transitive: z.boolean().optional(),
  918. updatedAt: z.number().int(),
  919. uptimeSecs: z.number().int(),
  920. xrayError: z.string(),
  921. xrayState: z.string(),
  922. xrayVersion: z.string(),
  923. });
  924. export type NodeView = z.infer<typeof NodeViewSchema>;
  925. export const OutboundTrafficsSchema = z.object({
  926. down: z.number().int(),
  927. id: z.number().int(),
  928. tag: z.string(),
  929. total: z.number().int(),
  930. up: z.number().int(),
  931. });
  932. export type OutboundTraffics = z.infer<typeof OutboundTrafficsSchema>;
  933. export const PanelUpdateStatusSchema = z.object({
  934. exitCode: z.number().int(),
  935. finishedAt: z.number().int(),
  936. runId: z.string(),
  937. state: z.string(),
  938. });
  939. export type PanelUpdateStatus = z.infer<typeof PanelUpdateStatusSchema>;
  940. export const PeerActivitySchema = z.object({
  941. allowedIPs: z.string(),
  942. down: z.number().int(),
  943. email: z.string(),
  944. endpoint: z.string(),
  945. handshake: z.number().int(),
  946. inboundId: z.number().int(),
  947. interface: z.string(),
  948. online: z.boolean(),
  949. tag: z.string(),
  950. up: z.number().int(),
  951. });
  952. export type PeerActivity = z.infer<typeof PeerActivitySchema>;
  953. export const ProbeResultUISchema = z.object({
  954. cpuPct: z.number(),
  955. error: z.string(),
  956. latencyMs: z.number().int(),
  957. memPct: z.number(),
  958. panelVersion: z.string(),
  959. status: z.string(),
  960. uptimeSecs: z.number().int(),
  961. xrayError: z.string(),
  962. xrayState: z.string(),
  963. xrayVersion: z.string(),
  964. });
  965. export type ProbeResultUI = z.infer<typeof ProbeResultUISchema>;
  966. export const RealityScanResultSchema = z.object({
  967. alpn: z.string(),
  968. certChainBytes: z.number().int(),
  969. certChainValid: z.boolean(),
  970. certIssuer: z.string(),
  971. certSubject: z.string(),
  972. certValid: z.boolean(),
  973. curveID: z.string(),
  974. feasible: z.boolean(),
  975. h2: z.boolean(),
  976. host: z.string(),
  977. ip: z.string(),
  978. latencyMs: z.number().int(),
  979. notAfter: z.string(),
  980. port: z.number().int(),
  981. privateTarget: z.boolean(),
  982. reason: z.string(),
  983. serverNames: z.array(z.string()),
  984. target: z.string(),
  985. tls13: z.boolean(),
  986. tlsVersion: z.string(),
  987. x25519: z.boolean(),
  988. });
  989. export type RealityScanResult = z.infer<typeof RealityScanResultSchema>;
  990. export const ServerSettingsSchema = z.object({
  991. contentPaddingAddition: z.string().optional(),
  992. disableCookies: z.boolean(),
  993. externalInterface: z.string().optional(),
  994. h1: z.string(),
  995. h2: z.string(),
  996. h3: z.string(),
  997. h4: z.string(),
  998. headerProtectionKey: z.string().optional(),
  999. i1: z.string().optional(),
  1000. i2: z.string().optional(),
  1001. i3: z.string().optional(),
  1002. i4: z.string().optional(),
  1003. i5: z.string().optional(),
  1004. ipv6Enabled: z.boolean().optional(),
  1005. ipv6ExternalInterface: z.string().optional(),
  1006. ipv6Subnet: z.string().optional(),
  1007. jc: z.number().int(),
  1008. jmax: z.number().int(),
  1009. jmin: z.number().int(),
  1010. keepaliveTimeout: z.string().optional(),
  1011. maxHandshakeAttempts: z.string().optional(),
  1012. mtu: z.number().int().optional(),
  1013. primaryDns: z.string(),
  1014. privateKey: z.string(),
  1015. publicKey: z.string(),
  1016. randomTrailers: z.boolean(),
  1017. rejectAfterTime: z.string().optional(),
  1018. rekeyAfterTime: z.string().optional(),
  1019. rekeyTimeout: z.string().optional(),
  1020. routeThroughXray: z.boolean().optional(),
  1021. s1: z.number().int(),
  1022. s2: z.number().int(),
  1023. s3: z.number().int(),
  1024. s4: z.number().int(),
  1025. secondaryDns: z.string(),
  1026. subnetCidr: z.number().int(),
  1027. subnetIp: z.string(),
  1028. });
  1029. export type ServerSettings = z.infer<typeof ServerSettingsSchema>;
  1030. export const SettingSchema = z.object({
  1031. id: z.number().int(),
  1032. key: z.string(),
  1033. value: z.string(),
  1034. });
  1035. export type Setting = z.infer<typeof SettingSchema>;
  1036. export const SponsorSchema = z.object({
  1037. enable: z.boolean().nullable().optional(),
  1038. id: z.string(),
  1039. link: z.string(),
  1040. logo: z.string().optional(),
  1041. name: z.string(),
  1042. slots: z.array(z.string()),
  1043. text: z.record(z.string(), z.string()),
  1044. title: z.record(z.string(), z.string()),
  1045. until: z.string(),
  1046. });
  1047. export type Sponsor = z.infer<typeof SponsorSchema>;
  1048. export const SponsorListSchema = z.object({
  1049. contact: z.string().optional(),
  1050. sponsors: z.array(z.lazy(() => SponsorSchema)),
  1051. });
  1052. export type SponsorList = z.infer<typeof SponsorListSchema>;
  1053. export const SubBalancerSchema = z.object({
  1054. createdAt: z.number().int(),
  1055. enabled: z.boolean(),
  1056. id: z.number().int(),
  1057. inboundIds: z.array(z.number().int()),
  1058. memberWeights: z.record(z.number().int(), z.number()).optional(),
  1059. remark: z.string().max(256),
  1060. sortOrder: z.number().int().min(1),
  1061. strategy: z.enum(['leastLoad', 'leastPing', 'random', 'roundRobin']),
  1062. updatedAt: z.number().int(),
  1063. });
  1064. export type SubBalancer = z.infer<typeof SubBalancerSchema>;
  1065. export const TrafficSchema = z.object({
  1066. Down: z.number().int(),
  1067. IsInbound: z.boolean(),
  1068. IsOutbound: z.boolean(),
  1069. Tag: z.string(),
  1070. Up: z.number().int(),
  1071. });
  1072. export type Traffic = z.infer<typeof TrafficSchema>;
  1073. export const TuicClientSettingsSchema = z.object({
  1074. email: z.string(),
  1075. password: z.string(),
  1076. uuid: z.string(),
  1077. });
  1078. export type TuicClientSettings = z.infer<typeof TuicClientSettingsSchema>;
  1079. export const TuicServerSettingsSchema = z.object({
  1080. alpn: z.array(z.string()),
  1081. authentication_timeout: z.number().int(),
  1082. certificate: z.string(),
  1083. congestion_control: z.string(),
  1084. log_level: z.string(),
  1085. max_idle_time: z.number().int(),
  1086. max_udp_relay_packet_size: z.number().int(),
  1087. private_key: z.string(),
  1088. sni: z.string().optional(),
  1089. udp_relay_mode: z.string(),
  1090. zero_rtt_handshake: z.boolean(),
  1091. });
  1092. export type TuicServerSettings = z.infer<typeof TuicServerSettingsSchema>;
  1093. export const UserSchema = z.object({
  1094. id: z.number().int(),
  1095. password: z.string(),
  1096. username: z.string(),
  1097. });
  1098. export type User = z.infer<typeof UserSchema>;