xray-manager 1.8.4 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (324) hide show
  1. package/README.md +102 -42
  2. package/dist/cli.mjs +8587 -0
  3. package/dist/cli.mjs.map +7 -0
  4. package/package.json +13 -5
  5. package/dist/cli.d.ts +0 -11
  6. package/dist/cli.d.ts.map +0 -1
  7. package/dist/cli.js +0 -134
  8. package/dist/cli.js.map +0 -1
  9. package/dist/commands/clash.d.ts +0 -20
  10. package/dist/commands/clash.d.ts.map +0 -1
  11. package/dist/commands/clash.js +0 -156
  12. package/dist/commands/clash.js.map +0 -1
  13. package/dist/commands/config.d.ts +0 -56
  14. package/dist/commands/config.d.ts.map +0 -1
  15. package/dist/commands/config.js +0 -461
  16. package/dist/commands/config.js.map +0 -1
  17. package/dist/commands/interactive.d.ts +0 -55
  18. package/dist/commands/interactive.d.ts.map +0 -1
  19. package/dist/commands/interactive.js +0 -418
  20. package/dist/commands/interactive.js.map +0 -1
  21. package/dist/commands/logs.d.ts +0 -62
  22. package/dist/commands/logs.d.ts.map +0 -1
  23. package/dist/commands/logs.js +0 -389
  24. package/dist/commands/logs.js.map +0 -1
  25. package/dist/commands/quota.d.ts +0 -54
  26. package/dist/commands/quota.d.ts.map +0 -1
  27. package/dist/commands/quota.js +0 -661
  28. package/dist/commands/quota.js.map +0 -1
  29. package/dist/commands/review.d.ts +0 -8
  30. package/dist/commands/review.d.ts.map +0 -1
  31. package/dist/commands/review.js +0 -79
  32. package/dist/commands/review.js.map +0 -1
  33. package/dist/commands/service.d.ts +0 -43
  34. package/dist/commands/service.d.ts.map +0 -1
  35. package/dist/commands/service.js +0 -202
  36. package/dist/commands/service.js.map +0 -1
  37. package/dist/commands/user.d.ts +0 -49
  38. package/dist/commands/user.d.ts.map +0 -1
  39. package/dist/commands/user.js +0 -371
  40. package/dist/commands/user.js.map +0 -1
  41. package/dist/components/dashboard-widget.d.ts +0 -21
  42. package/dist/components/dashboard-widget.d.ts.map +0 -1
  43. package/dist/components/dashboard-widget.js +0 -234
  44. package/dist/components/dashboard-widget.js.map +0 -1
  45. package/dist/components/progress-bar.d.ts +0 -67
  46. package/dist/components/progress-bar.d.ts.map +0 -1
  47. package/dist/components/progress-bar.js +0 -138
  48. package/dist/components/progress-bar.js.map +0 -1
  49. package/dist/components/user-table.d.ts +0 -8
  50. package/dist/components/user-table.d.ts.map +0 -1
  51. package/dist/components/user-table.js +0 -91
  52. package/dist/components/user-table.js.map +0 -1
  53. package/dist/config/i18n.d.ts +0 -136
  54. package/dist/config/i18n.d.ts.map +0 -1
  55. package/dist/config/i18n.js +0 -323
  56. package/dist/config/i18n.js.map +0 -1
  57. package/dist/constants/error-codes.d.ts +0 -344
  58. package/dist/constants/error-codes.d.ts.map +0 -1
  59. package/dist/constants/error-codes.js +0 -462
  60. package/dist/constants/error-codes.js.map +0 -1
  61. package/dist/constants/exit-codes.d.ts +0 -49
  62. package/dist/constants/exit-codes.d.ts.map +0 -1
  63. package/dist/constants/exit-codes.js +0 -100
  64. package/dist/constants/exit-codes.js.map +0 -1
  65. package/dist/constants/paths.d.ts +0 -63
  66. package/dist/constants/paths.d.ts.map +0 -1
  67. package/dist/constants/paths.js +0 -78
  68. package/dist/constants/paths.js.map +0 -1
  69. package/dist/constants/quota.d.ts +0 -126
  70. package/dist/constants/quota.d.ts.map +0 -1
  71. package/dist/constants/quota.js +0 -135
  72. package/dist/constants/quota.js.map +0 -1
  73. package/dist/constants/review.d.ts +0 -14
  74. package/dist/constants/review.d.ts.map +0 -1
  75. package/dist/constants/review.js +0 -33
  76. package/dist/constants/review.js.map +0 -1
  77. package/dist/constants/supported-distros.d.ts +0 -17
  78. package/dist/constants/supported-distros.d.ts.map +0 -1
  79. package/dist/constants/supported-distros.js +0 -68
  80. package/dist/constants/supported-distros.js.map +0 -1
  81. package/dist/constants/theme.d.ts +0 -34
  82. package/dist/constants/theme.d.ts.map +0 -1
  83. package/dist/constants/theme.js +0 -52
  84. package/dist/constants/theme.js.map +0 -1
  85. package/dist/constants/timeouts.d.ts +0 -84
  86. package/dist/constants/timeouts.d.ts.map +0 -1
  87. package/dist/constants/timeouts.js +0 -111
  88. package/dist/constants/timeouts.js.map +0 -1
  89. package/dist/constants/ui-symbols.d.ts +0 -47
  90. package/dist/constants/ui-symbols.d.ts.map +0 -1
  91. package/dist/constants/ui-symbols.js +0 -48
  92. package/dist/constants/ui-symbols.js.map +0 -1
  93. package/dist/services/clash-config.d.ts +0 -16
  94. package/dist/services/clash-config.d.ts.map +0 -1
  95. package/dist/services/clash-config.js +0 -107
  96. package/dist/services/clash-config.js.map +0 -1
  97. package/dist/services/config-manager.d.ts +0 -90
  98. package/dist/services/config-manager.d.ts.map +0 -1
  99. package/dist/services/config-manager.js +0 -307
  100. package/dist/services/config-manager.js.map +0 -1
  101. package/dist/services/layout-manager.d.ts +0 -94
  102. package/dist/services/layout-manager.d.ts.map +0 -1
  103. package/dist/services/layout-manager.js +0 -192
  104. package/dist/services/layout-manager.js.map +0 -1
  105. package/dist/services/log-manager.d.ts +0 -157
  106. package/dist/services/log-manager.d.ts.map +0 -1
  107. package/dist/services/log-manager.js +0 -397
  108. package/dist/services/log-manager.js.map +0 -1
  109. package/dist/services/navigation-manager.d.ts +0 -23
  110. package/dist/services/navigation-manager.d.ts.map +0 -1
  111. package/dist/services/navigation-manager.js +0 -39
  112. package/dist/services/navigation-manager.js.map +0 -1
  113. package/dist/services/platform-detector.d.ts +0 -10
  114. package/dist/services/platform-detector.d.ts.map +0 -1
  115. package/dist/services/platform-detector.js +0 -106
  116. package/dist/services/platform-detector.js.map +0 -1
  117. package/dist/services/public-ip-manager.d.ts +0 -78
  118. package/dist/services/public-ip-manager.d.ts.map +0 -1
  119. package/dist/services/public-ip-manager.js +0 -296
  120. package/dist/services/public-ip-manager.js.map +0 -1
  121. package/dist/services/quota-enforcer.d.ts +0 -86
  122. package/dist/services/quota-enforcer.d.ts.map +0 -1
  123. package/dist/services/quota-enforcer.js +0 -151
  124. package/dist/services/quota-enforcer.js.map +0 -1
  125. package/dist/services/quota-manager.d.ts +0 -101
  126. package/dist/services/quota-manager.d.ts.map +0 -1
  127. package/dist/services/quota-manager.js +0 -257
  128. package/dist/services/quota-manager.js.map +0 -1
  129. package/dist/services/review/areas/community.d.ts +0 -9
  130. package/dist/services/review/areas/community.d.ts.map +0 -1
  131. package/dist/services/review/areas/community.js +0 -59
  132. package/dist/services/review/areas/community.js.map +0 -1
  133. package/dist/services/review/areas/contribution.d.ts +0 -9
  134. package/dist/services/review/areas/contribution.d.ts.map +0 -1
  135. package/dist/services/review/areas/contribution.js +0 -107
  136. package/dist/services/review/areas/contribution.js.map +0 -1
  137. package/dist/services/review/areas/documentation.d.ts +0 -9
  138. package/dist/services/review/areas/documentation.d.ts.map +0 -1
  139. package/dist/services/review/areas/documentation.js +0 -110
  140. package/dist/services/review/areas/documentation.js.map +0 -1
  141. package/dist/services/review/areas/license.d.ts +0 -9
  142. package/dist/services/review/areas/license.d.ts.map +0 -1
  143. package/dist/services/review/areas/license.js +0 -86
  144. package/dist/services/review/areas/license.js.map +0 -1
  145. package/dist/services/review/areas/quality.d.ts +0 -9
  146. package/dist/services/review/areas/quality.d.ts.map +0 -1
  147. package/dist/services/review/areas/quality.js +0 -84
  148. package/dist/services/review/areas/quality.js.map +0 -1
  149. package/dist/services/review/areas/security.d.ts +0 -9
  150. package/dist/services/review/areas/security.d.ts.map +0 -1
  151. package/dist/services/review/areas/security.js +0 -64
  152. package/dist/services/review/areas/security.js.map +0 -1
  153. package/dist/services/review/evidence.d.ts +0 -10
  154. package/dist/services/review/evidence.d.ts.map +0 -1
  155. package/dist/services/review/evidence.js +0 -40
  156. package/dist/services/review/evidence.js.map +0 -1
  157. package/dist/services/review/recommendations-filter.d.ts +0 -12
  158. package/dist/services/review/recommendations-filter.d.ts.map +0 -1
  159. package/dist/services/review/recommendations-filter.js +0 -20
  160. package/dist/services/review/recommendations-filter.js.map +0 -1
  161. package/dist/services/review/repo-scanner.d.ts +0 -8
  162. package/dist/services/review/repo-scanner.d.ts.map +0 -1
  163. package/dist/services/review/repo-scanner.js +0 -15
  164. package/dist/services/review/repo-scanner.js.map +0 -1
  165. package/dist/services/review/report-renderer.d.ts +0 -15
  166. package/dist/services/review/report-renderer.d.ts.map +0 -1
  167. package/dist/services/review/report-renderer.js +0 -120
  168. package/dist/services/review/report-renderer.js.map +0 -1
  169. package/dist/services/review/review-engine.d.ts +0 -15
  170. package/dist/services/review/review-engine.d.ts.map +0 -1
  171. package/dist/services/review/review-engine.js +0 -61
  172. package/dist/services/review/review-engine.js.map +0 -1
  173. package/dist/services/review/summary-builder.d.ts +0 -8
  174. package/dist/services/review/summary-builder.d.ts.map +0 -1
  175. package/dist/services/review/summary-builder.js +0 -26
  176. package/dist/services/review/summary-builder.js.map +0 -1
  177. package/dist/services/screen-manager.d.ts +0 -13
  178. package/dist/services/screen-manager.d.ts.map +0 -1
  179. package/dist/services/screen-manager.js +0 -42
  180. package/dist/services/screen-manager.js.map +0 -1
  181. package/dist/services/stats-config-manager.d.ts +0 -110
  182. package/dist/services/stats-config-manager.d.ts.map +0 -1
  183. package/dist/services/stats-config-manager.js +0 -443
  184. package/dist/services/stats-config-manager.js.map +0 -1
  185. package/dist/services/systemd-manager.d.ts +0 -197
  186. package/dist/services/systemd-manager.d.ts.map +0 -1
  187. package/dist/services/systemd-manager.js +0 -458
  188. package/dist/services/systemd-manager.js.map +0 -1
  189. package/dist/services/traffic-manager.d.ts +0 -106
  190. package/dist/services/traffic-manager.d.ts.map +0 -1
  191. package/dist/services/traffic-manager.js +0 -368
  192. package/dist/services/traffic-manager.js.map +0 -1
  193. package/dist/services/user-manager.d.ts +0 -90
  194. package/dist/services/user-manager.d.ts.map +0 -1
  195. package/dist/services/user-manager.js +0 -347
  196. package/dist/services/user-manager.js.map +0 -1
  197. package/dist/services/user-metadata-manager.d.ts +0 -85
  198. package/dist/services/user-metadata-manager.d.ts.map +0 -1
  199. package/dist/services/user-metadata-manager.js +0 -181
  200. package/dist/services/user-metadata-manager.js.map +0 -1
  201. package/dist/types/config.d.ts +0 -340
  202. package/dist/types/config.d.ts.map +0 -1
  203. package/dist/types/config.js +0 -7
  204. package/dist/types/config.js.map +0 -1
  205. package/dist/types/layout.d.ts +0 -119
  206. package/dist/types/layout.d.ts.map +0 -1
  207. package/dist/types/layout.js +0 -142
  208. package/dist/types/layout.js.map +0 -1
  209. package/dist/types/platform.d.ts +0 -72
  210. package/dist/types/platform.d.ts.map +0 -1
  211. package/dist/types/platform.js +0 -38
  212. package/dist/types/platform.js.map +0 -1
  213. package/dist/types/quota.d.ts +0 -158
  214. package/dist/types/quota.d.ts.map +0 -1
  215. package/dist/types/quota.js +0 -26
  216. package/dist/types/quota.js.map +0 -1
  217. package/dist/types/review.d.ts +0 -62
  218. package/dist/types/review.d.ts.map +0 -1
  219. package/dist/types/review.js +0 -8
  220. package/dist/types/review.js.map +0 -1
  221. package/dist/types/server-config.d.ts +0 -53
  222. package/dist/types/server-config.d.ts.map +0 -1
  223. package/dist/types/server-config.js +0 -19
  224. package/dist/types/server-config.js.map +0 -1
  225. package/dist/types/service.d.ts +0 -96
  226. package/dist/types/service.d.ts.map +0 -1
  227. package/dist/types/service.js +0 -7
  228. package/dist/types/service.js.map +0 -1
  229. package/dist/types/terminal.d.ts +0 -35
  230. package/dist/types/terminal.d.ts.map +0 -1
  231. package/dist/types/terminal.js +0 -20
  232. package/dist/types/terminal.js.map +0 -1
  233. package/dist/types/ui-components.d.ts +0 -53
  234. package/dist/types/ui-components.d.ts.map +0 -1
  235. package/dist/types/ui-components.js +0 -3
  236. package/dist/types/ui-components.js.map +0 -1
  237. package/dist/types/user-metadata.d.ts +0 -43
  238. package/dist/types/user-metadata.d.ts.map +0 -1
  239. package/dist/types/user-metadata.js +0 -17
  240. package/dist/types/user-metadata.js.map +0 -1
  241. package/dist/types/user.d.ts +0 -134
  242. package/dist/types/user.d.ts.map +0 -1
  243. package/dist/types/user.js +0 -7
  244. package/dist/types/user.js.map +0 -1
  245. package/dist/utils/clipboard.d.ts +0 -21
  246. package/dist/utils/clipboard.d.ts.map +0 -1
  247. package/dist/utils/clipboard.js +0 -45
  248. package/dist/utils/clipboard.js.map +0 -1
  249. package/dist/utils/error-formatter.d.ts +0 -60
  250. package/dist/utils/error-formatter.d.ts.map +0 -1
  251. package/dist/utils/error-formatter.js +0 -244
  252. package/dist/utils/error-formatter.js.map +0 -1
  253. package/dist/utils/errors.d.ts +0 -92
  254. package/dist/utils/errors.d.ts.map +0 -1
  255. package/dist/utils/errors.js +0 -143
  256. package/dist/utils/errors.js.map +0 -1
  257. package/dist/utils/firewall.d.ts +0 -14
  258. package/dist/utils/firewall.d.ts.map +0 -1
  259. package/dist/utils/firewall.js +0 -78
  260. package/dist/utils/firewall.js.map +0 -1
  261. package/dist/utils/format.d.ts +0 -93
  262. package/dist/utils/format.d.ts.map +0 -1
  263. package/dist/utils/format.js +0 -240
  264. package/dist/utils/format.js.map +0 -1
  265. package/dist/utils/icons.d.ts +0 -53
  266. package/dist/utils/icons.d.ts.map +0 -1
  267. package/dist/utils/icons.js +0 -143
  268. package/dist/utils/icons.js.map +0 -1
  269. package/dist/utils/layout.d.ts +0 -142
  270. package/dist/utils/layout.d.ts.map +0 -1
  271. package/dist/utils/layout.js +0 -381
  272. package/dist/utils/layout.js.map +0 -1
  273. package/dist/utils/logger.d.ts +0 -160
  274. package/dist/utils/logger.d.ts.map +0 -1
  275. package/dist/utils/logger.js +0 -351
  276. package/dist/utils/logger.js.map +0 -1
  277. package/dist/utils/network.d.ts +0 -39
  278. package/dist/utils/network.d.ts.map +0 -1
  279. package/dist/utils/network.js +0 -227
  280. package/dist/utils/network.js.map +0 -1
  281. package/dist/utils/os-detection.d.ts +0 -10
  282. package/dist/utils/os-detection.d.ts.map +0 -1
  283. package/dist/utils/os-detection.js +0 -86
  284. package/dist/utils/os-detection.js.map +0 -1
  285. package/dist/utils/preflight.d.ts +0 -57
  286. package/dist/utils/preflight.d.ts.map +0 -1
  287. package/dist/utils/preflight.js +0 -215
  288. package/dist/utils/preflight.js.map +0 -1
  289. package/dist/utils/repo-scan.d.ts +0 -54
  290. package/dist/utils/repo-scan.d.ts.map +0 -1
  291. package/dist/utils/repo-scan.js +0 -165
  292. package/dist/utils/repo-scan.js.map +0 -1
  293. package/dist/utils/report-output.d.ts +0 -13
  294. package/dist/utils/report-output.d.ts.map +0 -1
  295. package/dist/utils/report-output.js +0 -33
  296. package/dist/utils/report-output.js.map +0 -1
  297. package/dist/utils/review-id.d.ts +0 -8
  298. package/dist/utils/review-id.d.ts.map +0 -1
  299. package/dist/utils/review-id.js +0 -17
  300. package/dist/utils/review-id.js.map +0 -1
  301. package/dist/utils/splash.d.ts +0 -21
  302. package/dist/utils/splash.d.ts.map +0 -1
  303. package/dist/utils/splash.js +0 -179
  304. package/dist/utils/splash.js.map +0 -1
  305. package/dist/utils/terminal.d.ts +0 -32
  306. package/dist/utils/terminal.d.ts.map +0 -1
  307. package/dist/utils/terminal.js +0 -93
  308. package/dist/utils/terminal.js.map +0 -1
  309. package/dist/utils/traffic-formatter.d.ts +0 -45
  310. package/dist/utils/traffic-formatter.d.ts.map +0 -1
  311. package/dist/utils/traffic-formatter.js +0 -131
  312. package/dist/utils/traffic-formatter.js.map +0 -1
  313. package/dist/utils/validator.d.ts +0 -102
  314. package/dist/utils/validator.d.ts.map +0 -1
  315. package/dist/utils/validator.js +0 -238
  316. package/dist/utils/validator.js.map +0 -1
  317. package/dist/utils/vless-link.d.ts +0 -27
  318. package/dist/utils/vless-link.d.ts.map +0 -1
  319. package/dist/utils/vless-link.js +0 -69
  320. package/dist/utils/vless-link.js.map +0 -1
  321. package/dist/utils/which.d.ts +0 -13
  322. package/dist/utils/which.d.ts.map +0 -1
  323. package/dist/utils/which.js +0 -28
  324. package/dist/utils/which.js.map +0 -1
