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,63 @@
1
+ /**
2
+ * UserManager - User Management with Auto UUID Generation
3
+ *
4
+ * Provides safe user management with automatic service restart
5
+ *
6
+ * @module services/user-manager
7
+ */
8
+ import type { User, CreateUserParams, UserShareInfo } from '../types/user';
9
+ /**
10
+ * UserManager - Manage Xray users
11
+ */
12
+ export declare class UserManager {
13
+ private configManager;
14
+ private systemdManager;
15
+ private serviceName;
16
+ /**
17
+ * Create a new UserManager
18
+ *
19
+ * @param configPath - Optional config file path
20
+ * @param serviceName - Service name (default: xray)
21
+ */
22
+ constructor(configPath?: string, serviceName?: string);
23
+ /**
24
+ * Generate a new UUID v4 using crypto.randomUUID()
25
+ *
26
+ * @returns UUID string
27
+ */
28
+ generateUuid(): string;
29
+ /**
30
+ * Validate email address
31
+ *
32
+ * @param email - Email to validate
33
+ * @throws Error if email is invalid
34
+ */
35
+ validateEmail(email: string): void;
36
+ /**
37
+ * List all users from config
38
+ *
39
+ * @returns Array of users
40
+ */
41
+ listUsers(): Promise<User[]>;
42
+ /**
43
+ * Add a new user with auto-generated UUID
44
+ *
45
+ * @param params - User creation parameters
46
+ * @returns Created user
47
+ */
48
+ addUser(params: CreateUserParams): Promise<User>;
49
+ /**
50
+ * Delete user by ID
51
+ *
52
+ * @param userId - User ID (UUID) to delete
53
+ */
54
+ deleteUser(userId: string): Promise<void>;
55
+ /**
56
+ * Get share information for a user
57
+ *
58
+ * @param userId - User ID (UUID)
59
+ * @returns Share information including VLESS link
60
+ */
61
+ getShareInfo(userId: string): Promise<UserShareInfo>;
62
+ }
63
+ //# sourceMappingURL=user-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-manager.d.ts","sourceRoot":"","sources":["../../src/services/user-manager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG3E;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,WAAW,CAAS;IAE5B;;;;;OAKG;gBACS,UAAU,CAAC,EAAE,MAAM,EAAE,WAAW,GAAE,MAAe;IAM7D;;;;OAIG;IACH,YAAY,IAAI,MAAM;IAItB;;;;;OAKG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMlC;;;;OAIG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAuBlC;;;;;OAKG;IACG,OAAO,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmEtD;;;;OAIG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA+B/C;;;;;OAKG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;CAqD3D"}
@@ -0,0 +1,219 @@
1
+ "use strict";
2
+ /**
3
+ * UserManager - User Management with Auto UUID Generation
4
+ *
5
+ * Provides safe user management with automatic service restart
6
+ *
7
+ * @module services/user-manager
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.UserManager = void 0;
11
+ const crypto_1 = require("crypto");
12
+ const config_manager_1 = require("./config-manager");
13
+ const systemd_manager_1 = require("./systemd-manager");
14
+ const validator_1 = require("../utils/validator");
15
+ /**
16
+ * UserManager - Manage Xray users
17
+ */
18
+ class UserManager {
19
+ /**
20
+ * Create a new UserManager
21
+ *
22
+ * @param configPath - Optional config file path
23
+ * @param serviceName - Service name (default: xray)
24
+ */
25
+ constructor(configPath, serviceName = 'xray') {
26
+ this.configManager = new config_manager_1.ConfigManager(configPath);
27
+ this.systemdManager = new systemd_manager_1.SystemdManager(serviceName);
28
+ this.serviceName = serviceName;
29
+ }
30
+ /**
31
+ * Generate a new UUID v4 using crypto.randomUUID()
32
+ *
33
+ * @returns UUID string
34
+ */
35
+ generateUuid() {
36
+ return (0, crypto_1.randomUUID)();
37
+ }
38
+ /**
39
+ * Validate email address
40
+ *
41
+ * @param email - Email to validate
42
+ * @throws Error if email is invalid
43
+ */
44
+ validateEmail(email) {
45
+ if (!(0, validator_1.isValidEmail)(email)) {
46
+ throw new Error(`无效的邮箱地址: ${email}`);
47
+ }
48
+ }
49
+ /**
50
+ * List all users from config
51
+ *
52
+ * @returns Array of users
53
+ */
54
+ async listUsers() {
55
+ const config = await this.configManager.readConfig();
56
+ const users = [];
57
+ // Extract users from all inbounds
58
+ for (const inbound of config.inbounds || []) {
59
+ if (inbound.settings?.clients) {
60
+ for (const client of inbound.settings.clients) {
61
+ users.push({
62
+ id: client.id,
63
+ email: client.email || '',
64
+ level: client.level || 0,
65
+ flow: client.flow,
66
+ createdAt: new Date().toISOString(), // TODO: Get from metadata
67
+ status: 'active', // TODO: Get from config
68
+ });
69
+ }
70
+ }
71
+ }
72
+ return users;
73
+ }
74
+ /**
75
+ * Add a new user with auto-generated UUID
76
+ *
77
+ * @param params - User creation parameters
78
+ * @returns Created user
79
+ */
80
+ async addUser(params) {
81
+ // Validate email
82
+ this.validateEmail(params.email);
83
+ // Check for duplicate email
84
+ const existingUsers = await this.listUsers();
85
+ const duplicate = existingUsers.find((u) => u.email === params.email);
86
+ if (duplicate) {
87
+ throw new Error(`邮箱地址已存在: ${params.email}`);
88
+ }
89
+ // Backup config before modification
90
+ await this.configManager.backupConfig();
91
+ // Generate UUID
92
+ const id = this.generateUuid();
93
+ const now = new Date().toISOString();
94
+ // Create user object
95
+ const newUser = {
96
+ id,
97
+ email: params.email,
98
+ level: params.level ?? 0,
99
+ flow: params.flow,
100
+ createdAt: now,
101
+ status: 'active',
102
+ };
103
+ // Read config
104
+ const config = await this.configManager.readConfig();
105
+ // Find first VLESS or VMess inbound and add user
106
+ let added = false;
107
+ for (const inbound of config.inbounds || []) {
108
+ if (inbound.protocol === 'vless' || inbound.protocol === 'vmess') {
109
+ if (!inbound.settings) {
110
+ inbound.settings = { clients: [] };
111
+ }
112
+ if (!inbound.settings.clients) {
113
+ inbound.settings.clients = [];
114
+ }
115
+ inbound.settings.clients.push({
116
+ id,
117
+ email: params.email,
118
+ level: params.level,
119
+ flow: params.flow,
120
+ });
121
+ added = true;
122
+ break;
123
+ }
124
+ }
125
+ if (!added) {
126
+ throw new Error('配置文件中未找到 VLESS 或 VMess inbound');
127
+ }
128
+ // Write config
129
+ await this.configManager.writeConfig(config);
130
+ // Restart service
131
+ await this.systemdManager.restart();
132
+ return newUser;
133
+ }
134
+ /**
135
+ * Delete user by ID
136
+ *
137
+ * @param userId - User ID (UUID) to delete
138
+ */
139
+ async deleteUser(userId) {
140
+ // Backup config before modification
141
+ await this.configManager.backupConfig();
142
+ // Read config
143
+ const config = await this.configManager.readConfig();
144
+ // Find and remove user
145
+ let found = false;
146
+ for (const inbound of config.inbounds || []) {
147
+ if (inbound.settings?.clients) {
148
+ const index = inbound.settings.clients.findIndex((c) => c.id === userId);
149
+ if (index !== -1) {
150
+ inbound.settings.clients.splice(index, 1);
151
+ found = true;
152
+ break;
153
+ }
154
+ }
155
+ }
156
+ if (!found) {
157
+ throw new Error(`用户不存在: ${userId}`);
158
+ }
159
+ // Write config
160
+ await this.configManager.writeConfig(config);
161
+ // Restart service
162
+ await this.systemdManager.restart();
163
+ }
164
+ /**
165
+ * Get share information for a user
166
+ *
167
+ * @param userId - User ID (UUID)
168
+ * @returns Share information including VLESS link
169
+ */
170
+ async getShareInfo(userId) {
171
+ const config = await this.configManager.readConfig();
172
+ // Find user
173
+ let user;
174
+ let inboundPort;
175
+ let inboundProtocol;
176
+ for (const inbound of config.inbounds || []) {
177
+ if (inbound.settings?.clients) {
178
+ const client = inbound.settings.clients.find((c) => c.id === userId);
179
+ if (client) {
180
+ user = {
181
+ id: client.id,
182
+ email: client.email || '',
183
+ level: client.level || 0,
184
+ flow: client.flow,
185
+ createdAt: new Date().toISOString(),
186
+ status: 'active',
187
+ };
188
+ inboundPort = inbound.port;
189
+ inboundProtocol = inbound.protocol;
190
+ break;
191
+ }
192
+ }
193
+ }
194
+ if (!user) {
195
+ throw new Error(`用户不存在: ${userId}`);
196
+ }
197
+ // Generate VLESS link
198
+ // Format: vless://UUID@server:port?encryption=none&security=tls&type=tcp&flow=xtls-rprx-vision#email
199
+ const serverAddress = 'your-server-ip'; // TODO: Get from config or system
200
+ const port = inboundPort || 443;
201
+ const encryption = 'none';
202
+ const security = 'tls';
203
+ const type = 'tcp';
204
+ const flow = user.flow || 'xtls-rprx-vision';
205
+ const name = encodeURIComponent(user.email);
206
+ const vlessLink = `vless://${user.id}@${serverAddress}:${port}?encryption=${encryption}&security=${security}&type=${type}&flow=${flow}#${name}`;
207
+ return {
208
+ user,
209
+ shareLink: vlessLink,
210
+ serverAddress,
211
+ serverPort: port,
212
+ protocol: inboundProtocol || 'vless',
213
+ security,
214
+ qrCode: vlessLink, // QR code would be generated from this
215
+ };
216
+ }
217
+ }
218
+ exports.UserManager = UserManager;
219
+ //# sourceMappingURL=user-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-manager.js","sourceRoot":"","sources":["../../src/services/user-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,256 @@
1
+ /**
2
+ * Xray 配置文件类型定义
3
+ * @module types/config
4
+ */
5
+ /**
6
+ * Xray 配置文件顶层结构
7
+ * 对应文件: /usr/local/etc/xray/config.json
8
+ */
9
+ export interface XrayConfig {
10
+ /** 日志配置 */
11
+ log: LogConfig;
12
+ /** 入站连接配置 */
13
+ inbounds: Inbound[];
14
+ /** 出站连接配置 */
15
+ outbounds: Outbound[];
16
+ /** 路由规则 */
17
+ routing?: RoutingConfig;
18
+ /** DNS 配置 */
19
+ dns?: DnsConfig;
20
+ }
21
+ /**
22
+ * 日志配置
23
+ */
24
+ export interface LogConfig {
25
+ /** 日志级别: debug, info, warning, error, none */
26
+ loglevel: 'debug' | 'info' | 'warning' | 'error' | 'none';
27
+ /** 访问日志路径(空字符串表示不记录) */
28
+ access: string;
29
+ /** 错误日志路径(空字符串表示不记录) */
30
+ error: string;
31
+ }
32
+ /**
33
+ * 入站连接配置(服务端监听)
34
+ */
35
+ export interface Inbound {
36
+ /** 监听端口 */
37
+ port: number;
38
+ /** 监听地址(默认 0.0.0.0) */
39
+ listen?: string;
40
+ /** 协议类型: vless, vmess, trojan, shadowsocks 等 */
41
+ protocol: 'vless' | 'vmess' | 'trojan' | 'shadowsocks';
42
+ /** 协议特定配置 */
43
+ settings: InboundSettings;
44
+ /** 流传输配置(TLS, TCP, WebSocket 等) */
45
+ streamSettings?: StreamSettings;
46
+ /** 嗅探配置 */
47
+ sniffing?: SniffingConfig;
48
+ /** 标签(用于路由引用) */
49
+ tag?: string;
50
+ }
51
+ /**
52
+ * 出站连接配置(客户端连接外部)
53
+ */
54
+ export interface Outbound {
55
+ /** 协议类型 */
56
+ protocol: 'freedom' | 'blackhole' | 'socks' | 'http' | 'shadowsocks' | 'vmess' | 'vless';
57
+ /** 协议特定配置 */
58
+ settings?: OutboundSettings;
59
+ /** 流传输配置 */
60
+ streamSettings?: StreamSettings;
61
+ /** 标签(用于路由引用) */
62
+ tag: string;
63
+ }
64
+ /**
65
+ * 入站协议配置(VLESS 为例)
66
+ */
67
+ export interface InboundSettings {
68
+ /** 客户端列表 */
69
+ clients: XrayClient[];
70
+ /** 解密方式(VLESS 必须为 "none") */
71
+ decryption?: string;
72
+ /** 回落配置(用于伪装) */
73
+ fallbacks?: Fallback[];
74
+ }
75
+ /**
76
+ * 出站协议配置
77
+ */
78
+ export interface OutboundSettings {
79
+ /** 域名解析策略 */
80
+ domainStrategy?: 'AsIs' | 'UseIP' | 'UseIPv4' | 'UseIPv6';
81
+ /** 其他配置 */
82
+ [key: string]: unknown;
83
+ }
84
+ /**
85
+ * Xray 客户端(用户)
86
+ */
87
+ export interface XrayClient {
88
+ /** 用户唯一标识(UUID v4 格式) */
89
+ id: string;
90
+ /** 用户邮箱或标识符(用于管理) */
91
+ email?: string;
92
+ /** 协议级别(0 表示默认) */
93
+ level?: number;
94
+ /** 流控模式(xtls-rprx-vision 等) */
95
+ flow?: string;
96
+ }
97
+ /**
98
+ * 流传输配置
99
+ */
100
+ export interface StreamSettings {
101
+ /** 传输层协议: tcp, ws, http, grpc 等 */
102
+ network: 'tcp' | 'ws' | 'http' | 'grpc';
103
+ /** TLS/Reality 安全配置 */
104
+ security: 'none' | 'tls' | 'reality';
105
+ /** TLS 配置 */
106
+ tlsSettings?: TlsSettings;
107
+ /** Reality 配置 */
108
+ realitySettings?: RealitySettings;
109
+ /** TCP 配置 */
110
+ tcpSettings?: TcpSettings;
111
+ /** WebSocket 配置 */
112
+ wsSettings?: WsSettings;
113
+ }
114
+ /**
115
+ * TLS 配置
116
+ */
117
+ export interface TlsSettings {
118
+ /** 服务器名称指示(SNI) */
119
+ serverName?: string;
120
+ /** 证书配置 */
121
+ certificates: Certificate[];
122
+ /** ALPN 协议列表 */
123
+ alpn?: string[];
124
+ }
125
+ /**
126
+ * Reality 协议配置(新型伪装协议)
127
+ */
128
+ export interface RealitySettings {
129
+ /** 目标网站地址(用于伪装) */
130
+ dest: string;
131
+ /** 服务器名称列表 */
132
+ serverNames: string[];
133
+ /** 私钥 */
134
+ privateKey: string;
135
+ /** 短 ID 列表 */
136
+ shortIds: string[];
137
+ /** 最小客户端版本 */
138
+ minClientVer?: string;
139
+ /** 最大客户端版本 */
140
+ maxClientVer?: string;
141
+ /** 最大时间差(秒) */
142
+ maxTimeDiff?: number;
143
+ }
144
+ /**
145
+ * 证书配置
146
+ */
147
+ export interface Certificate {
148
+ /** 证书用途: sign, verify, issue */
149
+ usage: 'sign' | 'verify' | 'issue';
150
+ /** 证书文件路径 */
151
+ certificateFile?: string;
152
+ /** 私钥文件路径 */
153
+ keyFile?: string;
154
+ /** 证书内容(Base64 编码) */
155
+ certificate?: string[];
156
+ /** 私钥内容(Base64 编码) */
157
+ key?: string[];
158
+ }
159
+ /**
160
+ * TCP 配置
161
+ */
162
+ export interface TcpSettings {
163
+ /** HTTP 头部伪装 */
164
+ header?: {
165
+ type: 'none' | 'http';
166
+ request?: HttpRequest;
167
+ response?: HttpResponse;
168
+ };
169
+ }
170
+ /**
171
+ * HTTP 请求配置(用于伪装)
172
+ */
173
+ export interface HttpRequest {
174
+ version?: string;
175
+ method?: string;
176
+ path?: string[];
177
+ headers?: Record<string, string[]>;
178
+ }
179
+ /**
180
+ * HTTP 响应配置(用于伪装)
181
+ */
182
+ export interface HttpResponse {
183
+ version?: string;
184
+ status?: string;
185
+ reason?: string;
186
+ headers?: Record<string, string[]>;
187
+ }
188
+ /**
189
+ * WebSocket 配置
190
+ */
191
+ export interface WsSettings {
192
+ /** WebSocket 路径 */
193
+ path: string;
194
+ /** HTTP 头部 */
195
+ headers?: Record<string, string>;
196
+ }
197
+ /**
198
+ * 嗅探配置(流量识别)
199
+ */
200
+ export interface SniffingConfig {
201
+ /** 是否启用嗅探 */
202
+ enabled: boolean;
203
+ /** 嗅探目标: http, tls, quic */
204
+ destOverride: ('http' | 'tls' | 'quic')[];
205
+ }
206
+ /**
207
+ * 回落配置(用于伪装和负载均衡)
208
+ */
209
+ export interface Fallback {
210
+ /** ALPN 协议 */
211
+ alpn?: string;
212
+ /** 路径匹配 */
213
+ path?: string;
214
+ /** 目标地址 */
215
+ dest: string | number;
216
+ /** 目标 xver(PROXY protocol) */
217
+ xver?: number;
218
+ }
219
+ /**
220
+ * 路由配置
221
+ */
222
+ export interface RoutingConfig {
223
+ /** 域名解析策略 */
224
+ domainStrategy?: 'AsIs' | 'IPIfNonMatch' | 'IPOnDemand';
225
+ /** 路由规则列表 */
226
+ rules?: RoutingRule[];
227
+ }
228
+ /**
229
+ * 路由规则
230
+ */
231
+ export interface RoutingRule {
232
+ /** 规则类型 */
233
+ type?: 'field';
234
+ /** 域名匹配 */
235
+ domain?: string[];
236
+ /** IP 匹配 */
237
+ ip?: string[];
238
+ /** 端口匹配 */
239
+ port?: string;
240
+ /** 出站标签 */
241
+ outboundTag: string;
242
+ /** 入站标签 */
243
+ inboundTag?: string[];
244
+ }
245
+ /**
246
+ * DNS 配置
247
+ */
248
+ export interface DnsConfig {
249
+ /** DNS 服务器列表 */
250
+ servers?: string[];
251
+ /** 静态主机映射 */
252
+ hosts?: Record<string, string | string[]>;
253
+ /** 域名匹配 */
254
+ tag?: string;
255
+ }
256
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ /**
3
+ * Xray 配置文件类型定义
4
+ * @module types/config
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * 服务管理相关类型定义
3
+ * @module types/service
4
+ */
5
+ /**
6
+ * 服务状态信息
7
+ */
8
+ export interface ServiceStatus {
9
+ /** 服务名称 */
10
+ serviceName: string;
11
+ /** 是否活跃 */
12
+ active: boolean;
13
+ /** 活跃状态: active, inactive, activating, deactivating, failed */
14
+ activeState: 'active' | 'inactive' | 'activating' | 'deactivating' | 'failed';
15
+ /** 子状态: running, exited, dead, failed, etc. */
16
+ subState: string;
17
+ /** 是否已加载 */
18
+ loaded: boolean;
19
+ /** 主进程 PID */
20
+ pid: number | null;
21
+ /** 运行时长(格式化字符串,如 "2天 3小时 15分钟") */
22
+ uptime: string;
23
+ /** 内存占用(格式化字符串,如 "45.2 MB") */
24
+ memory: string;
25
+ /** 重启次数 */
26
+ restarts: number;
27
+ /** 服务是否健康(综合判断) */
28
+ healthy: boolean;
29
+ /** 最后日志行(可选) */
30
+ lastLog?: string;
31
+ }
32
+ /**
33
+ * 服务操作结果
34
+ */
35
+ export interface ServiceOperationResult {
36
+ /** 操作是否成功 */
37
+ success: boolean;
38
+ /** 操作类型 */
39
+ operation: 'start' | 'stop' | 'restart' | 'enable' | 'disable' | 'status';
40
+ /** 服务名称 */
41
+ serviceName: string;
42
+ /** 标准输出 */
43
+ stdout?: string;
44
+ /** 错误输出 */
45
+ stderr?: string;
46
+ /** 退出代码 */
47
+ exitCode: number;
48
+ /** 执行时长(毫秒) */
49
+ duration?: number;
50
+ /** 中断时间(毫秒,仅 restart) */
51
+ downtime?: number;
52
+ /** 错误消息(如果失败) */
53
+ error?: string;
54
+ }
55
+ /**
56
+ * systemd 服务操作类型
57
+ */
58
+ export type ServiceOperation = 'start' | 'stop' | 'restart' | 'enable' | 'disable' | 'status' | 'is-active' | 'is-enabled' | 'show';
59
+ /**
60
+ * systemd show 命令输出的属性映射
61
+ */
62
+ export interface SystemdShowOutput {
63
+ ActiveState?: string;
64
+ SubState?: string;
65
+ LoadState?: string;
66
+ MainPID?: string;
67
+ ExecMainStartTimestamp?: string;
68
+ MemoryCurrent?: string;
69
+ NRestarts?: string;
70
+ [key: string]: string | undefined;
71
+ }
72
+ /**
73
+ * 服务管理选项
74
+ */
75
+ export interface ServiceManagerOptions {
76
+ /** systemctl 命令路径 */
77
+ systemctlPath?: string;
78
+ /** 是否使用 sudo */
79
+ useSudo?: boolean;
80
+ /** 超时时间(毫秒) */
81
+ timeout?: number;
82
+ /** 是否启用详细日志 */
83
+ verbose?: boolean;
84
+ }
85
+ /**
86
+ * 优雅关闭选项
87
+ */
88
+ export interface GracefulShutdownOptions {
89
+ /** 优雅关闭超时(毫秒) */
90
+ timeout: number;
91
+ /** 是否等待连接完成 */
92
+ waitForConnections?: boolean;
93
+ /** 是否显示进度 */
94
+ showProgress?: boolean;
95
+ }
96
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/types/service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW;IACX,WAAW,EAAE,MAAM,CAAC;IAEpB,WAAW;IACX,MAAM,EAAE,OAAO,CAAC;IAEhB,+DAA+D;IAC/D,WAAW,EAAE,QAAQ,GAAG,UAAU,GAAG,YAAY,GAAG,cAAc,GAAG,QAAQ,CAAC;IAE9E,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IAEjB,YAAY;IACZ,MAAM,EAAE,OAAO,CAAC;IAEhB,cAAc;IACd,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAEnB,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;IAEf,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IAEf,WAAW;IACX,QAAQ,EAAE,MAAM,CAAC;IAEjB,mBAAmB;IACnB,OAAO,EAAE,OAAO,CAAC;IAEjB,gBAAgB;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,aAAa;IACb,OAAO,EAAE,OAAO,CAAC;IAEjB,WAAW;IACX,SAAS,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IAE1E,WAAW;IACX,WAAW,EAAE,MAAM,CAAC;IAEpB,WAAW;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,WAAW;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,WAAW;IACX,QAAQ,EAAE,MAAM,CAAC;IAEjB,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,yBAAyB;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACxB,OAAO,GACP,MAAM,GACN,SAAS,GACT,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,WAAW,GACX,YAAY,GACZ,MAAM,CAAC;AAEX;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,qBAAqB;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,gBAAgB;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,eAAe;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,eAAe;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,iBAAiB;IACjB,OAAO,EAAE,MAAM,CAAC;IAEhB,eAAe;IACf,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B,aAAa;IACb,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ /**
3
+ * 服务管理相关类型定义
4
+ * @module types/service
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/types/service.ts"],"names":[],"mappings":";AAAA;;;GAGG"}