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,157 +0,0 @@
1
- /**
2
- * LogManager - System Log Management via journalctl
3
- *
4
- * Provides safe interface to query and follow systemd journal logs
5
- *
6
- * @module services/log-manager
7
- */
8
- import { ChildProcess } from 'child_process';
9
- /**
10
- * Log entry structure
11
- */
12
- export interface LogEntry {
13
- /** Log timestamp */
14
- timestamp: Date;
15
- /** Log message */
16
- message: string;
17
- /** Log level */
18
- level: string;
19
- /** Process ID */
20
- pid?: string;
21
- /** Hostname */
22
- hostname?: string;
23
- /** Systemd unit */
24
- unit?: string;
25
- /** Raw log data */
26
- raw?: string;
27
- }
28
- /**
29
- * Log query options
30
- */
31
- export interface LogQueryOptions {
32
- /** Filter by log level (error, warning, info, debug) */
33
- level?: string;
34
- /** Time range start (e.g., "1 hour ago", "today", "2024-01-01") */
35
- since?: string;
36
- /** Time range end */
37
- until?: string;
38
- /** Number of lines to retrieve */
39
- lines?: number;
40
- /** Follow mode (real-time) */
41
- follow?: boolean;
42
- }
43
- /**
44
- * Log follow process
45
- */
46
- export interface LogFollowProcess {
47
- /** Kill the follow process */
48
- kill: () => void;
49
- /** Child process */
50
- process: ChildProcess;
51
- }
52
- /**
53
- * LogManager - Query and follow systemd journal logs
54
- */
55
- export declare class LogManager {
56
- private serviceName;
57
- /**
58
- * Create a new LogManager
59
- *
60
- * @param serviceName - Service name to query logs for
61
- */
62
- constructor(serviceName: string);
63
- /**
64
- * Validate service name to prevent command injection
65
- *
66
- * @param name - Service name to validate
67
- * @throws Error if invalid
68
- */
69
- private validateServiceName;
70
- /**
71
- * Check if journalctl is available
72
- *
73
- * @returns True if journalctl is available
74
- */
75
- isJournalctlAvailable(): boolean;
76
- /**
77
- * Map log level to journalctl priority
78
- *
79
- * @param level - Log level (error, warning, info, debug)
80
- * @returns journalctl priority string
81
- */
82
- private mapLevelToPriority;
83
- /**
84
- * Map journalctl priority to readable level
85
- *
86
- * @param priority - Journalctl priority (0-7)
87
- * @returns Readable log level
88
- */
89
- private mapPriorityToLevel;
90
- /**
91
- * Parse a JSON log entry from journalctl
92
- *
93
- * @param jsonLine - JSON string from journalctl -o json
94
- * @returns Parsed log entry
95
- */
96
- parseLogEntry(jsonLine: string): LogEntry;
97
- /**
98
- * Query logs with filters
99
- *
100
- * @param options - Query options
101
- * @returns Array of log entries
102
- */
103
- queryLogs(options?: LogQueryOptions): Promise<LogEntry[]>;
104
- /**
105
- * Follow logs in real-time
106
- *
107
- * @param options - Query options
108
- * @param onLog - Callback for each log entry
109
- * @returns Follow process controller
110
- */
111
- followLogs(options?: LogQueryOptions, onLog?: (_entry: LogEntry) => void): Promise<LogFollowProcess>;
112
- /**
113
- * Read last N lines from access log file
114
- *
115
- * @param lines - Number of lines to read (default: 50)
116
- * @returns Array of log entry objects
117
- */
118
- readAccessLog(lines?: number): Promise<LogEntry[]>;
119
- /**
120
- * Read last N lines from error log file
121
- *
122
- * @param lines - Number of lines to read (default: 50)
123
- * @returns Array of log entry objects
124
- */
125
- readErrorLog(lines?: number): Promise<LogEntry[]>;
126
- /**
127
- * Check if a log file exists
128
- *
129
- * @param type - Log type ('access' or 'error')
130
- * @returns true if file exists
131
- */
132
- logExists(type: 'access' | 'error'): Promise<boolean>;
133
- /**
134
- * Get log file size
135
- *
136
- * @param type - Log type ('access' or 'error')
137
- * @returns File size in bytes, or 0 if file doesn't exist
138
- */
139
- getLogSize(type: 'access' | 'error'): Promise<number>;
140
- /**
141
- * Read last N lines from a log file
142
- *
143
- * @param logPath - Path to log file
144
- * @param lines - Number of lines to read
145
- * @returns Array of log entry objects
146
- */
147
- private readLogFile;
148
- /**
149
- * Parse a log line from file into LogEntry
150
- *
151
- * @param line - Raw log line
152
- * @param lineNumber - Line number in file
153
- * @returns LogEntry object
154
- */
155
- private parseFileLogEntry;
156
- }
157
- //# sourceMappingURL=log-manager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"log-manager.d.ts","sourceRoot":"","sources":["../../src/services/log-manager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAS,YAAY,EAAE,MAAM,eAAe,CAAC;AASpD;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,oBAAoB;IACpB,SAAS,EAAE,IAAI,CAAC;IAEhB,kBAAkB;IAClB,OAAO,EAAE,MAAM,CAAC;IAEhB,gBAAgB;IAChB,KAAK,EAAE,MAAM,CAAC;IAEd,iBAAiB;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,mBAAmB;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,mBAAmB;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,8BAA8B;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8BAA8B;IAC9B,IAAI,EAAE,MAAM,IAAI,CAAC;IAEjB,oBAAoB;IACpB,OAAO,EAAE,YAAY,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,WAAW,CAAS;IAE5B;;;;OAIG;gBACS,WAAW,EAAE,MAAM;IAK/B;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAuB3B;;;;OAIG;IACH,qBAAqB,IAAI,OAAO;IAShC;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAe1B;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAe1B;;;;;OAKG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ;IAkCzC;;;;;OAKG;IACG,SAAS,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IA8FnE;;;;;;OAMG;IACG,UAAU,CACd,OAAO,GAAE,eAAoB,EAC7B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,KAAK,IAAI,GACjC,OAAO,CAAC,gBAAgB,CAAC;IAwE5B;;;;;OAKG;IACG,aAAa,CAAC,KAAK,GAAE,MAA+B,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAIhF;;;;;OAKG;IACG,YAAY,CAAC,KAAK,GAAE,MAA+B,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAI/E;;;;;OAKG;IACG,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAK3D;;;;;OAKG;IACG,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAU3D;;;;;;OAMG;YACW,WAAW;IAoBzB;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;CAiC1B"}
@@ -1,397 +0,0 @@
1
- "use strict";
2
- /**
3
- * LogManager - System Log Management via journalctl
4
- *
5
- * Provides safe interface to query and follow systemd journal logs
6
- *
7
- * @module services/log-manager
8
- */
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.LogManager = void 0;
11
- const child_process_1 = require("child_process");
12
- const fs_1 = require("fs");
13
- const promises_1 = require("fs/promises");
14
- const which_1 = require("../utils/which");
15
- const paths_1 = require("../constants/paths");
16
- const DEFAULT_LOG_LINES = 200;
17
- const DEFAULT_FILE_LOG_LINES = 50;
18
- /**
19
- * LogManager - Query and follow systemd journal logs
20
- */
21
- class LogManager {
22
- /**
23
- * Create a new LogManager
24
- *
25
- * @param serviceName - Service name to query logs for
26
- */
27
- constructor(serviceName) {
28
- this.validateServiceName(serviceName);
29
- this.serviceName = serviceName;
30
- }
31
- /**
32
- * Validate service name to prevent command injection
33
- *
34
- * @param name - Service name to validate
35
- * @throws Error if invalid
36
- */
37
- validateServiceName(name) {
38
- if (!name || name.trim().length === 0) {
39
- throw new Error('Service name cannot be empty');
40
- }
41
- // Prevent path traversal
42
- if (name.includes('/') || name.includes('\\') || name.includes('..')) {
43
- throw new Error(`Invalid service name: ${name} (path traversal detected)`);
44
- }
45
- // Prevent command injection
46
- const dangerousChars = /[;&|`$()]/;
47
- if (dangerousChars.test(name)) {
48
- throw new Error(`Invalid service name: ${name} (potentially dangerous characters detected)`);
49
- }
50
- // Only allow alphanumeric, dash, underscore, and dot
51
- const validPattern = /^[a-zA-Z0-9_.-]+$/;
52
- if (!validPattern.test(name)) {
53
- throw new Error(`Invalid service name: ${name}`);
54
- }
55
- }
56
- /**
57
- * Check if journalctl is available
58
- *
59
- * @returns True if journalctl is available
60
- */
61
- isJournalctlAvailable() {
62
- try {
63
- const journalctlPath = (0, which_1.which)('journalctl');
64
- return journalctlPath !== null && (0, fs_1.existsSync)(journalctlPath);
65
- }
66
- catch {
67
- return false;
68
- }
69
- }
70
- /**
71
- * Map log level to journalctl priority
72
- *
73
- * @param level - Log level (error, warning, info, debug)
74
- * @returns journalctl priority string
75
- */
76
- mapLevelToPriority(level) {
77
- const mapping = {
78
- emergency: 'emerg',
79
- alert: 'alert',
80
- critical: 'crit',
81
- error: 'err',
82
- warning: 'warning',
83
- notice: 'notice',
84
- info: 'info',
85
- debug: 'debug',
86
- };
87
- return mapping[level.toLowerCase()] || level;
88
- }
89
- /**
90
- * Map journalctl priority to readable level
91
- *
92
- * @param priority - Journalctl priority (0-7)
93
- * @returns Readable log level
94
- */
95
- mapPriorityToLevel(priority) {
96
- const mapping = {
97
- '0': 'emergency',
98
- '1': 'alert',
99
- '2': 'critical',
100
- '3': 'error',
101
- '4': 'warning',
102
- '5': 'notice',
103
- '6': 'info',
104
- '7': 'debug',
105
- };
106
- return mapping[priority] || 'unknown';
107
- }
108
- /**
109
- * Parse a JSON log entry from journalctl
110
- *
111
- * @param jsonLine - JSON string from journalctl -o json
112
- * @returns Parsed log entry
113
- */
114
- parseLogEntry(jsonLine) {
115
- try {
116
- const data = JSON.parse(jsonLine);
117
- // Extract timestamp (microseconds since epoch)
118
- const timestampMicros = parseInt(data.__REALTIME_TIMESTAMP || '0', 10);
119
- const timestamp = new Date(timestampMicros / 1000);
120
- // Extract message
121
- const message = data.MESSAGE || '';
122
- // Extract and map priority
123
- const priority = data.PRIORITY || '6';
124
- const level = this.mapPriorityToLevel(priority);
125
- // Extract metadata
126
- const pid = data._PID;
127
- const hostname = data._HOSTNAME;
128
- const unit = data._SYSTEMD_UNIT;
129
- return {
130
- timestamp,
131
- message,
132
- level,
133
- pid,
134
- hostname,
135
- unit,
136
- raw: jsonLine,
137
- };
138
- }
139
- catch (error) {
140
- throw new Error(`Failed to parse log entry: ${error.message}`);
141
- }
142
- }
143
- /**
144
- * Query logs with filters
145
- *
146
- * @param options - Query options
147
- * @returns Array of log entries
148
- */
149
- async queryLogs(options = {}) {
150
- if (!this.isJournalctlAvailable()) {
151
- throw new Error('journalctl is not available on this system. Please ensure systemd is installed.');
152
- }
153
- const lineLimit = options.lines ?? DEFAULT_LOG_LINES;
154
- // Build journalctl arguments
155
- const args = [
156
- '-u',
157
- this.serviceName, // Unit filter
158
- '-o',
159
- 'json', // JSON output
160
- '--no-pager', // Disable pager
161
- ];
162
- // Add level filter
163
- if (options.level) {
164
- const priority = this.mapLevelToPriority(options.level);
165
- args.push('-p', priority);
166
- }
167
- // Add time range filters
168
- if (options.since) {
169
- args.push('--since', options.since);
170
- }
171
- if (options.until) {
172
- args.push('--until', options.until);
173
- }
174
- // Add line limit
175
- if (Number.isFinite(lineLimit) && lineLimit > 0) {
176
- args.push('-n', String(lineLimit));
177
- }
178
- return new Promise((resolve, reject) => {
179
- const child = (0, child_process_1.spawn)('journalctl', args, {
180
- stdio: ['ignore', 'pipe', 'pipe'],
181
- });
182
- let stdout = '';
183
- let stderr = '';
184
- child.stdout.on('data', (data) => {
185
- stdout += data.toString();
186
- });
187
- child.stderr.on('data', (data) => {
188
- stderr += data.toString();
189
- });
190
- child.on('close', (code) => {
191
- if (code !== 0) {
192
- const errorMsg = stderr.trim() || `journalctl exited with code ${code}`;
193
- // Provide helpful error messages
194
- if (errorMsg.includes('permission') || errorMsg.includes('access')) {
195
- reject(new Error(`无权访问日志。请使用 sudo 或以 root 用户运行。\n详细错误: ${errorMsg}`));
196
- }
197
- else {
198
- reject(new Error(`查询日志失败: ${errorMsg}`));
199
- }
200
- return;
201
- }
202
- // Parse log entries
203
- const logs = [];
204
- const lines = stdout.trim().split('\n');
205
- for (const line of lines) {
206
- if (!line.trim())
207
- continue;
208
- try {
209
- const entry = this.parseLogEntry(line);
210
- logs.push(entry);
211
- }
212
- catch (error) {
213
- // Skip malformed entries
214
- console.warn(`Skipped malformed log entry: ${error.message}`);
215
- }
216
- }
217
- resolve(logs);
218
- });
219
- child.on('error', (error) => {
220
- reject(new Error(`Failed to execute journalctl: ${error.message}`));
221
- });
222
- });
223
- }
224
- /**
225
- * Follow logs in real-time
226
- *
227
- * @param options - Query options
228
- * @param onLog - Callback for each log entry
229
- * @returns Follow process controller
230
- */
231
- async followLogs(options = {}, onLog) {
232
- if (!this.isJournalctlAvailable()) {
233
- throw new Error('journalctl is not available on this system. Please ensure systemd is installed.');
234
- }
235
- // Build journalctl arguments
236
- const args = [
237
- '-u',
238
- this.serviceName,
239
- '-o',
240
- 'json',
241
- '--no-pager',
242
- '-f', // Follow mode
243
- ];
244
- // Add level filter
245
- if (options.level) {
246
- const priority = this.mapLevelToPriority(options.level);
247
- args.push('-p', priority);
248
- }
249
- // Add line limit for initial output
250
- if (options.lines) {
251
- args.push('-n', String(options.lines));
252
- }
253
- const child = (0, child_process_1.spawn)('journalctl', args, {
254
- stdio: ['ignore', 'pipe', 'pipe'],
255
- });
256
- // Handle stdout
257
- if (onLog) {
258
- let buffer = '';
259
- child.stdout.on('data', (data) => {
260
- buffer += data.toString();
261
- const lines = buffer.split('\n');
262
- // Process complete lines
263
- for (let i = 0; i < lines.length - 1; i++) {
264
- const line = lines[i].trim();
265
- if (!line)
266
- continue;
267
- try {
268
- const entry = this.parseLogEntry(line);
269
- onLog(entry);
270
- }
271
- catch (error) {
272
- console.warn(`Skipped malformed log entry: ${error.message}`);
273
- }
274
- }
275
- // Keep incomplete line in buffer
276
- buffer = lines[lines.length - 1];
277
- });
278
- }
279
- // Handle stderr
280
- child.stderr.on('data', (data) => {
281
- const errorMsg = data.toString();
282
- console.error(`journalctl error: ${errorMsg}`);
283
- });
284
- return {
285
- process: child,
286
- kill: () => {
287
- child.kill('SIGINT');
288
- },
289
- };
290
- }
291
- /**
292
- * Read last N lines from access log file
293
- *
294
- * @param lines - Number of lines to read (default: 50)
295
- * @returns Array of log entry objects
296
- */
297
- async readAccessLog(lines = DEFAULT_FILE_LOG_LINES) {
298
- return this.readLogFile(paths_1.DEFAULT_PATHS.ACCESS_LOG, lines);
299
- }
300
- /**
301
- * Read last N lines from error log file
302
- *
303
- * @param lines - Number of lines to read (default: 50)
304
- * @returns Array of log entry objects
305
- */
306
- async readErrorLog(lines = DEFAULT_FILE_LOG_LINES) {
307
- return this.readLogFile(paths_1.DEFAULT_PATHS.ERROR_LOG, lines);
308
- }
309
- /**
310
- * Check if a log file exists
311
- *
312
- * @param type - Log type ('access' or 'error')
313
- * @returns true if file exists
314
- */
315
- async logExists(type) {
316
- const logPath = type === 'access' ? paths_1.DEFAULT_PATHS.ACCESS_LOG : paths_1.DEFAULT_PATHS.ERROR_LOG;
317
- return (0, fs_1.existsSync)(logPath);
318
- }
319
- /**
320
- * Get log file size
321
- *
322
- * @param type - Log type ('access' or 'error')
323
- * @returns File size in bytes, or 0 if file doesn't exist
324
- */
325
- async getLogSize(type) {
326
- const logPath = type === 'access' ? paths_1.DEFAULT_PATHS.ACCESS_LOG : paths_1.DEFAULT_PATHS.ERROR_LOG;
327
- try {
328
- const stats = await (0, promises_1.stat)(logPath);
329
- return stats.size;
330
- }
331
- catch {
332
- return 0;
333
- }
334
- }
335
- /**
336
- * Read last N lines from a log file
337
- *
338
- * @param logPath - Path to log file
339
- * @param lines - Number of lines to read
340
- * @returns Array of log entry objects
341
- */
342
- async readLogFile(logPath, lines) {
343
- if (!(0, fs_1.existsSync)(logPath)) {
344
- return [];
345
- }
346
- try {
347
- const content = await (0, promises_1.readFile)(logPath, 'utf-8');
348
- const allLines = content.split('\n').filter((line) => line.trim());
349
- // Get last N lines
350
- const lastLines = allLines.slice(-lines);
351
- return lastLines.map((line, index) => this.parseFileLogEntry(line, allLines.length - lines + index + 1));
352
- }
353
- catch (error) {
354
- throw new Error(`读取日志文件失败: ${error.message}`);
355
- }
356
- }
357
- /**
358
- * Parse a log line from file into LogEntry
359
- *
360
- * @param line - Raw log line
361
- * @param lineNumber - Line number in file
362
- * @returns LogEntry object
363
- */
364
- parseFileLogEntry(line, _lineNumber) {
365
- // Try to parse timestamp from common log formats
366
- // Format 1: 2024/01/15 10:30:00 [Info] message
367
- // Format 2: 2024-01-15T10:30:00.000Z message
368
- let timestamp = new Date();
369
- let level = 'info';
370
- let message = line;
371
- // Try to extract timestamp
372
- const timestampMatch = line.match(/^(\d{4}[/-]\d{2}[/-]\d{2}[T\s]\d{2}:\d{2}:\d{2})/);
373
- if (timestampMatch) {
374
- try {
375
- timestamp = new Date(timestampMatch[1].replace(' ', 'T'));
376
- message = line.substring(timestampMatch[0].length).trim();
377
- }
378
- catch {
379
- // Keep default timestamp
380
- }
381
- }
382
- // Try to extract log level
383
- const levelMatch = message.match(/^\[?(Info|Warning|Error|Debug)\]?:?\s*/i);
384
- if (levelMatch) {
385
- level = levelMatch[1].toLowerCase();
386
- message = message.substring(levelMatch[0].length);
387
- }
388
- return {
389
- timestamp,
390
- message,
391
- level,
392
- raw: line,
393
- };
394
- }
395
- }
396
- exports.LogManager = LogManager;
397
- //# sourceMappingURL=log-manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"log-manager.js","sourceRoot":"","sources":["../../src/services/log-manager.ts"],"names":[],"mappings":"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"}
@@ -1,23 +0,0 @@
1
- import { INavigationManager } from '../types/ui-components';
2
- export declare class NavigationManager implements INavigationManager {
3
- private stack;
4
- /**
5
- * Pushes a new menu level onto the stack.
6
- * @param label - The display label for the new level.
7
- */
8
- push(label: string): void;
9
- /**
10
- * Pops the current level off the stack.
11
- * @returns The label of the popped level, or undefined if at root.
12
- */
13
- pop(): string | undefined;
14
- /**
15
- * Returns the formatted breadcrumb string (e.g., "Home > User Management")
16
- */
17
- getBreadcrumb(): string;
18
- /**
19
- * Gets the current depth of the stack.
20
- */
21
- getDepth(): number;
22
- }
23
- //# sourceMappingURL=navigation-manager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"navigation-manager.d.ts","sourceRoot":"","sources":["../../src/services/navigation-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,qBAAa,iBAAkB,YAAW,kBAAkB;IAC1D,OAAO,CAAC,KAAK,CAAsB;IAEnC;;;OAGG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIzB;;;OAGG;IACH,GAAG,IAAI,MAAM,GAAG,SAAS;IAOzB;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,QAAQ,IAAI,MAAM;CAGnB"}
@@ -1,39 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NavigationManager = void 0;
4
- class NavigationManager {
5
- constructor() {
6
- this.stack = ['Home'];
7
- }
8
- /**
9
- * Pushes a new menu level onto the stack.
10
- * @param label - The display label for the new level.
11
- */
12
- push(label) {
13
- this.stack.push(label);
14
- }
15
- /**
16
- * Pops the current level off the stack.
17
- * @returns The label of the popped level, or undefined if at root.
18
- */
19
- pop() {
20
- if (this.stack.length <= 1) {
21
- return undefined;
22
- }
23
- return this.stack.pop();
24
- }
25
- /**
26
- * Returns the formatted breadcrumb string (e.g., "Home > User Management")
27
- */
28
- getBreadcrumb() {
29
- return this.stack.join(' > ');
30
- }
31
- /**
32
- * Gets the current depth of the stack.
33
- */
34
- getDepth() {
35
- return this.stack.length;
36
- }
37
- }
38
- exports.NavigationManager = NavigationManager;
39
- //# sourceMappingURL=navigation-manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"navigation-manager.js","sourceRoot":"","sources":["../../src/services/navigation-manager.ts"],"names":[],"mappings":";;;AAEA,MAAa,iBAAiB;IAA9B;QACU,UAAK,GAAa,CAAC,MAAM,CAAC,CAAC;IAkCrC,CAAC;IAhCC;;;OAGG;IACH,IAAI,CAAC,KAAa;QAChB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED;;;OAGG;IACH,GAAG;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAC3B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;CACF;AAnCD,8CAmCC"}
@@ -1,10 +0,0 @@
1
- /**
2
- * Platform detection service
3
- * Feature: 009-cross-platform-support
4
- */
5
- import { PlatformInfo } from '../types/platform.js';
6
- /**
7
- * Get complete platform information
8
- */
9
- export declare function detectPlatform(): PlatformInfo | null;
10
- //# sourceMappingURL=platform-detector.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"platform-detector.d.ts","sourceRoot":"","sources":["../../src/services/platform-detector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAiFpD;;GAEG;AACH,wBAAgB,cAAc,IAAI,YAAY,GAAG,IAAI,CAoBpD"}