@limrun/api 0.17.0-rc.5 → 0.17.0-rc.6
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/package.json +1 -1
- package/src/tunnel.ts +318 -0
- package/src/version.ts +1 -1
- package/tunnel.d.mts +22 -0
- package/tunnel.d.mts.map +1 -1
- package/tunnel.d.ts +22 -0
- package/tunnel.d.ts.map +1 -1
- package/tunnel.js +256 -0
- package/tunnel.js.map +1 -1
- package/tunnel.mjs +254 -0
- package/tunnel.mjs.map +1 -1
- package/version.d.mts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/version.mjs +1 -1
package/package.json
CHANGED
package/src/tunnel.ts
CHANGED
|
@@ -17,6 +17,13 @@ export type TunnelConnectionState = 'connecting' | 'connected' | 'disconnected'
|
|
|
17
17
|
*/
|
|
18
18
|
export type TunnelConnectionStateCallback = (state: TunnelConnectionState) => void;
|
|
19
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Tunnel mode for TCP connections
|
|
22
|
+
* - 'singleton': Single TCP connection forwarded to WebSocket (default)
|
|
23
|
+
* - 'multiplexed': Multiple TCP connections multiplexed over a single WebSocket
|
|
24
|
+
*/
|
|
25
|
+
export type TunnelMode = 'singleton' | 'multiplexed';
|
|
26
|
+
|
|
20
27
|
export interface Tunnel {
|
|
21
28
|
address: {
|
|
22
29
|
address: string;
|
|
@@ -55,6 +62,14 @@ export interface TcpTunnelOptions {
|
|
|
55
62
|
* @default 'info'
|
|
56
63
|
*/
|
|
57
64
|
logLevel?: LogLevel;
|
|
65
|
+
/**
|
|
66
|
+
* Tunnel mode for handling TCP connections
|
|
67
|
+
* - 'singleton': Single TCP connection forwarded to WebSocket (default)
|
|
68
|
+
* - 'multiplexed': Multiple TCP connections multiplexed over a single WebSocket,
|
|
69
|
+
* each packet prefixed with a 4-byte connection ID
|
|
70
|
+
* @default 'singleton'
|
|
71
|
+
*/
|
|
72
|
+
mode?: TunnelMode;
|
|
58
73
|
}
|
|
59
74
|
|
|
60
75
|
/**
|
|
@@ -79,6 +94,25 @@ export async function startTcpTunnel(
|
|
|
79
94
|
hostname: string,
|
|
80
95
|
port: number,
|
|
81
96
|
options?: TcpTunnelOptions,
|
|
97
|
+
): Promise<Tunnel> {
|
|
98
|
+
const mode = options?.mode ?? 'singleton';
|
|
99
|
+
|
|
100
|
+
if (mode === 'multiplexed') {
|
|
101
|
+
return startMultiplexedTcpTunnel(remoteURL, token, hostname, port, options);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return startSingletonTcpTunnel(remoteURL, token, hostname, port, options);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Singleton mode: Single TCP connection forwarded to WebSocket
|
|
109
|
+
*/
|
|
110
|
+
async function startSingletonTcpTunnel(
|
|
111
|
+
remoteURL: string,
|
|
112
|
+
token: string,
|
|
113
|
+
hostname: string,
|
|
114
|
+
port: number,
|
|
115
|
+
options?: TcpTunnelOptions,
|
|
82
116
|
): Promise<Tunnel> {
|
|
83
117
|
const maxReconnectAttempts = options?.maxReconnectAttempts ?? 6;
|
|
84
118
|
const reconnectDelay = options?.reconnectDelay ?? 1000;
|
|
@@ -377,6 +411,271 @@ export async function startTcpTunnel(
|
|
|
377
411
|
});
|
|
378
412
|
}
|
|
379
413
|
|
|
414
|
+
/**
|
|
415
|
+
* Multiplexed mode: Multiple TCP connections multiplexed over a single WebSocket
|
|
416
|
+
*
|
|
417
|
+
* Each TCP connection is assigned a unique 32-bit connection ID. All data sent
|
|
418
|
+
* to the WebSocket is prefixed with a 4-byte big-endian header containing the
|
|
419
|
+
* connection ID. The server responds with data prefixed with the same header.
|
|
420
|
+
*
|
|
421
|
+
* A close signal for a connection is indicated by sending a header-only packet
|
|
422
|
+
* (4 bytes with no payload) for that connection ID.
|
|
423
|
+
*/
|
|
424
|
+
async function startMultiplexedTcpTunnel(
|
|
425
|
+
remoteURL: string,
|
|
426
|
+
token: string,
|
|
427
|
+
hostname: string,
|
|
428
|
+
port: number,
|
|
429
|
+
options?: TcpTunnelOptions,
|
|
430
|
+
): Promise<Tunnel> {
|
|
431
|
+
const logLevel = options?.logLevel ?? 'info';
|
|
432
|
+
|
|
433
|
+
const logger = {
|
|
434
|
+
debug: (...args: any[]) => {
|
|
435
|
+
if (logLevel === 'debug') console.log('[Tunnel:Mux]', ...args);
|
|
436
|
+
},
|
|
437
|
+
info: (...args: any[]) => {
|
|
438
|
+
if (logLevel === 'info' || logLevel === 'debug') console.log('[Tunnel:Mux]', ...args);
|
|
439
|
+
},
|
|
440
|
+
warn: (...args: any[]) => {
|
|
441
|
+
if (logLevel === 'warn' || logLevel === 'info' || logLevel === 'debug')
|
|
442
|
+
console.warn('[Tunnel:Mux]', ...args);
|
|
443
|
+
},
|
|
444
|
+
error: (...args: any[]) => {
|
|
445
|
+
if (logLevel !== 'none') console.error('[Tunnel:Mux]', ...args);
|
|
446
|
+
},
|
|
447
|
+
};
|
|
448
|
+
|
|
449
|
+
return new Promise((resolve, reject) => {
|
|
450
|
+
const server = net.createServer();
|
|
451
|
+
|
|
452
|
+
// Map of connection ID to TCP socket
|
|
453
|
+
const connections: Map<number, net.Socket> = new Map();
|
|
454
|
+
// Counter for generating unique connection IDs
|
|
455
|
+
let nextConnId = 1;
|
|
456
|
+
|
|
457
|
+
let ws: WebSocket | undefined;
|
|
458
|
+
let pingInterval: NodeJS.Timeout | undefined;
|
|
459
|
+
let intentionalDisconnect = false;
|
|
460
|
+
let connectionState: TunnelConnectionState = 'connecting';
|
|
461
|
+
|
|
462
|
+
const stateChangeCallbacks: Set<TunnelConnectionStateCallback> = new Set();
|
|
463
|
+
|
|
464
|
+
const updateConnectionState = (newState: TunnelConnectionState): void => {
|
|
465
|
+
if (connectionState !== newState) {
|
|
466
|
+
connectionState = newState;
|
|
467
|
+
logger.debug(`Connection state changed to: ${newState}`);
|
|
468
|
+
stateChangeCallbacks.forEach((callback) => {
|
|
469
|
+
try {
|
|
470
|
+
callback(newState);
|
|
471
|
+
} catch (err) {
|
|
472
|
+
logger.error('Error in connection state callback:', err);
|
|
473
|
+
}
|
|
474
|
+
});
|
|
475
|
+
}
|
|
476
|
+
};
|
|
477
|
+
|
|
478
|
+
const cleanupWebSocket = () => {
|
|
479
|
+
if (pingInterval) {
|
|
480
|
+
clearInterval(pingInterval);
|
|
481
|
+
pingInterval = undefined;
|
|
482
|
+
}
|
|
483
|
+
if (ws) {
|
|
484
|
+
ws.removeAllListeners();
|
|
485
|
+
if (ws.readyState === WebSocket.OPEN || ws.readyState === WebSocket.CONNECTING) {
|
|
486
|
+
ws.close(1000, 'close');
|
|
487
|
+
}
|
|
488
|
+
ws = undefined;
|
|
489
|
+
}
|
|
490
|
+
};
|
|
491
|
+
|
|
492
|
+
const closeAllConnections = () => {
|
|
493
|
+
for (const [connId, socket] of connections) {
|
|
494
|
+
logger.debug(`Closing TCP connection ${connId}`);
|
|
495
|
+
if (!socket.destroyed) {
|
|
496
|
+
socket.destroy();
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
connections.clear();
|
|
500
|
+
};
|
|
501
|
+
|
|
502
|
+
const close = () => {
|
|
503
|
+
intentionalDisconnect = true;
|
|
504
|
+
cleanupWebSocket();
|
|
505
|
+
closeAllConnections();
|
|
506
|
+
updateConnectionState('disconnected');
|
|
507
|
+
if (server.listening) {
|
|
508
|
+
server.close();
|
|
509
|
+
}
|
|
510
|
+
};
|
|
511
|
+
|
|
512
|
+
// Send close signal for a connection (header-only packet)
|
|
513
|
+
const sendCloseSignal = (connId: number) => {
|
|
514
|
+
if (ws && ws.readyState === WebSocket.OPEN) {
|
|
515
|
+
const header = encodeConnectionHeader(connId);
|
|
516
|
+
ws.send(header);
|
|
517
|
+
logger.debug(`Sent close signal for connection ${connId}`);
|
|
518
|
+
}
|
|
519
|
+
};
|
|
520
|
+
|
|
521
|
+
// Remove a connection from tracking
|
|
522
|
+
const removeConnection = (connId: number) => {
|
|
523
|
+
const socket = connections.get(connId);
|
|
524
|
+
if (socket) {
|
|
525
|
+
if (!socket.destroyed) {
|
|
526
|
+
socket.destroy();
|
|
527
|
+
}
|
|
528
|
+
connections.delete(connId);
|
|
529
|
+
logger.debug(`Removed connection ${connId}`);
|
|
530
|
+
}
|
|
531
|
+
};
|
|
532
|
+
|
|
533
|
+
const setupWebSocket = (): void => {
|
|
534
|
+
cleanupWebSocket();
|
|
535
|
+
updateConnectionState('connecting');
|
|
536
|
+
|
|
537
|
+
// Build URL with mode=multiplexed query parameter
|
|
538
|
+
const url = new URL(remoteURL);
|
|
539
|
+
url.searchParams.set('mode', 'multiplexed');
|
|
540
|
+
|
|
541
|
+
ws = new WebSocket(url.toString(), {
|
|
542
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
543
|
+
perMessageDeflate: false,
|
|
544
|
+
});
|
|
545
|
+
|
|
546
|
+
ws.on('error', (err: any) => {
|
|
547
|
+
const errMessage = err.message || String(err);
|
|
548
|
+
logger.error('WebSocket error:', errMessage);
|
|
549
|
+
});
|
|
550
|
+
|
|
551
|
+
ws.on('close', () => {
|
|
552
|
+
if (pingInterval) {
|
|
553
|
+
clearInterval(pingInterval);
|
|
554
|
+
pingInterval = undefined;
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
updateConnectionState('disconnected');
|
|
558
|
+
logger.debug('WebSocket disconnected');
|
|
559
|
+
|
|
560
|
+
// Close all TCP connections when WebSocket closes
|
|
561
|
+
closeAllConnections();
|
|
562
|
+
});
|
|
563
|
+
|
|
564
|
+
ws.on('open', () => {
|
|
565
|
+
const socket = ws as WebSocket;
|
|
566
|
+
logger.debug('WebSocket connected');
|
|
567
|
+
updateConnectionState('connected');
|
|
568
|
+
|
|
569
|
+
pingInterval = setInterval(() => {
|
|
570
|
+
if (socket.readyState === WebSocket.OPEN) {
|
|
571
|
+
(socket as any).ping();
|
|
572
|
+
}
|
|
573
|
+
}, 30_000);
|
|
574
|
+
|
|
575
|
+
// WS → TCP: Demultiplex incoming data
|
|
576
|
+
socket.on('message', (data: any) => {
|
|
577
|
+
const buffer = data as Buffer;
|
|
578
|
+
if (buffer.length < 4) {
|
|
579
|
+
logger.error('Received binary frame shorter than 4 bytes; dropping');
|
|
580
|
+
return;
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
const connId = decodeConnectionHeader(buffer);
|
|
584
|
+
const payload = buffer.subarray(4);
|
|
585
|
+
|
|
586
|
+
// Close signal (header only, no payload)
|
|
587
|
+
if (payload.length === 0) {
|
|
588
|
+
logger.debug(`Received close signal for connection ${connId}`);
|
|
589
|
+
removeConnection(connId);
|
|
590
|
+
return;
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
const tcpSocket = connections.get(connId);
|
|
594
|
+
if (tcpSocket && !tcpSocket.destroyed) {
|
|
595
|
+
tcpSocket.write(payload);
|
|
596
|
+
} else {
|
|
597
|
+
logger.debug(`Received data for unknown/closed connection ${connId}`);
|
|
598
|
+
}
|
|
599
|
+
});
|
|
600
|
+
});
|
|
601
|
+
};
|
|
602
|
+
|
|
603
|
+
// TCP server error
|
|
604
|
+
server.once('error', (err) => {
|
|
605
|
+
close();
|
|
606
|
+
reject(new Error(`TCP server error: ${err.message}`));
|
|
607
|
+
});
|
|
608
|
+
|
|
609
|
+
const getConnectionState = (): TunnelConnectionState => {
|
|
610
|
+
return connectionState;
|
|
611
|
+
};
|
|
612
|
+
|
|
613
|
+
const onConnectionStateChange = (callback: TunnelConnectionStateCallback): (() => void) => {
|
|
614
|
+
stateChangeCallbacks.add(callback);
|
|
615
|
+
return () => {
|
|
616
|
+
stateChangeCallbacks.delete(callback);
|
|
617
|
+
};
|
|
618
|
+
};
|
|
619
|
+
|
|
620
|
+
// Listening
|
|
621
|
+
server.once('listening', () => {
|
|
622
|
+
const address = server.address();
|
|
623
|
+
if (!address || typeof address === 'string') {
|
|
624
|
+
close();
|
|
625
|
+
return reject(new Error('Failed to obtain listening address'));
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
// Start WebSocket connection immediately
|
|
629
|
+
setupWebSocket();
|
|
630
|
+
|
|
631
|
+
resolve({
|
|
632
|
+
address,
|
|
633
|
+
close,
|
|
634
|
+
getConnectionState,
|
|
635
|
+
onConnectionStateChange,
|
|
636
|
+
});
|
|
637
|
+
});
|
|
638
|
+
|
|
639
|
+
// On TCP connection - allow multiple connections in multiplexed mode
|
|
640
|
+
server.on('connection', (socket) => {
|
|
641
|
+
// Assign a unique connection ID
|
|
642
|
+
const connId = nextConnId++;
|
|
643
|
+
// Wrap around at 32-bit max to stay within uint32 range
|
|
644
|
+
if (nextConnId > 0xffffffff) {
|
|
645
|
+
nextConnId = 1;
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
connections.set(connId, socket);
|
|
649
|
+
logger.debug(`New TCP connection ${connId}`);
|
|
650
|
+
|
|
651
|
+
// TCP → WS: Forward data with connection ID header
|
|
652
|
+
socket.on('data', (chunk: Buffer) => {
|
|
653
|
+
if (ws && ws.readyState === WebSocket.OPEN) {
|
|
654
|
+
const header = encodeConnectionHeader(connId);
|
|
655
|
+
const framed = Buffer.concat([header, chunk]);
|
|
656
|
+
ws.send(framed);
|
|
657
|
+
}
|
|
658
|
+
// If WebSocket is not ready, data will queue in TCP buffers (backpressure)
|
|
659
|
+
});
|
|
660
|
+
|
|
661
|
+
socket.on('close', () => {
|
|
662
|
+
logger.debug(`TCP connection ${connId} closed by client`);
|
|
663
|
+
sendCloseSignal(connId);
|
|
664
|
+
connections.delete(connId);
|
|
665
|
+
});
|
|
666
|
+
|
|
667
|
+
socket.on('error', (err: any) => {
|
|
668
|
+
logger.error(`TCP connection ${connId} error:`, err);
|
|
669
|
+
sendCloseSignal(connId);
|
|
670
|
+
connections.delete(connId);
|
|
671
|
+
});
|
|
672
|
+
});
|
|
673
|
+
|
|
674
|
+
// Start listening
|
|
675
|
+
server.listen(port, hostname);
|
|
676
|
+
});
|
|
677
|
+
}
|
|
678
|
+
|
|
380
679
|
export const isNonRetryableError = (errMessage: string): boolean => {
|
|
381
680
|
const match = errMessage.match(/Unexpected server response: (\d+)/);
|
|
382
681
|
if (match && match[1]) {
|
|
@@ -385,3 +684,22 @@ export const isNonRetryableError = (errMessage: string): boolean => {
|
|
|
385
684
|
}
|
|
386
685
|
return false;
|
|
387
686
|
};
|
|
687
|
+
|
|
688
|
+
/**
|
|
689
|
+
* Encode a 32-bit connection ID as a 4-byte big-endian header
|
|
690
|
+
*/
|
|
691
|
+
export function encodeConnectionHeader(connId: number): Buffer {
|
|
692
|
+
const header = Buffer.alloc(4);
|
|
693
|
+
header.writeUInt32BE(connId, 0);
|
|
694
|
+
return header;
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
/**
|
|
698
|
+
* Decode a 4-byte big-endian header into a 32-bit connection ID
|
|
699
|
+
*/
|
|
700
|
+
export function decodeConnectionHeader(header: Buffer): number {
|
|
701
|
+
if (header.length < 4) {
|
|
702
|
+
throw new Error('Header must be at least 4 bytes');
|
|
703
|
+
}
|
|
704
|
+
return header.readUInt32BE(0);
|
|
705
|
+
}
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const VERSION = '0.17.0-rc.
|
|
1
|
+
export const VERSION = '0.17.0-rc.6'; // x-release-please-version
|
package/tunnel.d.mts
CHANGED
|
@@ -10,6 +10,12 @@ export type TunnelConnectionState = 'connecting' | 'connected' | 'disconnected'
|
|
|
10
10
|
* Callback function for tunnel connection state changes
|
|
11
11
|
*/
|
|
12
12
|
export type TunnelConnectionStateCallback = (state: TunnelConnectionState) => void;
|
|
13
|
+
/**
|
|
14
|
+
* Tunnel mode for TCP connections
|
|
15
|
+
* - 'singleton': Single TCP connection forwarded to WebSocket (default)
|
|
16
|
+
* - 'multiplexed': Multiple TCP connections multiplexed over a single WebSocket
|
|
17
|
+
*/
|
|
18
|
+
export type TunnelMode = 'singleton' | 'multiplexed';
|
|
13
19
|
export interface Tunnel {
|
|
14
20
|
address: {
|
|
15
21
|
address: string;
|
|
@@ -47,6 +53,14 @@ export interface TcpTunnelOptions {
|
|
|
47
53
|
* @default 'info'
|
|
48
54
|
*/
|
|
49
55
|
logLevel?: LogLevel;
|
|
56
|
+
/**
|
|
57
|
+
* Tunnel mode for handling TCP connections
|
|
58
|
+
* - 'singleton': Single TCP connection forwarded to WebSocket (default)
|
|
59
|
+
* - 'multiplexed': Multiple TCP connections multiplexed over a single WebSocket,
|
|
60
|
+
* each packet prefixed with a 4-byte connection ID
|
|
61
|
+
* @default 'singleton'
|
|
62
|
+
*/
|
|
63
|
+
mode?: TunnelMode;
|
|
50
64
|
}
|
|
51
65
|
/**
|
|
52
66
|
* Starts a persistent TCP → WebSocket proxy.
|
|
@@ -66,4 +80,12 @@ export interface TcpTunnelOptions {
|
|
|
66
80
|
*/
|
|
67
81
|
export declare function startTcpTunnel(remoteURL: string, token: string, hostname: string, port: number, options?: TcpTunnelOptions): Promise<Tunnel>;
|
|
68
82
|
export declare const isNonRetryableError: (errMessage: string) => boolean;
|
|
83
|
+
/**
|
|
84
|
+
* Encode a 32-bit connection ID as a 4-byte big-endian header
|
|
85
|
+
*/
|
|
86
|
+
export declare function encodeConnectionHeader(connId: number): Buffer;
|
|
87
|
+
/**
|
|
88
|
+
* Decode a 4-byte big-endian header into a 32-bit connection ID
|
|
89
|
+
*/
|
|
90
|
+
export declare function decodeConnectionHeader(header: Buffer): number;
|
|
69
91
|
//# sourceMappingURL=tunnel.d.mts.map
|
package/tunnel.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tunnel.d.mts","sourceRoot":"","sources":["src/tunnel.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEpE;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,cAAc,CAAC;AAEjG;;GAEG;AACH,MAAM,MAAM,6BAA6B,GAAG,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;AAEnF,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB;;OAEG;IACH,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;IAChD;;;OAGG;IACH,uBAAuB,EAAE,CAAC,QAAQ,EAAE,6BAA6B,KAAK,MAAM,IAAI,CAAC;CAClF;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"tunnel.d.mts","sourceRoot":"","sources":["src/tunnel.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEpE;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,cAAc,CAAC;AAEjG;;GAEG;AACH,MAAM,MAAM,6BAA6B,GAAG,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;AAEnF;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,aAAa,CAAC;AAErD,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB;;OAEG;IACH,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;IAChD;;;OAGG;IACH,uBAAuB,EAAE,CAAC,QAAQ,EAAE,6BAA6B,KAAK,MAAM,IAAI,CAAC;CAClF;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,MAAM,CAAC,CAQjB;AA8jBD,eAAO,MAAM,mBAAmB,GAAI,YAAY,MAAM,KAAG,OAOxD,CAAC;AAEF;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAI7D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAK7D"}
|
package/tunnel.d.ts
CHANGED
|
@@ -10,6 +10,12 @@ export type TunnelConnectionState = 'connecting' | 'connected' | 'disconnected'
|
|
|
10
10
|
* Callback function for tunnel connection state changes
|
|
11
11
|
*/
|
|
12
12
|
export type TunnelConnectionStateCallback = (state: TunnelConnectionState) => void;
|
|
13
|
+
/**
|
|
14
|
+
* Tunnel mode for TCP connections
|
|
15
|
+
* - 'singleton': Single TCP connection forwarded to WebSocket (default)
|
|
16
|
+
* - 'multiplexed': Multiple TCP connections multiplexed over a single WebSocket
|
|
17
|
+
*/
|
|
18
|
+
export type TunnelMode = 'singleton' | 'multiplexed';
|
|
13
19
|
export interface Tunnel {
|
|
14
20
|
address: {
|
|
15
21
|
address: string;
|
|
@@ -47,6 +53,14 @@ export interface TcpTunnelOptions {
|
|
|
47
53
|
* @default 'info'
|
|
48
54
|
*/
|
|
49
55
|
logLevel?: LogLevel;
|
|
56
|
+
/**
|
|
57
|
+
* Tunnel mode for handling TCP connections
|
|
58
|
+
* - 'singleton': Single TCP connection forwarded to WebSocket (default)
|
|
59
|
+
* - 'multiplexed': Multiple TCP connections multiplexed over a single WebSocket,
|
|
60
|
+
* each packet prefixed with a 4-byte connection ID
|
|
61
|
+
* @default 'singleton'
|
|
62
|
+
*/
|
|
63
|
+
mode?: TunnelMode;
|
|
50
64
|
}
|
|
51
65
|
/**
|
|
52
66
|
* Starts a persistent TCP → WebSocket proxy.
|
|
@@ -66,4 +80,12 @@ export interface TcpTunnelOptions {
|
|
|
66
80
|
*/
|
|
67
81
|
export declare function startTcpTunnel(remoteURL: string, token: string, hostname: string, port: number, options?: TcpTunnelOptions): Promise<Tunnel>;
|
|
68
82
|
export declare const isNonRetryableError: (errMessage: string) => boolean;
|
|
83
|
+
/**
|
|
84
|
+
* Encode a 32-bit connection ID as a 4-byte big-endian header
|
|
85
|
+
*/
|
|
86
|
+
export declare function encodeConnectionHeader(connId: number): Buffer;
|
|
87
|
+
/**
|
|
88
|
+
* Decode a 4-byte big-endian header into a 32-bit connection ID
|
|
89
|
+
*/
|
|
90
|
+
export declare function decodeConnectionHeader(header: Buffer): number;
|
|
69
91
|
//# sourceMappingURL=tunnel.d.ts.map
|
package/tunnel.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tunnel.d.ts","sourceRoot":"","sources":["src/tunnel.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEpE;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,cAAc,CAAC;AAEjG;;GAEG;AACH,MAAM,MAAM,6BAA6B,GAAG,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;AAEnF,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB;;OAEG;IACH,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;IAChD;;;OAGG;IACH,uBAAuB,EAAE,CAAC,QAAQ,EAAE,6BAA6B,KAAK,MAAM,IAAI,CAAC;CAClF;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"tunnel.d.ts","sourceRoot":"","sources":["src/tunnel.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEpE;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,cAAc,CAAC;AAEjG;;GAEG;AACH,MAAM,MAAM,6BAA6B,GAAG,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;AAEnF;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,aAAa,CAAC;AAErD,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB;;OAEG;IACH,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;IAChD;;;OAGG;IACH,uBAAuB,EAAE,CAAC,QAAQ,EAAE,6BAA6B,KAAK,MAAM,IAAI,CAAC;CAClF;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,MAAM,CAAC,CAQjB;AA8jBD,eAAO,MAAM,mBAAmB,GAAI,YAAY,MAAM,KAAG,OAOxD,CAAC;AAEF;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAI7D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAK7D"}
|
package/tunnel.js
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.isNonRetryableError = void 0;
|
|
4
4
|
exports.startTcpTunnel = startTcpTunnel;
|
|
5
|
+
exports.encodeConnectionHeader = encodeConnectionHeader;
|
|
6
|
+
exports.decodeConnectionHeader = decodeConnectionHeader;
|
|
5
7
|
const tslib_1 = require("./internal/tslib.js");
|
|
6
8
|
const crypto = tslib_1.__importStar(require("crypto"));
|
|
7
9
|
const net = tslib_1.__importStar(require("net"));
|
|
@@ -23,6 +25,16 @@ const ws_1 = require("ws");
|
|
|
23
25
|
* @param options Optional reconnection configuration
|
|
24
26
|
*/
|
|
25
27
|
async function startTcpTunnel(remoteURL, token, hostname, port, options) {
|
|
28
|
+
const mode = options?.mode ?? 'singleton';
|
|
29
|
+
if (mode === 'multiplexed') {
|
|
30
|
+
return startMultiplexedTcpTunnel(remoteURL, token, hostname, port, options);
|
|
31
|
+
}
|
|
32
|
+
return startSingletonTcpTunnel(remoteURL, token, hostname, port, options);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Singleton mode: Single TCP connection forwarded to WebSocket
|
|
36
|
+
*/
|
|
37
|
+
async function startSingletonTcpTunnel(remoteURL, token, hostname, port, options) {
|
|
26
38
|
const maxReconnectAttempts = options?.maxReconnectAttempts ?? 6;
|
|
27
39
|
const reconnectDelay = options?.reconnectDelay ?? 1000;
|
|
28
40
|
const maxReconnectDelay = options?.maxReconnectDelay ?? 30000;
|
|
@@ -279,6 +291,233 @@ async function startTcpTunnel(remoteURL, token, hostname, port, options) {
|
|
|
279
291
|
server.listen(port, hostname);
|
|
280
292
|
});
|
|
281
293
|
}
|
|
294
|
+
/**
|
|
295
|
+
* Multiplexed mode: Multiple TCP connections multiplexed over a single WebSocket
|
|
296
|
+
*
|
|
297
|
+
* Each TCP connection is assigned a unique 32-bit connection ID. All data sent
|
|
298
|
+
* to the WebSocket is prefixed with a 4-byte big-endian header containing the
|
|
299
|
+
* connection ID. The server responds with data prefixed with the same header.
|
|
300
|
+
*
|
|
301
|
+
* A close signal for a connection is indicated by sending a header-only packet
|
|
302
|
+
* (4 bytes with no payload) for that connection ID.
|
|
303
|
+
*/
|
|
304
|
+
async function startMultiplexedTcpTunnel(remoteURL, token, hostname, port, options) {
|
|
305
|
+
const logLevel = options?.logLevel ?? 'info';
|
|
306
|
+
const logger = {
|
|
307
|
+
debug: (...args) => {
|
|
308
|
+
if (logLevel === 'debug')
|
|
309
|
+
console.log('[Tunnel:Mux]', ...args);
|
|
310
|
+
},
|
|
311
|
+
info: (...args) => {
|
|
312
|
+
if (logLevel === 'info' || logLevel === 'debug')
|
|
313
|
+
console.log('[Tunnel:Mux]', ...args);
|
|
314
|
+
},
|
|
315
|
+
warn: (...args) => {
|
|
316
|
+
if (logLevel === 'warn' || logLevel === 'info' || logLevel === 'debug')
|
|
317
|
+
console.warn('[Tunnel:Mux]', ...args);
|
|
318
|
+
},
|
|
319
|
+
error: (...args) => {
|
|
320
|
+
if (logLevel !== 'none')
|
|
321
|
+
console.error('[Tunnel:Mux]', ...args);
|
|
322
|
+
},
|
|
323
|
+
};
|
|
324
|
+
return new Promise((resolve, reject) => {
|
|
325
|
+
const server = net.createServer();
|
|
326
|
+
// Map of connection ID to TCP socket
|
|
327
|
+
const connections = new Map();
|
|
328
|
+
// Counter for generating unique connection IDs
|
|
329
|
+
let nextConnId = 1;
|
|
330
|
+
let ws;
|
|
331
|
+
let pingInterval;
|
|
332
|
+
let intentionalDisconnect = false;
|
|
333
|
+
let connectionState = 'connecting';
|
|
334
|
+
const stateChangeCallbacks = new Set();
|
|
335
|
+
const updateConnectionState = (newState) => {
|
|
336
|
+
if (connectionState !== newState) {
|
|
337
|
+
connectionState = newState;
|
|
338
|
+
logger.debug(`Connection state changed to: ${newState}`);
|
|
339
|
+
stateChangeCallbacks.forEach((callback) => {
|
|
340
|
+
try {
|
|
341
|
+
callback(newState);
|
|
342
|
+
}
|
|
343
|
+
catch (err) {
|
|
344
|
+
logger.error('Error in connection state callback:', err);
|
|
345
|
+
}
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
};
|
|
349
|
+
const cleanupWebSocket = () => {
|
|
350
|
+
if (pingInterval) {
|
|
351
|
+
clearInterval(pingInterval);
|
|
352
|
+
pingInterval = undefined;
|
|
353
|
+
}
|
|
354
|
+
if (ws) {
|
|
355
|
+
ws.removeAllListeners();
|
|
356
|
+
if (ws.readyState === ws_1.WebSocket.OPEN || ws.readyState === ws_1.WebSocket.CONNECTING) {
|
|
357
|
+
ws.close(1000, 'close');
|
|
358
|
+
}
|
|
359
|
+
ws = undefined;
|
|
360
|
+
}
|
|
361
|
+
};
|
|
362
|
+
const closeAllConnections = () => {
|
|
363
|
+
for (const [connId, socket] of connections) {
|
|
364
|
+
logger.debug(`Closing TCP connection ${connId}`);
|
|
365
|
+
if (!socket.destroyed) {
|
|
366
|
+
socket.destroy();
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
connections.clear();
|
|
370
|
+
};
|
|
371
|
+
const close = () => {
|
|
372
|
+
intentionalDisconnect = true;
|
|
373
|
+
cleanupWebSocket();
|
|
374
|
+
closeAllConnections();
|
|
375
|
+
updateConnectionState('disconnected');
|
|
376
|
+
if (server.listening) {
|
|
377
|
+
server.close();
|
|
378
|
+
}
|
|
379
|
+
};
|
|
380
|
+
// Send close signal for a connection (header-only packet)
|
|
381
|
+
const sendCloseSignal = (connId) => {
|
|
382
|
+
if (ws && ws.readyState === ws_1.WebSocket.OPEN) {
|
|
383
|
+
const header = encodeConnectionHeader(connId);
|
|
384
|
+
ws.send(header);
|
|
385
|
+
logger.debug(`Sent close signal for connection ${connId}`);
|
|
386
|
+
}
|
|
387
|
+
};
|
|
388
|
+
// Remove a connection from tracking
|
|
389
|
+
const removeConnection = (connId) => {
|
|
390
|
+
const socket = connections.get(connId);
|
|
391
|
+
if (socket) {
|
|
392
|
+
if (!socket.destroyed) {
|
|
393
|
+
socket.destroy();
|
|
394
|
+
}
|
|
395
|
+
connections.delete(connId);
|
|
396
|
+
logger.debug(`Removed connection ${connId}`);
|
|
397
|
+
}
|
|
398
|
+
};
|
|
399
|
+
const setupWebSocket = () => {
|
|
400
|
+
cleanupWebSocket();
|
|
401
|
+
updateConnectionState('connecting');
|
|
402
|
+
// Build URL with mode=multiplexed query parameter
|
|
403
|
+
const url = new URL(remoteURL);
|
|
404
|
+
url.searchParams.set('mode', 'multiplexed');
|
|
405
|
+
ws = new ws_1.WebSocket(url.toString(), {
|
|
406
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
407
|
+
perMessageDeflate: false,
|
|
408
|
+
});
|
|
409
|
+
ws.on('error', (err) => {
|
|
410
|
+
const errMessage = err.message || String(err);
|
|
411
|
+
logger.error('WebSocket error:', errMessage);
|
|
412
|
+
});
|
|
413
|
+
ws.on('close', () => {
|
|
414
|
+
if (pingInterval) {
|
|
415
|
+
clearInterval(pingInterval);
|
|
416
|
+
pingInterval = undefined;
|
|
417
|
+
}
|
|
418
|
+
updateConnectionState('disconnected');
|
|
419
|
+
logger.debug('WebSocket disconnected');
|
|
420
|
+
// Close all TCP connections when WebSocket closes
|
|
421
|
+
closeAllConnections();
|
|
422
|
+
});
|
|
423
|
+
ws.on('open', () => {
|
|
424
|
+
const socket = ws;
|
|
425
|
+
logger.debug('WebSocket connected');
|
|
426
|
+
updateConnectionState('connected');
|
|
427
|
+
pingInterval = setInterval(() => {
|
|
428
|
+
if (socket.readyState === ws_1.WebSocket.OPEN) {
|
|
429
|
+
socket.ping();
|
|
430
|
+
}
|
|
431
|
+
}, 30000);
|
|
432
|
+
// WS → TCP: Demultiplex incoming data
|
|
433
|
+
socket.on('message', (data) => {
|
|
434
|
+
const buffer = data;
|
|
435
|
+
if (buffer.length < 4) {
|
|
436
|
+
logger.error('Received binary frame shorter than 4 bytes; dropping');
|
|
437
|
+
return;
|
|
438
|
+
}
|
|
439
|
+
const connId = decodeConnectionHeader(buffer);
|
|
440
|
+
const payload = buffer.subarray(4);
|
|
441
|
+
// Close signal (header only, no payload)
|
|
442
|
+
if (payload.length === 0) {
|
|
443
|
+
logger.debug(`Received close signal for connection ${connId}`);
|
|
444
|
+
removeConnection(connId);
|
|
445
|
+
return;
|
|
446
|
+
}
|
|
447
|
+
const tcpSocket = connections.get(connId);
|
|
448
|
+
if (tcpSocket && !tcpSocket.destroyed) {
|
|
449
|
+
tcpSocket.write(payload);
|
|
450
|
+
}
|
|
451
|
+
else {
|
|
452
|
+
logger.debug(`Received data for unknown/closed connection ${connId}`);
|
|
453
|
+
}
|
|
454
|
+
});
|
|
455
|
+
});
|
|
456
|
+
};
|
|
457
|
+
// TCP server error
|
|
458
|
+
server.once('error', (err) => {
|
|
459
|
+
close();
|
|
460
|
+
reject(new Error(`TCP server error: ${err.message}`));
|
|
461
|
+
});
|
|
462
|
+
const getConnectionState = () => {
|
|
463
|
+
return connectionState;
|
|
464
|
+
};
|
|
465
|
+
const onConnectionStateChange = (callback) => {
|
|
466
|
+
stateChangeCallbacks.add(callback);
|
|
467
|
+
return () => {
|
|
468
|
+
stateChangeCallbacks.delete(callback);
|
|
469
|
+
};
|
|
470
|
+
};
|
|
471
|
+
// Listening
|
|
472
|
+
server.once('listening', () => {
|
|
473
|
+
const address = server.address();
|
|
474
|
+
if (!address || typeof address === 'string') {
|
|
475
|
+
close();
|
|
476
|
+
return reject(new Error('Failed to obtain listening address'));
|
|
477
|
+
}
|
|
478
|
+
// Start WebSocket connection immediately
|
|
479
|
+
setupWebSocket();
|
|
480
|
+
resolve({
|
|
481
|
+
address,
|
|
482
|
+
close,
|
|
483
|
+
getConnectionState,
|
|
484
|
+
onConnectionStateChange,
|
|
485
|
+
});
|
|
486
|
+
});
|
|
487
|
+
// On TCP connection - allow multiple connections in multiplexed mode
|
|
488
|
+
server.on('connection', (socket) => {
|
|
489
|
+
// Assign a unique connection ID
|
|
490
|
+
const connId = nextConnId++;
|
|
491
|
+
// Wrap around at 32-bit max to stay within uint32 range
|
|
492
|
+
if (nextConnId > 0xffffffff) {
|
|
493
|
+
nextConnId = 1;
|
|
494
|
+
}
|
|
495
|
+
connections.set(connId, socket);
|
|
496
|
+
logger.debug(`New TCP connection ${connId}`);
|
|
497
|
+
// TCP → WS: Forward data with connection ID header
|
|
498
|
+
socket.on('data', (chunk) => {
|
|
499
|
+
if (ws && ws.readyState === ws_1.WebSocket.OPEN) {
|
|
500
|
+
const header = encodeConnectionHeader(connId);
|
|
501
|
+
const framed = Buffer.concat([header, chunk]);
|
|
502
|
+
ws.send(framed);
|
|
503
|
+
}
|
|
504
|
+
// If WebSocket is not ready, data will queue in TCP buffers (backpressure)
|
|
505
|
+
});
|
|
506
|
+
socket.on('close', () => {
|
|
507
|
+
logger.debug(`TCP connection ${connId} closed by client`);
|
|
508
|
+
sendCloseSignal(connId);
|
|
509
|
+
connections.delete(connId);
|
|
510
|
+
});
|
|
511
|
+
socket.on('error', (err) => {
|
|
512
|
+
logger.error(`TCP connection ${connId} error:`, err);
|
|
513
|
+
sendCloseSignal(connId);
|
|
514
|
+
connections.delete(connId);
|
|
515
|
+
});
|
|
516
|
+
});
|
|
517
|
+
// Start listening
|
|
518
|
+
server.listen(port, hostname);
|
|
519
|
+
});
|
|
520
|
+
}
|
|
282
521
|
const isNonRetryableError = (errMessage) => {
|
|
283
522
|
const match = errMessage.match(/Unexpected server response: (\d+)/);
|
|
284
523
|
if (match && match[1]) {
|
|
@@ -288,4 +527,21 @@ const isNonRetryableError = (errMessage) => {
|
|
|
288
527
|
return false;
|
|
289
528
|
};
|
|
290
529
|
exports.isNonRetryableError = isNonRetryableError;
|
|
530
|
+
/**
|
|
531
|
+
* Encode a 32-bit connection ID as a 4-byte big-endian header
|
|
532
|
+
*/
|
|
533
|
+
function encodeConnectionHeader(connId) {
|
|
534
|
+
const header = Buffer.alloc(4);
|
|
535
|
+
header.writeUInt32BE(connId, 0);
|
|
536
|
+
return header;
|
|
537
|
+
}
|
|
538
|
+
/**
|
|
539
|
+
* Decode a 4-byte big-endian header into a 32-bit connection ID
|
|
540
|
+
*/
|
|
541
|
+
function decodeConnectionHeader(header) {
|
|
542
|
+
if (header.length < 4) {
|
|
543
|
+
throw new Error('Header must be at least 4 bytes');
|
|
544
|
+
}
|
|
545
|
+
return header.readUInt32BE(0);
|
|
546
|
+
}
|
|
291
547
|
//# sourceMappingURL=tunnel.js.map
|
package/tunnel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tunnel.js","sourceRoot":"","sources":["src/tunnel.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tunnel.js","sourceRoot":"","sources":["src/tunnel.ts"],"names":[],"mappings":";;;AA0FA,wCAcC;AA0kBD,wDAIC;AAKD,wDAKC;;AAhsBD,uDAAiC;AACjC,iDAA2B;AAC3B,2BAA+B;AAwE/B;;;;;;;;;;;;;;;GAeG;AACI,KAAK,UAAU,cAAc,CAClC,SAAiB,EACjB,KAAa,EACb,QAAgB,EAChB,IAAY,EACZ,OAA0B;IAE1B,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,WAAW,CAAC;IAE1C,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;QAC3B,OAAO,yBAAyB,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9E,CAAC;IAED,OAAO,uBAAuB,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC5E,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,uBAAuB,CACpC,SAAiB,EACjB,KAAa,EACb,QAAgB,EAChB,IAAY,EACZ,OAA0B;IAE1B,MAAM,oBAAoB,GAAG,OAAO,EAAE,oBAAoB,IAAI,CAAC,CAAC;IAChE,MAAM,cAAc,GAAG,OAAO,EAAE,cAAc,IAAI,IAAI,CAAC;IACvD,MAAM,iBAAiB,GAAG,OAAO,EAAE,iBAAiB,IAAI,KAAK,CAAC;IAC9D,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,MAAM,CAAC;IAE7C,MAAM,MAAM,GAAG;QACb,KAAK,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;YACxB,IAAI,QAAQ,KAAK,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;YACvB,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC;QACpF,CAAC;QACD,IAAI,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;YACvB,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,OAAO;gBACpE,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC;QACtC,CAAC;QACD,KAAK,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;YACxB,IAAI,QAAQ,KAAK,MAAM;gBAAE,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC;QAC9D,CAAC;KACF,CAAC;IAEF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;QAElC,IAAI,EAAyB,CAAC;QAC9B,IAAI,YAAwC,CAAC;QAC7C,IAAI,gBAA4C,CAAC;QACjD,IAAI,iBAAiB,GAAG,CAAC,CAAC;QAC1B,IAAI,qBAAqB,GAAG,KAAK,CAAC;QAClC,IAAI,SAAiC,CAAC;QACtC,IAAI,eAAe,GAA0B,YAAY,CAAC;QAC1D,IAAI,SAA6B,CAAC;QAClC,IAAI,SAA6B,CAAC;QAElC,MAAM,oBAAoB,GAAuC,IAAI,GAAG,EAAE,CAAC;QAE3E,MAAM,qBAAqB,GAAG,CAAC,QAA+B,EAAQ,EAAE;YACtE,IAAI,eAAe,KAAK,QAAQ,EAAE,CAAC;gBACjC,eAAe,GAAG,QAAQ,CAAC;gBAC3B,MAAM,CAAC,KAAK,CAAC,gCAAgC,QAAQ,EAAE,CAAC,CAAC;gBACzD,oBAAoB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;oBACxC,IAAI,CAAC;wBACH,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACrB,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,MAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE,GAAG,CAAC,CAAC;oBAC3D,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,gBAAgB,EAAE,CAAC;gBACrB,YAAY,CAAC,gBAAgB,CAAC,CAAC;gBAC/B,gBAAgB,GAAG,SAAS,CAAC;YAC/B,CAAC;YACD,IAAI,YAAY,EAAE,CAAC;gBACjB,aAAa,CAAC,YAAY,CAAC,CAAC;gBAC5B,YAAY,GAAG,SAAS,CAAC;YAC3B,CAAC;YACD,IAAI,EAAE,EAAE,CAAC;gBACP,EAAE,CAAC,kBAAkB,EAAE,CAAC;gBACxB,IAAI,EAAE,CAAC,UAAU,KAAK,cAAS,CAAC,IAAI,IAAI,EAAE,CAAC,UAAU,KAAK,cAAS,CAAC,UAAU,EAAE,CAAC;oBAC/E,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC1B,CAAC;gBACD,EAAE,GAAG,SAAS,CAAC;YACjB,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,KAAK,GAAG,GAAG,EAAE;YACjB,qBAAqB,GAAG,IAAI,CAAC;YAC7B,OAAO,EAAE,CAAC;YACV,qBAAqB,CAAC,cAAc,CAAC,CAAC;YACtC,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;gBACtC,SAAS,CAAC,OAAO,EAAE,CAAC;YACtB,CAAC;YACD,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrB,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,iBAAiB,GAAG,GAAS,EAAE;YACnC,IAAI,qBAAqB,EAAE,CAAC;gBAC1B,MAAM,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;gBAC/D,OAAO;YACT,CAAC;YAED,IAAI,IAAA,2BAAmB,EAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC;gBACzC,MAAM,CAAC,KAAK,CAAC,gDAAgD,SAAS,EAAE,CAAC,CAAC;gBAC1E,OAAO;YACT,CAAC;YAED,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;gBACtC,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;gBAC1D,OAAO;YACT,CAAC;YAED,IAAI,iBAAiB,IAAI,oBAAoB,EAAE,CAAC;gBAC9C,MAAM,CAAC,KAAK,CACV,8BAA8B,oBAAoB,4BAA4B,EAC9E,SAAS,CAAC,CAAC,CAAC,eAAe,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAC5C,CAAC;gBACF,KAAK,EAAE,CAAC;gBACR,OAAO;YACT,CAAC;YAED,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,CAAC,EAAE,iBAAiB,CAAC,CAAC;YAElG,iBAAiB,EAAE,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,mCAAmC,iBAAiB,OAAO,YAAY,OAAO,CAAC,CAAC;YAC7F,qBAAqB,CAAC,cAAc,CAAC,CAAC;YAEtC,gBAAgB,GAAG,UAAU,CAAC,GAAG,EAAE;gBACjC,MAAM,CAAC,KAAK,CAAC,oCAAoC,iBAAiB,MAAM,CAAC,CAAC;gBAC1E,cAAc,EAAE,CAAC;YACnB,CAAC,EAAE,YAAY,CAAC,CAAC;QACnB,CAAC,CAAC;QAEF,MAAM,cAAc,GAAG,GAAS,EAAE;YAChC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;gBACtC,MAAM,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;gBAC7D,OAAO;YACT,CAAC;YAED,OAAO,EAAE,CAAC;YACV,qBAAqB,CAAC,YAAY,CAAC,CAAC;YAEpC,0EAA0E;YAC1E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;YAC/B,IAAI,SAAS,EAAE,CAAC;gBACd,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAC/C,CAAC;YAED,EAAE,GAAG,IAAI,cAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;gBACjC,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE;gBAC7C,iBAAiB,EAAE,KAAK;aACzB,CAAC,CAAC;YAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAQ,EAAE,EAAE;gBAC1B,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC9C,SAAS,GAAG,UAAU,CAAC;gBACvB,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;YAC/C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBAClB,IAAI,YAAY,EAAE,CAAC;oBACjB,aAAa,CAAC,YAAY,CAAC,CAAC;oBAC5B,YAAY,GAAG,SAAS,CAAC;gBAC3B,CAAC;gBAED,MAAM,eAAe,GACnB,CAAC,qBAAqB;oBACtB,CAAC,IAAA,2BAAmB,EAAC,SAAS,IAAI,EAAE,CAAC;oBACrC,eAAe,KAAK,cAAc,CAAC;gBACrC,qBAAqB,CAAC,cAAc,CAAC,CAAC;gBAEtC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;gBAEvC,qEAAqE;gBACrE,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;oBAC/D,MAAM,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;oBAC3D,SAAS,CAAC,KAAK,EAAE,CAAC;gBACpB,CAAC;gBAED,IAAI,eAAe,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;oBACzD,iBAAiB,EAAE,CAAC;gBACtB,CAAC;qBAAM,IAAI,IAAA,2BAAmB,EAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC;oBAChD,oEAAoE;oBACpE,oEAAoE;oBACpE,MAAM,CAAC,KAAK,CAAC,8CAA8C,SAAS,EAAE,CAAC,CAAC;oBACxE,KAAK,EAAE,CAAC;gBACV,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;gBACjB,MAAM,MAAM,GAAG,EAAe,CAAC;gBAC/B,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;gBACpC,iBAAiB,GAAG,CAAC,CAAC;gBACtB,SAAS,GAAG,SAAS,CAAC;gBACtB,qBAAqB,CAAC,WAAW,CAAC,CAAC;gBAEnC,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;oBAC9B,IAAI,MAAM,CAAC,UAAU,KAAK,cAAS,CAAC,IAAI,EAAE,CAAC;wBACxC,MAAc,CAAC,IAAI,EAAE,CAAC;oBACzB,CAAC;gBACH,CAAC,EAAE,KAAM,CAAC,CAAC;gBAEX,oDAAoD;gBACpD,IAAI,SAAS,IAAI,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;oBACtC,MAAM,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;oBAC7D,SAAS,CAAC,MAAM,EAAE,CAAC;gBACrB,CAAC;gBAED,kCAAkC;gBAClC,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,EAAE;oBAClC,IAAI,MAAM,CAAC,UAAU,KAAK,cAAS,CAAC,IAAI,EAAE,CAAC;wBACzC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACrB,CAAC;oBACD,2EAA2E;gBAC7E,CAAC,CAAC;gBAEF,gDAAgD;gBAChD,SAAU,CAAC,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBAC7C,SAAU,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBAEjC,WAAW;gBACX,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAS,EAAE,EAAE;oBACjC,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;wBACtC,SAAS,CAAC,KAAK,CAAC,IAAc,CAAC,CAAC;oBAClC,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,mBAAmB;QACnB,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAC3B,KAAK,EAAE,CAAC;YACR,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,MAAM,kBAAkB,GAAG,GAA0B,EAAE;YACrD,OAAO,eAAe,CAAC;QACzB,CAAC,CAAC;QAEF,MAAM,uBAAuB,GAAG,CAAC,QAAuC,EAAgB,EAAE;YACxF,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACnC,OAAO,GAAG,EAAE;gBACV,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACxC,CAAC,CAAC;QACJ,CAAC,CAAC;QAEF,YAAY;QACZ,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;YAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC5C,KAAK,EAAE,CAAC;gBACR,OAAO,MAAM,CAAC,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC,CAAC;YACjE,CAAC;YACD,OAAO,CAAC;gBACN,OAAO;gBACP,KAAK;gBACL,kBAAkB;gBAClB,uBAAuB;aACxB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,8DAA8D;QAC9D,MAAM,iBAAiB,GAAG,GAAG,EAAE;YAC7B,OAAO,EAAE,CAAC;YACV,qBAAqB,CAAC,cAAc,CAAC,CAAC;YACtC,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;gBACtC,SAAS,CAAC,OAAO,EAAE,CAAC;gBACpB,SAAS,GAAG,SAAS,CAAC;YACxB,CAAC;YACD,+CAA+C;YAC/C,iBAAiB,GAAG,CAAC,CAAC;YACtB,qBAAqB,GAAG,KAAK,CAAC;YAC9B,SAAS,GAAG,SAAS,CAAC;YACtB,SAAS,GAAG,SAAS,CAAC;YACtB,MAAM,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACtE,CAAC,CAAC;QAEF,gDAAgD;QAChD,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE;YACjC,8DAA8D;YAC9D,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;gBACtC,MAAM,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;gBACjF,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO;YACT,CAAC;YAED,oDAAoD;YACpD,oEAAoE;YACpE,qEAAqE;YACrE,SAAS,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;YAChC,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;YAC7D,SAAS,GAAG,MAAM,CAAC;YAEnB,sBAAsB;YACtB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACzB,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;gBAC5C,iBAAiB,EAAE,CAAC;YACtB,CAAC,CAAC,CAAC;YAEH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAQ,EAAE,EAAE;gBACjC,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;gBACvC,iBAAiB,EAAE,CAAC;YACtB,CAAC,CAAC,CAAC;YAEH,6BAA6B;YAC7B,cAAc,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,kBAAkB;QAClB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,KAAK,UAAU,yBAAyB,CACtC,SAAiB,EACjB,KAAa,EACb,QAAgB,EAChB,IAAY,EACZ,OAA0B;IAE1B,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,MAAM,CAAC;IAE7C,MAAM,MAAM,GAAG;QACb,KAAK,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;YACxB,IAAI,QAAQ,KAAK,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;YACvB,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,CAAC;QACxF,CAAC;QACD,IAAI,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;YACvB,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,OAAO;gBACpE,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1C,CAAC;QACD,KAAK,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;YACxB,IAAI,QAAQ,KAAK,MAAM;gBAAE,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,CAAC;QAClE,CAAC;KACF,CAAC;IAEF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;QAElC,qCAAqC;QACrC,MAAM,WAAW,GAA4B,IAAI,GAAG,EAAE,CAAC;QACvD,+CAA+C;QAC/C,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,IAAI,EAAyB,CAAC;QAC9B,IAAI,YAAwC,CAAC;QAC7C,IAAI,qBAAqB,GAAG,KAAK,CAAC;QAClC,IAAI,eAAe,GAA0B,YAAY,CAAC;QAE1D,MAAM,oBAAoB,GAAuC,IAAI,GAAG,EAAE,CAAC;QAE3E,MAAM,qBAAqB,GAAG,CAAC,QAA+B,EAAQ,EAAE;YACtE,IAAI,eAAe,KAAK,QAAQ,EAAE,CAAC;gBACjC,eAAe,GAAG,QAAQ,CAAC;gBAC3B,MAAM,CAAC,KAAK,CAAC,gCAAgC,QAAQ,EAAE,CAAC,CAAC;gBACzD,oBAAoB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;oBACxC,IAAI,CAAC;wBACH,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACrB,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,MAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE,GAAG,CAAC,CAAC;oBAC3D,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,gBAAgB,GAAG,GAAG,EAAE;YAC5B,IAAI,YAAY,EAAE,CAAC;gBACjB,aAAa,CAAC,YAAY,CAAC,CAAC;gBAC5B,YAAY,GAAG,SAAS,CAAC;YAC3B,CAAC;YACD,IAAI,EAAE,EAAE,CAAC;gBACP,EAAE,CAAC,kBAAkB,EAAE,CAAC;gBACxB,IAAI,EAAE,CAAC,UAAU,KAAK,cAAS,CAAC,IAAI,IAAI,EAAE,CAAC,UAAU,KAAK,cAAS,CAAC,UAAU,EAAE,CAAC;oBAC/E,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC1B,CAAC;gBACD,EAAE,GAAG,SAAS,CAAC;YACjB,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,mBAAmB,GAAG,GAAG,EAAE;YAC/B,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;gBAC3C,MAAM,CAAC,KAAK,CAAC,0BAA0B,MAAM,EAAE,CAAC,CAAC;gBACjD,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;oBACtB,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,CAAC;YACH,CAAC;YACD,WAAW,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC,CAAC;QAEF,MAAM,KAAK,GAAG,GAAG,EAAE;YACjB,qBAAqB,GAAG,IAAI,CAAC;YAC7B,gBAAgB,EAAE,CAAC;YACnB,mBAAmB,EAAE,CAAC;YACtB,qBAAqB,CAAC,cAAc,CAAC,CAAC;YACtC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrB,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC;QACH,CAAC,CAAC;QAEF,0DAA0D;QAC1D,MAAM,eAAe,GAAG,CAAC,MAAc,EAAE,EAAE;YACzC,IAAI,EAAE,IAAI,EAAE,CAAC,UAAU,KAAK,cAAS,CAAC,IAAI,EAAE,CAAC;gBAC3C,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;gBAC9C,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAChB,MAAM,CAAC,KAAK,CAAC,oCAAoC,MAAM,EAAE,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC,CAAC;QAEF,oCAAoC;QACpC,MAAM,gBAAgB,GAAG,CAAC,MAAc,EAAE,EAAE;YAC1C,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACvC,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;oBACtB,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,CAAC;gBACD,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC3B,MAAM,CAAC,KAAK,CAAC,sBAAsB,MAAM,EAAE,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,cAAc,GAAG,GAAS,EAAE;YAChC,gBAAgB,EAAE,CAAC;YACnB,qBAAqB,CAAC,YAAY,CAAC,CAAC;YAEpC,kDAAkD;YAClD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;YAC/B,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;YAE5C,EAAE,GAAG,IAAI,cAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;gBACjC,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE;gBAC7C,iBAAiB,EAAE,KAAK;aACzB,CAAC,CAAC;YAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAQ,EAAE,EAAE;gBAC1B,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC9C,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;YAC/C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBAClB,IAAI,YAAY,EAAE,CAAC;oBACjB,aAAa,CAAC,YAAY,CAAC,CAAC;oBAC5B,YAAY,GAAG,SAAS,CAAC;gBAC3B,CAAC;gBAED,qBAAqB,CAAC,cAAc,CAAC,CAAC;gBACtC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;gBAEvC,kDAAkD;gBAClD,mBAAmB,EAAE,CAAC;YACxB,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;gBACjB,MAAM,MAAM,GAAG,EAAe,CAAC;gBAC/B,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;gBACpC,qBAAqB,CAAC,WAAW,CAAC,CAAC;gBAEnC,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;oBAC9B,IAAI,MAAM,CAAC,UAAU,KAAK,cAAS,CAAC,IAAI,EAAE,CAAC;wBACxC,MAAc,CAAC,IAAI,EAAE,CAAC;oBACzB,CAAC;gBACH,CAAC,EAAE,KAAM,CAAC,CAAC;gBAEX,sCAAsC;gBACtC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAS,EAAE,EAAE;oBACjC,MAAM,MAAM,GAAG,IAAc,CAAC;oBAC9B,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACtB,MAAM,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;wBACrE,OAAO;oBACT,CAAC;oBAED,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;oBAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBAEnC,yCAAyC;oBACzC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACzB,MAAM,CAAC,KAAK,CAAC,wCAAwC,MAAM,EAAE,CAAC,CAAC;wBAC/D,gBAAgB,CAAC,MAAM,CAAC,CAAC;wBACzB,OAAO;oBACT,CAAC;oBAED,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBAC1C,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;wBACtC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBAC3B,CAAC;yBAAM,CAAC;wBACN,MAAM,CAAC,KAAK,CAAC,+CAA+C,MAAM,EAAE,CAAC,CAAC;oBACxE,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,mBAAmB;QACnB,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAC3B,KAAK,EAAE,CAAC;YACR,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,MAAM,kBAAkB,GAAG,GAA0B,EAAE;YACrD,OAAO,eAAe,CAAC;QACzB,CAAC,CAAC;QAEF,MAAM,uBAAuB,GAAG,CAAC,QAAuC,EAAgB,EAAE;YACxF,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACnC,OAAO,GAAG,EAAE;gBACV,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACxC,CAAC,CAAC;QACJ,CAAC,CAAC;QAEF,YAAY;QACZ,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;YAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC5C,KAAK,EAAE,CAAC;gBACR,OAAO,MAAM,CAAC,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC,CAAC;YACjE,CAAC;YAED,yCAAyC;YACzC,cAAc,EAAE,CAAC;YAEjB,OAAO,CAAC;gBACN,OAAO;gBACP,KAAK;gBACL,kBAAkB;gBAClB,uBAAuB;aACxB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,qEAAqE;QACrE,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE;YACjC,gCAAgC;YAChC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAC5B,wDAAwD;YACxD,IAAI,UAAU,GAAG,UAAU,EAAE,CAAC;gBAC5B,UAAU,GAAG,CAAC,CAAC;YACjB,CAAC;YAED,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAChC,MAAM,CAAC,KAAK,CAAC,sBAAsB,MAAM,EAAE,CAAC,CAAC;YAE7C,mDAAmD;YACnD,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBAClC,IAAI,EAAE,IAAI,EAAE,CAAC,UAAU,KAAK,cAAS,CAAC,IAAI,EAAE,CAAC;oBAC3C,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;oBAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;oBAC9C,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAClB,CAAC;gBACD,2EAA2E;YAC7E,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACtB,MAAM,CAAC,KAAK,CAAC,kBAAkB,MAAM,mBAAmB,CAAC,CAAC;gBAC1D,eAAe,CAAC,MAAM,CAAC,CAAC;gBACxB,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAQ,EAAE,EAAE;gBAC9B,MAAM,CAAC,KAAK,CAAC,kBAAkB,MAAM,SAAS,EAAE,GAAG,CAAC,CAAC;gBACrD,eAAe,CAAC,MAAM,CAAC,CAAC;gBACxB,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,kBAAkB;QAClB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC;AAEM,MAAM,mBAAmB,GAAG,CAAC,UAAkB,EAAW,EAAE;IACjE,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACpE,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACtB,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1C,OAAO,UAAU,IAAI,GAAG,IAAI,UAAU,GAAG,GAAG,CAAC;IAC/C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAPW,QAAA,mBAAmB,uBAO9B;AAEF;;GAEG;AACH,SAAgB,sBAAsB,CAAC,MAAc;IACnD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAChC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAgB,sBAAsB,CAAC,MAAc;IACnD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAChC,CAAC"}
|
package/tunnel.mjs
CHANGED
|
@@ -18,6 +18,16 @@ import { WebSocket } from 'ws';
|
|
|
18
18
|
* @param options Optional reconnection configuration
|
|
19
19
|
*/
|
|
20
20
|
export async function startTcpTunnel(remoteURL, token, hostname, port, options) {
|
|
21
|
+
const mode = options?.mode ?? 'singleton';
|
|
22
|
+
if (mode === 'multiplexed') {
|
|
23
|
+
return startMultiplexedTcpTunnel(remoteURL, token, hostname, port, options);
|
|
24
|
+
}
|
|
25
|
+
return startSingletonTcpTunnel(remoteURL, token, hostname, port, options);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Singleton mode: Single TCP connection forwarded to WebSocket
|
|
29
|
+
*/
|
|
30
|
+
async function startSingletonTcpTunnel(remoteURL, token, hostname, port, options) {
|
|
21
31
|
const maxReconnectAttempts = options?.maxReconnectAttempts ?? 6;
|
|
22
32
|
const reconnectDelay = options?.reconnectDelay ?? 1000;
|
|
23
33
|
const maxReconnectDelay = options?.maxReconnectDelay ?? 30000;
|
|
@@ -274,6 +284,233 @@ export async function startTcpTunnel(remoteURL, token, hostname, port, options)
|
|
|
274
284
|
server.listen(port, hostname);
|
|
275
285
|
});
|
|
276
286
|
}
|
|
287
|
+
/**
|
|
288
|
+
* Multiplexed mode: Multiple TCP connections multiplexed over a single WebSocket
|
|
289
|
+
*
|
|
290
|
+
* Each TCP connection is assigned a unique 32-bit connection ID. All data sent
|
|
291
|
+
* to the WebSocket is prefixed with a 4-byte big-endian header containing the
|
|
292
|
+
* connection ID. The server responds with data prefixed with the same header.
|
|
293
|
+
*
|
|
294
|
+
* A close signal for a connection is indicated by sending a header-only packet
|
|
295
|
+
* (4 bytes with no payload) for that connection ID.
|
|
296
|
+
*/
|
|
297
|
+
async function startMultiplexedTcpTunnel(remoteURL, token, hostname, port, options) {
|
|
298
|
+
const logLevel = options?.logLevel ?? 'info';
|
|
299
|
+
const logger = {
|
|
300
|
+
debug: (...args) => {
|
|
301
|
+
if (logLevel === 'debug')
|
|
302
|
+
console.log('[Tunnel:Mux]', ...args);
|
|
303
|
+
},
|
|
304
|
+
info: (...args) => {
|
|
305
|
+
if (logLevel === 'info' || logLevel === 'debug')
|
|
306
|
+
console.log('[Tunnel:Mux]', ...args);
|
|
307
|
+
},
|
|
308
|
+
warn: (...args) => {
|
|
309
|
+
if (logLevel === 'warn' || logLevel === 'info' || logLevel === 'debug')
|
|
310
|
+
console.warn('[Tunnel:Mux]', ...args);
|
|
311
|
+
},
|
|
312
|
+
error: (...args) => {
|
|
313
|
+
if (logLevel !== 'none')
|
|
314
|
+
console.error('[Tunnel:Mux]', ...args);
|
|
315
|
+
},
|
|
316
|
+
};
|
|
317
|
+
return new Promise((resolve, reject) => {
|
|
318
|
+
const server = net.createServer();
|
|
319
|
+
// Map of connection ID to TCP socket
|
|
320
|
+
const connections = new Map();
|
|
321
|
+
// Counter for generating unique connection IDs
|
|
322
|
+
let nextConnId = 1;
|
|
323
|
+
let ws;
|
|
324
|
+
let pingInterval;
|
|
325
|
+
let intentionalDisconnect = false;
|
|
326
|
+
let connectionState = 'connecting';
|
|
327
|
+
const stateChangeCallbacks = new Set();
|
|
328
|
+
const updateConnectionState = (newState) => {
|
|
329
|
+
if (connectionState !== newState) {
|
|
330
|
+
connectionState = newState;
|
|
331
|
+
logger.debug(`Connection state changed to: ${newState}`);
|
|
332
|
+
stateChangeCallbacks.forEach((callback) => {
|
|
333
|
+
try {
|
|
334
|
+
callback(newState);
|
|
335
|
+
}
|
|
336
|
+
catch (err) {
|
|
337
|
+
logger.error('Error in connection state callback:', err);
|
|
338
|
+
}
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
};
|
|
342
|
+
const cleanupWebSocket = () => {
|
|
343
|
+
if (pingInterval) {
|
|
344
|
+
clearInterval(pingInterval);
|
|
345
|
+
pingInterval = undefined;
|
|
346
|
+
}
|
|
347
|
+
if (ws) {
|
|
348
|
+
ws.removeAllListeners();
|
|
349
|
+
if (ws.readyState === WebSocket.OPEN || ws.readyState === WebSocket.CONNECTING) {
|
|
350
|
+
ws.close(1000, 'close');
|
|
351
|
+
}
|
|
352
|
+
ws = undefined;
|
|
353
|
+
}
|
|
354
|
+
};
|
|
355
|
+
const closeAllConnections = () => {
|
|
356
|
+
for (const [connId, socket] of connections) {
|
|
357
|
+
logger.debug(`Closing TCP connection ${connId}`);
|
|
358
|
+
if (!socket.destroyed) {
|
|
359
|
+
socket.destroy();
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
connections.clear();
|
|
363
|
+
};
|
|
364
|
+
const close = () => {
|
|
365
|
+
intentionalDisconnect = true;
|
|
366
|
+
cleanupWebSocket();
|
|
367
|
+
closeAllConnections();
|
|
368
|
+
updateConnectionState('disconnected');
|
|
369
|
+
if (server.listening) {
|
|
370
|
+
server.close();
|
|
371
|
+
}
|
|
372
|
+
};
|
|
373
|
+
// Send close signal for a connection (header-only packet)
|
|
374
|
+
const sendCloseSignal = (connId) => {
|
|
375
|
+
if (ws && ws.readyState === WebSocket.OPEN) {
|
|
376
|
+
const header = encodeConnectionHeader(connId);
|
|
377
|
+
ws.send(header);
|
|
378
|
+
logger.debug(`Sent close signal for connection ${connId}`);
|
|
379
|
+
}
|
|
380
|
+
};
|
|
381
|
+
// Remove a connection from tracking
|
|
382
|
+
const removeConnection = (connId) => {
|
|
383
|
+
const socket = connections.get(connId);
|
|
384
|
+
if (socket) {
|
|
385
|
+
if (!socket.destroyed) {
|
|
386
|
+
socket.destroy();
|
|
387
|
+
}
|
|
388
|
+
connections.delete(connId);
|
|
389
|
+
logger.debug(`Removed connection ${connId}`);
|
|
390
|
+
}
|
|
391
|
+
};
|
|
392
|
+
const setupWebSocket = () => {
|
|
393
|
+
cleanupWebSocket();
|
|
394
|
+
updateConnectionState('connecting');
|
|
395
|
+
// Build URL with mode=multiplexed query parameter
|
|
396
|
+
const url = new URL(remoteURL);
|
|
397
|
+
url.searchParams.set('mode', 'multiplexed');
|
|
398
|
+
ws = new WebSocket(url.toString(), {
|
|
399
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
400
|
+
perMessageDeflate: false,
|
|
401
|
+
});
|
|
402
|
+
ws.on('error', (err) => {
|
|
403
|
+
const errMessage = err.message || String(err);
|
|
404
|
+
logger.error('WebSocket error:', errMessage);
|
|
405
|
+
});
|
|
406
|
+
ws.on('close', () => {
|
|
407
|
+
if (pingInterval) {
|
|
408
|
+
clearInterval(pingInterval);
|
|
409
|
+
pingInterval = undefined;
|
|
410
|
+
}
|
|
411
|
+
updateConnectionState('disconnected');
|
|
412
|
+
logger.debug('WebSocket disconnected');
|
|
413
|
+
// Close all TCP connections when WebSocket closes
|
|
414
|
+
closeAllConnections();
|
|
415
|
+
});
|
|
416
|
+
ws.on('open', () => {
|
|
417
|
+
const socket = ws;
|
|
418
|
+
logger.debug('WebSocket connected');
|
|
419
|
+
updateConnectionState('connected');
|
|
420
|
+
pingInterval = setInterval(() => {
|
|
421
|
+
if (socket.readyState === WebSocket.OPEN) {
|
|
422
|
+
socket.ping();
|
|
423
|
+
}
|
|
424
|
+
}, 30000);
|
|
425
|
+
// WS → TCP: Demultiplex incoming data
|
|
426
|
+
socket.on('message', (data) => {
|
|
427
|
+
const buffer = data;
|
|
428
|
+
if (buffer.length < 4) {
|
|
429
|
+
logger.error('Received binary frame shorter than 4 bytes; dropping');
|
|
430
|
+
return;
|
|
431
|
+
}
|
|
432
|
+
const connId = decodeConnectionHeader(buffer);
|
|
433
|
+
const payload = buffer.subarray(4);
|
|
434
|
+
// Close signal (header only, no payload)
|
|
435
|
+
if (payload.length === 0) {
|
|
436
|
+
logger.debug(`Received close signal for connection ${connId}`);
|
|
437
|
+
removeConnection(connId);
|
|
438
|
+
return;
|
|
439
|
+
}
|
|
440
|
+
const tcpSocket = connections.get(connId);
|
|
441
|
+
if (tcpSocket && !tcpSocket.destroyed) {
|
|
442
|
+
tcpSocket.write(payload);
|
|
443
|
+
}
|
|
444
|
+
else {
|
|
445
|
+
logger.debug(`Received data for unknown/closed connection ${connId}`);
|
|
446
|
+
}
|
|
447
|
+
});
|
|
448
|
+
});
|
|
449
|
+
};
|
|
450
|
+
// TCP server error
|
|
451
|
+
server.once('error', (err) => {
|
|
452
|
+
close();
|
|
453
|
+
reject(new Error(`TCP server error: ${err.message}`));
|
|
454
|
+
});
|
|
455
|
+
const getConnectionState = () => {
|
|
456
|
+
return connectionState;
|
|
457
|
+
};
|
|
458
|
+
const onConnectionStateChange = (callback) => {
|
|
459
|
+
stateChangeCallbacks.add(callback);
|
|
460
|
+
return () => {
|
|
461
|
+
stateChangeCallbacks.delete(callback);
|
|
462
|
+
};
|
|
463
|
+
};
|
|
464
|
+
// Listening
|
|
465
|
+
server.once('listening', () => {
|
|
466
|
+
const address = server.address();
|
|
467
|
+
if (!address || typeof address === 'string') {
|
|
468
|
+
close();
|
|
469
|
+
return reject(new Error('Failed to obtain listening address'));
|
|
470
|
+
}
|
|
471
|
+
// Start WebSocket connection immediately
|
|
472
|
+
setupWebSocket();
|
|
473
|
+
resolve({
|
|
474
|
+
address,
|
|
475
|
+
close,
|
|
476
|
+
getConnectionState,
|
|
477
|
+
onConnectionStateChange,
|
|
478
|
+
});
|
|
479
|
+
});
|
|
480
|
+
// On TCP connection - allow multiple connections in multiplexed mode
|
|
481
|
+
server.on('connection', (socket) => {
|
|
482
|
+
// Assign a unique connection ID
|
|
483
|
+
const connId = nextConnId++;
|
|
484
|
+
// Wrap around at 32-bit max to stay within uint32 range
|
|
485
|
+
if (nextConnId > 0xffffffff) {
|
|
486
|
+
nextConnId = 1;
|
|
487
|
+
}
|
|
488
|
+
connections.set(connId, socket);
|
|
489
|
+
logger.debug(`New TCP connection ${connId}`);
|
|
490
|
+
// TCP → WS: Forward data with connection ID header
|
|
491
|
+
socket.on('data', (chunk) => {
|
|
492
|
+
if (ws && ws.readyState === WebSocket.OPEN) {
|
|
493
|
+
const header = encodeConnectionHeader(connId);
|
|
494
|
+
const framed = Buffer.concat([header, chunk]);
|
|
495
|
+
ws.send(framed);
|
|
496
|
+
}
|
|
497
|
+
// If WebSocket is not ready, data will queue in TCP buffers (backpressure)
|
|
498
|
+
});
|
|
499
|
+
socket.on('close', () => {
|
|
500
|
+
logger.debug(`TCP connection ${connId} closed by client`);
|
|
501
|
+
sendCloseSignal(connId);
|
|
502
|
+
connections.delete(connId);
|
|
503
|
+
});
|
|
504
|
+
socket.on('error', (err) => {
|
|
505
|
+
logger.error(`TCP connection ${connId} error:`, err);
|
|
506
|
+
sendCloseSignal(connId);
|
|
507
|
+
connections.delete(connId);
|
|
508
|
+
});
|
|
509
|
+
});
|
|
510
|
+
// Start listening
|
|
511
|
+
server.listen(port, hostname);
|
|
512
|
+
});
|
|
513
|
+
}
|
|
277
514
|
export const isNonRetryableError = (errMessage) => {
|
|
278
515
|
const match = errMessage.match(/Unexpected server response: (\d+)/);
|
|
279
516
|
if (match && match[1]) {
|
|
@@ -282,4 +519,21 @@ export const isNonRetryableError = (errMessage) => {
|
|
|
282
519
|
}
|
|
283
520
|
return false;
|
|
284
521
|
};
|
|
522
|
+
/**
|
|
523
|
+
* Encode a 32-bit connection ID as a 4-byte big-endian header
|
|
524
|
+
*/
|
|
525
|
+
export function encodeConnectionHeader(connId) {
|
|
526
|
+
const header = Buffer.alloc(4);
|
|
527
|
+
header.writeUInt32BE(connId, 0);
|
|
528
|
+
return header;
|
|
529
|
+
}
|
|
530
|
+
/**
|
|
531
|
+
* Decode a 4-byte big-endian header into a 32-bit connection ID
|
|
532
|
+
*/
|
|
533
|
+
export function decodeConnectionHeader(header) {
|
|
534
|
+
if (header.length < 4) {
|
|
535
|
+
throw new Error('Header must be at least 4 bytes');
|
|
536
|
+
}
|
|
537
|
+
return header.readUInt32BE(0);
|
|
538
|
+
}
|
|
285
539
|
//# sourceMappingURL=tunnel.mjs.map
|
package/tunnel.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tunnel.mjs","sourceRoot":"","sources":["src/tunnel.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tunnel.mjs","sourceRoot":"","sources":["src/tunnel.ts"],"names":[],"mappings":"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"}
|
package/version.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "0.17.0-rc.
|
|
1
|
+
export declare const VERSION = "0.17.0-rc.6";
|
|
2
2
|
//# sourceMappingURL=version.d.mts.map
|
package/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "0.17.0-rc.
|
|
1
|
+
export declare const VERSION = "0.17.0-rc.6";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/version.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.VERSION = void 0;
|
|
4
|
-
exports.VERSION = '0.17.0-rc.
|
|
4
|
+
exports.VERSION = '0.17.0-rc.6'; // x-release-please-version
|
|
5
5
|
//# sourceMappingURL=version.js.map
|
package/version.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const VERSION = '0.17.0-rc.
|
|
1
|
+
export const VERSION = '0.17.0-rc.6'; // x-release-please-version
|
|
2
2
|
//# sourceMappingURL=version.mjs.map
|