@push.rocks/smartproxy 22.6.0 → 23.1.0
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/changelog.md +18 -0
- package/dist_rust/{rustproxy → rustproxy_linux_amd64} +0 -0
- package/dist_rust/rustproxy_linux_arm64 +0 -0
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/index.d.ts +0 -1
- package/dist_ts/index.js +1 -3
- package/dist_ts/plugins.d.ts +2 -1
- package/dist_ts/plugins.js +3 -2
- package/dist_ts/proxies/index.d.ts +0 -1
- package/dist_ts/proxies/index.js +1 -3
- package/dist_ts/proxies/smart-proxy/models/route-types.js +1 -1
- package/dist_ts/proxies/smart-proxy/rust-proxy-bridge.d.ts +9 -21
- package/dist_ts/proxies/smart-proxy/rust-proxy-bridge.js +83 -212
- package/dist_ts/proxies/smart-proxy/smart-proxy.js +2 -3
- package/npmextra.json +3 -0
- package/package.json +13 -11
- package/readme.md +35 -31
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/index.ts +0 -3
- package/ts/plugins.ts +2 -0
- package/ts/proxies/index.ts +0 -3
- package/ts/proxies/smart-proxy/models/route-types.ts +0 -2
- package/ts/proxies/smart-proxy/rust-proxy-bridge.ts +102 -233
- package/ts/proxies/smart-proxy/smart-proxy.ts +1 -2
- package/dist_ts/common/eventUtils.d.ts +0 -14
- package/dist_ts/common/eventUtils.js +0 -20
- package/dist_ts/common/types.d.ts +0 -82
- package/dist_ts/common/types.js +0 -15
- package/dist_ts/core/utils/event-system.d.ts +0 -200
- package/dist_ts/core/utils/event-system.js +0 -224
- package/dist_ts/core/utils/event-utils.d.ts +0 -15
- package/dist_ts/core/utils/event-utils.js +0 -11
- package/dist_ts/core/utils/route-manager.d.ts +0 -88
- package/dist_ts/core/utils/route-manager.js +0 -342
- package/dist_ts/core/utils/route-utils.d.ts +0 -28
- package/dist_ts/core/utils/route-utils.js +0 -67
- package/dist_ts/detection/detectors/http-detector-v2.d.ts +0 -33
- package/dist_ts/detection/detectors/http-detector-v2.js +0 -87
- package/dist_ts/detection/detectors/tls-detector-v2.d.ts +0 -33
- package/dist_ts/detection/detectors/tls-detector-v2.js +0 -80
- package/dist_ts/detection/protocol-detector-v2.d.ts +0 -46
- package/dist_ts/detection/protocol-detector-v2.js +0 -116
- package/dist_ts/forwarding/config/forwarding-types.d.ts +0 -42
- package/dist_ts/forwarding/config/forwarding-types.js +0 -18
- package/dist_ts/forwarding/config/index.d.ts +0 -9
- package/dist_ts/forwarding/config/index.js +0 -10
- package/dist_ts/forwarding/factory/forwarding-factory.d.ts +0 -25
- package/dist_ts/forwarding/factory/forwarding-factory.js +0 -172
- package/dist_ts/forwarding/factory/index.d.ts +0 -4
- package/dist_ts/forwarding/factory/index.js +0 -5
- package/dist_ts/forwarding/handlers/base-handler.d.ts +0 -62
- package/dist_ts/forwarding/handlers/base-handler.js +0 -121
- package/dist_ts/forwarding/handlers/http-handler.d.ts +0 -30
- package/dist_ts/forwarding/handlers/http-handler.js +0 -143
- package/dist_ts/forwarding/handlers/https-passthrough-handler.d.ts +0 -29
- package/dist_ts/forwarding/handlers/https-passthrough-handler.js +0 -156
- package/dist_ts/forwarding/handlers/https-terminate-to-http-handler.d.ts +0 -36
- package/dist_ts/forwarding/handlers/https-terminate-to-http-handler.js +0 -276
- package/dist_ts/forwarding/handlers/https-terminate-to-https-handler.d.ts +0 -35
- package/dist_ts/forwarding/handlers/https-terminate-to-https-handler.js +0 -261
- package/dist_ts/forwarding/handlers/index.d.ts +0 -8
- package/dist_ts/forwarding/handlers/index.js +0 -9
- package/dist_ts/forwarding/index.d.ts +0 -13
- package/dist_ts/forwarding/index.js +0 -16
- package/dist_ts/http/index.d.ts +0 -5
- package/dist_ts/http/index.js +0 -8
- package/dist_ts/http/models/http-types.d.ts +0 -6
- package/dist_ts/http/models/http-types.js +0 -7
- package/dist_ts/http/router/index.d.ts +0 -8
- package/dist_ts/http/router/index.js +0 -7
- package/dist_ts/http/router/proxy-router.d.ts +0 -115
- package/dist_ts/http/router/proxy-router.js +0 -325
- package/dist_ts/http/router/route-router.d.ts +0 -108
- package/dist_ts/http/router/route-router.js +0 -393
- package/dist_ts/protocols/tls/constants.d.ts +0 -122
- package/dist_ts/protocols/tls/constants.js +0 -135
- package/dist_ts/protocols/tls/parser.d.ts +0 -53
- package/dist_ts/protocols/tls/parser.js +0 -294
- package/dist_ts/protocols/tls/types.d.ts +0 -65
- package/dist_ts/protocols/tls/types.js +0 -5
- package/dist_ts/proxies/http-proxy/certificate-manager.d.ts +0 -95
- package/dist_ts/proxies/http-proxy/certificate-manager.js +0 -214
- package/dist_ts/proxies/http-proxy/connection-pool.d.ts +0 -47
- package/dist_ts/proxies/http-proxy/connection-pool.js +0 -195
- package/dist_ts/proxies/http-proxy/context-creator.d.ts +0 -34
- package/dist_ts/proxies/http-proxy/context-creator.js +0 -108
- package/dist_ts/proxies/http-proxy/default-certificates.d.ts +0 -54
- package/dist_ts/proxies/http-proxy/default-certificates.js +0 -127
- package/dist_ts/proxies/http-proxy/function-cache.d.ts +0 -95
- package/dist_ts/proxies/http-proxy/function-cache.js +0 -215
- package/dist_ts/proxies/http-proxy/handlers/index.d.ts +0 -4
- package/dist_ts/proxies/http-proxy/handlers/index.js +0 -6
- package/dist_ts/proxies/http-proxy/handlers/redirect-handler.d.ts +0 -18
- package/dist_ts/proxies/http-proxy/handlers/redirect-handler.js +0 -78
- package/dist_ts/proxies/http-proxy/handlers/static-handler.d.ts +0 -19
- package/dist_ts/proxies/http-proxy/handlers/static-handler.js +0 -211
- package/dist_ts/proxies/http-proxy/http-proxy.d.ts +0 -117
- package/dist_ts/proxies/http-proxy/http-proxy.js +0 -521
- package/dist_ts/proxies/http-proxy/http-request-handler.d.ts +0 -40
- package/dist_ts/proxies/http-proxy/http-request-handler.js +0 -257
- package/dist_ts/proxies/http-proxy/http2-request-handler.d.ts +0 -24
- package/dist_ts/proxies/http-proxy/http2-request-handler.js +0 -201
- package/dist_ts/proxies/http-proxy/index.d.ts +0 -14
- package/dist_ts/proxies/http-proxy/index.js +0 -16
- package/dist_ts/proxies/http-proxy/models/http-types.d.ts +0 -117
- package/dist_ts/proxies/http-proxy/models/http-types.js +0 -92
- package/dist_ts/proxies/http-proxy/models/index.d.ts +0 -5
- package/dist_ts/proxies/http-proxy/models/index.js +0 -6
- package/dist_ts/proxies/http-proxy/models/types.d.ts +0 -75
- package/dist_ts/proxies/http-proxy/models/types.js +0 -35
- package/dist_ts/proxies/http-proxy/request-handler.d.ts +0 -97
- package/dist_ts/proxies/http-proxy/request-handler.js +0 -737
- package/dist_ts/proxies/http-proxy/security-manager.d.ts +0 -98
- package/dist_ts/proxies/http-proxy/security-manager.js +0 -341
- package/dist_ts/proxies/http-proxy/websocket-handler.d.ts +0 -50
- package/dist_ts/proxies/http-proxy/websocket-handler.js +0 -505
- package/dist_ts/proxies/nftables-proxy/index.d.ts +0 -6
- package/dist_ts/proxies/nftables-proxy/index.js +0 -7
- package/dist_ts/proxies/nftables-proxy/models/errors.d.ts +0 -15
- package/dist_ts/proxies/nftables-proxy/models/errors.js +0 -28
- package/dist_ts/proxies/nftables-proxy/models/index.d.ts +0 -5
- package/dist_ts/proxies/nftables-proxy/models/index.js +0 -6
- package/dist_ts/proxies/nftables-proxy/models/interfaces.d.ts +0 -75
- package/dist_ts/proxies/nftables-proxy/models/interfaces.js +0 -5
- package/dist_ts/proxies/nftables-proxy/nftables-proxy.d.ts +0 -124
- package/dist_ts/proxies/nftables-proxy/nftables-proxy.js +0 -1374
- package/dist_ts/proxies/nftables-proxy/utils/index.d.ts +0 -9
- package/dist_ts/proxies/nftables-proxy/utils/index.js +0 -12
- package/dist_ts/proxies/nftables-proxy/utils/nft-command-executor.d.ts +0 -66
- package/dist_ts/proxies/nftables-proxy/utils/nft-command-executor.js +0 -131
- package/dist_ts/proxies/nftables-proxy/utils/nft-port-spec-normalizer.d.ts +0 -39
- package/dist_ts/proxies/nftables-proxy/utils/nft-port-spec-normalizer.js +0 -112
- package/dist_ts/proxies/nftables-proxy/utils/nft-rule-validator.d.ts +0 -59
- package/dist_ts/proxies/nftables-proxy/utils/nft-rule-validator.js +0 -130
- package/dist_ts/proxies/smart-proxy/acme-state-manager.d.ts +0 -42
- package/dist_ts/proxies/smart-proxy/acme-state-manager.js +0 -101
- package/dist_ts/proxies/smart-proxy/cert-store.d.ts +0 -10
- package/dist_ts/proxies/smart-proxy/cert-store.js +0 -72
- package/dist_ts/proxies/smart-proxy/certificate-manager.d.ts +0 -164
- package/dist_ts/proxies/smart-proxy/certificate-manager.js +0 -745
- package/dist_ts/proxies/smart-proxy/connection-manager.d.ts +0 -128
- package/dist_ts/proxies/smart-proxy/connection-manager.js +0 -689
- package/dist_ts/proxies/smart-proxy/http-proxy-bridge.d.ts +0 -43
- package/dist_ts/proxies/smart-proxy/http-proxy-bridge.js +0 -180
- package/dist_ts/proxies/smart-proxy/metrics-collector.d.ts +0 -98
- package/dist_ts/proxies/smart-proxy/metrics-collector.js +0 -355
- package/dist_ts/proxies/smart-proxy/nftables-manager.d.ts +0 -82
- package/dist_ts/proxies/smart-proxy/nftables-manager.js +0 -237
- package/dist_ts/proxies/smart-proxy/port-manager.d.ts +0 -117
- package/dist_ts/proxies/smart-proxy/port-manager.js +0 -318
- package/dist_ts/proxies/smart-proxy/route-connection-handler.d.ts +0 -60
- package/dist_ts/proxies/smart-proxy/route-connection-handler.js +0 -1407
- package/dist_ts/proxies/smart-proxy/route-manager.d.ts +0 -112
- package/dist_ts/proxies/smart-proxy/route-manager.js +0 -453
- package/dist_ts/proxies/smart-proxy/route-orchestrator.d.ts +0 -56
- package/dist_ts/proxies/smart-proxy/route-orchestrator.js +0 -204
- package/dist_ts/proxies/smart-proxy/rust-binary-locator.d.ts +0 -23
- package/dist_ts/proxies/smart-proxy/rust-binary-locator.js +0 -104
- package/dist_ts/proxies/smart-proxy/security-manager.d.ts +0 -74
- package/dist_ts/proxies/smart-proxy/security-manager.js +0 -227
- package/dist_ts/proxies/smart-proxy/throughput-tracker.d.ts +0 -36
- package/dist_ts/proxies/smart-proxy/throughput-tracker.js +0 -115
- package/dist_ts/proxies/smart-proxy/timeout-manager.d.ts +0 -48
- package/dist_ts/proxies/smart-proxy/timeout-manager.js +0 -158
- package/dist_ts/proxies/smart-proxy/tls-manager.d.ts +0 -50
- package/dist_ts/proxies/smart-proxy/tls-manager.js +0 -110
- package/dist_ts/proxies/smart-proxy/utils/route-patterns.d.ts +0 -161
- package/dist_ts/proxies/smart-proxy/utils/route-patterns.js +0 -282
- package/dist_ts/proxies/smart-proxy/utils/route-validators.d.ts +0 -73
- package/dist_ts/proxies/smart-proxy/utils/route-validators.js +0 -259
- package/dist_ts/routing/router/proxy-router.d.ts +0 -115
- package/dist_ts/routing/router/proxy-router.js +0 -325
- package/dist_ts/routing/router/route-router.d.ts +0 -108
- package/dist_ts/routing/router/route-router.js +0 -393
- package/dist_ts/tls/alerts/index.d.ts +0 -4
- package/dist_ts/tls/alerts/index.js +0 -5
- package/dist_ts/tls/alerts/tls-alert.d.ts +0 -150
- package/dist_ts/tls/alerts/tls-alert.js +0 -226
- package/dist_ts/tls/sni/client-hello-parser.d.ts +0 -100
- package/dist_ts/tls/sni/client-hello-parser.js +0 -464
- package/dist_ts/tls/sni/sni-extraction.d.ts +0 -58
- package/dist_ts/tls/sni/sni-extraction.js +0 -275
- package/dist_ts/tls/utils/index.d.ts +0 -4
- package/dist_ts/tls/utils/index.js +0 -5
- package/dist_ts/tls/utils/tls-utils.d.ts +0 -49
- package/dist_ts/tls/utils/tls-utils.js +0 -75
- package/ts/proxies/nftables-proxy/index.ts +0 -6
- package/ts/proxies/nftables-proxy/models/errors.ts +0 -30
- package/ts/proxies/nftables-proxy/models/index.ts +0 -5
- package/ts/proxies/nftables-proxy/models/interfaces.ts +0 -94
- package/ts/proxies/nftables-proxy/nftables-proxy.ts +0 -1754
- package/ts/proxies/nftables-proxy/utils/index.ts +0 -38
- package/ts/proxies/nftables-proxy/utils/nft-command-executor.ts +0 -162
- package/ts/proxies/nftables-proxy/utils/nft-port-spec-normalizer.ts +0 -125
- package/ts/proxies/nftables-proxy/utils/nft-rule-validator.ts +0 -156
- package/ts/proxies/smart-proxy/rust-binary-locator.ts +0 -112
|
@@ -1,318 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../../plugins.js';
|
|
2
|
-
import { logger } from '../../core/utils/logger.js';
|
|
3
|
-
import { cleanupSocket } from '../../core/utils/socket-utils.js';
|
|
4
|
-
/**
|
|
5
|
-
* PortManager handles the dynamic creation and removal of port listeners
|
|
6
|
-
*
|
|
7
|
-
* This class provides methods to add and remove listening ports at runtime,
|
|
8
|
-
* allowing SmartProxy to adapt to configuration changes without requiring
|
|
9
|
-
* a full restart.
|
|
10
|
-
*
|
|
11
|
-
* It includes a reference counting system to track how many routes are using
|
|
12
|
-
* each port, so ports can be automatically released when they are no longer needed.
|
|
13
|
-
*/
|
|
14
|
-
export class PortManager {
|
|
15
|
-
/**
|
|
16
|
-
* Create a new PortManager
|
|
17
|
-
*
|
|
18
|
-
* @param smartProxy The SmartProxy instance
|
|
19
|
-
*/
|
|
20
|
-
constructor(smartProxy) {
|
|
21
|
-
this.smartProxy = smartProxy;
|
|
22
|
-
this.servers = new Map();
|
|
23
|
-
this.isShuttingDown = false;
|
|
24
|
-
// Track how many routes are using each port
|
|
25
|
-
this.portRefCounts = new Map();
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Start listening on a specific port
|
|
29
|
-
*
|
|
30
|
-
* @param port The port number to listen on
|
|
31
|
-
* @returns Promise that resolves when the server is listening or rejects on error
|
|
32
|
-
*/
|
|
33
|
-
async addPort(port) {
|
|
34
|
-
// Check if we're already listening on this port
|
|
35
|
-
if (this.servers.has(port)) {
|
|
36
|
-
// Port is already bound, just increment the reference count
|
|
37
|
-
this.incrementPortRefCount(port);
|
|
38
|
-
try {
|
|
39
|
-
logger.log('debug', `PortManager: Port ${port} is already bound by SmartProxy, reusing binding`, {
|
|
40
|
-
port,
|
|
41
|
-
component: 'port-manager'
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
catch (e) {
|
|
45
|
-
console.log(`[DEBUG] PortManager: Port ${port} is already bound by SmartProxy, reusing binding`);
|
|
46
|
-
}
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
// Initialize reference count for new port
|
|
50
|
-
this.portRefCounts.set(port, 1);
|
|
51
|
-
// Create a server for this port
|
|
52
|
-
const server = plugins.net.createServer((socket) => {
|
|
53
|
-
// Check if shutting down
|
|
54
|
-
if (this.isShuttingDown) {
|
|
55
|
-
cleanupSocket(socket, 'port-manager-shutdown', { immediate: true });
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
// Delegate to route connection handler
|
|
59
|
-
this.smartProxy.routeConnectionHandler.handleConnection(socket);
|
|
60
|
-
}).on('error', (err) => {
|
|
61
|
-
try {
|
|
62
|
-
logger.log('error', `Server Error on port ${port}: ${err.message}`, {
|
|
63
|
-
port,
|
|
64
|
-
error: err.message,
|
|
65
|
-
component: 'port-manager'
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
catch (e) {
|
|
69
|
-
console.error(`[ERROR] Server Error on port ${port}: ${err.message}`);
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
// Start listening on the port
|
|
73
|
-
return new Promise((resolve, reject) => {
|
|
74
|
-
server.listen(port, () => {
|
|
75
|
-
const isHttpProxyPort = this.smartProxy.settings.useHttpProxy?.includes(port);
|
|
76
|
-
try {
|
|
77
|
-
logger.log('info', `SmartProxy -> OK: Now listening on port ${port}${isHttpProxyPort ? ' (HttpProxy forwarding enabled)' : ''}`, {
|
|
78
|
-
port,
|
|
79
|
-
isHttpProxyPort: !!isHttpProxyPort,
|
|
80
|
-
component: 'port-manager'
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
catch (e) {
|
|
84
|
-
console.log(`[INFO] SmartProxy -> OK: Now listening on port ${port}${isHttpProxyPort ? ' (HttpProxy forwarding enabled)' : ''}`);
|
|
85
|
-
}
|
|
86
|
-
// Store the server reference
|
|
87
|
-
this.servers.set(port, server);
|
|
88
|
-
resolve();
|
|
89
|
-
}).on('error', (err) => {
|
|
90
|
-
// Check if this is an external conflict
|
|
91
|
-
const { isConflict, isExternal } = this.isPortConflict(err);
|
|
92
|
-
if (isConflict && !isExternal) {
|
|
93
|
-
// This is an internal conflict (port already bound by SmartProxy)
|
|
94
|
-
// This shouldn't normally happen because we check servers.has(port) above
|
|
95
|
-
logger.log('warn', `Port ${port} binding conflict: already in use by SmartProxy`, {
|
|
96
|
-
port,
|
|
97
|
-
component: 'port-manager'
|
|
98
|
-
});
|
|
99
|
-
// Still increment reference count to maintain tracking
|
|
100
|
-
this.incrementPortRefCount(port);
|
|
101
|
-
resolve();
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
// Log the error and propagate it
|
|
105
|
-
logger.log('error', `Failed to listen on port ${port}: ${err.message}`, {
|
|
106
|
-
port,
|
|
107
|
-
error: err.message,
|
|
108
|
-
code: err.code,
|
|
109
|
-
component: 'port-manager'
|
|
110
|
-
});
|
|
111
|
-
// Clean up reference count since binding failed
|
|
112
|
-
this.portRefCounts.delete(port);
|
|
113
|
-
reject(err);
|
|
114
|
-
});
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* Stop listening on a specific port
|
|
119
|
-
*
|
|
120
|
-
* @param port The port to stop listening on
|
|
121
|
-
* @returns Promise that resolves when the server is closed
|
|
122
|
-
*/
|
|
123
|
-
async removePort(port) {
|
|
124
|
-
// Decrement the reference count first
|
|
125
|
-
const newRefCount = this.decrementPortRefCount(port);
|
|
126
|
-
// If there are still references to this port, keep it open
|
|
127
|
-
if (newRefCount > 0) {
|
|
128
|
-
logger.log('debug', `PortManager: Port ${port} still has ${newRefCount} references, keeping open`, {
|
|
129
|
-
port,
|
|
130
|
-
refCount: newRefCount,
|
|
131
|
-
component: 'port-manager'
|
|
132
|
-
});
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
// Get the server for this port
|
|
136
|
-
const server = this.servers.get(port);
|
|
137
|
-
if (!server) {
|
|
138
|
-
logger.log('warn', `PortManager: Not listening on port ${port}`, {
|
|
139
|
-
port,
|
|
140
|
-
component: 'port-manager'
|
|
141
|
-
});
|
|
142
|
-
// Ensure reference count is reset
|
|
143
|
-
this.portRefCounts.delete(port);
|
|
144
|
-
return;
|
|
145
|
-
}
|
|
146
|
-
// Close the server
|
|
147
|
-
return new Promise((resolve) => {
|
|
148
|
-
server.close((err) => {
|
|
149
|
-
if (err) {
|
|
150
|
-
logger.log('error', `Error closing server on port ${port}: ${err.message}`, {
|
|
151
|
-
port,
|
|
152
|
-
error: err.message,
|
|
153
|
-
component: 'port-manager'
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
else {
|
|
157
|
-
logger.log('info', `SmartProxy -> Stopped listening on port ${port}`, {
|
|
158
|
-
port,
|
|
159
|
-
component: 'port-manager'
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
// Remove the server reference and clean up reference counting
|
|
163
|
-
this.servers.delete(port);
|
|
164
|
-
this.portRefCounts.delete(port);
|
|
165
|
-
resolve();
|
|
166
|
-
});
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
/**
|
|
170
|
-
* Add multiple ports at once
|
|
171
|
-
*
|
|
172
|
-
* @param ports Array of ports to add
|
|
173
|
-
* @returns Promise that resolves when all servers are listening
|
|
174
|
-
*/
|
|
175
|
-
async addPorts(ports) {
|
|
176
|
-
const uniquePorts = [...new Set(ports)];
|
|
177
|
-
await Promise.all(uniquePorts.map(port => this.addPort(port)));
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* Remove multiple ports at once
|
|
181
|
-
*
|
|
182
|
-
* @param ports Array of ports to remove
|
|
183
|
-
* @returns Promise that resolves when all servers are closed
|
|
184
|
-
*/
|
|
185
|
-
async removePorts(ports) {
|
|
186
|
-
const uniquePorts = [...new Set(ports)];
|
|
187
|
-
await Promise.all(uniquePorts.map(port => this.removePort(port)));
|
|
188
|
-
}
|
|
189
|
-
/**
|
|
190
|
-
* Update listening ports to match the provided list
|
|
191
|
-
*
|
|
192
|
-
* This will add any ports that aren't currently listening,
|
|
193
|
-
* and remove any ports that are no longer needed.
|
|
194
|
-
*
|
|
195
|
-
* @param ports Array of ports that should be listening
|
|
196
|
-
* @returns Promise that resolves when all operations are complete
|
|
197
|
-
*/
|
|
198
|
-
async updatePorts(ports) {
|
|
199
|
-
const targetPorts = new Set(ports);
|
|
200
|
-
const currentPorts = new Set(this.servers.keys());
|
|
201
|
-
// Find ports to add and remove
|
|
202
|
-
const portsToAdd = ports.filter(port => !currentPorts.has(port));
|
|
203
|
-
const portsToRemove = Array.from(currentPorts).filter(port => !targetPorts.has(port));
|
|
204
|
-
// Log the changes
|
|
205
|
-
if (portsToAdd.length > 0) {
|
|
206
|
-
console.log(`PortManager: Adding new listeners for ports: ${portsToAdd.join(', ')}`);
|
|
207
|
-
}
|
|
208
|
-
if (portsToRemove.length > 0) {
|
|
209
|
-
console.log(`PortManager: Removing listeners for ports: ${portsToRemove.join(', ')}`);
|
|
210
|
-
}
|
|
211
|
-
// Add and remove ports
|
|
212
|
-
await this.removePorts(portsToRemove);
|
|
213
|
-
await this.addPorts(portsToAdd);
|
|
214
|
-
}
|
|
215
|
-
/**
|
|
216
|
-
* Get all ports that are currently listening
|
|
217
|
-
*
|
|
218
|
-
* @returns Array of port numbers
|
|
219
|
-
*/
|
|
220
|
-
getListeningPorts() {
|
|
221
|
-
return Array.from(this.servers.keys());
|
|
222
|
-
}
|
|
223
|
-
/**
|
|
224
|
-
* Mark the port manager as shutting down
|
|
225
|
-
*/
|
|
226
|
-
setShuttingDown(isShuttingDown) {
|
|
227
|
-
this.isShuttingDown = isShuttingDown;
|
|
228
|
-
}
|
|
229
|
-
/**
|
|
230
|
-
* Close all listening servers
|
|
231
|
-
*
|
|
232
|
-
* @returns Promise that resolves when all servers are closed
|
|
233
|
-
*/
|
|
234
|
-
async closeAll() {
|
|
235
|
-
const allPorts = Array.from(this.servers.keys());
|
|
236
|
-
await this.removePorts(allPorts);
|
|
237
|
-
}
|
|
238
|
-
/**
|
|
239
|
-
* Get all server instances (for testing or debugging)
|
|
240
|
-
*/
|
|
241
|
-
getServers() {
|
|
242
|
-
return new Map(this.servers);
|
|
243
|
-
}
|
|
244
|
-
/**
|
|
245
|
-
* Check if a port is bound by this SmartProxy instance
|
|
246
|
-
*
|
|
247
|
-
* @param port The port number to check
|
|
248
|
-
* @returns True if the port is currently bound by SmartProxy
|
|
249
|
-
*/
|
|
250
|
-
isPortBoundBySmartProxy(port) {
|
|
251
|
-
return this.servers.has(port);
|
|
252
|
-
}
|
|
253
|
-
/**
|
|
254
|
-
* Get the current reference count for a port
|
|
255
|
-
*
|
|
256
|
-
* @param port The port number to check
|
|
257
|
-
* @returns The number of routes using this port, 0 if none
|
|
258
|
-
*/
|
|
259
|
-
getPortRefCount(port) {
|
|
260
|
-
return this.portRefCounts.get(port) || 0;
|
|
261
|
-
}
|
|
262
|
-
/**
|
|
263
|
-
* Increment the reference count for a port
|
|
264
|
-
*
|
|
265
|
-
* @param port The port number to increment
|
|
266
|
-
* @returns The new reference count
|
|
267
|
-
*/
|
|
268
|
-
incrementPortRefCount(port) {
|
|
269
|
-
const currentCount = this.portRefCounts.get(port) || 0;
|
|
270
|
-
const newCount = currentCount + 1;
|
|
271
|
-
this.portRefCounts.set(port, newCount);
|
|
272
|
-
logger.log('debug', `Port ${port} reference count increased to ${newCount}`, {
|
|
273
|
-
port,
|
|
274
|
-
refCount: newCount,
|
|
275
|
-
component: 'port-manager'
|
|
276
|
-
});
|
|
277
|
-
return newCount;
|
|
278
|
-
}
|
|
279
|
-
/**
|
|
280
|
-
* Decrement the reference count for a port
|
|
281
|
-
*
|
|
282
|
-
* @param port The port number to decrement
|
|
283
|
-
* @returns The new reference count
|
|
284
|
-
*/
|
|
285
|
-
decrementPortRefCount(port) {
|
|
286
|
-
const currentCount = this.portRefCounts.get(port) || 0;
|
|
287
|
-
if (currentCount <= 0) {
|
|
288
|
-
logger.log('warn', `Attempted to decrement reference count for port ${port} below zero`, {
|
|
289
|
-
port,
|
|
290
|
-
component: 'port-manager'
|
|
291
|
-
});
|
|
292
|
-
return 0;
|
|
293
|
-
}
|
|
294
|
-
const newCount = currentCount - 1;
|
|
295
|
-
this.portRefCounts.set(port, newCount);
|
|
296
|
-
logger.log('debug', `Port ${port} reference count decreased to ${newCount}`, {
|
|
297
|
-
port,
|
|
298
|
-
refCount: newCount,
|
|
299
|
-
component: 'port-manager'
|
|
300
|
-
});
|
|
301
|
-
return newCount;
|
|
302
|
-
}
|
|
303
|
-
/**
|
|
304
|
-
* Determine if a port binding error is due to an external or internal conflict
|
|
305
|
-
*
|
|
306
|
-
* @param error The error object from a failed port binding
|
|
307
|
-
* @returns Object indicating if this is a conflict and if it's external
|
|
308
|
-
*/
|
|
309
|
-
isPortConflict(error) {
|
|
310
|
-
if (error.code !== 'EADDRINUSE') {
|
|
311
|
-
return { isConflict: false, isExternal: false };
|
|
312
|
-
}
|
|
313
|
-
// Check if we already have this port
|
|
314
|
-
const isBoundInternally = this.servers.has(Number(error.port));
|
|
315
|
-
return { isConflict: true, isExternal: !isBoundInternally };
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydC1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvcHJveGllcy9zbWFydC1wcm94eS9wb3J0LW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBR2pFOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sT0FBTyxXQUFXO0lBTXRCOzs7O09BSUc7SUFDSCxZQUNVLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFYeEIsWUFBTyxHQUFvQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3JELG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ3hDLDRDQUE0QztRQUNwQyxrQkFBYSxHQUF3QixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBU3BELENBQUM7SUFFSjs7Ozs7T0FLRztJQUNJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBWTtRQUMvQixnREFBZ0Q7UUFDaEQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzNCLDREQUE0RDtZQUM1RCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDO2dCQUNILE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLHFCQUFxQixJQUFJLGtEQUFrRCxFQUFFO29CQUMvRixJQUFJO29CQUNKLFNBQVMsRUFBRSxjQUFjO2lCQUMxQixDQUFDLENBQUM7WUFDTCxDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLDZCQUE2QixJQUFJLGtEQUFrRCxDQUFDLENBQUM7WUFDbkcsQ0FBQztZQUNELE9BQU87UUFDVCxDQUFDO1FBRUQsMENBQTBDO1FBQzFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVoQyxnQ0FBZ0M7UUFDaEMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNqRCx5QkFBeUI7WUFDekIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3hCLGFBQWEsQ0FBQyxNQUFNLEVBQUUsdUJBQXVCLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDcEUsT0FBTztZQUNULENBQUM7WUFFRCx1Q0FBdUM7WUFDdkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBVSxFQUFFLEVBQUU7WUFDNUIsSUFBSSxDQUFDO2dCQUNILE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLHdCQUF3QixJQUFJLEtBQUssR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFO29CQUNsRSxJQUFJO29CQUNKLEtBQUssRUFBRSxHQUFHLENBQUMsT0FBTztvQkFDbEIsU0FBUyxFQUFFLGNBQWM7aUJBQzFCLENBQUMsQ0FBQztZQUNMLENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLElBQUksS0FBSyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN4RSxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCw4QkFBOEI7UUFDOUIsT0FBTyxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUMzQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUU7Z0JBQ3ZCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzlFLElBQUksQ0FBQztvQkFDSCxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSwyQ0FBMkMsSUFBSSxHQUNoRSxlQUFlLENBQUMsQ0FBQyxDQUFDLGlDQUFpQyxDQUFDLENBQUMsQ0FBQyxFQUN4RCxFQUFFLEVBQUU7d0JBQ0YsSUFBSTt3QkFDSixlQUFlLEVBQUUsQ0FBQyxDQUFDLGVBQWU7d0JBQ2xDLFNBQVMsRUFBRSxjQUFjO3FCQUMxQixDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUNYLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0RBQWtELElBQUksR0FDaEUsZUFBZSxDQUFDLENBQUMsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDLENBQUMsRUFDeEQsRUFBRSxDQUFDLENBQUM7Z0JBQ04sQ0FBQztnQkFFRCw2QkFBNkI7Z0JBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDL0IsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ3JCLHdDQUF3QztnQkFDeEMsTUFBTSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUU1RCxJQUFJLFVBQVUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUM5QixrRUFBa0U7b0JBQ2xFLDBFQUEwRTtvQkFDMUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxJQUFJLGlEQUFpRCxFQUFFO3dCQUNoRixJQUFJO3dCQUNKLFNBQVMsRUFBRSxjQUFjO3FCQUMxQixDQUFDLENBQUM7b0JBQ0gsdURBQXVEO29CQUN2RCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2pDLE9BQU8sRUFBRSxDQUFDO29CQUNWLE9BQU87Z0JBQ1QsQ0FBQztnQkFFRCxpQ0FBaUM7Z0JBQ2pDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLDRCQUE0QixJQUFJLEtBQUssR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFO29CQUN0RSxJQUFJO29CQUNKLEtBQUssRUFBRSxHQUFHLENBQUMsT0FBTztvQkFDbEIsSUFBSSxFQUFHLEdBQVcsQ0FBQyxJQUFJO29CQUN2QixTQUFTLEVBQUUsY0FBYztpQkFDMUIsQ0FBQyxDQUFDO2dCQUVILGdEQUFnRDtnQkFDaEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRWhDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNkLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxLQUFLLENBQUMsVUFBVSxDQUFDLElBQVk7UUFDbEMsc0NBQXNDO1FBQ3RDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVyRCwyREFBMkQ7UUFDM0QsSUFBSSxXQUFXLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUscUJBQXFCLElBQUksY0FBYyxXQUFXLDJCQUEyQixFQUFFO2dCQUNqRyxJQUFJO2dCQUNKLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixTQUFTLEVBQUUsY0FBYzthQUMxQixDQUFDLENBQUM7WUFDSCxPQUFPO1FBQ1QsQ0FBQztRQUVELCtCQUErQjtRQUMvQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxzQ0FBc0MsSUFBSSxFQUFFLEVBQUU7Z0JBQy9ELElBQUk7Z0JBQ0osU0FBUyxFQUFFLGNBQWM7YUFDMUIsQ0FBQyxDQUFDO1lBQ0gsa0NBQWtDO1lBQ2xDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hDLE9BQU87UUFDVCxDQUFDO1FBRUQsbUJBQW1CO1FBQ25CLE9BQU8sSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNuQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ25CLElBQUksR0FBRyxFQUFFLENBQUM7b0JBQ1IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsZ0NBQWdDLElBQUksS0FBSyxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUU7d0JBQzFFLElBQUk7d0JBQ0osS0FBSyxFQUFFLEdBQUcsQ0FBQyxPQUFPO3dCQUNsQixTQUFTLEVBQUUsY0FBYztxQkFDMUIsQ0FBQyxDQUFDO2dCQUNMLENBQUM7cUJBQU0sQ0FBQztvQkFDTixNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSwyQ0FBMkMsSUFBSSxFQUFFLEVBQUU7d0JBQ3BFLElBQUk7d0JBQ0osU0FBUyxFQUFFLGNBQWM7cUJBQzFCLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUVELDhEQUE4RDtnQkFDOUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoQyxPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQWU7UUFDbkMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDeEMsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQWU7UUFDdEMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDeEMsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSSxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQWU7UUFDdEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRWxELCtCQUErQjtRQUMvQixNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDakUsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUV0RixrQkFBa0I7UUFDbEIsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0RBQWdELFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7UUFFRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4Q0FBOEMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEYsQ0FBQztRQUVELHVCQUF1QjtRQUN2QixNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdEMsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksaUJBQWlCO1FBQ3RCLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksZUFBZSxDQUFDLGNBQXVCO1FBQzVDLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLFFBQVE7UUFDbkIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDakQsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7T0FFRztJQUNJLFVBQVU7UUFDZixPQUFPLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSx1QkFBdUIsQ0FBQyxJQUFZO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksZUFBZSxDQUFDLElBQVk7UUFDakMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0kscUJBQXFCLENBQUMsSUFBWTtRQUN2QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkQsTUFBTSxRQUFRLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFdkMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxJQUFJLGlDQUFpQyxRQUFRLEVBQUUsRUFBRTtZQUMzRSxJQUFJO1lBQ0osUUFBUSxFQUFFLFFBQVE7WUFDbEIsU0FBUyxFQUFFLGNBQWM7U0FDMUIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0kscUJBQXFCLENBQUMsSUFBWTtRQUN2QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdkQsSUFBSSxZQUFZLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsbURBQW1ELElBQUksYUFBYSxFQUFFO2dCQUN2RixJQUFJO2dCQUNKLFNBQVMsRUFBRSxjQUFjO2FBQzFCLENBQUMsQ0FBQztZQUNILE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRXZDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsSUFBSSxpQ0FBaUMsUUFBUSxFQUFFLEVBQUU7WUFDM0UsSUFBSTtZQUNKLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLFNBQVMsRUFBRSxjQUFjO1NBQzFCLENBQUMsQ0FBQztRQUVILE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLGNBQWMsQ0FBQyxLQUFVO1FBQy9CLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxZQUFZLEVBQUUsQ0FBQztZQUNoQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDbEQsQ0FBQztRQUVELHFDQUFxQztRQUNyQyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzlELENBQUM7Q0FDRiJ9
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../../plugins.js';
|
|
2
|
-
import type { IConnectionRecord } from './models/interfaces.js';
|
|
3
|
-
import type { SmartProxy } from './smart-proxy.js';
|
|
4
|
-
/**
|
|
5
|
-
* Handles new connection processing and setup logic with support for route-based configuration
|
|
6
|
-
*/
|
|
7
|
-
export declare class RouteConnectionHandler {
|
|
8
|
-
private smartProxy;
|
|
9
|
-
newConnectionSubject: plugins.smartrx.rxjs.Subject<IConnectionRecord>;
|
|
10
|
-
constructor(smartProxy: SmartProxy);
|
|
11
|
-
/**
|
|
12
|
-
* Create a route context object for port and host mapping functions
|
|
13
|
-
*/
|
|
14
|
-
private createRouteContext;
|
|
15
|
-
/**
|
|
16
|
-
* Determines if SNI is required for routing decisions on this port.
|
|
17
|
-
*
|
|
18
|
-
* SNI is REQUIRED when:
|
|
19
|
-
* - Multiple routes exist on this port (need SNI to pick correct route)
|
|
20
|
-
* - Route has dynamic target function (needs ctx.domain)
|
|
21
|
-
* - Route has specific domain restriction (strict validation)
|
|
22
|
-
*
|
|
23
|
-
* SNI is NOT required when:
|
|
24
|
-
* - TLS termination mode (HttpProxy handles session resumption)
|
|
25
|
-
* - Single route with static target and no domain restriction (or wildcard)
|
|
26
|
-
*/
|
|
27
|
-
private calculateSniRequirement;
|
|
28
|
-
/**
|
|
29
|
-
* Check if domains config is wildcard-only (matches everything)
|
|
30
|
-
*/
|
|
31
|
-
private isWildcardOnly;
|
|
32
|
-
/**
|
|
33
|
-
* Handle a new incoming connection
|
|
34
|
-
*/
|
|
35
|
-
handleConnection(socket: plugins.net.Socket): void;
|
|
36
|
-
/**
|
|
37
|
-
* Handle initial data from a connection to determine routing
|
|
38
|
-
*/
|
|
39
|
-
private handleInitialData;
|
|
40
|
-
/**
|
|
41
|
-
* Route the connection based on match criteria
|
|
42
|
-
*/
|
|
43
|
-
private routeConnection;
|
|
44
|
-
/**
|
|
45
|
-
* Select the appropriate target from the targets array based on sub-matching criteria
|
|
46
|
-
*/
|
|
47
|
-
private selectTarget;
|
|
48
|
-
/**
|
|
49
|
-
* Handle a forward action for a route
|
|
50
|
-
*/
|
|
51
|
-
private handleForwardAction;
|
|
52
|
-
/**
|
|
53
|
-
* Handle a socket-handler action for a route
|
|
54
|
-
*/
|
|
55
|
-
private handleSocketHandlerAction;
|
|
56
|
-
/**
|
|
57
|
-
* Sets up a direct connection to the target
|
|
58
|
-
*/
|
|
59
|
-
private setupDirectConnection;
|
|
60
|
-
}
|