@feng3d/ctc 0.0.18 → 0.0.20

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 (45) hide show
  1. package/dist/admin-server.d.ts +6 -0
  2. package/dist/admin-server.d.ts.map +1 -1
  3. package/dist/admin-server.js +19 -0
  4. package/dist/admin-server.js.map +1 -1
  5. package/dist/app.d.ts +17 -0
  6. package/dist/app.d.ts.map +1 -0
  7. package/dist/app.js +97 -0
  8. package/dist/app.js.map +1 -0
  9. package/dist/cli.d.ts +1 -0
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +152 -253
  12. package/dist/cli.js.map +1 -1
  13. package/dist/config.d.ts +1 -5
  14. package/dist/config.d.ts.map +1 -1
  15. package/dist/config.js +0 -8
  16. package/dist/config.js.map +1 -1
  17. package/dist/controller.d.ts.map +1 -1
  18. package/dist/controller.js +8 -0
  19. package/dist/controller.js.map +1 -1
  20. package/dist/daemon-entry.d.ts +8 -0
  21. package/dist/daemon-entry.d.ts.map +1 -0
  22. package/dist/daemon-entry.js +15 -0
  23. package/dist/daemon-entry.js.map +1 -0
  24. package/dist/daemon.d.ts +32 -0
  25. package/dist/daemon.d.ts.map +1 -0
  26. package/dist/daemon.js +370 -0
  27. package/dist/daemon.js.map +1 -0
  28. package/dist/forward-proxy.js +1 -1
  29. package/dist/forward-proxy.js.map +1 -1
  30. package/dist/index.d.ts +16 -14
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +14 -240
  33. package/dist/index.js.map +1 -1
  34. package/dist/ipc-handler.d.ts +76 -4
  35. package/dist/ipc-handler.d.ts.map +1 -1
  36. package/dist/ipc-handler.js +221 -26
  37. package/dist/ipc-handler.js.map +1 -1
  38. package/dist/process-utils.d.ts +31 -0
  39. package/dist/process-utils.d.ts.map +1 -0
  40. package/dist/process-utils.js +87 -0
  41. package/dist/process-utils.js.map +1 -0
  42. package/dist/proxy-manager.d.ts.map +1 -1
  43. package/dist/proxy-manager.js +45 -0
  44. package/dist/proxy-manager.js.map +1 -1
  45. package/package.json +7 -3
@@ -4,9 +4,20 @@
4
4
  * IPC 请求处理模块。
5
5
  *
6
6
  * 通过文件系统实现进程间通信(IPC),允许 CLI 向运行中的客户端进程
7
- * 发送添加代理请求。请求通过 JSON 文件传递,响应通过 .resp 文件返回。
7
+ * 发送管理请求。请求通过 JSON 文件传递,响应通过 .resp 文件返回。
8
+ *
9
+ * 支持的请求类型:
10
+ * - get-status: 获取客户端状态
11
+ * - add-proxy: 添加反向代理
12
+ * - remove-proxy: 删除反向代理
13
+ * - clear-proxies: 清除所有代理
14
+ * - forward-list: 正向穿透列表
15
+ * - forward-add: 添加正向穿透
16
+ * - forward-remove: 删除正向穿透
17
+ * - forward-clients: 在线客户端列表
18
+ * - forward-register: 注册为可发现客户端
8
19
  */
9
- import { readFileSync, writeFileSync, readdirSync, mkdirSync } from 'fs';
20
+ import { readFileSync, writeFileSync, readdirSync, mkdirSync, unlinkSync } from 'fs';
10
21
  import { join } from 'path';
11
22
  import { logger } from '@feng3d/chuantou-shared';
