@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.
@@ -1,69 +1,83 @@
1
1
  /**
2
2
  * HTTP 隧道服务端
3
- * 接收 HTTP 请求,通过 WebSocket 隧道转发给客户端,并将响应返回
3
+ * 接收 HTTP 请求,通过多路 WebSocket 隧道转发给客户端,并将响应返回
4
+ * 协议:二进制控制帧 + 数据帧;隧道连接池
4
5
  */
5
6
  import http from 'http';
6
7
  import { WebSocketServer } from 'ws';
7
- import { generateRequestId, isHttpTunnelMessage, } from './http-tunnel-protocol.js';
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
- tunnelWs = null;
15
- pendingRequests = new Map();
16
- wsClients = new Map(); // requestId -> WebSocket client
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 || 30000,
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
- * 设置 WebSocket 隧道连接
33
- */
34
- setTunnelConnection(ws) {
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
- this.tunnelWs.on('close', () => {
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
- // 关闭 HTTP 服务器
87
- this.server.close((err) => {
88
- if (err) {
89
- reject(err);
90
- }
91
- else {
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
- if (!this.tunnelWs) {
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 chunks = [];
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
- chunks.push(chunk);
148
+ bodyChunks.push(chunk);
149
+ bodyLength += chunk.length;
150
+ if (bodyLength >= REQUEST_BODY_BUFFER_SIZE)
151
+ flushBody();
111
152
  });
112
- req.on('end', async () => {
113
- try {
114
- // 全量转发:不做规则匹配,由客户端根据 Host/path 匹配规则并转发
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
- res.writeHead(500, { 'Content-Type': 'text/plain' });
147
- res.end('Request error');
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
- if (!this.tunnelWs) {
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
- // 直接使用 WebSocketServer 的 handleUpgrade,不需要预先创建 wsClient
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
- if (this.tunnelWs) {
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
- if (this.tunnelWs) {
177
- const message = {
178
- type: 'WS_CLOSE',
179
- requestId,
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
- // 发送 WebSocket 升级请求到隧道
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
- this.tunnelWs.send(JSON.stringify(upgradeMessage));
198
+ tunnelWs.send(encodeBinaryControlFrame(FRAME_WS_UPGRADE, requestId, upgradePayload));
199
199
  }
200
- /**
201
- * 处理隧道消息
202
- */
203
200
  handleTunnelMessage(data) {
204
- try {
205
- // 正确处理 Buffer 和 string 类型的数据
206
- const messageStr = typeof data === 'string' ? data : data.toString('utf8');
207
- const message = JSON.parse(messageStr);
208
- if (!isHttpTunnelMessage(message)) {
209
- console.warn('[HTTP Tunnel] Invalid message received');
210
- return;
211
- }
212
- switch (message.type) {
213
- case 'HTTP_RESPONSE':
214
- case 'TUNNEL_ERROR':
215
- this.handleResponse(message);
216
- break;
217
- case 'WS_DATA':
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
- default:
224
- console.warn('[HTTP Tunnel] Unexpected message type:', message.type);
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
- catch (error) {
228
- console.error('[HTTP Tunnel] Error handling tunnel message:', error);
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
- handleResponse(message) {
235
- const pending = this.pendingRequests.get(message.requestId);
236
- if (pending) {
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
- * 处理 WebSocket 数据消息
247
- */
248
- handleWsData(message) {
249
- const wsClient = this.wsClients.get(message.requestId);
250
- if (wsClient) {
251
- const data = message.isBinary ? Buffer.from(message.data, 'base64') : message.data;
252
- wsClient.send(data);
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
- * 处理 WebSocket 关闭消息
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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"}
@@ -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;AAEjC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,kBAAkB;QAClB,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/test/index.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cjwddz/mirror",
3
- "version": "2.0.10",
3
+ "version": "2.0.12",
4
4
  "type": "module",
5
5
  "description": "HTTP 隧道工具 - 将本地服务暴露到公网,支持多服务代理",
6
6
  "main": "./dist/index.js",