xray-manager 1.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 (91) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +798 -0
  3. package/dist/cli.d.ts +11 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +113 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/config.d.ts +49 -0
  8. package/dist/commands/config.d.ts.map +1 -0
  9. package/dist/commands/config.js +295 -0
  10. package/dist/commands/config.js.map +1 -0
  11. package/dist/commands/interactive.d.ts +83 -0
  12. package/dist/commands/interactive.d.ts.map +1 -0
  13. package/dist/commands/interactive.js +362 -0
  14. package/dist/commands/interactive.js.map +1 -0
  15. package/dist/commands/logs.d.ts +43 -0
  16. package/dist/commands/logs.d.ts.map +1 -0
  17. package/dist/commands/logs.js +257 -0
  18. package/dist/commands/logs.js.map +1 -0
  19. package/dist/commands/service.d.ts +43 -0
  20. package/dist/commands/service.d.ts.map +1 -0
  21. package/dist/commands/service.js +177 -0
  22. package/dist/commands/service.js.map +1 -0
  23. package/dist/commands/user.d.ts +43 -0
  24. package/dist/commands/user.d.ts.map +1 -0
  25. package/dist/commands/user.js +212 -0
  26. package/dist/commands/user.js.map +1 -0
  27. package/dist/constants/exit-codes.d.ts +49 -0
  28. package/dist/constants/exit-codes.d.ts.map +1 -0
  29. package/dist/constants/exit-codes.js +100 -0
  30. package/dist/constants/exit-codes.js.map +1 -0
  31. package/dist/constants/paths.d.ts +57 -0
  32. package/dist/constants/paths.d.ts.map +1 -0
  33. package/dist/constants/paths.js +72 -0
  34. package/dist/constants/paths.js.map +1 -0
  35. package/dist/constants/timeouts.d.ts +84 -0
  36. package/dist/constants/timeouts.d.ts.map +1 -0
  37. package/dist/constants/timeouts.js +111 -0
  38. package/dist/constants/timeouts.js.map +1 -0
  39. package/dist/services/config-manager.d.ts +66 -0
  40. package/dist/services/config-manager.d.ts.map +1 -0
  41. package/dist/services/config-manager.js +206 -0
  42. package/dist/services/config-manager.js.map +1 -0
  43. package/dist/services/log-manager.d.ts +113 -0
  44. package/dist/services/log-manager.d.ts.map +1 -0
  45. package/dist/services/log-manager.js +288 -0
  46. package/dist/services/log-manager.js.map +1 -0
  47. package/dist/services/systemd-manager.d.ts +197 -0
  48. package/dist/services/systemd-manager.d.ts.map +1 -0
  49. package/dist/services/systemd-manager.js +458 -0
  50. package/dist/services/systemd-manager.js.map +1 -0
  51. package/dist/services/user-manager.d.ts +63 -0
  52. package/dist/services/user-manager.d.ts.map +1 -0
  53. package/dist/services/user-manager.js +219 -0
  54. package/dist/services/user-manager.js.map +1 -0
  55. package/dist/types/config.d.ts +256 -0
  56. package/dist/types/config.d.ts.map +1 -0
  57. package/dist/types/config.js +7 -0
  58. package/dist/types/config.js.map +1 -0
  59. package/dist/types/service.d.ts +96 -0
  60. package/dist/types/service.d.ts.map +1 -0
  61. package/dist/types/service.js +7 -0
  62. package/dist/types/service.js.map +1 -0
  63. package/dist/types/user.d.ts +114 -0
  64. package/dist/types/user.d.ts.map +1 -0
  65. package/dist/types/user.js +7 -0
  66. package/dist/types/user.js.map +1 -0
  67. package/dist/utils/clipboard.d.ts +21 -0
  68. package/dist/utils/clipboard.d.ts.map +1 -0
  69. package/dist/utils/clipboard.js +45 -0
  70. package/dist/utils/clipboard.js.map +1 -0
  71. package/dist/utils/format.d.ts +93 -0
  72. package/dist/utils/format.d.ts.map +1 -0
  73. package/dist/utils/format.js +242 -0
  74. package/dist/utils/format.js.map +1 -0
  75. package/dist/utils/logger.d.ts +113 -0
  76. package/dist/utils/logger.d.ts.map +1 -0
  77. package/dist/utils/logger.js +260 -0
  78. package/dist/utils/logger.js.map +1 -0
  79. package/dist/utils/preflight.d.ts +57 -0
  80. package/dist/utils/preflight.d.ts.map +1 -0
  81. package/dist/utils/preflight.js +215 -0
  82. package/dist/utils/preflight.js.map +1 -0
  83. package/dist/utils/validator.d.ts +102 -0
  84. package/dist/utils/validator.d.ts.map +1 -0
  85. package/dist/utils/validator.js +238 -0
  86. package/dist/utils/validator.js.map +1 -0
  87. package/dist/utils/which.d.ts +13 -0
  88. package/dist/utils/which.d.ts.map +1 -0
  89. package/dist/utils/which.js +28 -0
  90. package/dist/utils/which.js.map +1 -0
  91. package/package.json +69 -0
