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,106 +0,0 @@
1
- "use strict";
2
- /**
3
- * Platform detection service
4
- * Feature: 009-cross-platform-support
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.detectPlatform = detectPlatform;
8
- const os_detection_js_1 = require("../utils/os-detection.js");
9
- const firewall_js_1 = require("../utils/firewall.js");
10
- const network_js_1 = require("../utils/network.js");
11
- const platform_js_1 = require("../types/platform.js");
12
- const child_process_1 = require("child_process");
13
- /**
14
- * Detect container environment
15
- */
16
- function detectContainer() {
17
- try {
18
- const fs = require('fs');
19
- // Check for Docker
20
- if (fs.existsSync('/.dockerenv')) {
21
- return { type: platform_js_1.ContainerType.DOCKER, isContainer: true };
22
- }
23
- // Check cgroup for container hints
24
- if (fs.existsSync('/proc/1/cgroup')) {
25
- const cgroup = fs.readFileSync('/proc/1/cgroup', 'utf-8');
26
- if (cgroup.includes('docker')) {
27
- return { type: platform_js_1.ContainerType.DOCKER, isContainer: true };
28
- }
29
- if (cgroup.includes('lxc')) {
30
- return { type: platform_js_1.ContainerType.LXC, isContainer: true };
31
- }
32
- }
33
- // Check for OpenVZ
34
- if (fs.existsSync('/proc/vz') && !fs.existsSync('/proc/bc')) {
35
- return { type: platform_js_1.ContainerType.OPENVZ, isContainer: true };
36
- }
37
- }
38
- catch {
39
- // Ignore errors
40
- }
41
- return { type: platform_js_1.ContainerType.NONE, isContainer: false };
42
- }
43
- /**
44
- * Detect SELinux status
45
- */
46
- function detectSelinux() {
47
- try {
48
- const output = (0, child_process_1.execSync)('getenforce 2>/dev/null', { encoding: 'utf-8' }).trim();
49
- switch (output) {
50
- case 'Enforcing':
51
- return platform_js_1.SelinuxStatus.ENFORCING;
52
- case 'Permissive':
53
- return platform_js_1.SelinuxStatus.PERMISSIVE;
54
- default:
55
- return platform_js_1.SelinuxStatus.DISABLED;
56
- }
57
- }
58
- catch {
59
- return platform_js_1.SelinuxStatus.DISABLED;
60
- }
61
- }
62
- /**
63
- * Check if systemd is available
64
- */
65
- function hasSystemd() {
66
- try {
67
- (0, child_process_1.execSync)('systemctl --version', { encoding: 'utf-8' });
68
- return true;
69
- }
70
- catch {
71
- return false;
72
- }
73
- }
74
- /**
75
- * Detect current shell
76
- */
77
- function detectShell() {
78
- const shell = process.env.SHELL || '/bin/sh';
79
- const shellName = shell.split('/').pop() || 'sh';
80
- const isCompatible = ['bash', 'zsh'].includes(shellName);
81
- return { shell: shellName, isCompatible };
82
- }
83
- /**
84
- * Get complete platform information
85
- */
86
- function detectPlatform() {
87
- const os = (0, os_detection_js_1.detectOperatingSystem)();
88
- if (!os)
89
- return null;
90
- const container = detectContainer();
91
- const shellInfo = detectShell();
92
- return {
93
- os,
94
- environment: {
95
- shell: shellInfo.shell,
96
- isCompatibleShell: shellInfo.isCompatible,
97
- containerType: container.type,
98
- isContainer: container.isContainer,
99
- selinuxStatus: detectSelinux(),
100
- hasSystemd: hasSystemd(),
101
- },
102
- network: (0, network_js_1.detectNetwork)(),
103
- firewall: (0, firewall_js_1.detectFirewall)(),
104
- };
105
- }
106
- //# sourceMappingURL=platform-detector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"platform-detector.js","sourceRoot":"","sources":["../../src/services/platform-detector.ts"],"names":[],"mappings":"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"}
@@ -1,78 +0,0 @@
1
- /**
2
- * PublicIpManager - Public IP Detection and Caching Service
3
- *
4
- * Provides automatic public IP detection with fallback to manual input
5
- *
6
- * @module services/public-ip-manager
7
- */
8
- import type { ServerConfig, IpSource } from '../types/server-config';
9
- /**
10
- * Validate IP address (IPv4 or IPv6)
11
- */
12
- export declare function isValidIp(ip: string): boolean;
13
- /**
14
- * PublicIpManager - Manage public IP detection and caching
15
- */
16
- export declare class PublicIpManager {
17
- private configPath;
18
- private maxRetries;
19
- /**
20
- * Create a new PublicIpManager
21
- *
22
- * @param configPath - Path to server config file
23
- * @param maxRetries - Maximum retry attempts (default: 1)
24
- */
25
- constructor(configPath?: string, maxRetries?: number);
26
- /**
27
- * Read server config from file
28
- *
29
- * @returns ServerConfig or null if not found
30
- */
31
- getConfig(): Promise<ServerConfig | null>;
32
- /**
33
- * Save server config to file
34
- *
35
- * @param config - ServerConfig to save
36
- */
37
- private saveConfig;
38
- /**
39
- * Detect public IP from external services
40
- *
41
- * @returns Detection result
42
- */
43
- private detectPublicIp;
44
- /**
45
- * Get public IP (from cache or detect)
46
- *
47
- * @returns Public IP address
48
- * @throws Error if unable to get IP and no cache exists
49
- */
50
- getPublicIp(): Promise<string>;
51
- /**
52
- * Force refresh public IP (ignore cache)
53
- *
54
- * @returns New public IP address
55
- * @throws Error if detection fails
56
- */
57
- refreshPublicIp(): Promise<string>;
58
- /**
59
- * Manually set public IP
60
- *
61
- * @param ip - IP address to set
62
- * @throws Error if IP format is invalid
63
- */
64
- setPublicIp(ip: string): Promise<void>;
65
- /**
66
- * Check if manual IP input is needed
67
- *
68
- * @returns true if NAT environment detected or detection fails
69
- */
70
- needsManualInput(): Promise<boolean>;
71
- /**
72
- * Get IP source (auto or manual)
73
- *
74
- * @returns IP source or null if no config
75
- */
76
- getIpSource(): Promise<IpSource | null>;
77
- }
78
- //# sourceMappingURL=public-ip-manager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"public-ip-manager.d.ts","sourceRoot":"","sources":["../../src/services/public-ip-manager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,OAAO,KAAK,EACV,YAAY,EACZ,QAAQ,EAGT,MAAM,wBAAwB,CAAC;AAkChC;;GAEG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAE7C;AAwDD;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAS;IAE3B;;;;;OAKG;gBACS,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,GAAE,MAAU;IAKvD;;;;OAIG;IACG,SAAS,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAY/C;;;;OAIG;YACW,UAAU;IAQxB;;;;OAIG;YACW,cAAc;IAiB5B;;;;;OAKG;IACG,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAsBpC;;;;;OAKG;IACG,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAcxC;;;;;OAKG;IACG,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAa5C;;;;OAIG;IACG,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IA4B1C;;;;OAIG;IACG,WAAW,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;CAI9C"}
@@ -1,296 +0,0 @@
1
- "use strict";
2
- /**
3
- * PublicIpManager - Public IP Detection and Caching Service
4
- *
5
- * Provides automatic public IP detection with fallback to manual input
6
- *
7
- * @module services/public-ip-manager
8
- */
9
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- var desc = Object.getOwnPropertyDescriptor(m, k);
12
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
- desc = { enumerable: true, get: function() { return m[k]; } };
14
- }
15
- Object.defineProperty(o, k2, desc);
16
- }) : (function(o, m, k, k2) {
17
- if (k2 === undefined) k2 = k;
18
- o[k2] = m[k];
19
- }));
20
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
- Object.defineProperty(o, "default", { enumerable: true, value: v });
22
- }) : function(o, v) {
23
- o["default"] = v;
24
- });
25
- var __importStar = (this && this.__importStar) || (function () {
26
- var ownKeys = function(o) {
27
- ownKeys = Object.getOwnPropertyNames || function (o) {
28
- var ar = [];
29
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
30
- return ar;
31
- };
32
- return ownKeys(o);
33
- };
34
- return function (mod) {
35
- if (mod && mod.__esModule) return mod;
36
- var result = {};
37
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
38
- __setModuleDefault(result, mod);
39
- return result;
40
- };
41
- })();
42
- Object.defineProperty(exports, "__esModule", { value: true });
43
- exports.PublicIpManager = void 0;
44
- exports.isValidIp = isValidIp;
45
- const promises_1 = require("fs/promises");
46
- const fs_1 = require("fs");
47
- const path_1 = require("path");
48
- const https = __importStar(require("https"));
49
- const paths_1 = require("../constants/paths");
50
- const network_1 = require("../utils/network");
51
- /**
52
- * Default IP detection services (in priority order)
53
- */
54
- const IP_SERVICES = [
55
- { name: 'ipify', url: 'https://api.ipify.org', timeout: 3000 },
56
- { name: 'ifconfig.me', url: 'https://ifconfig.me/ip', timeout: 3000 },
57
- { name: 'ip.sb', url: 'https://api.ip.sb/ip', timeout: 3000 },
58
- ];
59
- /**
60
- * Validate IPv4 address format
61
- */
62
- function isValidIpv4(ip) {
63
- const ipv4Regex = /^(\d{1,3}\.){3}\d{1,3}$/;
64
- if (!ipv4Regex.test(ip))
65
- return false;
66
- const parts = ip.split('.');
67
- return parts.every((part) => {
68
- const num = parseInt(part, 10);
69
- return num >= 0 && num <= 255;
70
- });
71
- }
72
- /**
73
- * Validate IPv6 address format (simplified)
74
- */
75
- function isValidIpv6(ip) {
76
- const ipv6Regex = /^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$|^::$|^([0-9a-fA-F]{1,4}:)*:([0-9a-fA-F]{1,4}:)*[0-9a-fA-F]{1,4}$/;
77
- return ipv6Regex.test(ip);
78
- }
79
- /**
80
- * Validate IP address (IPv4 or IPv6)
81
- */
82
- function isValidIp(ip) {
83
- return isValidIpv4(ip) || isValidIpv6(ip);
84
- }
85
- /**
86
- * Fetch IP from a single service with timeout
87
- */
88
- function fetchIpFromService(service) {
89
- return new Promise((resolve) => {
90
- const timeoutId = setTimeout(() => {
91
- resolve({
92
- ip: '',
93
- success: false,
94
- error: `Timeout after ${service.timeout}ms`,
95
- provider: service.name,
96
- });
97
- }, service.timeout);
98
- const req = https.get(service.url, (res) => {
99
- let data = '';
100
- res.on('data', (chunk) => {
101
- data += chunk;
102
- });
103
- res.on('end', () => {
104
- clearTimeout(timeoutId);
105
- const ip = data.trim();
106
- if (isValidIp(ip)) {
107
- resolve({
108
- ip,
109
- success: true,
110
- provider: service.name,
111
- });
112
- }
113
- else {
114
- resolve({
115
- ip: '',
116
- success: false,
117
- error: `Invalid IP response: ${ip.substring(0, 50)}`,
118
- provider: service.name,
119
- });
120
- }
121
- });
122
- });
123
- req.on('error', (error) => {
124
- clearTimeout(timeoutId);
125
- resolve({
126
- ip: '',
127
- success: false,
128
- error: error.message,
129
- provider: service.name,
130
- });
131
- });
132
- });
133
- }
134
- /**
135
- * PublicIpManager - Manage public IP detection and caching
136
- */
137
- class PublicIpManager {
138
- /**
139
- * Create a new PublicIpManager
140
- *
141
- * @param configPath - Path to server config file
142
- * @param maxRetries - Maximum retry attempts (default: 1)
143
- */
144
- constructor(configPath, maxRetries = 1) {
145
- this.configPath = configPath || paths_1.DEFAULT_PATHS.SERVER_CONFIG_FILE;
146
- this.maxRetries = maxRetries;
147
- }
148
- /**
149
- * Read server config from file
150
- *
151
- * @returns ServerConfig or null if not found
152
- */
153
- async getConfig() {
154
- try {
155
- if (!(0, fs_1.existsSync)(this.configPath)) {
156
- return null;
157
- }
158
- const content = await (0, promises_1.readFile)(this.configPath, 'utf-8');
159
- return JSON.parse(content);
160
- }
161
- catch {
162
- return null;
163
- }
164
- }
165
- /**
166
- * Save server config to file
167
- *
168
- * @param config - ServerConfig to save
169
- */
170
- async saveConfig(config) {
171
- const dir = (0, path_1.dirname)(this.configPath);
172
- if (!(0, fs_1.existsSync)(dir)) {
173
- await (0, promises_1.mkdir)(dir, { recursive: true });
174
- }
175
- await (0, promises_1.writeFile)(this.configPath, JSON.stringify(config, null, 2), 'utf-8');
176
- }
177
- /**
178
- * Detect public IP from external services
179
- *
180
- * @returns Detection result
181
- */
182
- async detectPublicIp() {
183
- for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
184
- for (const service of IP_SERVICES) {
185
- const result = await fetchIpFromService(service);
186
- if (result.success) {
187
- return result;
188
- }
189
- }
190
- }
191
- return {
192
- ip: '',
193
- success: false,
194
- error: 'All IP detection services failed after retries',
195
- };
196
- }
197
- /**
198
- * Get public IP (from cache or detect)
199
- *
200
- * @returns Public IP address
201
- * @throws Error if unable to get IP and no cache exists
202
- */
203
- async getPublicIp() {
204
- // Try to get from cache first
205
- const config = await this.getConfig();
206
- if (config?.publicIp) {
207
- return config.publicIp;
208
- }
209
- // Try to detect
210
- const result = await this.detectPublicIp();
211
- if (result.success) {
212
- // Cache the result
213
- await this.saveConfig({
214
- publicIp: result.ip,
215
- lastUpdated: new Date().toISOString(),
216
- source: 'auto',
217
- });
218
- return result.ip;
219
- }
220
- throw new Error(result.error || 'Failed to detect public IP');
221
- }
222
- /**
223
- * Force refresh public IP (ignore cache)
224
- *
225
- * @returns New public IP address
226
- * @throws Error if detection fails
227
- */
228
- async refreshPublicIp() {
229
- const result = await this.detectPublicIp();
230
- if (result.success) {
231
- await this.saveConfig({
232
- publicIp: result.ip,
233
- lastUpdated: new Date().toISOString(),
234
- source: 'auto',
235
- });
236
- return result.ip;
237
- }
238
- throw new Error(result.error || 'Failed to detect public IP');
239
- }
240
- /**
241
- * Manually set public IP
242
- *
243
- * @param ip - IP address to set
244
- * @throws Error if IP format is invalid
245
- */
246
- async setPublicIp(ip) {
247
- const trimmedIp = ip.trim();
248
- if (!isValidIp(trimmedIp)) {
249
- throw new Error(`Invalid IP address format: ${ip}`);
250
- }
251
- await this.saveConfig({
252
- publicIp: trimmedIp,
253
- lastUpdated: new Date().toISOString(),
254
- source: 'manual',
255
- });
256
- }
257
- /**
258
- * Check if manual IP input is needed
259
- *
260
- * @returns true if NAT environment detected or detection fails
261
- */
262
- async needsManualInput() {
263
- // Check if we already have a cached IP
264
- const config = await this.getConfig();
265
- if (config?.publicIp) {
266
- return false;
267
- }
268
- // Try to detect
269
- const result = await this.detectPublicIp();
270
- if (!result.success) {
271
- return true;
272
- }
273
- // Check if detected IP is private (NAT)
274
- if ((0, network_1.isPrivateIp)(result.ip)) {
275
- return true;
276
- }
277
- // Cache the detected IP
278
- await this.saveConfig({
279
- publicIp: result.ip,
280
- lastUpdated: new Date().toISOString(),
281
- source: 'auto',
282
- });
283
- return false;
284
- }
285
- /**
286
- * Get IP source (auto or manual)
287
- *
288
- * @returns IP source or null if no config
289
- */
290
- async getIpSource() {
291
- const config = await this.getConfig();
292
- return config?.source || null;
293
- }
294
- }
295
- exports.PublicIpManager = PublicIpManager;
296
- //# sourceMappingURL=public-ip-manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"public-ip-manager.js","sourceRoot":"","sources":["../../src/services/public-ip-manager.ts"],"names":[],"mappings":"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"}
@@ -1,86 +0,0 @@
1
- /**
2
- * Quota Enforcer Service
3
- *
4
- * Monitors user traffic and enforces quota limits by disabling users
5
- * who exceed their allocated quota.
6
- *
7
- * @module services/quota-enforcer
8
- */
9
- import type { AlertLevel } from '../types/quota';
10
- /**
11
- * Result of quota enforcement check
12
- */
13
- export interface EnforcementResult {
14
- /** User email */
15
- email: string;
16
- /** Current usage in bytes */
17
- usedBytes: number;
18
- /** Quota limit in bytes (-1 for unlimited) */
19
- quotaBytes: number;
20
- /** Usage percentage */
21
- usagePercent: number;
22
- /** Alert level */
23
- alertLevel: AlertLevel;
24
- /** Whether user was disabled */
25
- wasDisabled: boolean;
26
- /** Previous status */
27
- previousStatus: 'active' | 'disabled' | 'exceeded';
28
- }
29
- /**
30
- * Summary of enforcement run
31
- */
32
- export interface EnforcementSummary {
33
- /** Total users checked */
34
- totalChecked: number;
35
- /** Users with normal usage */
36
- normalCount: number;
37
- /** Users with warning level usage */
38
- warningCount: number;
39
- /** Users who exceeded quota */
40
- exceededCount: number;
41
- /** Users newly disabled in this run */
42
- newlyDisabledCount: number;
43
- /** Detailed results per user */
44
- results: EnforcementResult[];
45
- /** Timestamp of enforcement run */
46
- timestamp: string;
47
- }
48
- /**
49
- * QuotaEnforcer class
50
- *
51
- * Checks all users against their quotas and disables those who exceed limits.
52
- */
53
- export declare class QuotaEnforcer {
54
- private quotaManager;
55
- private trafficManager;
56
- constructor(_configPath?: string, _serviceName?: string);
57
- /**
58
- * Check and enforce quotas for all users
59
- *
60
- * @param autoDisable - Whether to automatically disable users who exceed quota
61
- * @returns Enforcement summary
62
- */
63
- enforceQuotas(autoDisable?: boolean): Promise<EnforcementSummary>;
64
- /**
65
- * Check quota for a single user
66
- *
67
- * @param email - User email
68
- * @param autoDisable - Whether to automatically disable if exceeded
69
- * @returns Enforcement result or null if user has no quota
70
- */
71
- checkUser(email: string, autoDisable?: boolean): Promise<EnforcementResult | null>;
72
- /**
73
- * Get users who need attention (warning or exceeded)
74
- *
75
- * @returns Array of users needing attention
76
- */
77
- getUsersNeedingAttention(): Promise<EnforcementResult[]>;
78
- /**
79
- * Re-enable a disabled user
80
- *
81
- * @param email - User email
82
- * @param resetUsage - Whether to also reset usage counter
83
- */
84
- reenableUser(email: string, resetUsage?: boolean): Promise<void>;
85
- }
86
- //# sourceMappingURL=quota-enforcer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"quota-enforcer.d.ts","sourceRoot":"","sources":["../../src/services/quota-enforcer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IAEd,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAElB,8CAA8C;IAC9C,UAAU,EAAE,MAAM,CAAC;IAEnB,uBAAuB;IACvB,YAAY,EAAE,MAAM,CAAC;IAErB,kBAAkB;IAClB,UAAU,EAAE,UAAU,CAAC;IAEvB,gCAAgC;IAChC,WAAW,EAAE,OAAO,CAAC;IAErB,sBAAsB;IACtB,cAAc,EAAE,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAC;CACpD;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,0BAA0B;IAC1B,YAAY,EAAE,MAAM,CAAC;IAErB,8BAA8B;IAC9B,WAAW,EAAE,MAAM,CAAC;IAEpB,qCAAqC;IACrC,YAAY,EAAE,MAAM,CAAC;IAErB,+BAA+B;IAC/B,aAAa,EAAE,MAAM,CAAC;IAEtB,uCAAuC;IACvC,kBAAkB,EAAE,MAAM,CAAC;IAE3B,gCAAgC;IAChC,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAE7B,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,cAAc,CAAiB;gBAE3B,WAAW,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM;IAKvD;;;;;OAKG;IACG,aAAa,CAAC,WAAW,GAAE,OAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAwE7E;;;;;;OAMG;IACG,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,GAAE,OAAc,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAmC9F;;;;OAIG;IACG,wBAAwB,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAK9D;;;;;OAKG;IACG,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;CAO9E"}