12
23
  /**
@@ -23,6 +34,9 @@ export class IpcHandler {
23
34
  this.controller = options.controller;
24
35
  this.proxyManager = options.proxyManager;
25
36
  this.registeredProxies = options.registeredProxies;
37
+ this.forwardProxy = options.forwardProxy;
38
+ this.getStatus = options.getStatus;
39
+ this.updateConfigProxies = options.updateConfigProxies;
26
40
  }
27
41
  /**
28
42
  * 启动 IPC 请求监听,每 500ms 扫描一次请求目录。
@@ -53,6 +67,13 @@ export class IpcHandler {
53
67
  const requestPath = join(this.requestDir, file);
54
68
  this.handleRequest(requestPath).finally(() => {
55
69
  this.processingFiles.delete(file);
70
+ // 处理完成后删除请求文件
71
+ try {
72
+ unlinkSync(requestPath);
73
+ }
74
+ catch {
75
+ // ignore
76
+ }
56
77
  });
57
78
  }
58
79
  }
@@ -62,40 +83,52 @@ export class IpcHandler {
62
83
  }
63
84
  }
64
85
  /**
65
- * 处理单个添加代理请求文件。
86
+ * 处理单个 IPC 请求文件。
66
87
  *
67
- * 读取请求文件 → 检查认证状态注册代理 → 写入响应文件。
88
+ * 读取请求文件 → 根据类型分发处理 → 写入响应文件。
68
89
  * 无论成功或失败,始终写入响应文件,确保 CLI 不会超时等待。
69
90
  */