@@ -0,0 +1,114 @@
1
+ /**
2
+ * 用户管理相关类型定义
3
+ * @module types/user
4
+ */
5
+ /**
6
+ * 用户实体
7
+ */
8
+ export interface User {
9
+ /** 用户唯一标识(UUID v4) */
10
+ id: string;
11
+ /** 用户邮箱或标识符 */
12
+ email: string;
13
+ /** 创建时间(ISO 8601 字符串) */
14
+ createdAt: string;
15
+ /** 状态:active, disabled */
16
+ status: 'active' | 'disabled';
17
+ /** 流控模式(可选) */
18
+ flow?: string;
19
+ /** 协议级别 */
20
+ level: number;
21
+ /** 最后修改时间 */
22
+ updatedAt?: string;
23
+ }
24
+ /**
25
+ * 用户创建参数
26
+ */
27
+ export interface CreateUserParams {
28
+ /** 用户邮箱或标识符 */
29
+ email: string;
30
+ /** 流控模式(可选,默认根据协议) */
31
+ flow?: string;
32
+ /** 协议级别(可选,默认 0) */
33
+ level?: number;
34
+ }
35
+ /**
36
+ * 用户更新参数
37
+ */
38
+ export interface UpdateUserParams {
39
+ /** 用户邮箱或标识符(用于查找) */
40
+ email: string;
41
+ /** 新的流控模式(可选) */
42
+ flow?: string;
43
+ /** 新的协议级别(可选) */
44
+ level?: number;
45
+ /** 新的状态(可选) */
46
+ status?: 'active' | 'disabled';
47
+ }
48
+ /**
49
+ * 用户分享信息
50
+ */
51
+ export interface UserShareInfo {
52
+ /** 用户基本信息 */
53
+ user: User;
54
+ /** VLESS/VMESS 分享链接 */
55
+ shareLink: string;
56
+ /** 服务器地址 */
57
+ serverAddress: string;
58
+ /** 服务器端口 */
59
+ serverPort: number;
60
+ /** 协议类型 */
61
+ protocol: string;
62
+ /** TLS/Reality 配置 */
63
+ security: string;
64
+ /** 服务器名称(SNI) */
65
+ serverName?: string;
66
+ /** Public Key (Reality) */
67
+ publicKey?: string;
68
+ /** Short ID (Reality) */
69
+ shortId?: string;
70
+ /** 二维码 ASCII 艺术(可选) */
71
+ qrCode?: string;
72
+ }
73
+ /**
74
+ * 用户列表查询选项
75
+ */
76
+ export interface ListUsersOptions {
77
+ /** 过滤状态 */
78
+ status?: 'active' | 'disabled';
79
+ /** 排序字段 */
80
+ sortBy?: 'createdAt' | 'email' | 'updatedAt';
81
+ /** 排序方向 */
82
+ sortOrder?: 'asc' | 'desc';
83
+ /** 分页:跳过数量 */
84
+ skip?: number;
85
+ /** 分页:限制数量 */
86
+ limit?: number;
87
+ }
88
+ /**
89
+ * 用户操作结果
90
+ */
91
+ export interface UserOperationResult {
92
+ /** 操作是否成功 */
93
+ success: boolean;
94
+ /** 操作类型 */
95
+ operation: 'add' | 'delete' | 'update' | 'list' | 'show';
96
+ /** 用户信息(如果适用) */
97
+ user?: User;
98
+ /** 用户列表(如果适用) */
99
+ users?: User[];
100
+ /** 错误消息(如果失败) */
101
+ error?: string;
102
+ /** 是否需要重启服务 */
103
+ needsRestart?: boolean;
104
+ }
105
+ /**
106
+ * 脱敏后的值
107
+ */
108
+ export interface MaskedValue {
109
+ /** 脱敏显示的值(前4后4) */
110
+ masked: string;
111
+ /** 原始完整值 */
112
+ original: string;
113
+ }
114
+ //# sourceMappingURL=user.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../src/types/user.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,sBAAsB;IACtB,EAAE,EAAE,MAAM,CAAC;IAEX,eAAe;IACf,KAAK,EAAE,MAAM,CAAC;IAEd,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAElB,0BAA0B;IAC1B,MAAM,EAAE,QAAQ,GAAG,UAAU,CAAC;IAE9B,eAAe;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;IAEd,aAAa;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,eAAe;IACf,KAAK,EAAE,MAAM,CAAC;IAEd,sBAAsB;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;IAEd,iBAAiB;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,eAAe;IACf,MAAM,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,aAAa;IACb,IAAI,EAAE,IAAI,CAAC;IAEX,uBAAuB;IACvB,SAAS,EAAE,MAAM,CAAC;IAElB,YAAY;IACZ,aAAa,EAAE,MAAM,CAAC;IAEtB,YAAY;IACZ,UAAU,EAAE,MAAM,CAAC;IAEnB,WAAW;IACX,QAAQ,EAAE,MAAM,CAAC;IAEjB,qBAAqB;IACrB,QAAQ,EAAE,MAAM,CAAC;IAEjB,iBAAiB;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,yBAAyB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,uBAAuB;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW;IACX,MAAM,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IAE/B,WAAW;IACX,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,GAAG,WAAW,CAAC;IAE7C,WAAW;IACX,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAE3B,cAAc;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,cAAc;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,aAAa;IACb,OAAO,EAAE,OAAO,CAAC;IAEjB,WAAW;IACX,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;IAEzD,iBAAiB;IACjB,IAAI,CAAC,EAAE,IAAI,CAAC;IAEZ,iBAAiB;IACjB,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IAEf,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,eAAe;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,mBAAmB;IACnB,MAAM,EAAE,MAAM,CAAC;IAEf,YAAY;IACZ,QAAQ,EAAE,MAAM,CAAC;CAClB"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ /**
3
+ * 用户管理相关类型定义
4
+ * @module types/user
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ //# sourceMappingURL=user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/types/user.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Clipboard Utility
3
+ *
4
+ * Copy text to system clipboard
5
+ *
6
+ * @module utils/clipboard
7
+ */
8
+ /**
9
+ * Copy text to clipboard
10
+ *
11
+ * @param text - Text to copy
12
+ * @returns True if successful
13
+ */
14
+ export declare function copyToClipboard(text: string): Promise<boolean>;
15
+ /**
16
+ * Read text from clipboard
17
+ *
18
+ * @returns Text from clipboard
19
+ */
20
+ export declare function readFromClipboard(): Promise<string>;
21
+ //# sourceMappingURL=clipboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clipboard.d.ts","sourceRoot":"","sources":["../../src/utils/clipboard.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQpE;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAMzD"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ /**
3
+ * Clipboard Utility
4
+ *
5
+ * Copy text to system clipboard
6
+ *
7
+ * @module utils/clipboard
8
+ */
9
+ var __importDefault = (this && this.__importDefault) || function (mod) {
10
+ return (mod && mod.__esModule) ? mod : { "default": mod };
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.copyToClipboard = copyToClipboard;
14
+ exports.readFromClipboard = readFromClipboard;
15
+ const clipboardy_1 = __importDefault(require("clipboardy"));
16
+ /**
17
+ * Copy text to clipboard
18
+ *
19
+ * @param text - Text to copy
20
+ * @returns True if successful
21
+ */
22
+ async function copyToClipboard(text) {
23
+ try {
24
+ await clipboardy_1.default.write(text);
25
+ return true;
26
+ }
27
+ catch (_error) {
28
+ // Clipboard may not be available in non-interactive environments
29
+ return false;
30
+ }
31
+ }
32
+ /**
33
+ * Read text from clipboard
34
+ *
35
+ * @returns Text from clipboard
36
+ */
37
+ async function readFromClipboard() {
38
+ try {
39
+ return await clipboardy_1.default.read();
40
+ }
41
+ catch (_error) {
42
+ return '';
43
+ }
44
+ }
45
+ //# sourceMappingURL=clipboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clipboard.js","sourceRoot":"","sources":["../../src/utils/clipboard.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;AAUH,0CAQC;AAOD,8CAMC;AA7BD,4DAAoC;AAEpC;;;;;GAKG;AACI,KAAK,UAAU,eAAe,CAAC,IAAY;IAChD,IAAI,CAAC;QACH,MAAM,oBAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,iEAAiE;QACjE,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,iBAAiB;IACrC,IAAI,CAAC;QACH,OAAO,MAAM,oBAAU,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * 格式化工具函数
3
+ * @module utils/format
4
+ */
5
+ /**
6
+ * 脱敏选项
7
+ */
8
+ export interface MaskOptions {
9
+ /** 前缀长度(默认 4) */
10
+ prefixLength?: number;
11
+ /** 后缀长度(默认 4) */
12
+ suffixLength?: number;
13
+ /** 掩码字符(默认 *) */
14
+ maskChar?: string;
15
+ }
16
+ /**
17
+ * 脱敏显示敏感信息(前4后4)
18
+ * @param value 原始值
19
+ * @param options 脱敏选项
20
+ * @returns 脱敏后的值
21
+ */
22
+ export declare function maskSensitiveValue(value: string, options?: MaskOptions): string;
23
+ /**
24
+ * 格式化运行时长(毫秒转为可读格式)
25
+ * @param milliseconds 毫秒数
26
+ * @returns 格式化后的时长字符串
27
+ */
28
+ export declare function formatUptime(milliseconds: number): string;
29
+ /**
30
+ * 格式化字节大小
31
+ * @param bytes 字节数
32
+ * @param decimals 小数位数(默认 2)
33
+ * @returns 格式化后的大小字符串
34
+ */
35
+ export declare function formatBytes(bytes: number, decimals?: number): string;
36
+ /**
37
+ * 格式化时间戳为可读日期
38
+ * @param timestamp ISO 8601 字符串或 Unix 时间戳
39
+ * @returns 格式化后的日期字符串
40
+ */
41
+ export declare function formatDate(timestamp: string | number): string;
42
+ /**
43
+ * 格式化相对时间(如 "2 小时前")
44
+ * @param timestamp ISO 8601 字符串或 Unix 时间戳
45
+ * @returns 相对时间字符串
46
+ */
47
+ export declare function formatRelativeTime(timestamp: string | number): string;
48
+ /**
49
+ * 格式化持续时间(毫秒转为简洁格式)
50
+ * @param ms 毫秒数
51
+ * @returns 格式化后的持续时间字符串
52
+ */
53
+ export declare function formatDuration(ms: number): string;
54
+ /**
55
+ * 格式化 JSON(美化输出)
56
+ * @param obj 对象
57
+ * @param spaces 缩进空格数(默认 2)
58
+ * @returns 格式化后的 JSON 字符串
59
+ */
60
+ export declare function formatJSON(obj: unknown, spaces?: number): string;
61
+ /**
62
+ * 截断字符串(添加省略号)
63
+ * @param str 原始字符串
64
+ * @param maxLength 最大长度
65
+ * @param ellipsis 省略号(默认 ...)
66
+ * @returns 截断后的字符串
67
+ */
68
+ export declare function truncate(str: string, maxLength: number, ellipsis?: string): string;
69
+ /**
70
+ * 填充字符串(对齐)
71
+ * @param str 原始字符串
72
+ * @param length 目标长度
73
+ * @param padChar 填充字符(默认空格)
74
+ * @param align 对齐方式(默认 left)
75
+ * @returns 填充后的字符串
76
+ */
77
+ export declare function pad(str: string, length: number, padChar?: string, align?: 'left' | 'right' | 'center'): string;
78
+ /**
79
+ * 格式化表格行(用于控制台输出)
80
+ * @param columns 列数据
81
+ * @param widths 列宽度
82
+ * @returns 格式化后的行字符串
83
+ */
84
+ export declare function formatTableRow(columns: string[], widths: number[]): string;
85
+ /**
86
+ * 格式化百分比
87
+ * @param value 数值(0-1 或 0-100)
88
+ * @param total 总数(可选)
89
+ * @param decimals 小数位数(默认 1)
90
+ * @returns 格式化后的百分比字符串
91
+ */
92
+ export declare function formatPercentage(value: number, total?: number, decimals?: number): string;
93
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,iBAAiB;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,iBAAiB;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,iBAAiB;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,WAAgB,GACxB,MAAM,CA8BR;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAmBzD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAU,GAAG,MAAM,CAWvE;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAc7D;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAuBrE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAUjD;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,MAAU,GAAG,MAAM,CAMnE;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAc,GAAG,MAAM,CAMzF;AAED;;;;;;;GAOG;AACH,wBAAgB,GAAG,CACjB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,MAAY,EACrB,KAAK,GAAE,MAAM,GAAG,OAAO,GAAG,QAAiB,GAC1C,MAAM,CAmBR;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAI1E;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM,EACd,QAAQ,GAAE,MAAU,GACnB,MAAM,CAYR"}
@@ -0,0 +1,242 @@
1
+ "use strict";
2
+ /**
3
+ * 格式化工具函数
4
+ * @module utils/format
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.maskSensitiveValue = maskSensitiveValue;
8
+ exports.formatUptime = formatUptime;
9
+ exports.formatBytes = formatBytes;
10
+ exports.formatDate = formatDate;
11
+ exports.formatRelativeTime = formatRelativeTime;
12
+ exports.formatDuration = formatDuration;
13
+ exports.formatJSON = formatJSON;
14
+ exports.truncate = truncate;
15
+ exports.pad = pad;
16
+ exports.formatTableRow = formatTableRow;
17
+ exports.formatPercentage = formatPercentage;
18
+ /**
19
+ * 脱敏显示敏感信息(前4后4)
20
+ * @param value 原始值
21
+ * @param options 脱敏选项
22
+ * @returns 脱敏后的值
23
+ */
24
+ function maskSensitiveValue(value, options = {}) {
25
+ const { prefixLength = 4, suffixLength = 4, maskChar = '*' } = options;
26
+ // Handle empty or very short strings
27
+ if (!value) {
28
+ return maskChar.repeat(3);
29
+ }
30
+ if (value.length <= prefixLength + suffixLength) {
31
+ // For short strings, show first char only
32
+ if (value.length <= 3) {
33
+ return value[0] + maskChar.repeat(value.length - 1 || 2);
34
+ }
35
+ return maskChar.repeat(value.length);
36
+ }
37
+ // Special handling for email addresses
38
+ if (value.includes('@')) {
39
+ const [localPart, domain] = value.split('@');
40
+ const maskedLocal = localPart.slice(0, Math.min(4, localPart.length)) +
41
+ maskChar.repeat(Math.max(0, localPart.length - 4));
42
+ return `${maskedLocal}@${domain}`;
43
+ }
44
+ // Default masking: show first 4 and last 4
45
+ const prefix = value.slice(0, prefixLength);
46
+ const suffix = value.slice(-suffixLength);
47
+ const maskLength = value.length - prefixLength - suffixLength;
48
+ return `${prefix}${maskChar.repeat(maskLength)}${suffix}`;
49
+ }
50
+ /**
51
+ * 格式化运行时长(毫秒转为可读格式)
52
+ * @param milliseconds 毫秒数
53
+ * @returns 格式化后的时长字符串
54
+ */
55
+ function formatUptime(milliseconds) {
56
+ if (!milliseconds || milliseconds < 0) {
57
+ return '0秒';
58
+ }
59
+ const seconds = Math.floor(milliseconds / 1000);
60
+ const minutes = Math.floor(seconds / 60);
61
+ const hours = Math.floor(minutes / 60);
62
+ const days = Math.floor(hours / 24);
63
+ if (days > 0) {
64
+ return `${days}天 ${hours % 24}小时 ${minutes % 60}分钟`;
65
+ }
66
+ else if (hours > 0) {
67
+ return `${hours}小时 ${minutes % 60}分钟`;
68
+ }
69
+ else if (minutes > 0) {
70
+ return `${minutes}分钟 ${seconds % 60}秒`;
71
+ }
72
+ else {
73
+ return `${seconds}秒`;
74
+ }
75
+ }
76
+ /**
77
+ * 格式化字节大小
78
+ * @param bytes 字节数
79
+ * @param decimals 小数位数(默认 2)
80
+ * @returns 格式化后的大小字符串
81
+ */
82
+ function formatBytes(bytes, decimals = 2) {
83
+ if (bytes === 0)
84
+ return '0 B';
85
+ if (!bytes || bytes < 0)
86
+ return 'N/A';
87
+ const k = 1024;
88
+ const dm = decimals < 0 ? 0 : decimals;
89
+ const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];
90
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
91
+ return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;
92
+ }
93
+ /**
94
+ * 格式化时间戳为可读日期
95
+ * @param timestamp ISO 8601 字符串或 Unix 时间戳
96
+ * @returns 格式化后的日期字符串
97
+ */
98
+ function formatDate(timestamp) {
99
+ const date = typeof timestamp === 'string' ? new Date(timestamp) : new Date(timestamp);
100
+ if (isNaN(date.getTime())) {
101
+ return 'Invalid Date';
102
+ }
103
+ const year = date.getFullYear();
104
+ const month = String(date.getMonth() + 1).padStart(2, '0');
105
+ const day = String(date.getDate()).padStart(2, '0');
106
+ const hours = String(date.getHours()).padStart(2, '0');
107
+ const minutes = String(date.getMinutes()).padStart(2, '0');
108
+ return `${year}-${month}-${day} ${hours}:${minutes}`;
109
+ }
110
+ /**
111
+ * 格式化相对时间(如 "2 小时前")
112
+ * @param timestamp ISO 8601 字符串或 Unix 时间戳
113
+ * @returns 相对时间字符串
114
+ */
115
+ function formatRelativeTime(timestamp) {
116
+ const date = typeof timestamp === 'string' ? new Date(timestamp) : new Date(timestamp);
117
+ const now = new Date();
118
+ const diffMs = now.getTime() - date.getTime();
119
+ if (diffMs < 0) {
120
+ return '未来';
121
+ }
122
+ const diffSeconds = Math.floor(diffMs / 1000);
123
+ const diffMinutes = Math.floor(diffSeconds / 60);
124
+ const diffHours = Math.floor(diffMinutes / 60);
125
+ const diffDays = Math.floor(diffHours / 24);
126
+ if (diffDays > 0) {
127
+ return `${diffDays}天前`;
128
+ }
129
+ else if (diffHours > 0) {
130
+ return `${diffHours}小时前`;
131
+ }
132
+ else if (diffMinutes > 0) {
133
+ return `${diffMinutes}分钟前`;
134
+ }
135
+ else {
136
+ return `${diffSeconds}秒前`;
137
+ }
138
+ }
139
+ /**
140
+ * 格式化持续时间(毫秒转为简洁格式)
141
+ * @param ms 毫秒数
142
+ * @returns 格式化后的持续时间字符串
143
+ */
144
+ function formatDuration(ms) {
145
+ if (ms < 1000) {
146
+ return `${ms}ms`;
147
+ }
148
+ else if (ms < 60000) {
149
+ return `${(ms / 1000).toFixed(1)}s`;
150
+ }
151
+ else if (ms < 3600000) {
152
+ return `${(ms / 60000).toFixed(1)}m`;
153
+ }
154
+ else {
155
+ return `${(ms / 3600000).toFixed(1)}h`;
156
+ }
157
+ }
158
+ /**
159
+ * 格式化 JSON(美化输出)
160
+ * @param obj 对象
161
+ * @param spaces 缩进空格数(默认 2)
162
+ * @returns 格式化后的 JSON 字符串
163
+ */
164
+ function formatJSON(obj, spaces = 2) {
165
+ try {
166
+ return JSON.stringify(obj, null, spaces);
167
+ }
168
+ catch (_error) {
169
+ return String(obj);
170
+ }
171
+ }
172
+ /**
173
+ * 截断字符串(添加省略号)
174
+ * @param str 原始字符串
175
+ * @param maxLength 最大长度
176
+ * @param ellipsis 省略号(默认 ...)
177
+ * @returns 截断后的字符串
178
+ */
179
+ function truncate(str, maxLength, ellipsis = '...') {
180
+ if (!str || str.length <= maxLength) {
181
+ return str;
182
+ }
183
+ return str.slice(0, maxLength - ellipsis.length) + ellipsis;
184
+ }
185
+ /**
186
+ * 填充字符串(对齐)
187
+ * @param str 原始字符串
188
+ * @param length 目标长度
189
+ * @param padChar 填充字符(默认空格)
190
+ * @param align 对齐方式(默认 left)
191
+ * @returns 填充后的字符串
192
+ */
193
+ function pad(str, length, padChar = ' ', align = 'left') {
194
+ if (str.length >= length) {
195
+ return str;
196
+ }
197
+ const padLength = length - str.length;
198
+ switch (align) {
199
+ case 'right':
200
+ return padChar.repeat(padLength) + str;
201
+ case 'center': {
202
+ const leftPad = Math.floor(padLength / 2);
203
+ const rightPad = padLength - leftPad;
204
+ return padChar.repeat(leftPad) + str + padChar.repeat(rightPad);
205
+ }
206
+ case 'left':
207
+ default:
208
+ return str + padChar.repeat(padLength);
209
+ }
210
+ }
211
+ /**
212
+ * 格式化表格行(用于控制台输出)
213
+ * @param columns 列数据
214
+ * @param widths 列宽度
215
+ * @returns 格式化后的行字符串
216
+ */
217
+ function formatTableRow(columns, widths) {
218
+ return columns
219
+ .map((col, i) => pad(truncate(col, widths[i]), widths[i]))
220
+ .join(' │ ');
221
+ }
222
+ /**
223
+ * 格式化百分比
224
+ * @param value 数值(0-1 或 0-100)
225
+ * @param total 总数(可选)
226
+ * @param decimals 小数位数(默认 1)
227
+ * @returns 格式化后的百分比字符串
228
+ */
229
+ function formatPercentage(value, total, decimals = 1) {
230
+ let percent;
231
+ if (total !== undefined && total > 0) {
232
+ percent = (value / total) * 100;
233
+ }
234
+ else if (value > 0 && value <= 1) {
235
+ percent = value * 100;
236
+ }
237
+ else {
238
+ percent = value;
239
+ }
240
+ return `${percent.toFixed(decimals)}%`;
241
+ }
242
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * 日志工具函数(使用 chalk 颜色)
3
+ * @module utils/logger
4
+ */
5
+ import chalk from 'chalk';
6
+ /**
7
+ * 日志级别
8
+ */
9
+ export declare enum LogLevel {
10
+ DEBUG = "debug",
11
+ INFO = "info",
12
+ SUCCESS = "success",
13
+ WARN = "warn",
14
+ ERROR = "error"
15
+ }
16
+ /**
17
+ * 日志选项
18
+ */
19
+ export interface LogOptions {
20
+ /** 是否启用颜色(默认 true) */
21
+ color?: boolean;
22
+ /** 是否显示时间戳(默认 false) */
23
+ timestamp?: boolean;
24
+ /** 日志级别(用于过滤) */
25
+ level?: LogLevel;
26
+ }
27
+ /**
28
+ * 配置全局日志选项
29
+ */
30
+ export declare function configureLogger(options: LogOptions): void;
31
+ /**
32
+ * 调试日志(灰色)
33
+ */
34
+ export declare function debug(...args: unknown[]): void;
35
+ /**
36
+ * 信息日志(默认颜色)
37
+ */
38
+ export declare function info(...args: unknown[]): void;
39
+ /**
40
+ * 成功日志(绿色,带 ✅ 图标)
41
+ */
42
+ export declare function success(...args: unknown[]): void;
43
+ /**
44
+ * 警告日志(黄色,带 ⚠️ 图标)
45
+ */
46
+ export declare function warn(...args: unknown[]): void;
47
+ /**
48
+ * 错误日志(红色,带 ❌ 图标)
49
+ */
50
+ export declare function error(...args: unknown[]): void;
51
+ /**
52
+ * 标题日志(青色,加粗)
53
+ */
54
+ export declare function title(message: string): void;
55
+ /**
56
+ * 分隔线
57
+ */
58
+ export declare function separator(char?: string, length?: number): void;
59
+ /**
60
+ * 表格表头(带边框)
61
+ */
62
+ export declare function tableHeader(title: string): void;
63
+ /**
64
+ * 加载动画消息(带 ⏳ 图标)
65
+ */
66
+ export declare function loading(message: string): void;
67
+ /**
68
+ * 进度消息(带 🔄 图标)
69
+ */
70
+ export declare function progress(message: string): void;
71
+ /**
72
+ * 提示消息(带 💡 图标)
73
+ */
74
+ export declare function hint(message: string): void;
75
+ /**
76
+ * 带颜色的键值对输出
77
+ */
78
+ export declare function keyValue(key: string, value: string, keyColor?: chalk.Chalk): void;
79
+ /**
80
+ * 打印空行
81
+ */
82
+ export declare function newline(count?: number): void;
83
+ /**
84
+ * 带颜色的列表项
85
+ */
86
+ export declare function listItem(message: string, symbol?: string): void;
87
+ /**
88
+ * 代码块(带灰色背景)
89
+ */
90
+ export declare function code(code: string): void;
91
+ /**
92
+ * 默认导出对象
93
+ */
94
+ declare const _default: {
95
+ debug: typeof debug;
96
+ info: typeof info;
97
+ success: typeof success;
98
+ warn: typeof warn;
99
+ error: typeof error;
100
+ title: typeof title;
101
+ separator: typeof separator;
102
+ tableHeader: typeof tableHeader;
103
+ loading: typeof loading;
104
+ progress: typeof progress;
105
+ hint: typeof hint;
106
+ keyValue: typeof keyValue;
107
+ newline: typeof newline;
108
+ listItem: typeof listItem;
109
+ code: typeof code;
110
+ configure: typeof configureLogger;
111
+ };
112
+ export default _default;
113
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;GAEG;AACH,oBAAY,QAAQ;IAClB,KAAK,UAAU;IACf,IAAI,SAAS;IACb,OAAO,YAAY;IACnB,IAAI,SAAS;IACb,KAAK,UAAU;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,sBAAsB;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,wBAAwB;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,iBAAiB;IACjB,KAAK,CAAC,EAAE,QAAQ,CAAC;CAClB;AAWD;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAEzD;AA0BD;;GAEG;AACH,wBAAgB,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAM9C;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAM7C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAMhD;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAM7C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAM9C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAM3C;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,GAAE,MAAY,EAAE,MAAM,GAAE,MAAW,GAAG,IAAI,CAMvE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAa/C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAM7C;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAM9C;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAM1C;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,cAAa,GAAG,IAAI,CAMhF;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,GAAE,MAAU,GAAG,IAAI,CAE/C;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,MAAY,GAAG,IAAI,CAMpE;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAMvC;AAED;;GAEG;;;;;;;;;;;;;;;;;;;AACH,wBAiBE"}