@@ -1,53 +0,0 @@
1
- /**
2
- * Interface for the Dashboard Widget
3
- * Responsible for rendering the persistent status header.
4
- */
5
- export interface IDashboardWidget {
6
- /**
7
- * Refreshes the internal data snapshot (service status, user count, etc.)
8
- */
9
- refresh(): Promise<void>;
10
- /**
11
- * Renders the dashboard as a formatted string string suitable for printing.
12
- * Should respect terminal width and use box-drawing characters.
13
- * @param width - The available width in columns.
14
- */
15
- render(_width: number): string;
16
- }
17
- export interface IScreenManager {
18
- /**
19
- * Clears the terminal screen and scrollback (if supported/configured).
20
- */
21
- clear(): void;
22
- /**
23
- * Renders the complete frame: Dashboard + Breadcrumb + Content Placeholder
24
- * @param dashboard - The dashboard widget instance
25
- * @param breadcrumb - The current breadcrumb string
26
- */
27
- renderHeader(_dashboard: IDashboardWidget, _breadcrumb: string): void;
28
- }
29
- /**
30
- * Interface for Navigation Manager
31
- * Tracks the user's current location in the menu hierarchy.
32
- */
33
- export interface INavigationManager {
34
- /**
35
- * Pushes a new menu level onto the stack.
36
- * @param label - The display label for the new level.
37
- */
38
- push(_label: string): void;
39
- /**
40
- * Pops the current level off the stack.
41
- * @returns The label of the popped level.
42
- */
43
- pop(): string | undefined;
44
- /**
45
- * Returns the formatted breadcrumb string (e.g., "Home > User Management")
46
- */
47
- getBreadcrumb(): string;
48
- /**
49
- * Gets the current depth of the stack.
50
- */
51
- getDepth(): number;
52
- }
53
- //# sourceMappingURL=ui-components.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ui-components.d.ts","sourceRoot":"","sources":["../../src/types/ui-components.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzB;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,KAAK,IAAI,IAAI,CAAC;IAEd;;;;OAIG;IACH,YAAY,CAAC,UAAU,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CACvE;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B;;;OAGG;IACH,GAAG,IAAI,MAAM,GAAG,SAAS,CAAC;IAE1B;;OAEG;IACH,aAAa,IAAI,MAAM,CAAC;IAExB;;OAEG;IACH,QAAQ,IAAI,MAAM,CAAC;CACpB"}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=ui-components.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ui-components.js","sourceRoot":"","sources":["../../src/types/ui-components.ts"],"names":[],"mappings":""}
@@ -1,43 +0,0 @@
1
- /**
2
- * User Metadata Types
3
- *
4
- * Types for user metadata persistence (creation time, status history)
5
- *
6
- * @module types/user-metadata
7
- */
8
- /**
9
- * User status values
10
- */
11
- export type UserStatus = 'active' | 'disabled' | 'exceeded';
12
- /**
13
- * Metadata for a single user
14
- */
15
- export interface UserMeta {
16
- /** User creation timestamp (ISO8601) */
17
- createdAt: string;
18
- /** Current user status */
19
- status: UserStatus;
20
- /** Last status change timestamp (ISO8601) */
21
- statusChangedAt?: string;
22
- }
23
- /**
24
- * User metadata storage structure
25
- */
26
- export interface UserMetadataStore {
27
- /** Map of user UUID to metadata */
28
- users: Record<string, UserMeta>;
29
- }
30
- /**
31
- * User metadata update parameters
32
- */
33
- export interface UserMetadataUpdate {
34
- /** New status (optional) */
35
- status?: UserStatus;
36
- /** Status change timestamp (optional, defaults to now) */
37
- statusChangedAt?: string;
38
- }
39
- /**
40
- * Default empty metadata store
41
- */
42
- export declare const EMPTY_METADATA_STORE: UserMetadataStore;
43
- //# sourceMappingURL=user-metadata.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user-metadata.d.ts","sourceRoot":"","sources":["../../src/types/user-metadata.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAElB,0BAA0B;IAC1B,MAAM,EAAE,UAAU,CAAC;IAEnB,6CAA6C;IAC7C,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,4BAA4B;IAC5B,MAAM,CAAC,EAAE,UAAU,CAAC;IAEpB,0DAA0D;IAC1D,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,iBAElC,CAAC"}
@@ -1,17 +0,0 @@
1
- "use strict";
2
- /**
3
- * User Metadata Types
4
- *
5
- * Types for user metadata persistence (creation time, status history)
6
- *
7
- * @module types/user-metadata
8
- */
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.EMPTY_METADATA_STORE = void 0;
11
- /**
12
- * Default empty metadata store
13
- */
14
- exports.EMPTY_METADATA_STORE = {
15
- users: {},
16
- };
17
- //# sourceMappingURL=user-metadata.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user-metadata.js","sourceRoot":"","sources":["../../src/types/user-metadata.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAwCH;;GAEG;AACU,QAAA,oBAAoB,GAAsB;IACrD,KAAK,EAAE,EAAE;CACV,CAAC"}
@@ -1,134 +0,0 @@
1
- /**
2
- * 用户管理相关类型定义
3
- * @module types/user
4
- */
5
- import type { TrafficQuota, TrafficUsage, AlertLevel } from './quota';
6
- /**
7
- * 用户实体
8
- */
9
- export interface User {
10
- /** 用户唯一标识(UUID v4) */
11
- id: string;
12
- /** 用户邮箱或标识符 */
13
- email: string;
14
- /** 创建时间(ISO 8601 字符串) */
15
- createdAt: string;
16
- /** 状态:active, disabled, exceeded */
17
- status: 'active' | 'disabled' | 'exceeded';
18
- /** 流控模式(可选) */
19
- flow?: string;
20
- /** 协议级别 */
21
- level: number;
22
- /** 最后修改时间 */
23
- updatedAt?: string;
24
- /** 流量配额(可选) */
25
- quota?: TrafficQuota;
26
- /** 当前流量使用(可选) */
27
- usage?: TrafficUsage;
28
- /** 使用百分比(0-100,无限制时为 0) */
29
- usagePercent?: number;
30
- /** 警告级别 */
31
- alertLevel?: AlertLevel;
32
- }
33
- /**
34
- * 用户配置(用于显示)
35
- */
36
- export interface UserConfig {
37
- username: string;
38
- uuid: string;
39
- port?: number;
40
- protocol?: string;
41
- flow?: string;
42
- status?: string;
43
- }
44
- /**
45
- * 用户创建参数
46
- */
47
- export interface CreateUserParams {
48
- /** 用户邮箱或标识符 */
49
- email: string;
50
- /** 流控模式(可选,默认根据协议) */
51
- flow?: string;
52
- /** 协议级别(可选,默认 0) */
53
- level?: number;
54
- }
55
- /**
56
- * 用户更新参数
57
- */
58
- export interface UpdateUserParams {
59
- /** 用户邮箱或标识符(用于查找) */
60
- email: string;
61
- /** 新的流控模式(可选) */
62
- flow?: string;
63
- /** 新的协议级别(可选) */
64
- level?: number;
65
- /** 新的状态(可选) */
66
- status?: 'active' | 'disabled';
67
- }
68
- /**
69
- * 用户分享信息
70
- */
71
- export interface UserShareInfo {
72
- /** 用户基本信息 */
73
- user: User;
74
- /** VLESS/VMESS 分享链接 */
75
- shareLink: string;
76
- /** 服务器地址 */
77
- serverAddress: string;
78
- /** 服务器端口 */
79
- serverPort: number;
80
- /** 协议类型 */
81
- protocol: string;
82
- /** TLS/Reality 配置 */
83
- security: string;
84
- /** 服务器名称(SNI) */
85
- serverName?: string;
86
- /** Public Key (Reality) */
87
- publicKey?: string;
88
- /** Short ID (Reality) */
89
- shortId?: string;
90
- /** 二维码 ASCII 艺术(可选) */
91
- qrCode?: string;
92
- }
93
- /**
94
- * 用户列表查询选项
95
- */
96
- export interface ListUsersOptions {
97
- /** 过滤状态 */
98
- status?: 'active' | 'disabled';
99
- /** 排序字段 */
100
- sortBy?: 'createdAt' | 'email' | 'updatedAt';
101
- /** 排序方向 */
102
- sortOrder?: 'asc' | 'desc';
103
- /** 分页:跳过数量 */
104
- skip?: number;
105
- /** 分页:限制数量 */
106
- limit?: number;
107
- }
108
- /**
109
- * 用户操作结果
110
- */
111
- export interface UserOperationResult {
112
- /** 操作是否成功 */
113
- success: boolean;
114
- /** 操作类型 */
115
- operation: 'add' | 'delete' | 'update' | 'list' | 'show';
116
- /** 用户信息(如果适用) */
117
- user?: User;
118
- /** 用户列表(如果适用) */
119
- users?: User[];
120
- /** 错误消息(如果失败) */
121
- error?: string;
122
- /** 是否需要重启服务 */
123
- needsRestart?: boolean;
124
- }
125
- /**
126
- * 脱敏后的值
127
- */
128
- export interface MaskedValue {
129
- /** 脱敏显示的值(前4后4) */
130
- masked: string;
131
- /** 原始完整值 */
132
- original: string;
133
- }
134
- //# sourceMappingURL=user.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../src/types/user.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- "use strict";
2
- /**
3
- * 用户管理相关类型定义
4
- * @module types/user
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- //# sourceMappingURL=user.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/types/user.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
@@ -1,21 +0,0 @@
1
- /**
2
- * Clipboard Utility
3
- *
4
- * Copy text to system clipboard
5
- *
6
- * @module utils/clipboard
7
- */
8
- /**
9
- * Copy text to clipboard
10
- *
11
- * @param text - Text to copy
12
- * @returns True if successful
13
- */
14
- export declare function copyToClipboard(text: string): Promise<boolean>;
15
- /**
16
- * Read text from clipboard
17
- *
18
- * @returns Text from clipboard
19
- */
20
- export declare function readFromClipboard(): Promise<string>;
21
- //# sourceMappingURL=clipboard.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clipboard.d.ts","sourceRoot":"","sources":["../../src/utils/clipboard.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQpE;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAMzD"}
@@ -1,45 +0,0 @@
1
- "use strict";
2
- /**
3
- * Clipboard Utility
4
- *
5
- * Copy text to system clipboard
6
- *
7
- * @module utils/clipboard
8
- */
9
- var __importDefault = (this && this.__importDefault) || function (mod) {
10
- return (mod && mod.__esModule) ? mod : { "default": mod };
11
- };
12
- Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.copyToClipboard = copyToClipboard;
14
- exports.readFromClipboard = readFromClipboard;
15
- const clipboardy_1 = __importDefault(require("clipboardy"));
16
- /**
17
- * Copy text to clipboard
18
- *
19
- * @param text - Text to copy
20
- * @returns True if successful
21
- */
22
- async function copyToClipboard(text) {
23
- try {
24
- await clipboardy_1.default.write(text);
25
- return true;
26
- }
27
- catch {
28
- // Clipboard may not be available in non-interactive environments
29
- return false;
30
- }
31
- }
32
- /**
33
- * Read text from clipboard
34
- *
35
- * @returns Text from clipboard
36
- */
37
- async function readFromClipboard() {
38
- try {
39
- return await clipboardy_1.default.read();
40
- }
41
- catch {
42
- return '';
43
- }
44
- }
45
- //# sourceMappingURL=clipboard.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clipboard.js","sourceRoot":"","sources":["../../src/utils/clipboard.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;AAUH,0CAQC;AAOD,8CAMC;AA7BD,4DAAoC;AAEpC;;;;;GAKG;AACI,KAAK,UAAU,eAAe,CAAC,IAAY;IAChD,IAAI,CAAC;QACH,MAAM,oBAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,iEAAiE;QACjE,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,iBAAiB;IACrC,IAAI,CAAC;QACH,OAAO,MAAM,oBAAU,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -1,60 +0,0 @@
1
- /**
2
- * Error Formatter Utility
3
- * @module utils/error-formatter
4
- *
5
- * Formats errors into user-friendly output with causes and solutions.
6
- */
7
- import { AppError } from './errors';
8
- import { ErrorInfo } from '../constants/error-codes';
9
- /**
10
- * Format options
11
- */
12
- export interface FormatOptions {
13
- /** Show causes section */
14
- showCauses?: boolean;
15
- /** Show solutions section */
16
- showSolutions?: boolean;
17
- /** Show stack trace (for debugging) */
18
- showStack?: boolean;
19
- /** Indentation string */
20
- indent?: string;
21
- }
22
- /**
23
- * Format an AppError into user-friendly output
24
- * @param error - The AppError to format
25
- * @param options - Formatting options
26
- * @returns Formatted error string
27
- */
28
- export declare function formatAppError(error: AppError, options?: FormatOptions): string;
29
- /**
30
- * Format an ErrorInfo object (without creating an AppError)
31
- * @param errorInfo - The error info to format
32
- * @param details - Additional details
33
- * @param options - Formatting options
34
- * @returns Formatted error string
35
- */
36
- export declare function formatErrorInfo(errorInfo: ErrorInfo, details?: string, options?: FormatOptions): string;
37
- /**
38
- * Format a generic Error with fallback error info
39
- * @param error - The error to format
40
- * @param fallbackInfo - Fallback error info if not an AppError
41
- * @param options - Formatting options
42
- * @returns Formatted error string
43
- */
44
- export declare function formatError(error: Error, fallbackInfo?: ErrorInfo, options?: FormatOptions): string;
45
- /**
46
- * Format error by looking up error code
47
- * @param code - Error code (e.g., "E101")
48
- * @param details - Additional details
49
- * @param options - Formatting options
50
- * @returns Formatted error string or undefined if code not found
51
- */
52
- export declare function formatByCode(code: string, details?: string, options?: FormatOptions): string | undefined;
53
- /**
54
- * Create a simple error message (just the header line)
55
- * @param errorInfo - The error info
56
- * @param details - Additional details
57
- * @returns Simple error message
58
- */
59
- export declare function simpleErrorMessage(errorInfo: ErrorInfo, details?: string): string;
60
- //# sourceMappingURL=error-formatter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"error-formatter.d.ts","sourceRoot":"","sources":["../../src/utils/error-formatter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,SAAS,EAAmB,MAAM,0BAA0B,CAAC;AAItE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,0BAA0B;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,6BAA6B;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,uCAAuC;IACvC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,yBAAyB;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAiBD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,CA2E/E;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,SAAS,EACpB,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,aAAa,GACtB,MAAM,CA+DR;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,KAAK,EACZ,YAAY,CAAC,EAAE,SAAS,EACxB,OAAO,CAAC,EAAE,aAAa,GACtB,MAAM,CAoBR;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,aAAa,GACtB,MAAM,GAAG,SAAS,CAMpB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAWjF"}
@@ -1,244 +0,0 @@
1
- "use strict";
2
- /**
3
- * Error Formatter Utility
4
- * @module utils/error-formatter
5
- *
6
- * Formats errors into user-friendly output with causes and solutions.
7
- */
8
- var __importDefault = (this && this.__importDefault) || function (mod) {
9
- return (mod && mod.__esModule) ? mod : { "default": mod };
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.formatAppError = formatAppError;
13
- exports.formatErrorInfo = formatErrorInfo;
14
- exports.formatError = formatError;
15
- exports.formatByCode = formatByCode;
16
- exports.simpleErrorMessage = simpleErrorMessage;
17
- const chalk_1 = __importDefault(require("chalk"));
18
- const errors_1 = require("./errors");
19
- const error_codes_1 = require("../constants/error-codes");
20
- const terminal_1 = require("./terminal");
21
- const logger_1 = require("./logger");
22
- const DEFAULT_OPTIONS = {
23
- showCauses: true,
24
- showSolutions: true,
25
- showStack: false,
26
- indent: ' ',
27
- };
28
- /**
29
- * Get error icon based on terminal capabilities
30
- */
31
- function getErrorIcon() {
32
- const capabilities = (0, terminal_1.detectTerminalCapabilities)();
33
- return capabilities.supportsUnicode ? '✗' : '[ERROR]';
34
- }
35
- /**
36
- * Format an AppError into user-friendly output
37
- * @param error - The AppError to format
38
- * @param options - Formatting options
39
- * @returns Formatted error string
40
- */
41
- function formatAppError(error, options) {
42
- const opts = { ...DEFAULT_OPTIONS, ...options };
43
- const mode = (0, logger_1.getOutputMode)();
44
- const lines = [];
45
- const indent = opts.indent || ' ';
46
- // Header line: ✗ 错误 [E101]: 配置文件不存在
47
- const icon = getErrorIcon();
48
- const headerText = `${icon} 错误 [${error.code}]: ${error.title}`;
49
- if (mode === logger_1.OutputMode.RICH) {
50
- lines.push(chalk_1.default.red.bold(headerText));
51
- }
52
- else {
53
- lines.push(headerText);
54
- }
55
- // Details if present
56
- if (error.details) {
57
- lines.push('');
58
- if (mode === logger_1.OutputMode.RICH) {
59
- lines.push(chalk_1.default.gray(`${indent}${error.details}`));
60
- }
61
- else {
62
- lines.push(`${indent}${error.details}`);
63
- }
64
- }
65
- // Causes section
66
- if (opts.showCauses && error.causes.length > 0) {
67
- lines.push('');
68
- if (mode === logger_1.OutputMode.RICH) {
69
- lines.push(chalk_1.default.yellow('可能的原因:'));
70
- }
71
- else {
72
- lines.push('可能的原因:');
73
- }
74
- error.causes.forEach((cause, index) => {
75
- const bullet = `${indent}${index + 1}. ${cause}`;
76
- if (mode === logger_1.OutputMode.RICH) {
77
- lines.push(chalk_1.default.gray(bullet));
78
- }
79
- else {
80
- lines.push(bullet);
81
- }
82
- });
83
- }
84
- // Solutions section
85
- if (opts.showSolutions && error.solutions.length > 0) {
86
- lines.push('');
87
- if (mode === logger_1.OutputMode.RICH) {
88
- lines.push(chalk_1.default.green('解决方案:'));
89
- }
90
- else {
91
- lines.push('解决方案:');
92
- }
93
- error.solutions.forEach((solution) => {
94
- const bullet = `${indent}- ${solution}`;
95
- if (mode === logger_1.OutputMode.RICH) {
96
- lines.push(chalk_1.default.cyan(bullet));
97
- }
98
- else {
99
- lines.push(bullet);
100
- }
101
- });
102
- }
103
- // Stack trace (for debugging)
104
- if (opts.showStack && error.stack) {
105
- lines.push('');
106
- if (mode === logger_1.OutputMode.RICH) {
107
- lines.push(chalk_1.default.gray('Stack trace:'));
108
- lines.push(chalk_1.default.gray(error.stack));
109
- }
110
- else {
111
- lines.push('Stack trace:');
112
- lines.push(error.stack);
113
- }
114
- }
115
- return lines.join('\n');
116
- }
117
- /**
118
- * Format an ErrorInfo object (without creating an AppError)
119
- * @param errorInfo - The error info to format
120
- * @param details - Additional details
121
- * @param options - Formatting options
122
- * @returns Formatted error string
123
- */
124
- function formatErrorInfo(errorInfo, details, options) {
125
- const opts = { ...DEFAULT_OPTIONS, ...options };
126
- const mode = (0, logger_1.getOutputMode)();
127
- const lines = [];
128
- const indent = opts.indent || ' ';
129
- // Header line
130
- const icon = getErrorIcon();
131
- const headerText = `${icon} 错误 [${errorInfo.code}]: ${errorInfo.title}`;
132
- if (mode === logger_1.OutputMode.RICH) {
133
- lines.push(chalk_1.default.red.bold(headerText));
134
- }
135
- else {
136
- lines.push(headerText);
137
- }
138
- // Details if present
139
- if (details) {
140
- lines.push('');
141
- if (mode === logger_1.OutputMode.RICH) {
142
- lines.push(chalk_1.default.gray(`${indent}${details}`));
143
- }
144
- else {
145
- lines.push(`${indent}${details}`);
146
- }
147
- }
148
- // Causes section
149
- if (opts.showCauses && errorInfo.causes.length > 0) {
150
- lines.push('');
151
- if (mode === logger_1.OutputMode.RICH) {
152
- lines.push(chalk_1.default.yellow('可能的原因:'));
153
- }
154
- else {
155
- lines.push('可能的原因:');
156
- }
157
- errorInfo.causes.forEach((cause, index) => {
158
- const bullet = `${indent}${index + 1}. ${cause}`;
159
- if (mode === logger_1.OutputMode.RICH) {
160
- lines.push(chalk_1.default.gray(bullet));
161
- }
162
- else {
163
- lines.push(bullet);
164
- }
165
- });
166
- }
167
- // Solutions section
168
- if (opts.showSolutions && errorInfo.solutions.length > 0) {
169
- lines.push('');
170
- if (mode === logger_1.OutputMode.RICH) {
171
- lines.push(chalk_1.default.green('解决方案:'));
172
- }
173
- else {
174
- lines.push('解决方案:');
175
- }
176
- errorInfo.solutions.forEach((solution) => {
177
- const bullet = `${indent}- ${solution}`;
178
- if (mode === logger_1.OutputMode.RICH) {
179
- lines.push(chalk_1.default.cyan(bullet));
180
- }
181
- else {
182
- lines.push(bullet);
183
- }
184
- });
185
- }
186
- return lines.join('\n');
187
- }
188
- /**
189
- * Format a generic Error with fallback error info
190
- * @param error - The error to format
191
- * @param fallbackInfo - Fallback error info if not an AppError
192
- * @param options - Formatting options
193
- * @returns Formatted error string
194
- */
195
- function formatError(error, fallbackInfo, options) {
196
- // If it's an AppError, format it directly
197
- if (errors_1.AppError.isAppError(error)) {
198
- return formatAppError(error, options);
199
- }
200
- // If we have fallback info, use it
201
- if (fallbackInfo) {
202
- return formatErrorInfo(fallbackInfo, error.message, options);
203
- }
204
- // Simple fallback for generic errors
205
- const mode = (0, logger_1.getOutputMode)();
206
- const icon = getErrorIcon();
207
- const headerText = `${icon} 错误: ${error.message}`;
208
- if (mode === logger_1.OutputMode.RICH) {
209
- return chalk_1.default.red(headerText);
210
- }
211
- return headerText;
212
- }
213
- /**
214
- * Format error by looking up error code
215
- * @param code - Error code (e.g., "E101")
216
- * @param details - Additional details
217
- * @param options - Formatting options
218
- * @returns Formatted error string or undefined if code not found
219
- */
220
- function formatByCode(code, details, options) {
221
- const errorInfo = (0, error_codes_1.findErrorByCode)(code);
222
- if (!errorInfo) {
223
- return undefined;
224
- }
225
- return formatErrorInfo(errorInfo, details, options);
226
- }
227
- /**
228
- * Create a simple error message (just the header line)
229
- * @param errorInfo - The error info
230
- * @param details - Additional details
231
- * @returns Simple error message
232
- */
233
- function simpleErrorMessage(errorInfo, details) {
234
- const icon = getErrorIcon();
235
- const message = details
236
- ? `${icon} 错误 [${errorInfo.code}]: ${errorInfo.title} - ${details}`
237
- : `${icon} 错误 [${errorInfo.code}]: ${errorInfo.title}`;
238
- const mode = (0, logger_1.getOutputMode)();
239
- if (mode === logger_1.OutputMode.RICH) {
240
- return chalk_1.default.red(message);
241
- }
242
- return message;
243
- }
244
- //# sourceMappingURL=error-formatter.js.map