@feng3d/ctc 0.0.11 → 0.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -24
- package/dist/admin-server.d.ts +65 -12
- package/dist/admin-server.d.ts.map +1 -1
- package/dist/admin-server.js +291 -549
- package/dist/admin-server.js.map +1 -1
- package/dist/cli.d.ts +12 -3
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +922 -311
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +5 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +13 -7
- package/dist/config.js.map +1 -1
- package/dist/controller.d.ts +0 -1
- package/dist/controller.d.ts.map +1 -1
- package/dist/controller.js +18 -9
- package/dist/controller.js.map +1 -1
- package/dist/data-channel.d.ts +5 -0
- package/dist/data-channel.d.ts.map +1 -1
- package/dist/data-channel.js +7 -2
- package/dist/data-channel.js.map +1 -1
- package/dist/forward-proxy.d.ts +100 -0
- package/dist/forward-proxy.d.ts.map +1 -0
- package/dist/forward-proxy.js +407 -0
- package/dist/forward-proxy.js.map +1 -0
- package/dist/handlers/unified-handler.d.ts +2 -0
- package/dist/handlers/unified-handler.d.ts.map +1 -1
- package/dist/handlers/unified-handler.js +31 -3
- package/dist/handlers/unified-handler.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +123 -37
- package/dist/index.js.map +1 -1
- package/dist/proxy-manager.d.ts +8 -1
- package/dist/proxy-manager.d.ts.map +1 -1
- package/dist/proxy-manager.js +51 -15
- package/dist/proxy-manager.js.map +1 -1
- package/package.json +5 -3
package/dist/index.js
CHANGED
|
@@ -15,6 +15,24 @@ import { IpcHandler } from './ipc-handler.js';
|
|
|
15
15
|
import { logger } from '@feng3d/chuantou-shared';
|
|
16
16
|
import { join } from 'path';
|
|
17
17
|
import { homedir } from 'os';
|
|
18
|
+
import { ForwardProxy } from './forward-proxy.js';
|
|
19
|
+
import { writeFile } from 'fs';
|
|
20
|
+
/**
|
|
21
|
+
* 更新配置文件中的代理列表
|
|
22
|
+
*/
|
|
23
|
+
async function updateConfigProxies(proxies) {
|
|
24
|
+
const config = await Config.load();
|
|
25
|
+
config.proxies = proxies;
|
|
26
|
+
const configPath = join(homedir(), '.chuantou', 'client', 'config.json');
|
|
27
|
+
writeFile(configPath, JSON.stringify(config, null, 2), 'utf-8', (err) => {
|
|
28
|
+
if (err) {
|
|
29
|
+
logger.error('更新配置文件失败:', err);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
logger.log('配置文件已更新');
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
18
36
|
/**
|
|
19
37
|
* 导出核心类和类型,供作为库使用时引用。
|
|
20
38
|
*/
|
|
@@ -24,6 +42,7 @@ export { ProxyManager } from './proxy-manager.js';
|
|
|
24
42
|
export { AdminServer } from './admin-server.js';
|
|
25
43
|
export { UnifiedHandler } from './handlers/unified-handler.js';
|
|
26
44
|
export { IpcHandler } from './ipc-handler.js';
|
|
45
|
+
export { ForwardProxy } from './forward-proxy.js';
|
|
27
46
|
/**
|
|
28
47
|
* 客户端主入口函数(独立运行模式)。
|
|
29
48
|
*
|
|
@@ -55,35 +74,95 @@ async function main() {
|
|
|
55
74
|
const controller = new Controller(config);
|
|
56
75
|
// 创建代理管理器
|
|
57
76
|
const proxyManager = new ProxyManager(controller);
|
|
77
|
+
// 创建正向穿透代理
|
|
78
|
+
const forwardProxy = new ForwardProxy(controller);
|
|
58
79
|
// 已注册的代理配置列表(用于管理页面)
|
|
59
80
|
const registeredProxies = [];
|
|
81
|
+
let nextProxyIndex = 1;
|
|
60
82
|
for (const p of config.proxies) {
|
|
61
|
-
registeredProxies.push({ ...p });
|
|
83
|
+
registeredProxies.push({ ...p, index: nextProxyIndex++ });
|
|
62
84
|
}
|
|
63
85
|
// 创建管理页面服务器
|
|
64
|
-
const
|
|
86
|
+
const adminServerConfig = { port: config.adminPort, host: '127.0.0.1' };
|
|
65
87
|
// 获取状态回调
|
|
66
|
-
() =>
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
88
|
+
const getStatusCallback = () => {
|
|
89
|
+
// 获取实际在 ProxyManager 中注册的端口
|
|
90
|
+
const actualRegisteredPorts = proxyManager.getRegisteredPorts();
|
|
91
|
+
// 返回所有配置的代理(去重),并标记注册状态
|
|
92
|
+
const actualRegisteredProxies = registeredProxies
|
|
93
|
+
.filter((p, index, self) => {
|
|
94
|
+
// 去重:只保留第一次出现的端口
|
|
95
|
+
return index === self.findIndex(other => other.remotePort === p.remotePort);
|
|
96
|
+
})
|
|
97
|
+
.map(p => ({ ...p, registered: actualRegisteredPorts.includes(p.remotePort) }));
|
|
98
|
+
const status = {
|
|
99
|
+
running: true,
|
|
100
|
+
serverUrl: config.serverUrl,
|
|
101
|
+
connected: controller.isConnected(),
|
|
102
|
+
authenticated: controller.isAuthenticated(),
|
|
103
|
+
uptime: Date.now() - startTime,
|
|
104
|
+
proxies: actualRegisteredProxies,
|
|
105
|
+
reconnectAttempts: controller.getReconnectAttempts(),
|
|
106
|
+
};
|
|
107
|
+
// 添加正向穿透相关信息
|
|
108
|
+
try {
|
|
109
|
+
const forwardProxies = forwardProxy.getProxies();
|
|
110
|
+
status.forwardProxies = forwardProxies;
|
|
111
|
+
status.isRegistered = true; // 假设已注册(实际应从 Controller 获取)
|
|
112
|
+
status.clientId = controller.getClientId();
|
|
113
|
+
}
|
|
114
|
+
catch (e) {
|
|
115
|
+
// 如果获取失败,返回基础状态
|
|
116
|
+
}
|
|
117
|
+
return status;
|
|
118
|
+
};
|
|
75
119
|
// 添加代理回调
|
|
76
|
-
async (proxy) => {
|
|
120
|
+
const addProxyCallback = async (proxy) => {
|
|
77
121
|
await proxyManager.registerProxy(proxy);
|
|
78
|
-
registeredProxies.push({ ...proxy });
|
|
79
|
-
|
|
122
|
+
registeredProxies.push({ ...proxy, index: nextProxyIndex++ });
|
|
123
|
+
// 同步更新配置文件
|
|
124
|
+
await updateConfigProxies(registeredProxies.map(p => ({ remotePort: p.remotePort, localPort: p.localPort, localHost: p.localHost })));
|
|
125
|
+
};
|
|
80
126
|
// 删除代理回调
|
|
81
|
-
async (remotePort) => {
|
|
127
|
+
const removeProxyCallback = async (remotePort) => {
|
|
82
128
|
await proxyManager.unregisterProxy(remotePort);
|
|
83
129
|
const index = registeredProxies.findIndex(p => p.remotePort === remotePort);
|
|
84
130
|
if (index !== -1) {
|
|
85
131
|
registeredProxies.splice(index, 1);
|
|
86
132
|
}
|
|
133
|
+
// 同步更新配置文件
|
|
134
|
+
await updateConfigProxies(registeredProxies);
|
|
135
|
+
};
|
|
136
|
+
// 添加正向穿透回调
|
|
137
|
+
const addForwardProxyCallback = async (entry) => {
|
|
138
|
+
await forwardProxy.addProxy(entry);
|
|
139
|
+
};
|
|
140
|
+
// 删除正向穿透回调
|
|
141
|
+
const removeForwardProxyCallback = async (localPort) => {
|
|
142
|
+
await forwardProxy.removeProxy(localPort);
|
|
143
|
+
};
|
|
144
|
+
// 注册客户端回调
|
|
145
|
+
const registerClientCallback = async (description) => {
|
|
146
|
+
return await forwardProxy.registerAsClient(description);
|
|
147
|
+
};
|
|
148
|
+
// 获取客户端列表回调
|
|
149
|
+
const getClientListCallback = async () => {
|
|
150
|
+
return await forwardProxy.getClientList();
|
|
151
|
+
};
|
|
152
|
+
// 重连回调
|
|
153
|
+
const reconnectCallback = async () => {
|
|
154
|
+
logger.log('收到手动重连请求');
|
|
155
|
+
// 先断开现有连接
|
|
156
|
+
controller.disconnect();
|
|
157
|
+
// 然后重新连接
|
|
158
|
+
await controller.connect();
|
|
159
|
+
};
|
|
160
|
+
// 创建管理页面服务器
|
|
161
|
+
const adminServer = new AdminServer(adminServerConfig, getStatusCallback, addProxyCallback, removeProxyCallback, addForwardProxyCallback, removeForwardProxyCallback, registerClientCallback, getClientListCallback, undefined, // sendMessage 会在后面设置
|
|
162
|
+
reconnectCallback);
|
|
163
|
+
// 设置发送消息回调(用于正向穿透向服务端发送消息)
|
|
164
|
+
adminServer.setSendMessageCallback(async (message) => {
|
|
165
|
+
return await controller.sendRequest(message);
|
|
87
166
|
});
|
|
88
167
|
// 监听控制器事件
|
|
89
168
|
controller.on('connected', () => {
|
|
@@ -94,28 +173,22 @@ async function main() {
|
|
|
94
173
|
});
|
|
95
174
|
controller.on('authenticated', async () => {
|
|
96
175
|
logger.log('已认证,正在注册代理...');
|
|
97
|
-
//
|
|
176
|
+
// 获取实际在 ProxyManager 中注册的端口
|
|
177
|
+
const actualRegisteredPorts = proxyManager.getRegisteredPorts();
|
|
178
|
+
// 注册所有代理(只注册尚未实际注册的)
|
|
98
179
|
for (const proxyConfig of config.proxies) {
|
|
180
|
+
if (actualRegisteredPorts.includes(proxyConfig.remotePort)) {
|
|
181
|
+
logger.log(`代理 :${proxyConfig.remotePort} 已注册,跳过`);
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
99
184
|
try {
|
|
100
185
|
await proxyManager.registerProxy(proxyConfig);
|
|
101
|
-
// 代理配置已在初始化时添加到 registeredProxies
|
|
102
186
|
}
|
|
103
187
|
catch (error) {
|
|
104
188
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
105
189
|
logger.error(`注册代理失败: ${errorMessage}`);
|
|
106
190
|
}
|
|
107
191
|
}
|
|
108
|
-
// 启动管理页面服务器
|
|
109
|
-
try {
|
|
110
|
-
await adminServer.start();
|
|
111
|
-
}
|
|
112
|
-
catch (error) {
|
|
113
|
-
logger.error('管理页面启动失败:', error);
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
|
-
controller.on('maxReconnectAttemptsReached', () => {
|
|
117
|
-
logger.error('已达到最大重连次数,正在退出...');
|
|
118
|
-
process.exit(1);
|
|
119
192
|
});
|
|
120
193
|
// 设置 IPC 请求监听(用于处理 CLI 添加代理的请求)
|
|
121
194
|
const ipcHandler = new IpcHandler({
|
|
@@ -125,6 +198,13 @@ async function main() {
|
|
|
125
198
|
registeredProxies,
|
|
126
199
|
});
|
|
127
200
|
ipcHandler.start();
|
|
201
|
+
// 启动管理页面服务器(立即启动,不等待认证)
|
|
202
|
+
try {
|
|
203
|
+
await adminServer.start();
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
logger.error('管理页面启动失败:', error);
|
|
207
|
+
}
|
|
128
208
|
// 优雅关闭
|
|
129
209
|
const shutdown = async () => {
|
|
130
210
|
ipcHandler.stop();
|
|
@@ -136,21 +216,27 @@ async function main() {
|
|
|
136
216
|
};
|
|
137
217
|
process.on('SIGINT', shutdown);
|
|
138
218
|
process.on('SIGTERM', shutdown);
|
|
139
|
-
//
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
catch (error) {
|
|
144
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
145
|
-
logger.error('连接服务器失败:', errorMessage);
|
|
219
|
+
// 未捕获异常处理 - 崩溃时记录退出码
|
|
220
|
+
process.on('uncaughtException', (error) => {
|
|
221
|
+
logger.error('未捕获异常:', error);
|
|
222
|
+
// 写入非零退出码,让父进程知道是异常退出
|
|
146
223
|
process.exit(1);
|
|
147
|
-
}
|
|
224
|
+
});
|
|
225
|
+
process.on('unhandledRejection', (reason, promise) => {
|
|
226
|
+
logger.error('未处理的 Promise 拒绝:', reason);
|
|
227
|
+
// 写入非零退出码
|
|
228
|
+
process.exit(1);
|
|
229
|
+
});
|
|
230
|
+
// 连接到服务器(不会抛出连接失败的异常,会自动重连)
|
|
231
|
+
await controller.connect();
|
|
148
232
|
}
|
|
149
233
|
// 检查是否作为主模块运行
|
|
150
|
-
|
|
234
|
+
// 使用更简单的方式:通过检查是否直接运行此文件
|
|
235
|
+
const isMainModule = process.argv[1] && process.argv[1].endsWith('index.js');
|
|
151
236
|
if (isMainModule) {
|
|
152
237
|
main().catch((error) => {
|
|
153
238
|
logger.error('启动客户端失败:', error);
|
|
239
|
+
// 注意:main() 内部已经处理了资源清理
|
|
154
240
|
process.exit(1);
|
|
155
241
|
});
|
|
156
242
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAgB,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/proxy-manager.d.ts
CHANGED
|
@@ -38,6 +38,7 @@ export declare class ProxyManager extends EventEmitter {
|
|
|
38
38
|
* 向服务器注册一个代理隧道。
|
|
39
39
|
*
|
|
40
40
|
* 发送注册消息到服务器,注册成功后创建 UnifiedHandler(同时支持 HTTP、WebSocket 和 TCP)。
|
|
41
|
+
* 如果未连接到服务器,仅添加到本地列表,待连接后自动注册。
|
|
41
42
|
*
|
|
42
43
|
* @param config - 代理配置对象,包含远程端口、本地端口等信息
|
|
43
44
|
* @throws {Error} 注册失败时抛出错误,包含服务器返回的错误信息
|
|
@@ -46,7 +47,7 @@ export declare class ProxyManager extends EventEmitter {
|
|
|
46
47
|
/**
|
|
47
48
|
* 注销指定远程端口的代理隧道。
|
|
48
49
|
*
|
|
49
|
-
*
|
|
50
|
+
* 销毁对应的处理器,并向服务器发送注销请求(仅在已连接时)。
|
|
50
51
|
*
|
|
51
52
|
* @param remotePort - 要注销的代理对应的远程端口号
|
|
52
53
|
*/
|
|
@@ -65,6 +66,12 @@ export declare class ProxyManager extends EventEmitter {
|
|
|
65
66
|
* 销毁所有处理器并清空处理器映射表。
|
|
66
67
|
*/
|
|
67
68
|
private onDisconnected;
|
|
69
|
+
/**
|
|
70
|
+
* 获取所有已注册的远程端口列表
|
|
71
|
+
*
|
|
72
|
+
* @returns 已注册的远程端口号数组
|
|
73
|
+
*/
|
|
74
|
+
getRegisteredPorts(): number[];
|
|
68
75
|
/**
|
|
69
76
|
* 销毁代理管理器,注销所有代理并释放资源。
|
|
70
77
|
*
|
|
@@ -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
|
|
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"}
|
package/dist/proxy-manager.js
CHANGED
|
@@ -43,22 +43,37 @@ export class ProxyManager extends EventEmitter {
|
|
|
43
43
|
* 向服务器注册一个代理隧道。
|
|
44
44
|
*
|
|
45
45
|
* 发送注册消息到服务器,注册成功后创建 UnifiedHandler(同时支持 HTTP、WebSocket 和 TCP)。
|
|
46
|
+
* 如果未连接到服务器,仅添加到本地列表,待连接后自动注册。
|
|
46
47
|
*
|
|
47
48
|
* @param config - 代理配置对象,包含远程端口、本地端口等信息
|
|
48
49
|
* @throws {Error} 注册失败时抛出错误,包含服务器返回的错误信息
|
|
49
50
|
*/
|
|
50
51
|
async registerProxy(config) {
|
|
51
52
|
logger.log(`正在注册代理: :${config.remotePort} -> ${config.localHost || 'localhost'}:${config.localPort}`);
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
53
|
+
// 只有在已认证的情况下才向服务器注册
|
|
54
|
+
if (this.controller.isAuthenticated()) {
|
|
55
|
+
const registerMsg = createMessage(MessageType.REGISTER, {
|
|
56
|
+
remotePort: config.remotePort,
|
|
57
|
+
localPort: config.localPort,
|
|
58
|
+
localHost: config.localHost,
|
|
59
|
+
});
|
|
60
|
+
try {
|
|
61
|
+
const response = await this.controller.sendRequest(registerMsg);
|
|
62
|
+
if (!response.payload.success) {
|
|
63
|
+
throw new Error(`注册代理失败: ${response.payload.error}`);
|
|
64
|
+
}
|
|
65
|
+
logger.log(`代理已注册: ${response.payload.remoteUrl}`);
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
// 服务器注册失败,抛出错误
|
|
69
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
70
|
+
throw new Error(`注册代理失败: ${errorMessage}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
logger.log(`代理已添加到本地列表: :${config.remotePort} -> ${config.localHost || 'localhost'}:${config.localPort} (待连接后自动注册)`);
|
|
60
75
|
}
|
|
61
|
-
|
|
76
|
+
// 无论是否连接成功,都创建本地处理器
|
|
62
77
|
const handler = new UnifiedHandler(this.controller, config);
|
|
63
78
|
handler.on('error', (error) => {
|
|
64
79
|
logger.error(`端口 ${config.remotePort} 的处理器错误:`, error);
|
|
@@ -69,7 +84,7 @@ export class ProxyManager extends EventEmitter {
|
|
|
69
84
|
/**
|
|
70
85
|
* 注销指定远程端口的代理隧道。
|
|
71
86
|
*
|
|
72
|
-
*
|
|
87
|
+
* 销毁对应的处理器,并向服务器发送注销请求(仅在已连接时)。
|
|
73
88
|
*
|
|
74
89
|
* @param remotePort - 要注销的代理对应的远程端口号
|
|
75
90
|
*/
|
|
@@ -79,11 +94,24 @@ export class ProxyManager extends EventEmitter {
|
|
|
79
94
|
handler.destroy();
|
|
80
95
|
this.handlers.delete(remotePort);
|
|
81
96
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
97
|
+
// 只有在已连接的情况下才向服务器发送注销请求
|
|
98
|
+
if (this.controller.isConnected()) {
|
|
99
|
+
const unregisterMsg = createMessage(MessageType.UNREGISTER, {
|
|
100
|
+
remotePort,
|
|
101
|
+
});
|
|
102
|
+
try {
|
|
103
|
+
await this.controller.sendRequest(unregisterMsg);
|
|
104
|
+
logger.log(`代理已注销: 端口 ${remotePort}`);
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
// 即使服务器注销失败,本地也已经删除了,记录错误但不抛出
|
|
108
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
109
|
+
logger.error(`服务器注销代理失败: ${errorMessage}`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
logger.log(`代理已移除: 端口 ${remotePort} (未连接到服务器)`);
|
|
114
|
+
}
|
|
87
115
|
}
|
|
88
116
|
/**
|
|
89
117
|
* 注销所有已注册的代理隧道。
|
|
@@ -111,6 +139,14 @@ export class ProxyManager extends EventEmitter {
|
|
|
111
139
|
}
|
|
112
140
|
this.handlers.clear();
|
|
113
141
|
}
|
|
142
|
+
/**
|
|
143
|
+
* 获取所有已注册的远程端口列表
|
|
144
|
+
*
|
|
145
|
+
* @returns 已注册的远程端口号数组
|
|
146
|
+
*/
|
|
147
|
+
getRegisteredPorts() {
|
|
148
|
+
return Array.from(this.handlers.keys());
|
|
149
|
+
}
|
|
114
150
|
/**
|
|
115
151
|
* 销毁代理管理器,注销所有代理并释放资源。
|
|
116
152
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy-manager.js","sourceRoot":"","sources":["../src/proxy-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAe,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,aAAa,EAA2D,MAAM,yBAAyB,CAAC;AAS9H;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,YAAa,SAAQ,YAAY;IAO5C;;;;OAIG;IACH,YAAY,UAAsB;QAChC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;QAE1B,UAAU;QACV,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;YACtC,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;IAED
|
|
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.
|
|
3
|
+
"version": "0.0.12",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -17,14 +17,16 @@
|
|
|
17
17
|
"dist"
|
|
18
18
|
],
|
|
19
19
|
"scripts": {
|
|
20
|
-
"build": "tsc",
|
|
20
|
+
"build": "npm run build --workspace=@feng3d/ctc-ui && tsc",
|
|
21
|
+
"build:admin-ui": "cd admin-ui && npm run build",
|
|
21
22
|
"watch": "tsc --watch --pretty",
|
|
23
|
+
"clean": "rm -rf dist",
|
|
22
24
|
"test": "vitest run",
|
|
23
25
|
"test:watch": "vitest watch",
|
|
24
26
|
"test:coverage": "vitest run --coverage"
|
|
25
27
|
},
|
|
26
28
|
"dependencies": {
|
|
27
|
-
"@feng3d/chuantou-shared": "^0.0.
|
|
29
|
+
"@feng3d/chuantou-shared": "^0.0.12",
|
|
28
30
|
"chalk": "^5.6.2",
|
|
29
31
|
"commander": "^14.0.3",
|
|
30
32
|
"uuid": "^9.0.1",
|