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,368 +0,0 @@
1
- "use strict";
2
- /**
3
- * TrafficManager - 流量统计服务
4
- *
5
- * 通过 Xray Stats API 获取用户流量使用情况
6
- *
7
- * @module services/traffic-manager
8
- */
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.TrafficManager = void 0;
11
- const child_process_1 = require("child_process");
12
- const util_1 = require("util");
13
- const fs_1 = require("fs");
14
- const promises_1 = require("fs/promises");
15
- const quota_manager_1 = require("./quota-manager");
16
- const quota_1 = require("../constants/quota");
17
- const execAsync = (0, util_1.promisify)(child_process_1.exec);
18
- /**
19
- * 默认 Xray 配置路径
20
- */
21
- const DEFAULT_XRAY_CONFIG_PATH = '/usr/local/etc/xray/config.json';
22
- /**
23
- * TrafficManager - 管理 Xray 流量统计
24
- */
25
- class TrafficManager {
26
- /**
27
- * 创建 TrafficManager 实例
28
- *
29
- * @param apiServer - API 服务器地址(默认 127.0.0.1)
30
- * @param apiPort - API 端口(默认 10085)
31
- */
32
- constructor(apiServer = quota_1.DEFAULT_API_SERVER, apiPort = quota_1.DEFAULT_API_PORT) {
33
- this.apiServer = apiServer;
34
- this.apiPort = apiPort;
35
- }
36
- /**
37
- * 从 Xray 配置中读取 API 端口
38
- */
39
- async detectApiPortFromConfig(configPath = DEFAULT_XRAY_CONFIG_PATH) {
40
- try {
41
- const content = await (0, promises_1.readFile)(configPath, 'utf-8');
42
- const config = JSON.parse(content);
43
- const apiTag = config.api?.tag || 'api';
44
- const apiInbound = config.inbounds?.find((inbound) => inbound.tag === apiTag);
45
- const port = Number(apiInbound?.port);
46
- if (Number.isInteger(port) && port >= 1 && port <= 65535) {
47
- return port;
48
- }
49
- return null;
50
- }
51
- catch {
52
- return null;
53
- }
54
- }
55
- /**
56
- * 从配额配置中同步 API 端口
57
- */
58
- async syncApiPort() {
59
- let quotaPort = null;
60
- try {
61
- const quotaManager = new quota_manager_1.QuotaManager();
62
- quotaPort = await quotaManager.getApiPort();
63
- }
64
- catch {
65
- quotaPort = null;
66
- }
67
- const configPort = await this.detectApiPortFromConfig();
68
- const resolvedPort = configPort ?? quotaPort;
69
- if (typeof resolvedPort === 'number' &&
70
- Number.isInteger(resolvedPort) &&
71
- resolvedPort >= 1 &&
72
- resolvedPort <= 65535) {
73
- this.apiPort = resolvedPort;
74
- }
75
- }
76
- /**
77
- * 获取 API 服务器地址
78
- */
79
- getServerAddress() {
80
- return `${this.apiServer}:${this.apiPort}`;
81
- }
82
- /**
83
- * 检查 Xray Stats API 是否可用
84
- *
85
- * @returns 是否可用
86
- */
87
- async isStatsAvailable() {
88
- try {
89
- await this.syncApiPort();
90
- const { stdout } = await execAsync(`${quota_1.XRAY_STATS_COMMAND} api statsquery --server=${this.getServerAddress()} 2>/dev/null`);
91
- // 如果命令成功执行并返回 JSON,则 API 可用
92
- JSON.parse(stdout || '{}');
93
- return true;
94
- }
95
- catch {
96
- return false;
97
- }
98
- }
99
- /**
100
- * 判断流量统计是否可用(含 policy 检查)
101
- */
102
- async isUsageAvailable() {
103
- const [available, policyEnabled] = await Promise.all([
104
- this.isStatsAvailable(),
105
- this.hasUserStatsPolicy(),
106
- ]);
107
- return available && policyEnabled;
108
- }
109
- /**
110
- * 执行 Xray stats 命令
111
- *
112
- * @param name - 统计名称
113
- * @returns 统计值(字节数)
114
- */
115
- async queryStats(name) {
116
- try {
117
- const { stdout } = await execAsync(`${quota_1.XRAY_STATS_COMMAND} api stats --server=${this.getServerAddress()} -name "${name}" 2>/dev/null`);
118
- const result = JSON.parse(stdout || '{}');
119
- return Number(result.stat?.value) || 0;
120
- }
121
- catch {
122
- return 0;
123
- }
124
- }
125
- /**
126
- * 检查用户流量统计策略是否启用
127
- */
128
- async hasUserStatsPolicy(configPath = DEFAULT_XRAY_CONFIG_PATH) {
129
- try {
130
- const content = await (0, promises_1.readFile)(configPath, 'utf-8');
131
- const config = JSON.parse(content);
132
- const levels = config.policy?.levels;
133
- if (!levels) {
134
- return false;
135
- }
136
- const levelValues = Object.values(levels);
137
- return levelValues.some((level) => level?.statsUserUplink === true && level?.statsUserDownlink === true);
138
- }
139
- catch {
140
- return false;
141
- }
142
- }
143
- /**
144
- * 获取用户流量使用情况
145
- *
146
- * @param email - 用户邮箱
147
- * @returns 流量使用数据,服务未运行时返回 null
148
- */
149
- async getUsage(email) {
150
- const available = await this.isStatsAvailable();
151
- if (!available) {
152
- return null;
153
- }
154
- const policyEnabled = await this.hasUserStatsPolicy();
155
- if (!policyEnabled) {
156
- return null;
157
- }
158
- const uplinkName = quota_1.STATS_PATTERNS.USER_UPLINK(email);
159
- const downlinkName = quota_1.STATS_PATTERNS.USER_DOWNLINK(email);
160
- const [uplink, downlink] = await Promise.all([
161
- this.queryStats(uplinkName),
162
- this.queryStats(downlinkName),
163
- ]);
164
- return {
165
- email,
166
- uplink,
167
- downlink,
168
- total: uplink + downlink,
169
- queriedAt: new Date().toISOString(),
170
- };
171
- }
172
- /**
173
- * 获取所有用户流量使用情况
174
- *
175
- * @returns 所有用户的流量数据
176
- */
177
- async getAllUsage() {
178
- const available = await this.isStatsAvailable();
179
- if (!available) {
180
- return [];
181
- }
182
- const policyEnabled = await this.hasUserStatsPolicy();
183
- if (!policyEnabled) {
184
- return [];
185
- }
186
- try {
187
- const { stdout } = await execAsync(`${quota_1.XRAY_STATS_COMMAND} api statsquery --server=${this.getServerAddress()} 2>/dev/null`);
188
- const response = JSON.parse(stdout || '{"stat":[]}');
189
- // 解析所有用户流量
190
- const userStats = new Map();
191
- for (const stat of response.stat || []) {
192
- const match = stat.name.match(/^user>>>(.+?)>>>traffic>>>(uplink|downlink)$/);
193
- if (match) {
194
- const email = match[1];
195
- const direction = match[2];
196
- if (!userStats.has(email)) {
197
- userStats.set(email, { uplink: 0, downlink: 0 });
198
- }
199
- const stats = userStats.get(email);
200
- stats[direction] = Number(stat.value) || 0;
201
- }
202
- }
203
- // 转换为 TrafficUsage 数组
204
- const now = new Date().toISOString();
205
- const usages = [];
206
- for (const [email, stats] of userStats) {
207
- usages.push({
208
- email,
209
- uplink: stats.uplink,
210
- downlink: stats.downlink,
211
- total: stats.uplink + stats.downlink,
212
- queriedAt: now,
213
- });
214
- }
215
- return usages;
216
- }
217
- catch {
218
- return [];
219
- }
220
- }
221
- /**
222
- * 重置用户流量统计(查询并重置)
223
- *
224
- * @param email - 用户邮箱
225
- * @returns 重置前的流量数据
226
- */
227
- async resetUserStats(email) {
228
- const available = await this.isStatsAvailable();
229
- if (!available) {
230
- return null;
231
- }
232
- const uplinkName = quota_1.STATS_PATTERNS.USER_UPLINK(email);
233
- const downlinkName = quota_1.STATS_PATTERNS.USER_DOWNLINK(email);
234
- // 使用 -reset 参数查询并重置
235
- const queryAndReset = async (name) => {
236
- try {
237
- const { stdout } = await execAsync(`${quota_1.XRAY_STATS_COMMAND} api stats --server=${this.getServerAddress()} -name "${name}" -reset 2>/dev/null`);
238
- const result = JSON.parse(stdout || '{}');
239
- return Number(result.stat?.value) || 0;
240
- }
241
- catch {
242
- return 0;
243
- }
244
- };
245
- const [uplink, downlink] = await Promise.all([
246
- queryAndReset(uplinkName),
247
- queryAndReset(downlinkName),
248
- ]);
249
- return {
250
- email,
251
- uplink,
252
- downlink,
253
- total: uplink + downlink,
254
- queriedAt: new Date().toISOString(),
255
- };
256
- }
257
- /**
258
- * 检测 Xray Stats API 配置状态
259
- *
260
- * @param configPath - Xray 配置文件路径
261
- * @returns 检测结果
262
- */
263
- async detectStatsConfig(configPath = DEFAULT_XRAY_CONFIG_PATH) {
264
- const result = {
265
- available: false,
266
- configDetected: false,
267
- serviceRunning: false,
268
- message: '',
269
- };
270
- // 1. 检查服务是否运行
271
- try {
272
- await execAsync('systemctl is-active xray');
273
- result.serviceRunning = true;
274
- }
275
- catch {
276
- result.serviceRunning = false;
277
- result.message = 'Xray 服务未运行';
278
- result.suggestion = '请先启动 Xray 服务: systemctl start xray';
279
- return result;
280
- }
281
- // 2. 检查配置文件是否存在
282
- if (!(0, fs_1.existsSync)(configPath)) {
283
- result.message = `未找到 Xray 配置文件: ${configPath}`;
284
- result.suggestion = '请确认 Xray 已正确安装';
285
- return result;
286
- }
287
- // 3. 解析配置文件查找 stats 和 api 配置
288
- try {
289
- const content = await (0, promises_1.readFile)(configPath, 'utf-8');
290
- const config = JSON.parse(content);
291
- // 检查 stats 配置
292
- if (!config.stats) {
293
- result.message = 'Xray 配置中未启用 stats 统计功能';
294
- result.suggestion = '请在配置文件中添加 "stats": {} 来启用流量统计';
295
- return result;
296
- }
297
- // 检查 policy 配置
298
- const levels = config.policy?.levels;
299
- const hasUserStatsPolicy = levels
300
- ? Object.values(levels).some((level) => level?.statsUserUplink === true && level?.statsUserDownlink === true)
301
- : false;
302
- if (!hasUserStatsPolicy) {
303
- result.message = 'Xray 配置中未启用 policy 流量统计';
304
- result.suggestion = '请在 policy.levels 中启用 statsUserUplink/statsUserDownlink';
305
- return result;
306
- }
307
- result.configDetected = true;
308
- // 检查 api 配置
309
- if (!config.api) {
310
- result.message = 'Xray 配置中未启用 API 接口';
311
- result.suggestion = '请在配置文件中添加 api 配置来启用 Stats API';
312
- return result;
313
- }
314
- // 查找 api inbound 端口
315
- const apiTag = config.api.tag || 'api';
316
- const apiInbound = config.inbounds?.find((inbound) => inbound.tag === apiTag);
317
- if (apiInbound?.port) {
318
- result.detectedPort = apiInbound.port;
319
- }
320
- // 4. 测试 API 连接
321
- result.available = await this.isStatsAvailable();
322
- if (result.available) {
323
- result.message = 'Stats API 已就绪';
324
- }
325
- else {
326
- result.message = 'Stats API 配置已检测到,但无法连接';
327
- result.suggestion = `请检查 API 端口 ${this.apiPort} 是否正确,或重启 Xray 服务`;
328
- }
329
- }
330
- catch (error) {
331
- if (error instanceof SyntaxError) {
332
- result.message = 'Xray 配置文件 JSON 格式错误';
333
- result.suggestion = '请检查配置文件格式';
334
- }
335
- else {
336
- result.message = `读取配置文件失败: ${error.message}`;
337
- }
338
- }
339
- return result;
340
- }
341
- /**
342
- * 获取 Stats API 状态的友好提示信息
343
- *
344
- * @returns 状态提示
345
- */
346
- async getStatusMessage() {
347
- const [available, policyEnabled] = await Promise.all([
348
- this.isStatsAvailable(),
349
- this.hasUserStatsPolicy(),
350
- ]);
351
- if (available && policyEnabled) {
352
- return '流量统计功能正常';
353
- }
354
- if (available && !policyEnabled) {
355
- return '流量统计不可用 (需要在 Xray 配置中启用 policy 统计)';
356
- }
357
- const detection = await this.detectStatsConfig();
358
- if (!detection.serviceRunning) {
359
- return '流量统计不可用 (Xray 服务未运行)';
360
- }
361
- if (!detection.configDetected) {
362
- return '流量统计不可用 (需要在 Xray 配置中启用 stats)';
363
- }
364
- return '流量统计不可用 (Stats API 连接失败)';
365
- }
366
- }
367
- exports.TrafficManager = TrafficManager;
368
- //# sourceMappingURL=traffic-manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"traffic-manager.js","sourceRoot":"","sources":["../../src/services/traffic-manager.ts"],"names":[],"mappings":"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"}
@@ -1,90 +0,0 @@
1
- /**
2
- * UserManager - User Management with Auto UUID Generation
3
- *
4
- * Provides safe user management with automatic service restart
5
- *
6
- * @module services/user-manager
7
- */
8
- import { UserMetadataManager } from './user-metadata-manager';
9
- import type { User, CreateUserParams, UserShareInfo } from '../types/user';
10
- /**
11
- * UserManager - Manage Xray users
12
- */
13
- export declare class UserManager {
14
- private configManager;
15
- private systemdManager;
16
- private publicIpManager;
17
- private metadataManager;
18
- private serviceName;
19
- /**
20
- * Create a new UserManager
21
- *
22
- * @param configPath - Optional config file path
23
- * @param serviceName - Service name (default: xray)
24
- */
25
- constructor(configPath?: string, serviceName?: string);
26
- /**
27
- * Generate a new UUID v4 using crypto.randomUUID()
28
- *
29
- * @returns UUID string
30
- */
31
- generateUuid(): string;
32
- /**
33
- * Validate email address
34
- *
35
- * @param email - Email to validate
36
- * @throws Error if email is invalid
37
- */
38
- validateEmail(email: string): void;
39
- /**
40
- * List all users from config
41
- *
42
- * @returns Array of users
43
- */
44
- listUsers(): Promise<User[]>;
45
- /**
46
- * Add a new user with auto-generated UUID
47
- *
48
- * @param params - User creation parameters
49
- * @returns Created user
50
- */
51
- addUser(params: CreateUserParams): Promise<User>;
52
- /**
53
- * Delete user by ID
54
- *
55
- * @param userId - User ID (UUID) to delete
56
- */
57
- deleteUser(userId: string): Promise<void>;
58
- /**
59
- * Get share information for a user
60
- *
61
- * @param userId - User ID (UUID)
62
- * @returns Share information including VLESS link
63
- */
64
- getShareInfo(userId: string): Promise<UserShareInfo>;
65
- /**
66
- * Check if public IP needs manual input
67
- *
68
- * @returns true if manual input is needed
69
- */
70
- needsPublicIpInput(): Promise<boolean>;
71
- /**
72
- * Set public IP manually
73
- *
74
- * @param ip - Public IP address
75
- */
76
- setPublicIp(ip: string): Promise<void>;
77
- /**
78
- * Get current public IP (from cache)
79
- *
80
- * @returns Public IP or null if not set
81
- */
82
- getPublicIp(): Promise<string | null>;
83
- /**
84
- * Get metadata manager for external access
85
- *
86
- * @returns UserMetadataManager instance
87
- */
88
- getMetadataManager(): UserMetadataManager;
89
- }
90
- //# sourceMappingURL=user-manager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user-manager.d.ts","sourceRoot":"","sources":["../../src/services/user-manager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AA0C3E;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,WAAW,CAAS;IAE5B;;;;;OAKG;gBACS,UAAU,CAAC,EAAE,MAAM,EAAE,WAAW,GAAE,MAAe;IAQ7D;;;;OAIG;IACH,YAAY,IAAI,MAAM;IAItB;;;;;OAKG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMlC;;;;OAIG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAyBlC;;;;;OAKG;IACG,OAAO,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAgFtD;;;;OAIG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkC/C;;;;;OAKG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA4G1D;;;;OAIG;IACG,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC;IAI5C;;;;OAIG;IACG,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C;;;;OAIG;IACG,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAK3C;;;;OAIG;IACH,kBAAkB,IAAI,mBAAmB;CAG1C"}