zod.ts 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601
  1. // Code generated by tools/openapigen. DO NOT EDIT.
  2. import { z } from 'zod';
  3. export const OnlineAPISupportSchema = z.number().int();
  4. export type OnlineAPISupport = z.infer<typeof OnlineAPISupportSchema>;
  5. export const ProcessStateSchema = z.string();
  6. export type ProcessState = z.infer<typeof ProcessStateSchema>;
  7. export const ProtocolSchema = z.string();
  8. export type Protocol = z.infer<typeof ProtocolSchema>;
  9. export const SubLinkProviderSchema = z.unknown();
  10. export type SubLinkProvider = z.infer<typeof SubLinkProviderSchema>;
  11. export const staticEgressResolverSchema = z.string();
  12. export type staticEgressResolver = z.infer<typeof staticEgressResolverSchema>;
  13. export const transportBitsSchema = z.number().int();
  14. export type transportBits = z.infer<typeof transportBitsSchema>;
  15. export const AllSettingSchema = z.object({
  16. datepicker: z.string(),
  17. expireDiff: z.number().int().min(0),
  18. externalTrafficInformEnable: z.boolean(),
  19. externalTrafficInformURI: z.string(),
  20. ldapAutoCreate: z.boolean(),
  21. ldapAutoDelete: z.boolean(),
  22. ldapBaseDN: z.string(),
  23. ldapBindDN: z.string(),
  24. ldapDefaultExpiryDays: z.number().int().min(0),
  25. ldapDefaultLimitIP: z.number().int().min(0),
  26. ldapDefaultTotalGB: z.number().int().min(0),
  27. ldapEnable: z.boolean(),
  28. ldapFlagField: z.string(),
  29. ldapHost: z.string(),
  30. ldapInboundTags: z.string(),
  31. ldapInsecureSkipVerify: z.boolean(),
  32. ldapInvertFlag: z.boolean(),
  33. ldapPassword: z.string(),
  34. ldapPort: z.number().int().min(0).max(65535),
  35. ldapSyncCron: z.string(),
  36. ldapTruthyValues: z.string(),
  37. ldapUseTLS: z.boolean(),
  38. ldapUserAttr: z.string(),
  39. ldapUserFilter: z.string(),
  40. ldapVlessField: z.string(),
  41. pageSize: z.number().int().min(0).max(1000),
  42. panelOutbound: z.string(),
  43. remarkTemplate: z.string(),
  44. restartXrayOnClientDisable: z.boolean(),
  45. sessionMaxAge: z.number().int().min(1).max(525600),
  46. smtpCpu: z.number().int().min(0).max(100),
  47. smtpEnable: z.boolean(),
  48. smtpEnabledEvents: z.string(),
  49. smtpEncryptionType: z.string(),
  50. smtpHost: z.string(),
  51. smtpMemory: z.number().int().min(0).max(100),
  52. smtpPassword: z.string(),
  53. smtpPort: z.number().int().min(1).max(65535),
  54. smtpTo: z.string(),
  55. smtpUsername: z.string(),
  56. subAnnounce: z.string(),
  57. subCertFile: z.string(),
  58. subClashEnable: z.boolean(),
  59. subClashEnableRouting: z.boolean(),
  60. subClashPath: z.string(),
  61. subClashRules: z.string(),
  62. subClashURI: z.string(),
  63. subDomain: z.string(),
  64. subEnable: z.boolean(),
  65. subEnableRouting: z.boolean(),
  66. subEncrypt: z.boolean(),
  67. subHideSettings: z.boolean(),
  68. subIncyEnableRouting: z.boolean(),
  69. subIncyRoutingRules: z.string(),
  70. subJsonEnable: z.boolean(),
  71. subJsonFinalMask: z.string(),
  72. subJsonMux: z.string(),
  73. subJsonPath: z.string(),
  74. subJsonRules: z.string(),
  75. subJsonURI: z.string(),
  76. subKeyFile: z.string(),
  77. subListen: z.string(),
  78. subPath: z.string(),
  79. subPort: z.number().int().min(1).max(65535),
  80. subProfileUrl: z.string(),
  81. subRoutingRules: z.string(),
  82. subSupportUrl: z.string(),
  83. subThemeDir: z.string(),
  84. subTitle: z.string(),
  85. subURI: z.string(),
  86. subUpdates: z.number().int().min(0).max(525600),
  87. tgBotAPIServer: z.string(),
  88. tgBotBackup: z.boolean(),
  89. tgBotChatId: z.string(),
  90. tgBotEnable: z.boolean(),
  91. tgBotProxy: z.string(),
  92. tgBotToken: z.string(),
  93. tgCpu: z.number().int().min(0).max(100),
  94. tgEnabledEvents: z.string(),
  95. tgLang: z.string(),
  96. tgMemory: z.number().int().min(0).max(100),
  97. tgRunTime: z.string(),
  98. timeLocation: z.string(),
  99. trafficDiff: z.number().int().min(0).max(100),
  100. trustedProxyCIDRs: z.string(),
  101. twoFactorEnable: z.boolean(),
  102. twoFactorToken: z.string(),
  103. warpUpdateInterval: z.number().int().min(0),
  104. webBasePath: z.string(),
  105. webCertFile: z.string(),
  106. webDomain: z.string(),
  107. webKeyFile: z.string(),
  108. webListen: z.string(),
  109. webPort: z.number().int().min(1).max(65535),
  110. });
  111. export type AllSetting = z.infer<typeof AllSettingSchema>;
  112. export const AllSettingViewSchema = z.object({
  113. datepicker: z.string(),
  114. expireDiff: z.number().int().min(0),
  115. externalTrafficInformEnable: z.boolean(),
  116. externalTrafficInformURI: z.string(),
  117. hasApiToken: z.boolean(),
  118. hasLdapPassword: z.boolean(),
  119. hasNordSecret: z.boolean(),
  120. hasSmtpPassword: z.boolean(),
  121. hasTgBotToken: z.boolean(),
  122. hasTwoFactorToken: z.boolean(),
  123. hasWarpSecret: z.boolean(),
  124. ldapAutoCreate: z.boolean(),
  125. ldapAutoDelete: z.boolean(),
  126. ldapBaseDN: z.string(),
  127. ldapBindDN: z.string(),
  128. ldapDefaultExpiryDays: z.number().int().min(0),
  129. ldapDefaultLimitIP: z.number().int().min(0),
  130. ldapDefaultTotalGB: z.number().int().min(0),
  131. ldapEnable: z.boolean(),
  132. ldapFlagField: z.string(),
  133. ldapHost: z.string(),
  134. ldapInboundTags: z.string(),
  135. ldapInsecureSkipVerify: z.boolean(),
  136. ldapInvertFlag: z.boolean(),
  137. ldapPassword: z.string(),
  138. ldapPort: z.number().int().min(0).max(65535),
  139. ldapSyncCron: z.string(),
  140. ldapTruthyValues: z.string(),
  141. ldapUseTLS: z.boolean(),
  142. ldapUserAttr: z.string(),
  143. ldapUserFilter: z.string(),
  144. ldapVlessField: z.string(),
  145. pageSize: z.number().int().min(0).max(1000),
  146. panelOutbound: z.string(),
  147. remarkTemplate: z.string(),
  148. restartXrayOnClientDisable: z.boolean(),
  149. sessionMaxAge: z.number().int().min(1).max(525600),
  150. smtpCpu: z.number().int().min(0).max(100),
  151. smtpEnable: z.boolean(),
  152. smtpEnabledEvents: z.string(),
  153. smtpEncryptionType: z.string(),
  154. smtpHost: z.string(),
  155. smtpMemory: z.number().int().min(0).max(100),
  156. smtpPassword: z.string(),
  157. smtpPort: z.number().int().min(1).max(65535),
  158. smtpTo: z.string(),
  159. smtpUsername: z.string(),
  160. subAnnounce: z.string(),
  161. subCertFile: z.string(),
  162. subClashEnable: z.boolean(),
  163. subClashEnableRouting: z.boolean(),
  164. subClashPath: z.string(),
  165. subClashRules: z.string(),
  166. subClashURI: z.string(),
  167. subDomain: z.string(),
  168. subEnable: z.boolean(),
  169. subEnableRouting: z.boolean(),
  170. subEncrypt: z.boolean(),
  171. subHideSettings: z.boolean(),
  172. subIncyEnableRouting: z.boolean(),
  173. subIncyRoutingRules: z.string(),
  174. subJsonEnable: z.boolean(),
  175. subJsonFinalMask: z.string(),
  176. subJsonMux: z.string(),
  177. subJsonPath: z.string(),
  178. subJsonRules: z.string(),
  179. subJsonURI: z.string(),
  180. subKeyFile: z.string(),
  181. subListen: z.string(),
  182. subPath: z.string(),
  183. subPort: z.number().int().min(1).max(65535),
  184. subProfileUrl: z.string(),
  185. subRoutingRules: z.string(),
  186. subSupportUrl: z.string(),
  187. subThemeDir: z.string(),
  188. subTitle: z.string(),
  189. subURI: z.string(),
  190. subUpdates: z.number().int().min(0).max(525600),
  191. tgBotAPIServer: z.string(),
  192. tgBotBackup: z.boolean(),
  193. tgBotChatId: z.string(),
  194. tgBotEnable: z.boolean(),
  195. tgBotProxy: z.string(),
  196. tgBotToken: z.string(),
  197. tgCpu: z.number().int().min(0).max(100),
  198. tgEnabledEvents: z.string(),
  199. tgLang: z.string(),
  200. tgMemory: z.number().int().min(0).max(100),
  201. tgRunTime: z.string(),
  202. timeLocation: z.string(),
  203. trafficDiff: z.number().int().min(0).max(100),
  204. trustedProxyCIDRs: z.string(),
  205. twoFactorEnable: z.boolean(),
  206. twoFactorToken: z.string(),
  207. warpUpdateInterval: z.number().int().min(0),
  208. webBasePath: z.string(),
  209. webCertFile: z.string(),
  210. webDomain: z.string(),
  211. webKeyFile: z.string(),
  212. webListen: z.string(),
  213. webPort: z.number().int().min(1).max(65535),
  214. });
  215. export type AllSettingView = z.infer<typeof AllSettingViewSchema>;
  216. export const ApiTokenSchema = z.object({
  217. createdAt: z.number().int(),
  218. enabled: z.boolean(),
  219. id: z.number().int(),
  220. name: z.string(),
  221. token: z.string(),
  222. });
  223. export type ApiToken = z.infer<typeof ApiTokenSchema>;
  224. export const ApiTokenViewSchema = z.object({
  225. createdAt: z.number().int(),
  226. enabled: z.boolean(),
  227. id: z.number().int(),
  228. name: z.string(),
  229. token: z.string().optional(),
  230. });
  231. export type ApiTokenView = z.infer<typeof ApiTokenViewSchema>;
  232. export const ClientSchema = z.object({
  233. adTag: z.string().optional(),
  234. allowedIPs: z.array(z.string()).optional(),
  235. auth: z.string().optional(),
  236. comment: z.string(),
  237. created_at: z.number().int().optional(),
  238. email: z.string(),
  239. enable: z.boolean(),
  240. expiryTime: z.number().int(),
  241. flow: z.string().optional(),
  242. group: z.string().optional(),
  243. id: z.string().optional(),
  244. keepAlive: z.number().int().optional(),
  245. limitIp: z.number().int(),
  246. password: z.string().optional(),
  247. preSharedKey: z.string().optional(),
  248. privateKey: z.string().optional(),
  249. publicKey: z.string().optional(),
  250. reset: z.number().int(),
  251. reverse: z.lazy(() => ClientReverseSchema).nullable().optional(),
  252. secret: z.string().optional(),
  253. security: z.string(),
  254. subId: z.string(),
  255. tgId: z.number().int(),
  256. totalGB: z.number().int(),
  257. updated_at: z.number().int().optional(),
  258. });
  259. export type Client = z.infer<typeof ClientSchema>;
  260. export const ClientInboundSchema = z.object({
  261. clientId: z.number().int(),
  262. createdAt: z.number().int(),
  263. flowOverride: z.string(),
  264. inboundId: z.number().int(),
  265. });
  266. export type ClientInbound = z.infer<typeof ClientInboundSchema>;
  267. export const ClientRecordSchema = z.object({
  268. adTag: z.string(),
  269. allowedIPs: z.string(),
  270. auth: z.string(),
  271. comment: z.string(),
  272. createdAt: z.number().int(),
  273. email: z.string(),
  274. enable: z.boolean(),
  275. expiryTime: z.number().int(),
  276. flow: z.string(),
  277. group: z.string(),
  278. id: z.number().int(),
  279. keepAlive: z.number().int(),
  280. limitIp: z.number().int(),
  281. password: z.string(),
  282. preSharedKey: z.string(),
  283. privateKey: z.string(),
  284. publicKey: z.string(),
  285. reset: z.number().int(),
  286. reverse: z.unknown(),
  287. secret: z.string(),
  288. security: z.string(),
  289. subId: z.string(),
  290. tgId: z.number().int(),
  291. totalGB: z.number().int(),
  292. updatedAt: z.number().int(),
  293. uuid: z.string(),
  294. });
  295. export type ClientRecord = z.infer<typeof ClientRecordSchema>;
  296. export const ClientReverseSchema = z.object({
  297. tag: z.string(),
  298. });
  299. export type ClientReverse = z.infer<typeof ClientReverseSchema>;
  300. export const ClientTrafficSchema = z.object({
  301. down: z.number().int(),
  302. email: z.string(),
  303. enable: z.boolean(),
  304. expiryTime: z.number().int(),
  305. id: z.number().int(),
  306. inboundId: z.number().int(),
  307. lastOnline: z.number().int(),
  308. reset: z.number().int(),
  309. subId: z.string(),
  310. total: z.number().int(),
  311. up: z.number().int(),
  312. uuid: z.string(),
  313. });
  314. export type ClientTraffic = z.infer<typeof ClientTrafficSchema>;
  315. export const FallbackParentInfoSchema = z.object({
  316. masterId: z.number().int(),
  317. path: z.string().optional(),
  318. });
  319. export type FallbackParentInfo = z.infer<typeof FallbackParentInfoSchema>;
  320. export const HistoryOfSeedersSchema = z.object({
  321. id: z.number().int(),
  322. seederName: z.string(),
  323. });
  324. export type HistoryOfSeeders = z.infer<typeof HistoryOfSeedersSchema>;
  325. export const HostSchema = z.object({
  326. address: z.string(),
  327. allowInsecure: z.boolean(),
  328. alpn: z.array(z.string()),
  329. createdAt: z.number().int(),
  330. echConfigList: z.string(),
  331. excludeFromSubTypes: z.array(z.string()),
  332. finalMask: z.string(),
  333. fingerprint: z.string(),
  334. groupId: z.string(),
  335. hostHeader: z.string(),
  336. id: z.number().int(),
  337. inboundId: z.number().int(),
  338. isDisabled: z.boolean(),
  339. isHidden: z.boolean(),
  340. keepSniBlank: z.boolean(),
  341. mihomoIpVersion: z.enum(['dual', 'ipv4', 'ipv6', 'ipv4-prefer', 'ipv6-prefer']),
  342. mihomoX25519: z.boolean(),
  343. muxParams: z.unknown(),
  344. nodeGuids: z.array(z.string()).optional(),
  345. overrideSniFromAddress: z.boolean(),
  346. path: z.string(),
  347. pinnedPeerCertSha256: z.array(z.string()),
  348. port: z.number().int().min(0).max(65535),
  349. remark: z.string().max(256),
  350. security: z.enum(['same', 'tls', 'none', 'reality']),
  351. serverDescription: z.string().max(64),
  352. shuffleHost: z.boolean(),
  353. sni: z.string(),
  354. sockoptParams: z.unknown(),
  355. sortOrder: z.number().int(),
  356. tags: z.array(z.string()),
  357. updatedAt: z.number().int(),
  358. verifyPeerCertByName: z.string(),
  359. vlessRoute: z.string(),
  360. });
  361. export type Host = z.infer<typeof HostSchema>;
  362. export const HostGroupSchema = z.object({
  363. allowInsecure: z.boolean(),
  364. alpn: z.array(z.string()),
  365. echConfigList: z.string(),
  366. excludeFromSubTypes: z.array(z.string()),
  367. finalMask: z.string(),
  368. fingerprint: z.string(),
  369. groupId: z.string(),
  370. hostHeader: z.string(),
  371. hosts: z.array(z.string()),
  372. inboundIds: z.array(z.number().int()),
  373. isDisabled: z.boolean(),
  374. isHidden: z.boolean(),
  375. keepSniBlank: z.boolean(),
  376. mihomoIpVersion: z.enum(['dual', 'ipv4', 'ipv6', 'ipv4-prefer', 'ipv6-prefer']),
  377. mihomoX25519: z.boolean(),
  378. muxParams: z.string(),
  379. nodeGuids: z.array(z.string()),
  380. overrideSniFromAddress: z.boolean(),
  381. path: z.string(),
  382. pinnedPeerCertSha256: z.array(z.string()),
  383. port: z.number().int().min(0).max(65535),
  384. remark: z.string().max(256),
  385. security: z.enum(['same', 'tls', 'none', 'reality']),
  386. serverDescription: z.string().max(64),
  387. shuffleHost: z.boolean(),
  388. sni: z.string(),
  389. sockoptParams: z.string(),
  390. sortOrder: z.number().int(),
  391. tags: z.array(z.string()),
  392. verifyPeerCertByName: z.string(),
  393. vlessRoute: z.string(),
  394. });
  395. export type HostGroup = z.infer<typeof HostGroupSchema>;
  396. export const InboundSchema = z.object({
  397. clientStats: z.array(z.lazy(() => ClientTrafficSchema)),
  398. down: z.number().int(),
  399. enable: z.boolean(),
  400. expiryTime: z.number().int(),
  401. fallbackParent: z.lazy(() => FallbackParentInfoSchema).nullable().optional(),
  402. id: z.number().int(),
  403. lastTrafficResetTime: z.number().int(),
  404. listen: z.string(),
  405. nodeId: z.number().int().nullable().optional(),
  406. originNodeGuid: z.string().optional(),
  407. port: z.number().int().min(0).max(65535),
  408. protocol: z.enum(['vmess', 'vless', 'trojan', 'shadowsocks', 'wireguard', 'hysteria', 'http', 'mixed', 'tunnel', 'tun', 'mtproto']),
  409. remark: z.string(),
  410. settings: z.unknown(),
  411. shareAddr: z.string(),
  412. shareAddrStrategy: z.enum(['node', 'listen', 'custom']),
  413. sniffing: z.unknown(),
  414. streamSettings: z.unknown(),
  415. subSortIndex: z.number().int().min(1),
  416. tag: z.string(),
  417. total: z.number().int(),
  418. trafficReset: z.enum(['never', 'hourly', 'daily', 'weekly', 'monthly']),
  419. up: z.number().int(),
  420. });
  421. export type Inbound = z.infer<typeof InboundSchema>;
  422. export const InboundClientIpsSchema = z.object({
  423. clientEmail: z.string(),
  424. id: z.number().int(),
  425. ips: z.unknown(),
  426. });
  427. export type InboundClientIps = z.infer<typeof InboundClientIpsSchema>;
  428. export const InboundFallbackSchema = z.object({
  429. alpn: z.string(),
  430. childId: z.number().int(),
  431. dest: z.string(),
  432. id: z.number().int(),
  433. masterId: z.number().int(),
  434. name: z.string(),
  435. path: z.string(),
  436. sortOrder: z.number().int(),
  437. xver: z.number().int(),
  438. });
  439. export type InboundFallback = z.infer<typeof InboundFallbackSchema>;
  440. export const InboundOptionSchema = z.object({
  441. enable: z.boolean(),
  442. id: z.number().int(),
  443. listen: z.string().optional(),
  444. mtprotoDomain: z.string().optional(),
  445. nodeAddress: z.string().optional(),
  446. nodeId: z.number().int().nullable().optional(),
  447. port: z.number().int(),
  448. protocol: z.string(),
  449. remark: z.string(),
  450. shareAddr: z.string().optional(),
  451. shareAddrStrategy: z.string().optional(),
  452. ssMethod: z.string(),
  453. tag: z.string(),
  454. tlsFlowCapable: z.boolean(),
  455. wgDns: z.string().optional(),
  456. wgMtu: z.number().int().optional(),
  457. wgPublicKey: z.string().optional(),
  458. });
  459. export type InboundOption = z.infer<typeof InboundOptionSchema>;
  460. export const MsgSchema = z.object({
  461. msg: z.string(),
  462. obj: z.unknown(),
  463. success: z.boolean(),
  464. });
  465. export type Msg = z.infer<typeof MsgSchema>;
  466. export const NodeSchema = z.object({
  467. activeCount: z.number().int(),
  468. address: z.string(),
  469. allowPrivateAddress: z.boolean(),
  470. apiToken: z.string(),
  471. basePath: z.string(),
  472. clientCount: z.number().int(),
  473. configDirty: z.boolean(),
  474. configDirtyAt: z.number().int(),
  475. cpuPct: z.number(),
  476. createdAt: z.number().int(),
  477. depletedCount: z.number().int(),
  478. disabledCount: z.number().int(),
  479. enable: z.boolean(),
  480. guid: z.string(),
  481. id: z.number().int(),
  482. inboundCount: z.number().int(),
  483. inboundSyncMode: z.enum(['all', 'selected']),
  484. inboundTags: z.array(z.string()),
  485. lastError: z.string(),
  486. lastHeartbeat: z.number().int(),
  487. latencyMs: z.number().int(),
  488. memPct: z.number(),
  489. name: z.string(),
  490. netDown: z.number().int(),
  491. netUp: z.number().int(),
  492. onlineCount: z.number().int(),
  493. outboundTag: z.string(),
  494. panelVersion: z.string(),
  495. parentGuid: z.string().optional(),
  496. pinnedCertSha256: z.string(),
  497. port: z.number().int().min(1).max(65535),
  498. remark: z.string(),
  499. scheme: z.enum(['http', 'https']),
  500. status: z.string(),
  501. tlsVerifyMode: z.enum(['verify', 'skip', 'pin', 'mtls']),
  502. transitive: z.boolean().optional(),
  503. updatedAt: z.number().int(),
  504. uptimeSecs: z.number().int(),
  505. xrayError: z.string(),
  506. xrayState: z.string(),
  507. xrayVersion: z.string(),
  508. });
  509. export type Node = z.infer<typeof NodeSchema>;
  510. export const OutboundTrafficsSchema = z.object({
  511. down: z.number().int(),
  512. id: z.number().int(),
  513. tag: z.string(),
  514. total: z.number().int(),
  515. up: z.number().int(),
  516. });
  517. export type OutboundTraffics = z.infer<typeof OutboundTrafficsSchema>;
  518. export const PanelUpdateStatusSchema = z.object({
  519. exitCode: z.number().int(),
  520. finishedAt: z.number().int(),
  521. runId: z.string(),
  522. state: z.string(),
  523. });
  524. export type PanelUpdateStatus = z.infer<typeof PanelUpdateStatusSchema>;
  525. export const ProbeResultUISchema = z.object({
  526. cpuPct: z.number(),
  527. error: z.string(),
  528. latencyMs: z.number().int(),
  529. memPct: z.number(),
  530. panelVersion: z.string(),
  531. status: z.string(),
  532. uptimeSecs: z.number().int(),
  533. xrayError: z.string(),
  534. xrayState: z.string(),
  535. xrayVersion: z.string(),
  536. });
  537. export type ProbeResultUI = z.infer<typeof ProbeResultUISchema>;
  538. export const RealityScanResultSchema = z.object({
  539. alpn: z.string(),
  540. certIssuer: z.string(),
  541. certSubject: z.string(),
  542. certValid: z.boolean(),
  543. curveID: z.string(),
  544. feasible: z.boolean(),
  545. h2: z.boolean(),
  546. host: z.string(),
  547. ip: z.string(),
  548. latencyMs: z.number().int(),
  549. notAfter: z.string(),
  550. port: z.number().int(),
  551. reason: z.string(),
  552. serverNames: z.array(z.string()),
  553. target: z.string(),
  554. tls13: z.boolean(),
  555. tlsVersion: z.string(),
  556. x25519: z.boolean(),
  557. });
  558. export type RealityScanResult = z.infer<typeof RealityScanResultSchema>;
  559. export const SettingSchema = z.object({
  560. id: z.number().int(),
  561. key: z.string(),
  562. value: z.string(),
  563. });
  564. export type Setting = z.infer<typeof SettingSchema>;
  565. export const UserSchema = z.object({
  566. id: z.number().int(),
  567. password: z.string(),
  568. username: z.string(),
  569. });
  570. export type User = z.infer<typeof UserSchema>;