70
91
  async handleRequest(requestFilePath) {
71
92
  const responsePath = requestFilePath.replace('.json', '.resp');
72
93
  try {
73
94
  const requestData = JSON.parse(readFileSync(requestFilePath, 'utf-8'));
74
- if (requestData.type !== 'add-proxy')
75
- return;
76
- const proxy = requestData.proxy;
77
- logger.log(`收到添加代理请求: :${proxy.remotePort} -> ${proxy.localHost || 'localhost'}:${proxy.localPort}`);
78
- // 检查控制器是否已认证
79
- if (!this.controller.isAuthenticated()) {
80
- writeFileSync(responsePath, JSON.stringify({ success: false, error: '客户端未连接到服务器,请稍后重试' }));
81
- return;
82
- }
83
- try {
84
- await this.proxyManager.registerProxy(proxy);
85
- this.registeredProxies.push({ ...proxy });
86
- // 写入成功响应
87
- writeFileSync(responsePath, JSON.stringify({ success: true }));
88
- logger.log(`代理已通过 IPC 添加: :${proxy.remotePort}`);
89
- }
90
- catch (error) {
91
- const errorMessage = error instanceof Error ? error.message : String(error);
92
- logger.error(`通过 IPC 添加代理失败: ${errorMessage}`);
93
- // 写入失败响应
94
- writeFileSync(responsePath, JSON.stringify({ success: false, error: errorMessage }));
95
+ const responseType = requestData.type;
96
+ let response;
97
+ switch (responseType) {
98
+ case 'get-status':
99
+ response = await this.handleGetStatus();
100
+ break;
101
+ case 'add-proxy':
102
+ response = await this.handleAddProxy(requestData.proxy);
103
+ break;
104
+ case 'remove-proxy':
105
+ response = await this.handleRemoveProxy(requestData.remotePort);
106
+ break;
107
+ case 'clear-proxies':
108
+ response = await this.handleClearProxies();
109
+ break;
110
+ case 'forward-list':
111
+ response = await this.handleForwardList();
112
+ break;
113
+ case 'forward-add':
114
+ response = await this.handleForwardAdd(requestData.forwardEntry);
115
+ break;
116
+ case 'forward-remove':
117
+ response = await this.handleForwardRemove(requestData.localPort);
118
+ break;
119
+ case 'forward-clients':
120
+ response = await this.handleForwardClients();
121
+ break;
122
+ case 'forward-register':
123
+ response = await this.handleForwardRegister(requestData.description);
124
+ break;
125
+ default:
126
+ response = { success: false, error: `未知的请求类型: ${responseType}` };
95
127
  }
128
+ writeFileSync(responsePath, JSON.stringify(response));
96
129
  }
97
130
  catch (error) {
98
- logger.error('处理添加代理请求时出错:', error);
131
+ logger.error('处理 IPC 请求时出错:', error);
99
132
  // 确保即使在外层异常时也写入响应文件,避免 CLI 超时
100
133
  try {
101
134
  const errorMessage = error instanceof Error ? error.message : String(error);
@@ -106,5 +139,167 @@ export class IpcHandler {
106
139
  }
107
140
  }
108
141
  }
142
+ /**
143
+ * 处理获取状态请求
144
+ */
145
+ async handleGetStatus() {
146
+ return {
147
+ success: true,
148
+ status: this.getStatus(),
149
+ };
150
+ }
151
+ /**
152
+ * 处理添加代理请求
153
+ */
154
+ async handleAddProxy(proxy) {
155
+ logger.log(`收到添加代理请求: :${proxy.remotePort} -> ${proxy.localHost || 'localhost'}:${proxy.localPort}`);
156
+ if (!this.controller.isAuthenticated()) {
157
+ return { success: false, error: '客户端未连接到服务器,请稍后重试' };
158
+ }
159
+ try {
160
+ await this.proxyManager.registerProxy(proxy);
161
+ this.registeredProxies.push({ ...proxy });
162
+ // 同步更新配置文件
163
+ await this.updateConfigProxies(this.registeredProxies);
164
+ logger.log(`代理已通过 IPC 添加: :${proxy.remotePort}`);
165
+ return { success: true };
166
+ }
167
+ catch (error) {
168
+ const errorMessage = error instanceof Error ? error.message : String(error);
169
+ logger.error(`通过 IPC 添加代理失败: ${errorMessage}`);
170
+ return { success: false, error: errorMessage };
171
+ }
172
+ }
173
+ /**
174
+ * 处理删除代理请求
175
+ */
176
+ async handleRemoveProxy(remotePort) {
177
+ logger.log(`收到删除代理请求: :${remotePort}`);
178
+ if (!this.controller.isAuthenticated()) {
179
+ return { success: false, error: '客户端未连接到服务器,请稍后重试' };
180
+ }
181
+ try {
182
+ await this.proxyManager.unregisterProxy(remotePort);
183
+ const index = this.registeredProxies.findIndex(p => p.remotePort === remotePort);
184
+ if (index !== -1) {
185
+ this.registeredProxies.splice(index, 1);
186
+ }
187
+ // 同步更新配置文件
188
+ await this.updateConfigProxies(this.registeredProxies);
189
+ logger.log(`代理已通过 IPC 删除: :${remotePort}`);
190
+ return { success: true };
191
+ }
192
+ catch (error) {
193
+ const errorMessage = error instanceof Error ? error.message : String(error);
194
+ logger.error(`通过 IPC 删除代理失败: ${errorMessage}`);
195
+ return { success: false, error: errorMessage };
196
+ }
197
+ }
198
+ /**
199
+ * 处理清除所有代理请求
200
+ */
201
+ async handleClearProxies() {
202
+ logger.log('收到清除所有代理请求');
203
+ if (!this.controller.isAuthenticated()) {
204
+ return { success: false, error: '客户端未连接到服务器,请稍后重试' };
205
+ }
206
+ try {
207
+ // 逐个删除代理
208
+ const ports = this.registeredProxies.map(p => p.remotePort);
209
+ for (const port of ports) {
210
+ await this.proxyManager.unregisterProxy(port);
211
+ }
212
+ this.registeredProxies.length = 0;
213
+ // 同步更新配置文件
214
+ await this.updateConfigProxies([]);
215
+ logger.log('所有代理已通过 IPC 清除');
216
+ return { success: true };
217
+ }
218
+ catch (error) {
219
+ const errorMessage = error instanceof Error ? error.message : String(error);
220
+ logger.error(`通过 IPC 清除代理失败: ${errorMessage}`);
221
+ return { success: false, error: errorMessage };
222
+ }
223
+ }
224
+ /**
225
+ * 处理正向穿透列表请求
226
+ */
227
+ async handleForwardList() {
228
+ try {
229
+ const proxies = this.forwardProxy.getProxies();
230
+ return { success: true, proxies };
231
+ }
232
+ catch (error) {
233
+ const errorMessage = error instanceof Error ? error.message : String(error);
234
+ return { success: false, error: errorMessage };
235
+ }
236
+ }
237
+ /**
238
+ * 处理添加正向穿透请求
239
+ */
240
+ async handleForwardAdd(entry) {
241
+ logger.log(`收到添加正向穿透请求: :${entry.localPort} -> ${entry.targetClientId}:${entry.targetPort}`);
242
+ if (!this.controller.isAuthenticated()) {
243
+ return { success: false, error: '客户端未连接到服务器,请稍后重试' };
244
+ }
245
+ try {
246
+ await this.forwardProxy.addProxy(entry);
247
+ return { success: true };
248
+ }
249
+ catch (error) {
250
+ const errorMessage = error instanceof Error ? error.message : String(error);
251
+ logger.error(`通过 IPC 添加正向穿透失败: ${errorMessage}`);
252
+ return { success: false, error: errorMessage };
253
+ }
254
+ }
255
+ /**
256
+ * 处理删除正向穿透请求
257
+ */
258
+ async handleForwardRemove(localPort) {
259
+ logger.log(`收到删除正向穿透请求: :${localPort}`);
260
+ try {
261
+ await this.forwardProxy.removeProxy(localPort);
262
+ return { success: true };
263
+ }
264
+ catch (error) {
265
+ const errorMessage = error instanceof Error ? error.message : String(error);
266
+ logger.error(`通过 IPC 删除正向穿透失败: ${errorMessage}`);
267
+ return { success: false, error: errorMessage };
268
+ }
269
+ }
270
+ /**
271
+ * 处理获取在线客户端列表请求
272
+ */
273
+ async handleForwardClients() {
274
+ if (!this.controller.isAuthenticated()) {
275
+ return { success: false, error: '客户端未连接到服务器,请稍后重试' };
276
+ }
277
+ try {
278
+ const clients = await this.forwardProxy.getClientList();
279
+ return { success: true, clients };
280
+ }
281
+ catch (error) {
282
+ const errorMessage = error instanceof Error ? error.message : String(error);
283
+ logger.error(`通过 IPC 获取客户端列表失败: ${errorMessage}`);
284
+ return { success: false, error: errorMessage };
285
+ }
286
+ }
287
+ /**
288
+ * 处理注册为可发现客户端请求
289
+ */
290
+ async handleForwardRegister(description) {
291
+ if (!this.controller.isAuthenticated()) {
292
+ return { success: false, error: '客户端未连接到服务器,请稍后重试' };
293
+ }
294
+ try {
295
+ await this.forwardProxy.registerAsClient(description);
296
+ return { success: true };
297
+ }
298
+ catch (error) {
299
+ const errorMessage = error instanceof Error ? error.message : String(error);
300
+ logger.error(`通过 IPC 注册客户端失败: ${errorMessage}`);
301
+ return { success: false, error: errorMessage };
302
+ }
303
+ }
109
304
  }
110
305
  //# sourceMappingURL=ipc-handler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ipc-handler.js","sourceRoot":"","sources":["../src/ipc-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ipc-handler.js","sourceRoot":"","sources":["../src/ipc-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @module process-utils
3
+ *
4
+ * 进程管理工具函数。
5
+ * 提供进程存活检查和降级关闭能力,供 CLI stop 命令和 checkSingleInstance 复用。
6
+ */
7
+ /**
8
+ * 检查指定 PID 的进程是否存活。
9
+ * 使用信号 0 检测,跨平台兼容。
10
+ */
11
+ export declare function isProcessAlive(pid: number): boolean;
12
+ /**
13
+ * killProcess 的返回结果
14
+ */
15
+ export interface KillProcessResult {
16
+ /** 是否成功关闭(或进程已不存在) */
17
+ success: boolean;
18
+ /** 关闭方式 */
19
+ method: 'kill' | 'already-dead' | 'failed';
20
+ /** 错误信息(仅 failed 时有值) */
21
+ error?: string;
22
+ }
23
+ /**
24
+ * 降级关闭进程。
25
+ *
26
+ * 1. 先检查进程是否存活
27
+ * 2. 通过 taskkill/SIGTERM 关闭
28
+ * 3. 兜底:再次检查进程是否已不存在
29
+ */
30
+ export declare function killProcess(pid: number): Promise<KillProcessResult>;
31
+ //# sourceMappingURL=process-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-utils.d.ts","sourceRoot":"","sources":["../src/process-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOnD;AAwCD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,sBAAsB;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW;IACX,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,QAAQ,CAAC;IAC3C,yBAAyB;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAoBzE"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * @module process-utils
3
+ *
4
+ * 进程管理工具函数。
5
+ * 提供进程存活检查和降级关闭能力,供 CLI stop 命令和 checkSingleInstance 复用。
6
+ */
7
+ import { platform } from 'os';
8
+ import { execSync } from 'child_process';
9
+ /**
10
+ * 检查指定 PID 的进程是否存活。
11
+ * 使用信号 0 检测,跨平台兼容。
12
+ */
13
+ export function isProcessAlive(pid) {
14
+ try {
15
+ process.kill(pid, 0);
16
+ return true;
17
+ }
18
+ catch {
19
+ return false;
20
+ }
21
+ }
22
+ /**
23
+ * 等待指定 PID 的进程退出。
24
+ * @param pid - 进程 ID
25
+ * @param timeoutMs - 最大等待时间(毫秒)
26
+ * @returns true 表示进程已退出
27
+ */
28
+ async function waitForProcessExit(pid, timeoutMs) {
29
+ const start = Date.now();
30
+ while (Date.now() - start < timeoutMs) {
31
+ if (!isProcessAlive(pid))
32
+ return true;
33
+ await new Promise(resolve => setTimeout(resolve, 100));
34
+ }
35
+ return !isProcessAlive(pid);
36
+ }
37
+ /**
38
+ * 通过 taskkill (Windows) 或 SIGTERM (其他平台) 关闭进程。
39
+ * @returns `{ success: boolean; error?: string }` 包含错误信息
40
+ */
41
+ function killByPid(pid) {
42
+ try {
43
+ if (platform() === 'win32') {
44
+ execSync(`taskkill /F /PID ${pid}`, { stdio: 'pipe' });
45
+ }
46
+ else {
47
+ process.kill(pid, 'SIGTERM');
48
+ }
49
+ return { success: true };
50
+ }
51
+ catch (err) {
52
+ // 提取有意义的错误信息
53
+ let error = err.message || String(err);
54
+ if (err.stderr) {
55
+ const stderr = err.stderr.toString().trim();
56
+ if (stderr)
57
+ error = stderr;
58
+ }
59
+ return { success: false, error };
60
+ }
61
+ }
62
+ /**
63
+ * 降级关闭进程。
64
+ *
65
+ * 1. 先检查进程是否存活
66
+ * 2. 通过 taskkill/SIGTERM 关闭
67
+ * 3. 兜底:再次检查进程是否已不存在
68
+ */
69
+ export async function killProcess(pid) {
70
+ // 1. 先检查进程是否存活
71
+ if (!isProcessAlive(pid)) {
72
+ return { success: true, method: 'already-dead' };
73
+ }
74
+ // 2. taskkill / SIGTERM
75
+ const killResult = killByPid(pid);
76
+ if (killResult.success) {
77
+ // 等待进程退出
78
+ await waitForProcessExit(pid, 2000);
79
+ return { success: true, method: 'kill' };
80
+ }
81
+ // 3. 兜底:再次检查进程是否已不存在
82
+ if (!isProcessAlive(pid)) {
83
+ return { success: true, method: 'already-dead' };
84
+ }
85
+ return { success: false, method: 'failed', error: killResult.error };
86
+ }
87
+ //# sourceMappingURL=process-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-utils.js","sourceRoot":"","sources":["../src/process-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,kBAAkB,CAAC,GAAW,EAAE,SAAiB;IAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,SAAS,EAAE,CAAC;QACtC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QACtC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC;AAED;;;GAGG;AACH,SAAS,SAAS,CAAC,GAAW;IAC5B,IAAI,CAAC;QACH,IAAI,QAAQ,EAAE,KAAK,OAAO,EAAE,CAAC;YAC3B,QAAQ,CAAC,oBAAoB,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACzD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,aAAa;QACb,IAAI,KAAK,GAAG,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,MAAM;gBAAE,KAAK,GAAG,MAAM,CAAC;QAC7B,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IACnC,CAAC;AACH,CAAC;AAcD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAW;IAC3C,eAAe;IACf,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IACnD,CAAC;IAED,wBAAwB;IACxB,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,SAAS;QACT,MAAM,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC3C,CAAC;IAED,qBAAqB;IACrB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IACnD,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC;AACvE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"proxy-manager.d.ts","sourceRoot":"","sources":["../src/proxy-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAU,MAAM,yBAAyB,CAAC;AAW9D;;;;;;;;;;;;GAYG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAC5C,qBAAqB;IACrB,OAAO,CAAC,UAAU,CAAa;IAE/B,kCAAkC;IAClC,OAAO,CAAC,QAAQ,CAA2B;IAE3C;;;;OAIG;gBACS,UAAU,EAAE,UAAU;IAWlC;;;;;;;;OAQG;IACG,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAuCvD;;;;;;OAMG;IACG,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BxD;;;;;;OAMG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAQpC;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAQtB;;;;OAIG;IACH,kBAAkB,IAAI,MAAM,EAAE;IAI9B;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
1
+ {"version":3,"file":"proxy-manager.d.ts","sourceRoot":"","sources":["../src/proxy-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAU,MAAM,yBAAyB,CAAC;AAW9D;;;;;;;;;;;;GAYG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAC5C,qBAAqB;IACrB,OAAO,CAAC,UAAU,CAAa;IAE/B,kCAAkC;IAClC,OAAO,CAAC,QAAQ,CAA2B;IAE3C;;;;OAIG;gBACS,UAAU,EAAE,UAAU;IA8DlC;;;;;;;;OAQG;IACG,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAuCvD;;;;;;OAMG;IACG,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BxD;;;;;;OAMG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAQpC;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAQtB;;;;OAIG;IACH,kBAAkB,IAAI,MAAM,EAAE;IAI9B;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
@@ -38,6 +38,51 @@ export class ProxyManager extends EventEmitter {
38
38
  this.controller.on('disconnected', () => {
39
39
  this.onDisconnected();
40
40
  });
41
+ // 监听远程管理命令
42
+ this.controller.on('remoteCommand', async (message) => {
43
+ const { type, id, payload } = message;
44
+ try {
45
+ switch (type) {
46
+ case MessageType.REMOTE_ADD_PROXY: {
47
+ const { remotePort, localPort, localHost = 'localhost' } = payload;
48
+ await this.registerProxy({ remotePort, localPort, localHost });
49
+ // 发送成功响应
50
+ this.controller.sendMessage({
51
+ type: MessageType.REMOTE_COMMAND_RESP,
52
+ id,
53
+ payload: { commandId: id, success: true },
54
+ });
55
+ logger.log(`远程命令: 已添加代理 :${remotePort} -> ${localHost}:${localPort}`);
56
+ break;
57
+ }
58
+ case MessageType.REMOTE_REMOVE_PROXY: {
59
+ const { remotePort } = payload;
60
+ await this.unregisterProxy(remotePort);
61
+ // 发送成功响应
62
+ this.controller.sendMessage({
63
+ type: MessageType.REMOTE_COMMAND_RESP,
64
+ id,
65
+ payload: { commandId: id, success: true },
66
+ });
67
+ logger.log(`远程命令: 已删除代理 :${remotePort}`);
68
+ break;
69
+ }
70
+ default:
71
+ // 忽略不支持的命令
72
+ break;
73
+ }
74
+ }
75
+ catch (error) {
76
+ const errorMessage = error instanceof Error ? error.message : String(error);
77
+ logger.error(`处理远程命令失败 (${type}):`, errorMessage);
78
+ // 发送错误响应
79
+ this.controller.sendMessage({
80
+ type: MessageType.REMOTE_COMMAND_RESP,
81
+ id,
82
+ payload: { commandId: id, success: false, error: errorMessage },
83
+ });
84
+ }
85
+ });
41
86
  }
42
87
  /**
43
88
  * 向服务器注册一个代理隧道。
@@ -1 +1 @@
1
- {"version":3,"file":"proxy-manager.js","sourceRoot":"","sources":["../src/proxy-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proxy-manager.js","sourceRoot":"","sources":["../src/proxy-manager.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@feng3d/ctc",
3
- "version": "0.0.18",
3
+ "version": "0.0.20",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -11,6 +11,9 @@
11
11
  ".": {
12
12
  "import": "./dist/index.js",
13
13
  "types": "./dist/index.d.ts"
14
+ },
15
+ "./app": {
16
+ "import": "./dist/app.js"
14
17
  }
15
18
  },
16
19
  "files": [
@@ -18,7 +21,8 @@
18
21
  "admin-ui/dist"
19
22
  ],
20
23
  "scripts": {
21
- "build": "npm run build --workspace=@feng3d/ctc-ui && tsc",
24
+ "start": "node dist/app.js",
25
+ "build": "npm run build:admin-ui && tsc",
22
26
  "build:admin-ui": "cd admin-ui && npm run build",
23
27
  "watch": "tsc --watch --pretty",
24
28
  "clean": "rm -rf dist",
@@ -27,7 +31,7 @@
27
31
  "test:coverage": "vitest run --coverage"
28
32
  },
29
33
  "dependencies": {
30
- "@feng3d/chuantou-shared": "^0.0.18",
34
+ "@feng3d/chuantou-shared": "^0.0.20",
31
35
  "chalk": "^5.6.2",
32
36
  "commander": "^14.0.3",
33
37
  "uuid": "^9.0.1",