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.
- package/README.md +102 -42
- package/dist/cli.mjs +8587 -0
- package/dist/cli.mjs.map +7 -0
- package/package.json +13 -5
- package/dist/cli.d.ts +0 -11
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -134
- package/dist/cli.js.map +0 -1
- package/dist/commands/clash.d.ts +0 -20
- package/dist/commands/clash.d.ts.map +0 -1
- package/dist/commands/clash.js +0 -156
- package/dist/commands/clash.js.map +0 -1
- package/dist/commands/config.d.ts +0 -56
- package/dist/commands/config.d.ts.map +0 -1
- package/dist/commands/config.js +0 -461
- package/dist/commands/config.js.map +0 -1
- package/dist/commands/interactive.d.ts +0 -55
- package/dist/commands/interactive.d.ts.map +0 -1
- package/dist/commands/interactive.js +0 -418
- package/dist/commands/interactive.js.map +0 -1
- package/dist/commands/logs.d.ts +0 -62
- package/dist/commands/logs.d.ts.map +0 -1
- package/dist/commands/logs.js +0 -389
- package/dist/commands/logs.js.map +0 -1
- package/dist/commands/quota.d.ts +0 -54
- package/dist/commands/quota.d.ts.map +0 -1
- package/dist/commands/quota.js +0 -661
- package/dist/commands/quota.js.map +0 -1
- package/dist/commands/review.d.ts +0 -8
- package/dist/commands/review.d.ts.map +0 -1
- package/dist/commands/review.js +0 -79
- package/dist/commands/review.js.map +0 -1
- package/dist/commands/service.d.ts +0 -43
- package/dist/commands/service.d.ts.map +0 -1
- package/dist/commands/service.js +0 -202
- package/dist/commands/service.js.map +0 -1
- package/dist/commands/user.d.ts +0 -49
- package/dist/commands/user.d.ts.map +0 -1
- package/dist/commands/user.js +0 -371
- package/dist/commands/user.js.map +0 -1
- package/dist/components/dashboard-widget.d.ts +0 -21
- package/dist/components/dashboard-widget.d.ts.map +0 -1
- package/dist/components/dashboard-widget.js +0 -234
- package/dist/components/dashboard-widget.js.map +0 -1
- package/dist/components/progress-bar.d.ts +0 -67
- package/dist/components/progress-bar.d.ts.map +0 -1
- package/dist/components/progress-bar.js +0 -138
- package/dist/components/progress-bar.js.map +0 -1
- package/dist/components/user-table.d.ts +0 -8
- package/dist/components/user-table.d.ts.map +0 -1
- package/dist/components/user-table.js +0 -91
- package/dist/components/user-table.js.map +0 -1
- package/dist/config/i18n.d.ts +0 -136
- package/dist/config/i18n.d.ts.map +0 -1
- package/dist/config/i18n.js +0 -323
- package/dist/config/i18n.js.map +0 -1
- package/dist/constants/error-codes.d.ts +0 -344
- package/dist/constants/error-codes.d.ts.map +0 -1
- package/dist/constants/error-codes.js +0 -462
- package/dist/constants/error-codes.js.map +0 -1
- package/dist/constants/exit-codes.d.ts +0 -49
- package/dist/constants/exit-codes.d.ts.map +0 -1
- package/dist/constants/exit-codes.js +0 -100
- package/dist/constants/exit-codes.js.map +0 -1
- package/dist/constants/paths.d.ts +0 -63
- package/dist/constants/paths.d.ts.map +0 -1
- package/dist/constants/paths.js +0 -78
- package/dist/constants/paths.js.map +0 -1
- package/dist/constants/quota.d.ts +0 -126
- package/dist/constants/quota.d.ts.map +0 -1
- package/dist/constants/quota.js +0 -135
- package/dist/constants/quota.js.map +0 -1
- package/dist/constants/review.d.ts +0 -14
- package/dist/constants/review.d.ts.map +0 -1
- package/dist/constants/review.js +0 -33
- package/dist/constants/review.js.map +0 -1
- package/dist/constants/supported-distros.d.ts +0 -17
- package/dist/constants/supported-distros.d.ts.map +0 -1
- package/dist/constants/supported-distros.js +0 -68
- package/dist/constants/supported-distros.js.map +0 -1
- package/dist/constants/theme.d.ts +0 -34
- package/dist/constants/theme.d.ts.map +0 -1
- package/dist/constants/theme.js +0 -52
- package/dist/constants/theme.js.map +0 -1
- package/dist/constants/timeouts.d.ts +0 -84
- package/dist/constants/timeouts.d.ts.map +0 -1
- package/dist/constants/timeouts.js +0 -111
- package/dist/constants/timeouts.js.map +0 -1
- package/dist/constants/ui-symbols.d.ts +0 -47
- package/dist/constants/ui-symbols.d.ts.map +0 -1
- package/dist/constants/ui-symbols.js +0 -48
- package/dist/constants/ui-symbols.js.map +0 -1
- package/dist/services/clash-config.d.ts +0 -16
- package/dist/services/clash-config.d.ts.map +0 -1
- package/dist/services/clash-config.js +0 -107
- package/dist/services/clash-config.js.map +0 -1
- package/dist/services/config-manager.d.ts +0 -90
- package/dist/services/config-manager.d.ts.map +0 -1
- package/dist/services/config-manager.js +0 -307
- package/dist/services/config-manager.js.map +0 -1
- package/dist/services/layout-manager.d.ts +0 -94
- package/dist/services/layout-manager.d.ts.map +0 -1
- package/dist/services/layout-manager.js +0 -192
- package/dist/services/layout-manager.js.map +0 -1
- package/dist/services/log-manager.d.ts +0 -157
- package/dist/services/log-manager.d.ts.map +0 -1
- package/dist/services/log-manager.js +0 -397
- package/dist/services/log-manager.js.map +0 -1
- package/dist/services/navigation-manager.d.ts +0 -23
- package/dist/services/navigation-manager.d.ts.map +0 -1
- package/dist/services/navigation-manager.js +0 -39
- package/dist/services/navigation-manager.js.map +0 -1
- package/dist/services/platform-detector.d.ts +0 -10
- package/dist/services/platform-detector.d.ts.map +0 -1
- package/dist/services/platform-detector.js +0 -106
- package/dist/services/platform-detector.js.map +0 -1
- package/dist/services/public-ip-manager.d.ts +0 -78
- package/dist/services/public-ip-manager.d.ts.map +0 -1
- package/dist/services/public-ip-manager.js +0 -296
- package/dist/services/public-ip-manager.js.map +0 -1
- package/dist/services/quota-enforcer.d.ts +0 -86
- package/dist/services/quota-enforcer.d.ts.map +0 -1
- package/dist/services/quota-enforcer.js +0 -151
- package/dist/services/quota-enforcer.js.map +0 -1
- package/dist/services/quota-manager.d.ts +0 -101
- package/dist/services/quota-manager.d.ts.map +0 -1
- package/dist/services/quota-manager.js +0 -257
- package/dist/services/quota-manager.js.map +0 -1
- package/dist/services/review/areas/community.d.ts +0 -9
- package/dist/services/review/areas/community.d.ts.map +0 -1
- package/dist/services/review/areas/community.js +0 -59
- package/dist/services/review/areas/community.js.map +0 -1
- package/dist/services/review/areas/contribution.d.ts +0 -9
- package/dist/services/review/areas/contribution.d.ts.map +0 -1
- package/dist/services/review/areas/contribution.js +0 -107
- package/dist/services/review/areas/contribution.js.map +0 -1
- package/dist/services/review/areas/documentation.d.ts +0 -9
- package/dist/services/review/areas/documentation.d.ts.map +0 -1
- package/dist/services/review/areas/documentation.js +0 -110
- package/dist/services/review/areas/documentation.js.map +0 -1
- package/dist/services/review/areas/license.d.ts +0 -9
- package/dist/services/review/areas/license.d.ts.map +0 -1
- package/dist/services/review/areas/license.js +0 -86
- package/dist/services/review/areas/license.js.map +0 -1
- package/dist/services/review/areas/quality.d.ts +0 -9
- package/dist/services/review/areas/quality.d.ts.map +0 -1
- package/dist/services/review/areas/quality.js +0 -84
- package/dist/services/review/areas/quality.js.map +0 -1
- package/dist/services/review/areas/security.d.ts +0 -9
- package/dist/services/review/areas/security.d.ts.map +0 -1
- package/dist/services/review/areas/security.js +0 -64
- package/dist/services/review/areas/security.js.map +0 -1
- package/dist/services/review/evidence.d.ts +0 -10
- package/dist/services/review/evidence.d.ts.map +0 -1
- package/dist/services/review/evidence.js +0 -40
- package/dist/services/review/evidence.js.map +0 -1
- package/dist/services/review/recommendations-filter.d.ts +0 -12
- package/dist/services/review/recommendations-filter.d.ts.map +0 -1
- package/dist/services/review/recommendations-filter.js +0 -20
- package/dist/services/review/recommendations-filter.js.map +0 -1
- package/dist/services/review/repo-scanner.d.ts +0 -8
- package/dist/services/review/repo-scanner.d.ts.map +0 -1
- package/dist/services/review/repo-scanner.js +0 -15
- package/dist/services/review/repo-scanner.js.map +0 -1
- package/dist/services/review/report-renderer.d.ts +0 -15
- package/dist/services/review/report-renderer.d.ts.map +0 -1
- package/dist/services/review/report-renderer.js +0 -120
- package/dist/services/review/report-renderer.js.map +0 -1
- package/dist/services/review/review-engine.d.ts +0 -15
- package/dist/services/review/review-engine.d.ts.map +0 -1
- package/dist/services/review/review-engine.js +0 -61
- package/dist/services/review/review-engine.js.map +0 -1
- package/dist/services/review/summary-builder.d.ts +0 -8
- package/dist/services/review/summary-builder.d.ts.map +0 -1
- package/dist/services/review/summary-builder.js +0 -26
- package/dist/services/review/summary-builder.js.map +0 -1
- package/dist/services/screen-manager.d.ts +0 -13
- package/dist/services/screen-manager.d.ts.map +0 -1
- package/dist/services/screen-manager.js +0 -42
- package/dist/services/screen-manager.js.map +0 -1
- package/dist/services/stats-config-manager.d.ts +0 -110
- package/dist/services/stats-config-manager.d.ts.map +0 -1
- package/dist/services/stats-config-manager.js +0 -443
- package/dist/services/stats-config-manager.js.map +0 -1
- package/dist/services/systemd-manager.d.ts +0 -197
- package/dist/services/systemd-manager.d.ts.map +0 -1
- package/dist/services/systemd-manager.js +0 -458
- package/dist/services/systemd-manager.js.map +0 -1
- package/dist/services/traffic-manager.d.ts +0 -106
- package/dist/services/traffic-manager.d.ts.map +0 -1
- package/dist/services/traffic-manager.js +0 -368
- package/dist/services/traffic-manager.js.map +0 -1
- package/dist/services/user-manager.d.ts +0 -90
- package/dist/services/user-manager.d.ts.map +0 -1
- package/dist/services/user-manager.js +0 -347
- package/dist/services/user-manager.js.map +0 -1
- package/dist/services/user-metadata-manager.d.ts +0 -85
- package/dist/services/user-metadata-manager.d.ts.map +0 -1
- package/dist/services/user-metadata-manager.js +0 -181
- package/dist/services/user-metadata-manager.js.map +0 -1
- package/dist/types/config.d.ts +0 -340
- package/dist/types/config.d.ts.map +0 -1
- package/dist/types/config.js +0 -7
- package/dist/types/config.js.map +0 -1
- package/dist/types/layout.d.ts +0 -119
- package/dist/types/layout.d.ts.map +0 -1
- package/dist/types/layout.js +0 -142
- package/dist/types/layout.js.map +0 -1
- package/dist/types/platform.d.ts +0 -72
- package/dist/types/platform.d.ts.map +0 -1
- package/dist/types/platform.js +0 -38
- package/dist/types/platform.js.map +0 -1
- package/dist/types/quota.d.ts +0 -158
- package/dist/types/quota.d.ts.map +0 -1
- package/dist/types/quota.js +0 -26
- package/dist/types/quota.js.map +0 -1
- package/dist/types/review.d.ts +0 -62
- package/dist/types/review.d.ts.map +0 -1
- package/dist/types/review.js +0 -8
- package/dist/types/review.js.map +0 -1
- package/dist/types/server-config.d.ts +0 -53
- package/dist/types/server-config.d.ts.map +0 -1
- package/dist/types/server-config.js +0 -19
- package/dist/types/server-config.js.map +0 -1
- package/dist/types/service.d.ts +0 -96
- package/dist/types/service.d.ts.map +0 -1
- package/dist/types/service.js +0 -7
- package/dist/types/service.js.map +0 -1
- package/dist/types/terminal.d.ts +0 -35
- package/dist/types/terminal.d.ts.map +0 -1
- package/dist/types/terminal.js +0 -20
- package/dist/types/terminal.js.map +0 -1
- package/dist/types/ui-components.d.ts +0 -53
- package/dist/types/ui-components.d.ts.map +0 -1
- package/dist/types/ui-components.js +0 -3
- package/dist/types/ui-components.js.map +0 -1
- package/dist/types/user-metadata.d.ts +0 -43
- package/dist/types/user-metadata.d.ts.map +0 -1
- package/dist/types/user-metadata.js +0 -17
- package/dist/types/user-metadata.js.map +0 -1
- package/dist/types/user.d.ts +0 -134
- package/dist/types/user.d.ts.map +0 -1
- package/dist/types/user.js +0 -7
- package/dist/types/user.js.map +0 -1
- package/dist/utils/clipboard.d.ts +0 -21
- package/dist/utils/clipboard.d.ts.map +0 -1
- package/dist/utils/clipboard.js +0 -45
- package/dist/utils/clipboard.js.map +0 -1
- package/dist/utils/error-formatter.d.ts +0 -60
- package/dist/utils/error-formatter.d.ts.map +0 -1
- package/dist/utils/error-formatter.js +0 -244
- package/dist/utils/error-formatter.js.map +0 -1
- package/dist/utils/errors.d.ts +0 -92
- package/dist/utils/errors.d.ts.map +0 -1
- package/dist/utils/errors.js +0 -143
- package/dist/utils/errors.js.map +0 -1
- package/dist/utils/firewall.d.ts +0 -14
- package/dist/utils/firewall.d.ts.map +0 -1
- package/dist/utils/firewall.js +0 -78
- package/dist/utils/firewall.js.map +0 -1
- package/dist/utils/format.d.ts +0 -93
- package/dist/utils/format.d.ts.map +0 -1
- package/dist/utils/format.js +0 -240
- package/dist/utils/format.js.map +0 -1
- package/dist/utils/icons.d.ts +0 -53
- package/dist/utils/icons.d.ts.map +0 -1
- package/dist/utils/icons.js +0 -143
- package/dist/utils/icons.js.map +0 -1
- package/dist/utils/layout.d.ts +0 -142
- package/dist/utils/layout.d.ts.map +0 -1
- package/dist/utils/layout.js +0 -381
- package/dist/utils/layout.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -160
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -351
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/network.d.ts +0 -39
- package/dist/utils/network.d.ts.map +0 -1
- package/dist/utils/network.js +0 -227
- package/dist/utils/network.js.map +0 -1
- package/dist/utils/os-detection.d.ts +0 -10
- package/dist/utils/os-detection.d.ts.map +0 -1
- package/dist/utils/os-detection.js +0 -86
- package/dist/utils/os-detection.js.map +0 -1
- package/dist/utils/preflight.d.ts +0 -57
- package/dist/utils/preflight.d.ts.map +0 -1
- package/dist/utils/preflight.js +0 -215
- package/dist/utils/preflight.js.map +0 -1
- package/dist/utils/repo-scan.d.ts +0 -54
- package/dist/utils/repo-scan.d.ts.map +0 -1
- package/dist/utils/repo-scan.js +0 -165
- package/dist/utils/repo-scan.js.map +0 -1
- package/dist/utils/report-output.d.ts +0 -13
- package/dist/utils/report-output.d.ts.map +0 -1
- package/dist/utils/report-output.js +0 -33
- package/dist/utils/report-output.js.map +0 -1
- package/dist/utils/review-id.d.ts +0 -8
- package/dist/utils/review-id.d.ts.map +0 -1
- package/dist/utils/review-id.js +0 -17
- package/dist/utils/review-id.js.map +0 -1
- package/dist/utils/splash.d.ts +0 -21
- package/dist/utils/splash.d.ts.map +0 -1
- package/dist/utils/splash.js +0 -179
- package/dist/utils/splash.js.map +0 -1
- package/dist/utils/terminal.d.ts +0 -32
- package/dist/utils/terminal.d.ts.map +0 -1
- package/dist/utils/terminal.js +0 -93
- package/dist/utils/terminal.js.map +0 -1
- package/dist/utils/traffic-formatter.d.ts +0 -45
- package/dist/utils/traffic-formatter.d.ts.map +0 -1
- package/dist/utils/traffic-formatter.js +0 -131
- package/dist/utils/traffic-formatter.js.map +0 -1
- package/dist/utils/validator.d.ts +0 -102
- package/dist/utils/validator.d.ts.map +0 -1
- package/dist/utils/validator.js +0 -238
- package/dist/utils/validator.js.map +0 -1
- package/dist/utils/vless-link.d.ts +0 -27
- package/dist/utils/vless-link.d.ts.map +0 -1
- package/dist/utils/vless-link.js +0 -69
- package/dist/utils/vless-link.js.map +0 -1
- package/dist/utils/which.d.ts +0 -13
- package/dist/utils/which.d.ts.map +0 -1
- package/dist/utils/which.js +0 -28
- 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"}
|