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.
- package/LICENSE +21 -0
- package/README.md +798 -0
- package/dist/cli.d.ts +11 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +113 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/config.d.ts +49 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +295 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/interactive.d.ts +83 -0
- package/dist/commands/interactive.d.ts.map +1 -0
- package/dist/commands/interactive.js +362 -0
- package/dist/commands/interactive.js.map +1 -0
- package/dist/commands/logs.d.ts +43 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +257 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/service.d.ts +43 -0
- package/dist/commands/service.d.ts.map +1 -0
- package/dist/commands/service.js +177 -0
- package/dist/commands/service.js.map +1 -0
- package/dist/commands/user.d.ts +43 -0
- package/dist/commands/user.d.ts.map +1 -0
- package/dist/commands/user.js +212 -0
- package/dist/commands/user.js.map +1 -0
- package/dist/constants/exit-codes.d.ts +49 -0
- package/dist/constants/exit-codes.d.ts.map +1 -0
- package/dist/constants/exit-codes.js +100 -0
- package/dist/constants/exit-codes.js.map +1 -0
- package/dist/constants/paths.d.ts +57 -0
- package/dist/constants/paths.d.ts.map +1 -0
- package/dist/constants/paths.js +72 -0
- package/dist/constants/paths.js.map +1 -0
- package/dist/constants/timeouts.d.ts +84 -0
- package/dist/constants/timeouts.d.ts.map +1 -0
- package/dist/constants/timeouts.js +111 -0
- package/dist/constants/timeouts.js.map +1 -0
- package/dist/services/config-manager.d.ts +66 -0
- package/dist/services/config-manager.d.ts.map +1 -0
- package/dist/services/config-manager.js +206 -0
- package/dist/services/config-manager.js.map +1 -0
- package/dist/services/log-manager.d.ts +113 -0
- package/dist/services/log-manager.d.ts.map +1 -0
- package/dist/services/log-manager.js +288 -0
- package/dist/services/log-manager.js.map +1 -0
- package/dist/services/systemd-manager.d.ts +197 -0
- package/dist/services/systemd-manager.d.ts.map +1 -0
- package/dist/services/systemd-manager.js +458 -0
- package/dist/services/systemd-manager.js.map +1 -0
- package/dist/services/user-manager.d.ts +63 -0
- package/dist/services/user-manager.d.ts.map +1 -0
- package/dist/services/user-manager.js +219 -0
- package/dist/services/user-manager.js.map +1 -0
- package/dist/types/config.d.ts +256 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +7 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/service.d.ts +96 -0
- package/dist/types/service.d.ts.map +1 -0
- package/dist/types/service.js +7 -0
- package/dist/types/service.js.map +1 -0
- package/dist/types/user.d.ts +114 -0
- package/dist/types/user.d.ts.map +1 -0
- package/dist/types/user.js +7 -0
- package/dist/types/user.js.map +1 -0
- package/dist/utils/clipboard.d.ts +21 -0
- package/dist/utils/clipboard.d.ts.map +1 -0
- package/dist/utils/clipboard.js +45 -0
- package/dist/utils/clipboard.js.map +1 -0
- package/dist/utils/format.d.ts +93 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +242 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/logger.d.ts +113 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +260 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/preflight.d.ts +57 -0
- package/dist/utils/preflight.d.ts.map +1 -0
- package/dist/utils/preflight.js +215 -0
- package/dist/utils/preflight.js.map +1 -0
- package/dist/utils/validator.d.ts +102 -0
- package/dist/utils/validator.d.ts.map +1 -0
- package/dist/utils/validator.js +238 -0
- package/dist/utils/validator.js.map +1 -0
- package/dist/utils/which.d.ts +13 -0
- package/dist/utils/which.d.ts.map +1 -0
- package/dist/utils/which.js +28 -0
- package/dist/utils/which.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/types/service.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
|