@cjwddz/mirror 2.0.10 → 2.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 +24 -242
- package/dist/cli/cli-commands.d.ts.map +1 -1
- package/dist/cli/cli-commands.js +48 -43
- package/dist/cli/cli-commands.js.map +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/core/http-tunnel-client.d.ts +13 -48
- package/dist/core/http-tunnel-client.d.ts.map +1 -1
- package/dist/core/http-tunnel-client.js +233 -264
- package/dist/core/http-tunnel-client.js.map +1 -1
- package/dist/core/http-tunnel-protocol.d.ts +91 -2
- package/dist/core/http-tunnel-protocol.d.ts.map +1 -1
- package/dist/core/http-tunnel-protocol.js +111 -2
- package/dist/core/http-tunnel-protocol.js.map +1 -1
- package/dist/core/http-tunnel-server.d.ts +15 -50
- package/dist/core/http-tunnel-server.d.ts.map +1 -1
- package/dist/core/http-tunnel-server.js +202 -224
- package/dist/core/http-tunnel-server.js.map +1 -1
- package/dist/test/index.test.js +41 -1
- package/dist/test/index.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,69 +1,83 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* HTTP 隧道服务端
|
|
3
|
-
* 接收 HTTP
|
|
3
|
+
* 接收 HTTP 请求,通过多路 WebSocket 隧道转发给客户端,并将响应返回
|
|
4
|
+
* 协议:二进制控制帧 + 数据帧;隧道连接池
|
|
4
5
|
*/
|
|
5
6
|
import http from 'http';
|
|
6
7
|
import { WebSocketServer } from 'ws';
|
|
7
|
-
import { generateRequestId,
|
|
8
|
-
|
|
9
|
-
* HTTP 隧道服务端类
|
|
10
|
-
*/
|
|
8
|
+
import { generateRequestId, isBinaryFrame, decodeBinaryFrame, encodeBinaryControlFrame, encodeBinaryDataFrame, FRAME_REQUEST_START, FRAME_REQUEST_END, FRAME_RESPONSE_START, FRAME_RESPONSE_END, FRAME_TUNNEL_ERROR, FRAME_WS_UPGRADE, FRAME_WS_DATA, FRAME_WS_CLOSE, FRAME_BODY_REQUEST, FRAME_BODY_RESPONSE, } from './http-tunnel-protocol.js';
|
|
9
|
+
const REQUEST_BODY_BUFFER_SIZE = 16 * 1024;
|
|
11
10
|
export class HttpTunnelServer {
|
|
12
11
|
server;
|
|
13
12
|
wss;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
/** 多路隧道连接池 */
|
|
14
|
+
tunnelPool = [];
|
|
15
|
+
tunnelRoundRobin = 0;
|
|
16
|
+
streamingResponses = new Map();
|
|
17
|
+
wsClients = new Map();
|
|
18
|
+
/** WS 请求使用的隧道,用于隧道断开时关闭对应 browser WS */
|
|
19
|
+
tunnelWsByRequestId = new Map();
|
|
17
20
|
options;
|
|
18
21
|
constructor(options = {}) {
|
|
19
22
|
this.options = {
|
|
20
23
|
port: options.port || 80,
|
|
21
24
|
host: options.host || '0.0.0.0',
|
|
22
|
-
timeout: options.timeout ||
|
|
25
|
+
timeout: options.timeout || 60000,
|
|
23
26
|
};
|
|
24
|
-
// 创建 HTTP 服务器
|
|
25
27
|
this.server = http.createServer(this.handleHttpRequest.bind(this));
|
|
26
|
-
// 创建 WebSocket 服务器(用于处理 WebSocket 升级)
|
|
27
28
|
this.wss = new WebSocketServer({ noServer: true });
|
|
28
|
-
// 处理 HTTP 服务器升级请求(WebSocket)
|
|
29
29
|
this.server.on('upgrade', this.handleHttpUpgrade.bind(this));
|
|
30
30
|
}
|
|
31
|
-
/**
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
// 关闭旧连接
|
|
36
|
-
if (this.tunnelWs) {
|
|
37
|
-
this.tunnelWs.close();
|
|
38
|
-
}
|
|
39
|
-
this.tunnelWs = ws;
|
|
40
|
-
// 处理隧道消息
|
|
41
|
-
this.tunnelWs.on('message', (data) => {
|
|
31
|
+
/** 添加一条隧道连接(多路时多次调用) */
|
|
32
|
+
addTunnelConnection(ws) {
|
|
33
|
+
this.tunnelPool.push(ws);
|
|
34
|
+
ws.on('message', (data) => {
|
|
42
35
|
this.handleTunnelMessage(data);
|
|
43
36
|
});
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
this.tunnelWs = null;
|
|
47
|
-
// 关闭所有挂起的请求
|
|
48
|
-
this.pendingRequests.forEach((pending, requestId) => {
|
|
49
|
-
clearTimeout(pending.timeout);
|
|
50
|
-
pending.resolve({
|
|
51
|
-
type: 'TUNNEL_ERROR',
|
|
52
|
-
requestId,
|
|
53
|
-
error: 'Tunnel connection closed',
|
|
54
|
-
code: 'TUNNEL_CLOSED',
|
|
55
|
-
});
|
|
56
|
-
});
|
|
57
|
-
this.pendingRequests.clear();
|
|
37
|
+
ws.on('close', () => {
|
|
38
|
+
this.removeTunnelConnection(ws);
|
|
58
39
|
});
|
|
59
|
-
|
|
60
|
-
this.tunnelWs.on('error', (error) => {
|
|
40
|
+
ws.on('error', (error) => {
|
|
61
41
|
console.error('[HTTP Tunnel] 隧道错误:', error);
|
|
62
42
|
});
|
|
63
43
|
}
|
|
64
|
-
/**
|
|
65
|
-
|
|
66
|
-
|
|
44
|
+
/** 兼容旧 API:单连接时视为池中唯一连接 */
|
|
45
|
+
setTunnelConnection(ws) {
|
|
46
|
+
this.tunnelPool.forEach((w) => w.close());
|
|
47
|
+
this.tunnelPool = [];
|
|
48
|
+
this.addTunnelConnection(ws);
|
|
49
|
+
}
|
|
50
|
+
removeTunnelConnection(ws) {
|
|
51
|
+
const i = this.tunnelPool.indexOf(ws);
|
|
52
|
+
if (i !== -1)
|
|
53
|
+
this.tunnelPool.splice(i, 1);
|
|
54
|
+
this.streamingResponses.forEach((state, requestId) => {
|
|
55
|
+
if (state.tunnelWs === ws) {
|
|
56
|
+
clearTimeout(state.timeout);
|
|
57
|
+
this.streamingResponses.delete(requestId);
|
|
58
|
+
if (!state.res.writableEnded) {
|
|
59
|
+
state.res.writeHead(502, { 'Content-Type': 'text/plain' });
|
|
60
|
+
state.res.end('Tunnel connection closed');
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
this.tunnelWsByRequestId.forEach((tws, requestId) => {
|
|
65
|
+
if (tws === ws) {
|
|
66
|
+
this.tunnelWsByRequestId.delete(requestId);
|
|
67
|
+
const browserWs = this.wsClients.get(requestId);
|
|
68
|
+
if (browserWs) {
|
|
69
|
+
browserWs.close();
|
|
70
|
+
this.wsClients.delete(requestId);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
getNextTunnel() {
|
|
76
|
+
if (this.tunnelPool.length === 0)
|
|
77
|
+
return null;
|
|
78
|
+
const idx = this.tunnelRoundRobin++ % this.tunnelPool.length;
|
|
79
|
+
return this.tunnelPool[idx];
|
|
80
|
+
}
|
|
67
81
|
start() {
|
|
68
82
|
return new Promise((resolve, reject) => {
|
|
69
83
|
this.server.listen(this.options.port, this.options.host, () => {
|
|
@@ -73,227 +87,203 @@ export class HttpTunnelServer {
|
|
|
73
87
|
this.server.on('error', reject);
|
|
74
88
|
});
|
|
75
89
|
}
|
|
76
|
-
/**
|
|
77
|
-
* 停止服务器
|
|
78
|
-
*/
|
|
79
90
|
stop() {
|
|
80
91
|
return new Promise((resolve, reject) => {
|
|
81
|
-
// 关闭 WebSocket 服务器
|
|
82
92
|
this.wss.close();
|
|
83
|
-
// 关闭所有 WebSocket 客户端
|
|
84
93
|
this.wsClients.forEach((ws) => ws.close());
|
|
85
94
|
this.wsClients.clear();
|
|
86
|
-
|
|
87
|
-
this.
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
resolve();
|
|
93
|
-
}
|
|
95
|
+
this.tunnelPool.forEach((ws) => ws.close());
|
|
96
|
+
this.tunnelPool = [];
|
|
97
|
+
this.streamingResponses.forEach((state) => {
|
|
98
|
+
clearTimeout(state.timeout);
|
|
99
|
+
if (!state.res.writableEnded)
|
|
100
|
+
state.res.end();
|
|
94
101
|
});
|
|
102
|
+
this.streamingResponses.clear();
|
|
103
|
+
this.tunnelWsByRequestId.clear();
|
|
104
|
+
this.wsClients.clear();
|
|
105
|
+
this.server.close((err) => (err ? reject(err) : resolve()));
|
|
95
106
|
});
|
|
96
107
|
}
|
|
97
|
-
/**
|
|
98
|
-
* 处理 HTTP 请求
|
|
99
|
-
*/
|
|
100
108
|
handleHttpRequest(req, res) {
|
|
101
|
-
|
|
109
|
+
const tunnelWs = this.getNextTunnel();
|
|
110
|
+
if (!tunnelWs) {
|
|
102
111
|
res.writeHead(503, { 'Content-Type': 'text/plain' });
|
|
103
112
|
res.end('Tunnel not connected');
|
|
104
113
|
return;
|
|
105
114
|
}
|
|
106
115
|
const requestId = generateRequestId();
|
|
107
|
-
const
|
|
108
|
-
|
|
116
|
+
const timeout = setTimeout(() => {
|
|
117
|
+
const state = this.streamingResponses.get(requestId);
|
|
118
|
+
if (state && !state.res.writableEnded) {
|
|
119
|
+
this.streamingResponses.delete(requestId);
|
|
120
|
+
state.res.writeHead(504, { 'Content-Type': 'text/plain' });
|
|
121
|
+
state.res.end('Request timeout');
|
|
122
|
+
}
|
|
123
|
+
}, this.options.timeout);
|
|
124
|
+
this.streamingResponses.set(requestId, {
|
|
125
|
+
res,
|
|
126
|
+
timeout,
|
|
127
|
+
headSent: false,
|
|
128
|
+
writeQueue: [],
|
|
129
|
+
tunnelWs,
|
|
130
|
+
});
|
|
131
|
+
const startPayload = {
|
|
132
|
+
method: req.method || 'GET',
|
|
133
|
+
url: req.url || '/',
|
|
134
|
+
headers: this.normalizeHeaders(req.headers),
|
|
135
|
+
};
|
|
136
|
+
tunnelWs.send(encodeBinaryControlFrame(FRAME_REQUEST_START, requestId, startPayload));
|
|
137
|
+
const bodyChunks = [];
|
|
138
|
+
let bodyLength = 0;
|
|
139
|
+
const flushBody = () => {
|
|
140
|
+
if (bodyLength === 0)
|
|
141
|
+
return;
|
|
142
|
+
const combined = bodyChunks.length === 1 ? bodyChunks[0] : Buffer.concat(bodyChunks, bodyLength);
|
|
143
|
+
bodyChunks.length = 0;
|
|
144
|
+
bodyLength = 0;
|
|
145
|
+
tunnelWs.send(encodeBinaryDataFrame(FRAME_BODY_REQUEST, requestId, combined));
|
|
146
|
+
};
|
|
109
147
|
req.on('data', (chunk) => {
|
|
110
|
-
|
|
148
|
+
bodyChunks.push(chunk);
|
|
149
|
+
bodyLength += chunk.length;
|
|
150
|
+
if (bodyLength >= REQUEST_BODY_BUFFER_SIZE)
|
|
151
|
+
flushBody();
|
|
111
152
|
});
|
|
112
|
-
req.on('end',
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
const requestMessage = {
|
|
116
|
-
type: 'HTTP_REQUEST',
|
|
117
|
-
requestId,
|
|
118
|
-
method: req.method || 'GET',
|
|
119
|
-
url: req.url || '/',
|
|
120
|
-
headers: this.normalizeHeaders(req.headers),
|
|
121
|
-
body: chunks.length > 0 ? Buffer.concat(chunks).toString('base64') : undefined,
|
|
122
|
-
};
|
|
123
|
-
// 发送到隧道
|
|
124
|
-
const response = await this.sendAndWait(requestMessage);
|
|
125
|
-
if (response.type === 'HTTP_RESPONSE') {
|
|
126
|
-
// 发送响应
|
|
127
|
-
const body = response.body ? Buffer.from(response.body, 'base64') : Buffer.alloc(0);
|
|
128
|
-
// 一次性设置状态码和响应头
|
|
129
|
-
res.writeHead(response.statusCode, response.headers || {});
|
|
130
|
-
res.end(body);
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
133
|
-
// 错误响应
|
|
134
|
-
res.writeHead(502, { 'Content-Type': 'text/plain' });
|
|
135
|
-
res.end(`Tunnel error: ${response.error}`);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
catch (error) {
|
|
139
|
-
console.error('[HTTP Tunnel] 处理请求时出错:', error);
|
|
140
|
-
res.writeHead(500, { 'Content-Type': 'text/plain' });
|
|
141
|
-
res.end('Internal server error');
|
|
142
|
-
}
|
|
153
|
+
req.on('end', () => {
|
|
154
|
+
flushBody();
|
|
155
|
+
tunnelWs.send(encodeBinaryControlFrame(FRAME_REQUEST_END, requestId, {}));
|
|
143
156
|
});
|
|
144
157
|
req.on('error', (error) => {
|
|
145
158
|
console.error('[HTTP Tunnel] 请求错误:', error);
|
|
146
|
-
|
|
147
|
-
res.
|
|
159
|
+
const state = this.streamingResponses.get(requestId);
|
|
160
|
+
if (state && !state.res.writableEnded) {
|
|
161
|
+
clearTimeout(state.timeout);
|
|
162
|
+
this.streamingResponses.delete(requestId);
|
|
163
|
+
state.res.writeHead(500, { 'Content-Type': 'text/plain' });
|
|
164
|
+
state.res.end('Request error');
|
|
165
|
+
}
|
|
148
166
|
});
|
|
149
167
|
}
|
|
150
|
-
/**
|
|
151
|
-
* 处理 HTTP 升级请求(WebSocket)
|
|
152
|
-
*/
|
|
153
168
|
handleHttpUpgrade(req, socket, head) {
|
|
154
|
-
|
|
169
|
+
const tunnelWs = this.getNextTunnel();
|
|
170
|
+
if (!tunnelWs) {
|
|
155
171
|
socket.write('HTTP/1.1 503 Service Unavailable\r\n\r\n');
|
|
156
172
|
socket.destroy();
|
|
157
173
|
return;
|
|
158
174
|
}
|
|
159
175
|
const requestId = generateRequestId();
|
|
160
|
-
|
|
176
|
+
this.tunnelWsByRequestId.set(requestId, tunnelWs);
|
|
161
177
|
this.wss.handleUpgrade(req, socket, head, (ws) => {
|
|
162
178
|
this.wsClients.set(requestId, ws);
|
|
163
|
-
// 处理外部 WebSocket 客户端消息,转发到隧道
|
|
164
179
|
ws.on('message', (data) => {
|
|
165
|
-
|
|
166
|
-
const message = {
|
|
167
|
-
type: 'WS_DATA',
|
|
168
|
-
requestId,
|
|
169
|
-
data: data.toString('base64'),
|
|
170
|
-
isBinary: data instanceof Buffer && !this.isUtf8(data),
|
|
171
|
-
};
|
|
172
|
-
this.tunnelWs.send(JSON.stringify(message));
|
|
173
|
-
}
|
|
180
|
+
tunnelWs.send(encodeBinaryDataFrame(FRAME_WS_DATA, requestId, data));
|
|
174
181
|
});
|
|
175
182
|
ws.on('close', (code, reason) => {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
code,
|
|
181
|
-
reason: reason ? reason.toString() : undefined,
|
|
182
|
-
};
|
|
183
|
-
this.tunnelWs.send(JSON.stringify(message));
|
|
184
|
-
}
|
|
183
|
+
tunnelWs.send(encodeBinaryControlFrame(FRAME_WS_CLOSE, requestId, {
|
|
184
|
+
code,
|
|
185
|
+
reason: reason ? reason.toString() : undefined,
|
|
186
|
+
}));
|
|
185
187
|
this.wsClients.delete(requestId);
|
|
188
|
+
this.tunnelWsByRequestId.delete(requestId);
|
|
186
189
|
});
|
|
187
190
|
ws.on('error', (error) => {
|
|
188
191
|
console.error('[HTTP Tunnel] Server WebSocket error:', error);
|
|
189
192
|
});
|
|
190
193
|
});
|
|
191
|
-
|
|
192
|
-
const upgradeMessage = {
|
|
193
|
-
type: 'WS_UPGRADE',
|
|
194
|
-
requestId,
|
|
194
|
+
const upgradePayload = {
|
|
195
195
|
url: req.url || '/',
|
|
196
196
|
headers: this.normalizeHeaders(req.headers),
|
|
197
197
|
};
|
|
198
|
-
|
|
198
|
+
tunnelWs.send(encodeBinaryControlFrame(FRAME_WS_UPGRADE, requestId, upgradePayload));
|
|
199
199
|
}
|
|
200
|
-
/**
|
|
201
|
-
* 处理隧道消息
|
|
202
|
-
*/
|
|
203
200
|
handleTunnelMessage(data) {
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
this.handleWsData(message);
|
|
219
|
-
break;
|
|
220
|
-
case 'WS_CLOSE':
|
|
221
|
-
this.handleWsClose(message);
|
|
201
|
+
const buf = typeof data === 'string' ? Buffer.from(data, 'utf8') : data;
|
|
202
|
+
if (buf.length < 1)
|
|
203
|
+
return;
|
|
204
|
+
if (!isBinaryFrame(buf)) {
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
const decoded = decodeBinaryFrame(buf);
|
|
208
|
+
if (!decoded)
|
|
209
|
+
return;
|
|
210
|
+
const { type, requestId, payload, payloadJson } = decoded;
|
|
211
|
+
switch (type) {
|
|
212
|
+
case FRAME_RESPONSE_START: {
|
|
213
|
+
const state = this.streamingResponses.get(requestId);
|
|
214
|
+
if (!state || state.headSent)
|
|
222
215
|
break;
|
|
223
|
-
|
|
224
|
-
|
|
216
|
+
state.headSent = true;
|
|
217
|
+
const h = payloadJson?.headers || {};
|
|
218
|
+
state.res.writeHead(payloadJson?.statusCode ?? 200, payloadJson?.statusMessage ?? 'OK', h);
|
|
219
|
+
break;
|
|
225
220
|
}
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
221
|
+
case FRAME_BODY_RESPONSE:
|
|
222
|
+
this.handleResponseBodyChunk(requestId, payload);
|
|
223
|
+
break;
|
|
224
|
+
case FRAME_RESPONSE_END: {
|
|
225
|
+
const state = this.streamingResponses.get(requestId);
|
|
226
|
+
if (state) {
|
|
227
|
+
clearTimeout(state.timeout);
|
|
228
|
+
state.ending = true;
|
|
229
|
+
this.flushResponseWriteQueue(requestId);
|
|
230
|
+
}
|
|
231
|
+
break;
|
|
232
|
+
}
|
|
233
|
+
case FRAME_TUNNEL_ERROR: {
|
|
234
|
+
const state = this.streamingResponses.get(requestId);
|
|
235
|
+
if (state) {
|
|
236
|
+
clearTimeout(state.timeout);
|
|
237
|
+
this.streamingResponses.delete(requestId);
|
|
238
|
+
if (!state.res.writableEnded) {
|
|
239
|
+
state.res.writeHead(502, { 'Content-Type': 'text/plain' });
|
|
240
|
+
state.res.end(`Tunnel error: ${payloadJson?.error ?? 'Unknown'}`);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
break;
|
|
244
|
+
}
|
|
245
|
+
case FRAME_WS_DATA: {
|
|
246
|
+
const wsClient = this.wsClients.get(requestId);
|
|
247
|
+
if (wsClient)
|
|
248
|
+
wsClient.send(payload);
|
|
249
|
+
break;
|
|
250
|
+
}
|
|
251
|
+
case FRAME_WS_CLOSE: {
|
|
252
|
+
const wsClient = this.wsClients.get(requestId);
|
|
253
|
+
if (wsClient) {
|
|
254
|
+
wsClient.close(payloadJson?.code ?? 1000, payloadJson?.reason ?? '');
|
|
255
|
+
}
|
|
256
|
+
this.wsClients.delete(requestId);
|
|
257
|
+
this.tunnelWsByRequestId.delete(requestId);
|
|
258
|
+
break;
|
|
259
|
+
}
|
|
260
|
+
default:
|
|
261
|
+
break;
|
|
229
262
|
}
|
|
230
263
|
}
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
clearTimeout(pending.timeout);
|
|
238
|
-
this.pendingRequests.delete(message.requestId);
|
|
239
|
-
pending.resolve(message);
|
|
240
|
-
}
|
|
241
|
-
else {
|
|
242
|
-
console.warn('[HTTP Tunnel] No pending request for:', message.requestId);
|
|
243
|
-
}
|
|
264
|
+
handleResponseBodyChunk(requestId, payload) {
|
|
265
|
+
const state = this.streamingResponses.get(requestId);
|
|
266
|
+
if (!state || !state.headSent || state.res.writableEnded)
|
|
267
|
+
return;
|
|
268
|
+
state.writeQueue.push(payload);
|
|
269
|
+
this.flushResponseWriteQueue(requestId);
|
|
244
270
|
}
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
271
|
+
flushResponseWriteQueue(requestId) {
|
|
272
|
+
const state = this.streamingResponses.get(requestId);
|
|
273
|
+
if (!state || state.res.writableEnded)
|
|
274
|
+
return;
|
|
275
|
+
while (state.writeQueue.length > 0) {
|
|
276
|
+
const ok = state.res.write(state.writeQueue.shift());
|
|
277
|
+
if (!ok) {
|
|
278
|
+
state.res.once('drain', () => this.flushResponseWriteQueue(requestId));
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
253
281
|
}
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
*/
|
|
258
|
-
handleWsClose(message) {
|
|
259
|
-
const wsClient = this.wsClients.get(message.requestId);
|
|
260
|
-
if (wsClient) {
|
|
261
|
-
wsClient.close(message.code, message.reason);
|
|
282
|
+
if (state.ending) {
|
|
283
|
+
this.streamingResponses.delete(requestId);
|
|
284
|
+
state.res.end();
|
|
262
285
|
}
|
|
263
286
|
}
|
|
264
|
-
/**
|
|
265
|
-
* 发送消息并等待响应
|
|
266
|
-
*/
|
|
267
|
-
sendAndWait(message) {
|
|
268
|
-
return new Promise((resolve, _reject) => {
|
|
269
|
-
const timeout = setTimeout(() => {
|
|
270
|
-
this.pendingRequests.delete(message.requestId);
|
|
271
|
-
resolve({
|
|
272
|
-
type: 'TUNNEL_ERROR',
|
|
273
|
-
requestId: message.requestId,
|
|
274
|
-
error: 'Request timeout',
|
|
275
|
-
code: 'TIMEOUT',
|
|
276
|
-
});
|
|
277
|
-
}, this.options.timeout);
|
|
278
|
-
this.pendingRequests.set(message.requestId, { resolve, timeout });
|
|
279
|
-
if (this.tunnelWs) {
|
|
280
|
-
this.tunnelWs.send(JSON.stringify(message));
|
|
281
|
-
}
|
|
282
|
-
else {
|
|
283
|
-
clearTimeout(timeout);
|
|
284
|
-
this.pendingRequests.delete(message.requestId);
|
|
285
|
-
resolve({
|
|
286
|
-
type: 'TUNNEL_ERROR',
|
|
287
|
-
requestId: message.requestId,
|
|
288
|
-
error: 'Tunnel not connected',
|
|
289
|
-
code: 'NO_TUNNEL',
|
|
290
|
-
});
|
|
291
|
-
}
|
|
292
|
-
});
|
|
293
|
-
}
|
|
294
|
-
/**
|
|
295
|
-
* 标准化请求头(转换为小写)
|
|
296
|
-
*/
|
|
297
287
|
normalizeHeaders(headers) {
|
|
298
288
|
const normalized = {};
|
|
299
289
|
for (const [key, value] of Object.entries(headers)) {
|
|
@@ -303,17 +293,5 @@ export class HttpTunnelServer {
|
|
|
303
293
|
}
|
|
304
294
|
return normalized;
|
|
305
295
|
}
|
|
306
|
-
/**
|
|
307
|
-
* 判断 Buffer 是否为 UTF-8 编码
|
|
308
|
-
*/
|
|
309
|
-
isUtf8(buffer) {
|
|
310
|
-
try {
|
|
311
|
-
buffer.toString('utf8');
|
|
312
|
-
return true;
|
|
313
|
-
}
|
|
314
|
-
catch {
|
|
315
|
-
return false;
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
296
|
}
|
|
319
297
|
//# sourceMappingURL=http-tunnel-server.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-tunnel-server.js","sourceRoot":"","sources":["../../src/core/http-tunnel-server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"http-tunnel-server.js","sourceRoot":"","sources":["../../src/core/http-tunnel-server.ts"],"names":[],"mappings":"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"}
|
package/dist/test/index.test.js
CHANGED
|
@@ -3,10 +3,50 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { describe, it } from 'node:test';
|
|
5
5
|
import assert from 'node:assert';
|
|
6
|
+
import { encodeBodyChunkFrame, decodeBodyChunkFrame, isBodyChunkFrame, BODY_CHUNK_REQUEST, BODY_CHUNK_RESPONSE, generateRequestId, isBinaryFrame, decodeBinaryFrame, encodeBinaryControlFrame, encodeBinaryDataFrame, FRAME_REQUEST_START, FRAME_BODY_RESPONSE, } from '../core/http-tunnel-protocol.js';
|
|
6
7
|
describe('Mirror', () => {
|
|
7
8
|
it('should export protocol types', () => {
|
|
8
|
-
// 基本测试,确保模块可以正常导入
|
|
9
9
|
assert.ok(true);
|
|
10
10
|
});
|
|
11
|
+
it('binary control frame roundtrip', () => {
|
|
12
|
+
const requestId = generateRequestId();
|
|
13
|
+
const frame = encodeBinaryControlFrame(FRAME_REQUEST_START, requestId, {
|
|
14
|
+
method: 'GET',
|
|
15
|
+
url: '/',
|
|
16
|
+
headers: { host: 'example.com' },
|
|
17
|
+
});
|
|
18
|
+
assert.ok(isBinaryFrame(frame));
|
|
19
|
+
const decoded = decodeBinaryFrame(frame);
|
|
20
|
+
assert.ok(decoded !== null);
|
|
21
|
+
assert.strictEqual(decoded.type, FRAME_REQUEST_START);
|
|
22
|
+
assert.strictEqual(decoded.requestId, requestId);
|
|
23
|
+
assert.strictEqual(decoded.payloadJson?.method, 'GET');
|
|
24
|
+
assert.strictEqual(decoded.payloadJson?.url, '/');
|
|
25
|
+
});
|
|
26
|
+
it('binary data frame roundtrip', () => {
|
|
27
|
+
const requestId = generateRequestId();
|
|
28
|
+
const payload = Buffer.from('body', 'utf8');
|
|
29
|
+
const frame = encodeBinaryDataFrame(FRAME_BODY_RESPONSE, requestId, payload);
|
|
30
|
+
const decoded = decodeBinaryFrame(frame);
|
|
31
|
+
assert.ok(decoded !== null);
|
|
32
|
+
assert.strictEqual(decoded.type, FRAME_BODY_RESPONSE);
|
|
33
|
+
assert.strictEqual(decoded.payload.toString('utf8'), 'body');
|
|
34
|
+
});
|
|
35
|
+
it('encodeBodyChunkFrame / decodeBodyChunkFrame roundtrip', () => {
|
|
36
|
+
const requestId = generateRequestId();
|
|
37
|
+
const payload = Buffer.from('hello world', 'utf8');
|
|
38
|
+
const frame = encodeBodyChunkFrame(BODY_CHUNK_REQUEST, requestId, payload);
|
|
39
|
+
assert.ok(isBodyChunkFrame(frame));
|
|
40
|
+
const decoded = decodeBodyChunkFrame(frame, BODY_CHUNK_REQUEST);
|
|
41
|
+
assert.ok(decoded !== null);
|
|
42
|
+
assert.strictEqual(decoded.requestId, requestId);
|
|
43
|
+
assert.strictEqual(decoded.payload.toString('utf8'), 'hello world');
|
|
44
|
+
});
|
|
45
|
+
it('decodeBodyChunkFrame returns null for wrong type', () => {
|
|
46
|
+
const requestId = 'abc';
|
|
47
|
+
const payload = Buffer.from('x');
|
|
48
|
+
const frame = encodeBodyChunkFrame(BODY_CHUNK_REQUEST, requestId, payload);
|
|
49
|
+
assert.strictEqual(decodeBodyChunkFrame(frame, BODY_CHUNK_RESPONSE), null);
|
|
50
|
+
});
|
|
11
51
|
});
|
|
12
52
|
//# sourceMappingURL=index.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/test/index.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/test/index.test.ts"],"names":[],"mappings":"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"}
|