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,347 +0,0 @@
1
- "use strict";
2
- /**
3
- * UserManager - User Management with Auto UUID Generation
4
- *
5
- * Provides safe user management with automatic service restart
6
- *
7
- * @module services/user-manager
8
- */
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.UserManager = void 0;
11
- const crypto_1 = require("crypto");
12
- const url_1 = require("url");
13
- const config_manager_1 = require("./config-manager");
14
- const systemd_manager_1 = require("./systemd-manager");
15
- const public_ip_manager_1 = require("./public-ip-manager");
16
- const user_metadata_manager_1 = require("./user-metadata-manager");
17
- const validator_1 = require("../utils/validator");
18
- const errors_1 = require("../utils/errors");
19
- const error_codes_1 = require("../constants/error-codes");
20
- const errors_2 = require("../utils/errors");
21
- /**
22
- * Generate X25519 public key from private key
23
- *
24
- * @param privateKeyBase64 - Base64URL encoded private key (32 bytes)
25
- * @returns Base64URL encoded public key
26
- */
27
- function generatePublicKeyFromPrivate(privateKeyBase64) {
28
- try {
29
- // Decode the raw private key (32 bytes)
30
- const privateKeyBuffer = Buffer.from(privateKeyBase64, 'base64url');
31
- // X25519 PKCS#8 DER header (for 32-byte raw key)
32
- const pkcs8Header = Buffer.from([
33
- 0x30, 0x2e, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x6e, 0x04, 0x22, 0x04,
34
- 0x20,
35
- ]);
36
- const privateKeyDer = Buffer.concat([pkcs8Header, privateKeyBuffer]);
37
- const privateKey = (0, crypto_1.createPrivateKey)({
38
- key: privateKeyDer,
39
- format: 'der',
40
- type: 'pkcs8',
41
- });
42
- const publicKey = (0, crypto_1.createPublicKey)(privateKey);
43
- const publicKeySpki = publicKey.export({ type: 'spki', format: 'der' });
44
- // Extract the raw public key (last 32 bytes of SPKI)
45
- const publicKeyRaw = publicKeySpki.slice(-32);
46
- return publicKeyRaw.toString('base64url');
47
- }
48
- catch {
49
- throw new errors_1.UserError(error_codes_1.UserErrors.KEY_GENERATION_FAILED);
50
- }
51
- }
52
- /**
53
- * UserManager - Manage Xray users
54
- */
55
- class UserManager {
56
- /**
57
- * Create a new UserManager
58
- *
59
- * @param configPath - Optional config file path
60
- * @param serviceName - Service name (default: xray)
61
- */
62
- constructor(configPath, serviceName = 'xray') {
63
- this.configManager = new config_manager_1.ConfigManager(configPath);
64
- this.systemdManager = new systemd_manager_1.SystemdManager(serviceName);
65
- this.publicIpManager = new public_ip_manager_1.PublicIpManager();
66
- this.metadataManager = new user_metadata_manager_1.UserMetadataManager();
67
- this.serviceName = serviceName;
68
- }
69
- /**
70
- * Generate a new UUID v4 using crypto.randomUUID()
71
- *
72
- * @returns UUID string
73
- */
74
- generateUuid() {
75
- return (0, crypto_1.randomUUID)();
76
- }
77
- /**
78
- * Validate email address
79
- *
80
- * @param email - Email to validate
81
- * @throws Error if email is invalid
82
- */
83
- validateEmail(email) {
84
- if (!(0, validator_1.isValidEmail)(email)) {
85
- throw new errors_1.UserError(error_codes_1.UserErrors.INVALID_EMAIL, email);
86
- }
87
- }
88
- /**
89
- * List all users from config
90
- *
91
- * @returns Array of users
92
- */
93
- async listUsers() {
94
- const config = await this.configManager.readConfig();
95
- const allMetadata = await this.metadataManager.getAllMetadata();
96
- const users = [];
97
- // Extract users from all inbounds
98
- for (const inbound of config.inbounds || []) {
99
- if (inbound.settings?.clients) {
100
- for (const client of inbound.settings.clients) {
101
- const metadata = allMetadata[client.id];
102
- users.push({
103
- id: client.id,
104
- email: client.email || '',
105
- level: client.level || 0,
106
- flow: client.flow,
107
- createdAt: metadata?.createdAt || new Date().toISOString(),
108
- status: metadata?.status || 'active',
109
- });
110
- }
111
- }
112
- }
113
- return users;
114
- }
115
- /**
116
- * Add a new user with auto-generated UUID
117
- *
118
- * @param params - User creation parameters
119
- * @returns Created user
120
- */
121
- async addUser(params) {
122
- // Validate email
123
- this.validateEmail(params.email);
124
- // Check for duplicate email
125
- const existingUsers = await this.listUsers();
126
- const duplicate = existingUsers.find((u) => u.email === params.email);
127
- if (duplicate) {
128
- throw new errors_1.UserError(error_codes_1.UserErrors.EMAIL_EXISTS, params.email);
129
- }
130
- // Backup config before modification
131
- await this.configManager.backupConfig();
132
- // Generate UUID
133
- const id = this.generateUuid();
134
- const now = new Date().toISOString();
135
- // Create user object
136
- const newUser = {
137
- id,
138
- email: params.email,
139
- level: params.level ?? 0,
140
- flow: params.flow,
141
- createdAt: now,
142
- status: 'active',
143
- };
144
- // Read config
145
- const config = await this.configManager.readConfig();
146
- // Find first VLESS or VMess inbound and add user
147
- let added = false;
148
- for (const inbound of config.inbounds || []) {
149
- if (inbound.protocol === 'vless' || inbound.protocol === 'vmess') {
150
- if (!inbound.settings) {
151
- inbound.settings = { clients: [] };
152
- }
153
- if (!inbound.settings.clients) {
154
- inbound.settings.clients = [];
155
- }
156
- // Determine flow value: use provided, or default for VLESS + REALITY
157
- let flowValue = params.flow;
158
- if (!flowValue && inbound.protocol === 'vless') {
159
- // For VLESS with REALITY or TLS, default to xtls-rprx-vision
160
- const security = inbound.streamSettings?.security;
161
- if (security === 'reality' || security === 'tls') {
162
- flowValue = 'xtls-rprx-vision';
163
- }
164
- }
165
- inbound.settings.clients.push({
166
- id,
167
- email: params.email,
168
- level: params.level,
169
- flow: flowValue,
170
- });
171
- added = true;
172
- break;
173
- }
174
- }
175
- if (!added) {
176
- throw new errors_2.ConfigError(error_codes_1.ConfigErrors.CONFIG_INVALID_STRUCTURE, '未找到 VLESS/VMess inbound');
177
- }
178
- // Write config
179
- await this.configManager.writeConfig(config);
180
- // Create user metadata
181
- await this.metadataManager.createUser(id);
182
- // Restart service
183
- await this.systemdManager.restart();
184
- return newUser;
185
- }
186
- /**
187
- * Delete user by ID
188
- *
189
- * @param userId - User ID (UUID) to delete
190
- */
191
- async deleteUser(userId) {
192
- // Backup config before modification
193
- await this.configManager.backupConfig();
194
- // Read config
195
- const config = await this.configManager.readConfig();
196
- // Find and remove user
197
- let found = false;
198
- for (const inbound of config.inbounds || []) {
199
- if (inbound.settings?.clients) {
200
- const index = inbound.settings.clients.findIndex((c) => c.id === userId);
201
- if (index !== -1) {
202
- inbound.settings.clients.splice(index, 1);
203
- found = true;
204
- break;
205
- }
206
- }
207
- }
208
- if (!found) {
209
- throw new errors_1.UserError(error_codes_1.UserErrors.USER_NOT_FOUND, userId);
210
- }
211
- // Write config
212
- await this.configManager.writeConfig(config);
213
- // Delete user metadata
214
- await this.metadataManager.deleteMetadata(userId);
215
- // Restart service
216
- await this.systemdManager.restart();
217
- }
218
- /**
219
- * Get share information for a user
220
- *
221
- * @param userId - User ID (UUID)
222
- * @returns Share information including VLESS link
223
- */
224
- async getShareInfo(userId) {
225
- const config = await this.configManager.readConfig();
226
- const metadata = await this.metadataManager.getMetadata(userId);
227
- // Find user and inbound settings
228
- let user;
229
- let inboundPort;
230
- let inboundProtocol;
231
- let streamSettings;
232
- for (const inbound of config.inbounds || []) {
233
- if (inbound.settings?.clients) {
234
- const client = inbound.settings.clients.find((c) => c.id === userId);
235
- if (client) {
236
- user = {
237
- id: client.id,
238
- email: client.email || '',
239
- level: client.level || 0,
240
- flow: client.flow,
241
- createdAt: metadata?.createdAt || new Date().toISOString(),
242
- status: metadata?.status || 'active',
243
- };
244
- inboundPort = inbound.port;
245
- inboundProtocol = inbound.protocol;
246
- streamSettings = inbound.streamSettings;
247
- break;
248
- }
249
- }
250
- }
251
- if (!user) {
252
- throw new errors_1.UserError(error_codes_1.UserErrors.USER_NOT_FOUND, userId);
253
- }
254
- // Get public IP (from cache or detect)
255
- let serverAddress;
256
- try {
257
- serverAddress = await this.publicIpManager.getPublicIp();
258
- }
259
- catch {
260
- // If detection fails, throw error - caller should handle manual input
261
- throw new errors_1.NetworkError(error_codes_1.NetworkErrors.PUBLIC_IP_FAILED);
262
- }
263
- // Build VLESS link based on security type
264
- const port = inboundPort || 443;
265
- const encryption = 'none';
266
- const security = streamSettings?.security || 'tls';
267
- const network = streamSettings?.network || 'tcp';
268
- const flow = user.flow || 'xtls-rprx-vision';
269
- const name = encodeURIComponent(user.email);
270
- let vlessLink;
271
- let publicKey;
272
- let shortId;
273
- let serverName;
274
- if (security === 'reality' && streamSettings?.realitySettings) {
275
- const reality = streamSettings.realitySettings;
276
- // Generate public key from private key
277
- publicKey = generatePublicKeyFromPrivate(reality.privateKey);
278
- serverName = reality.serverNames[0] || 'www.microsoft.com';
279
- shortId = reality.shortIds[0] || '';
280
- // Build REALITY link
281
- // Format: vless://UUID@server:port?encryption=none&security=reality&type=tcp&flow=xtls-rprx-vision&pbk=PUBLIC_KEY&fp=chrome&sni=SNI&sid=SHORT_ID#name
282
- const params = new url_1.URLSearchParams({
283
- encryption,
284
- security: 'reality',
285
- type: network,
286
- flow,
287
- pbk: publicKey,
288
- fp: 'chrome',
289
- sni: serverName,
290
- sid: shortId,
291
- spx: '/',
292
- });
293
- vlessLink = `vless://${user.id}@${serverAddress}:${port}?${params.toString()}#${name}`;
294
- }
295
- else {
296
- // Build standard TLS link
297
- vlessLink = `vless://${user.id}@${serverAddress}:${port}?encryption=${encryption}&security=${security}&type=${network}&flow=${flow}#${name}`;
298
- }
299
- return {
300
- user,
301
- shareLink: vlessLink,
302
- serverAddress,
303
- serverPort: port,
304
- protocol: inboundProtocol || 'vless',
305
- security,
306
- serverName,
307
- publicKey,
308
- shortId,
309
- qrCode: vlessLink,
310
- };
311
- }
312
- /**
313
- * Check if public IP needs manual input
314
- *
315
- * @returns true if manual input is needed
316
- */
317
- async needsPublicIpInput() {
318
- return this.publicIpManager.needsManualInput();
319
- }
320
- /**
321
- * Set public IP manually
322
- *
323
- * @param ip - Public IP address
324
- */
325
- async setPublicIp(ip) {
326
- await this.publicIpManager.setPublicIp(ip);
327
- }
328
- /**
329
- * Get current public IP (from cache)
330
- *
331
- * @returns Public IP or null if not set
332
- */
333
- async getPublicIp() {
334
- const config = await this.publicIpManager.getConfig();
335
- return config?.publicIp || null;
336
- }
337
- /**
338
- * Get metadata manager for external access
339
- *
340
- * @returns UserMetadataManager instance
341
- */
342
- getMetadataManager() {
343
- return this.metadataManager;
344
- }
345
- }
346
- exports.UserManager = UserManager;
347
- //# sourceMappingURL=user-manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user-manager.js","sourceRoot":"","sources":["../../src/services/user-manager.ts"],"names":[],"mappings":"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"}
@@ -1,85 +0,0 @@
1
- /**
2
- * UserMetadataManager - User Metadata Persistence Service
3
- *
4
- * Manages user creation time, status, and other metadata
5
- *
6
- * @module services/user-metadata-manager
7
- */
8
- import type { UserMeta, UserStatus } from '../types/user-metadata';
9
- /**
10
- * UserMetadataManager - Manage user metadata persistence
11
- */
12
- export declare class UserMetadataManager {
13
- private metadataPath;
14
- private cache;
15
- /**
16
- * Create a new UserMetadataManager
17
- *
18
- * @param metadataPath - Path to metadata file
19
- */
20
- constructor(metadataPath?: string);
21
- /**
22
- * Load metadata from file
23
- *
24
- * @returns UserMetadataStore
25
- */
26
- private loadMetadata;
27
- /**
28
- * Save metadata to file
29
- *
30
- * @param store - UserMetadataStore to save
31
- */
32
- private saveMetadata;
33
- /**
34
- * Get metadata for a specific user
35
- *
36
- * @param userId - User UUID
37
- * @returns UserMeta or null if not found
38
- */
39
- getMetadata(userId: string): Promise<UserMeta | null>;
40
- /**
41
- * Set metadata for a user (create or update)
42
- *
43
- * @param userId - User UUID
44
- * @param metadata - Partial metadata to set/update
45
- */
46
- setMetadata(userId: string, metadata: Partial<UserMeta>): Promise<void>;
47
- /**
48
- * Create metadata for a new user
49
- *
50
- * @param userId - User UUID
51
- * @returns Created UserMeta
52
- */
53
- createUser(userId: string): Promise<UserMeta>;
54
- /**
55
- * Update user status
56
- *
57
- * @param userId - User UUID
58
- * @param status - New status
59
- */
60
- updateStatus(userId: string, status: UserStatus): Promise<void>;
61
- /**
62
- * Delete user metadata
63
- *
64
- * @param userId - User UUID
65
- */
66
- deleteMetadata(userId: string): Promise<void>;
67
- /**
68
- * Get all user metadata
69
- *
70
- * @returns Record of userId to UserMeta
71
- */
72
- getAllMetadata(): Promise<Record<string, UserMeta>>;
73
- /**
74
- * Get users by status
75
- *
76
- * @param status - Status to filter by
77
- * @returns Array of [userId, metadata] pairs
78
- */
79
- getUsersByStatus(status: UserStatus): Promise<Array<[string, UserMeta]>>;
80
- /**
81
- * Clear cache (force reload from file on next access)
82
- */
83
- clearCache(): void;
84
- }
85
- //# sourceMappingURL=user-metadata-manager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user-metadata-manager.d.ts","sourceRoot":"","sources":["../../src/services/user-metadata-manager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAE,QAAQ,EAAqB,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAUtF;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,KAAK,CAAkC;IAE/C;;;;OAIG;gBACS,YAAY,CAAC,EAAE,MAAM;IAIjC;;;;OAIG;YACW,YAAY;IAmB1B;;;;OAIG;YACW,YAAY;IAS1B;;;;;OAKG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAK3D;;;;;OAKG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB7E;;;;;OAKG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAyBnD;;;;;OAKG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAarE;;;;OAIG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASnD;;;;OAIG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAKzD;;;;;OAKG;IACG,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAK9E;;OAEG;IACH,UAAU,IAAI,IAAI;CAGnB"}
@@ -1,181 +0,0 @@
1
- "use strict";
2
- /**
3
- * UserMetadataManager - User Metadata Persistence Service
4
- *
5
- * Manages user creation time, status, and other metadata
6
- *
7
- * @module services/user-metadata-manager
8
- */
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.UserMetadataManager = void 0;
11
- const promises_1 = require("fs/promises");
12
- const fs_1 = require("fs");
13
- const path_1 = require("path");
14
- const paths_1 = require("../constants/paths");
15
- /**
16
- * Validate UUID v4 format
17
- */
18
- function isValidUuid(uuid) {
19
- const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
20
- return uuidRegex.test(uuid);
21
- }
22
- /**
23
- * UserMetadataManager - Manage user metadata persistence
24
- */
25
- class UserMetadataManager {
26
- /**
27
- * Create a new UserMetadataManager
28
- *
29
- * @param metadataPath - Path to metadata file
30
- */
31
- constructor(metadataPath) {
32
- this.cache = null;
33
- this.metadataPath = metadataPath || paths_1.DEFAULT_PATHS.USER_METADATA_FILE;
34
- }
35
- /**
36
- * Load metadata from file
37
- *
38
- * @returns UserMetadataStore
39
- */
40
- async loadMetadata() {
41
- if (this.cache) {
42
- return this.cache;
43
- }
44
- try {
45
- if (!(0, fs_1.existsSync)(this.metadataPath)) {
46
- this.cache = { users: {} };
47
- return this.cache;
48
- }
49
- const content = await (0, promises_1.readFile)(this.metadataPath, 'utf-8');
50
- this.cache = JSON.parse(content);
51
- return this.cache;
52
- }
53
- catch {
54
- this.cache = { users: {} };
55
- return this.cache;
56
- }
57
- }
58
- /**
59
- * Save metadata to file
60
- *
61
- * @param store - UserMetadataStore to save
62
- */
63
- async saveMetadata(store) {
64
- const dir = (0, path_1.dirname)(this.metadataPath);
65
- if (!(0, fs_1.existsSync)(dir)) {
66
- await (0, promises_1.mkdir)(dir, { recursive: true });
67
- }
68
- await (0, promises_1.writeFile)(this.metadataPath, JSON.stringify(store, null, 2), 'utf-8');
69
- this.cache = store;
70
- }
71
- /**
72
- * Get metadata for a specific user
73
- *
74
- * @param userId - User UUID
75
- * @returns UserMeta or null if not found
76
- */
77
- async getMetadata(userId) {
78
- const store = await this.loadMetadata();
79
- return store.users[userId] || null;
80
- }
81
- /**
82
- * Set metadata for a user (create or update)
83
- *
84
- * @param userId - User UUID
85
- * @param metadata - Partial metadata to set/update
86
- */
87
- async setMetadata(userId, metadata) {
88
- if (!isValidUuid(userId)) {
89
- throw new Error(`Invalid UUID format: ${userId}`);
90
- }
91
- const store = await this.loadMetadata();
92
- const existing = store.users[userId] || {
93
- createdAt: new Date().toISOString(),
94
- status: 'active',
95
- };
96
- store.users[userId] = {
97
- ...existing,
98
- ...metadata,
99
- };
100
- await this.saveMetadata(store);
101
- }
102
- /**
103
- * Create metadata for a new user
104
- *
105
- * @param userId - User UUID
106
- * @returns Created UserMeta
107
- */
108
- async createUser(userId) {
109
- if (!isValidUuid(userId)) {
110
- throw new Error(`Invalid UUID format: ${userId}`);
111
- }
112
- const store = await this.loadMetadata();
113
- // Don't overwrite existing metadata
114
- if (store.users[userId]) {
115
- return store.users[userId];
116
- }
117
- const now = new Date().toISOString();
118
- const metadata = {
119
- createdAt: now,
120
- status: 'active',
121
- statusChangedAt: now,
122
- };
123
- store.users[userId] = metadata;
124
- await this.saveMetadata(store);
125
- return metadata;
126
- }
127
- /**
128
- * Update user status
129
- *
130
- * @param userId - User UUID
131
- * @param status - New status
132
- */
133
- async updateStatus(userId, status) {
134
- const store = await this.loadMetadata();
135
- if (!store.users[userId]) {
136
- throw new Error(`User metadata not found: ${userId}`);
137
- }
138
- store.users[userId].status = status;
139
- store.users[userId].statusChangedAt = new Date().toISOString();
140
- await this.saveMetadata(store);
141
- }
142
- /**
143
- * Delete user metadata
144
- *
145
- * @param userId - User UUID
146
- */
147
- async deleteMetadata(userId) {
148
- const store = await this.loadMetadata();
149
- if (store.users[userId]) {
150
- delete store.users[userId];
151
- await this.saveMetadata(store);
152
- }
153
- }
154
- /**
155
- * Get all user metadata
156
- *
157
- * @returns Record of userId to UserMeta
158
- */
159
- async getAllMetadata() {
160
- const store = await this.loadMetadata();
161
- return { ...store.users };
162
- }
163
- /**
164
- * Get users by status
165
- *
166
- * @param status - Status to filter by
167
- * @returns Array of [userId, metadata] pairs
168
- */
169
- async getUsersByStatus(status) {
170
- const store = await this.loadMetadata();
171
- return Object.entries(store.users).filter(([_, meta]) => meta.status === status);
172
- }
173
- /**
174
- * Clear cache (force reload from file on next access)
175
- */
176
- clearCache() {
177
- this.cache = null;
178
- }
179
- }
180
- exports.UserMetadataManager = UserMetadataManager;
181
- //# sourceMappingURL=user-metadata-manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user-metadata-manager.js","sourceRoot":"","sources":["../../src/services/user-metadata-manager.ts"],"names":[],"mappings":"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"}