@push.rocks/smartproxy 23.0.0 → 23.1.1
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 +17 -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/plugins.d.ts +2 -1
- package/dist_ts/plugins.js +3 -2
- package/dist_ts/proxies/smart-proxy/rust-proxy-bridge.d.ts +9 -21
- package/dist_ts/proxies/smart-proxy/rust-proxy-bridge.js +84 -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 +41 -11
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/plugins.ts +2 -0
- package/ts/proxies/smart-proxy/rust-proxy-bridge.ts +103 -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/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/smart-proxy/rust-binary-locator.ts +0 -112
|
@@ -1,237 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../../plugins.js';
|
|
2
|
-
import { NfTablesProxy } from '../nftables-proxy/nftables-proxy.js';
|
|
3
|
-
/**
|
|
4
|
-
* Manages NFTables rules based on SmartProxy route configurations
|
|
5
|
-
*
|
|
6
|
-
* This class bridges the gap between SmartProxy routes and the NFTablesProxy,
|
|
7
|
-
* allowing high-performance kernel-level packet forwarding for routes that
|
|
8
|
-
* specify NFTables as their forwarding engine.
|
|
9
|
-
*/
|
|
10
|
-
export class NFTablesManager {
|
|
11
|
-
/**
|
|
12
|
-
* Creates a new NFTablesManager
|
|
13
|
-
*
|
|
14
|
-
* @param smartProxy The SmartProxy instance
|
|
15
|
-
*/
|
|
16
|
-
constructor(smartProxy) {
|
|
17
|
-
this.smartProxy = smartProxy;
|
|
18
|
-
this.rulesMap = new Map();
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Provision NFTables rules for a route
|
|
22
|
-
*
|
|
23
|
-
* @param route The route configuration
|
|
24
|
-
* @returns A promise that resolves to true if successful, false otherwise
|
|
25
|
-
*/
|
|
26
|
-
async provisionRoute(route) {
|
|
27
|
-
// Generate a unique ID for this route
|
|
28
|
-
const routeId = this.generateRouteId(route);
|
|
29
|
-
// Skip if route doesn't use NFTables
|
|
30
|
-
if (route.action.forwardingEngine !== 'nftables') {
|
|
31
|
-
return true;
|
|
32
|
-
}
|
|
33
|
-
// Create NFTables options from route configuration
|
|
34
|
-
const nftOptions = this.createNfTablesOptions(route);
|
|
35
|
-
// Create and start an NFTablesProxy instance
|
|
36
|
-
const proxy = new NfTablesProxy(nftOptions);
|
|
37
|
-
try {
|
|
38
|
-
await proxy.start();
|
|
39
|
-
this.rulesMap.set(routeId, proxy);
|
|
40
|
-
return true;
|
|
41
|
-
}
|
|
42
|
-
catch (err) {
|
|
43
|
-
console.error(`Failed to provision NFTables rules for route ${route.name || 'unnamed'}: ${err.message}`);
|
|
44
|
-
return false;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Remove NFTables rules for a route
|
|
49
|
-
*
|
|
50
|
-
* @param route The route configuration
|
|
51
|
-
* @returns A promise that resolves to true if successful, false otherwise
|
|
52
|
-
*/
|
|
53
|
-
async deprovisionRoute(route) {
|
|
54
|
-
const routeId = this.generateRouteId(route);
|
|
55
|
-
const proxy = this.rulesMap.get(routeId);
|
|
56
|
-
if (!proxy) {
|
|
57
|
-
return true; // Nothing to remove
|
|
58
|
-
}
|
|
59
|
-
try {
|
|
60
|
-
await proxy.stop();
|
|
61
|
-
this.rulesMap.delete(routeId);
|
|
62
|
-
return true;
|
|
63
|
-
}
|
|
64
|
-
catch (err) {
|
|
65
|
-
console.error(`Failed to deprovision NFTables rules for route ${route.name || 'unnamed'}: ${err.message}`);
|
|
66
|
-
return false;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Update NFTables rules when route changes
|
|
71
|
-
*
|
|
72
|
-
* @param oldRoute The previous route configuration
|
|
73
|
-
* @param newRoute The new route configuration
|
|
74
|
-
* @returns A promise that resolves to true if successful, false otherwise
|
|
75
|
-
*/
|
|
76
|
-
async updateRoute(oldRoute, newRoute) {
|
|
77
|
-
// Remove old rules and add new ones
|
|
78
|
-
await this.deprovisionRoute(oldRoute);
|
|
79
|
-
return this.provisionRoute(newRoute);
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Generate a unique ID for a route
|
|
83
|
-
*
|
|
84
|
-
* @param route The route configuration
|
|
85
|
-
* @returns A unique ID string
|
|
86
|
-
*/
|
|
87
|
-
generateRouteId(route) {
|
|
88
|
-
// Generate a unique ID based on route properties
|
|
89
|
-
// Include the route name, match criteria, and a timestamp
|
|
90
|
-
const matchStr = JSON.stringify({
|
|
91
|
-
ports: route.match.ports,
|
|
92
|
-
domains: route.match.domains
|
|
93
|
-
});
|
|
94
|
-
return `${route.name || 'unnamed'}-${matchStr}-${route.id || Date.now().toString()}`;
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Create NFTablesProxy options from a route configuration
|
|
98
|
-
*
|
|
99
|
-
* @param route The route configuration
|
|
100
|
-
* @returns NFTableProxyOptions object
|
|
101
|
-
*/
|
|
102
|
-
createNfTablesOptions(route) {
|
|
103
|
-
const { action } = route;
|
|
104
|
-
// Ensure we have targets
|
|
105
|
-
if (!action.targets || action.targets.length === 0) {
|
|
106
|
-
throw new Error('Route must have targets to use NFTables forwarding');
|
|
107
|
-
}
|
|
108
|
-
// NFTables can only handle a single target, so we use the first target without match criteria
|
|
109
|
-
// or the first target if all have match criteria
|
|
110
|
-
const defaultTarget = action.targets.find(t => !t.match) || action.targets[0];
|
|
111
|
-
// Convert port specifications
|
|
112
|
-
const fromPorts = this.expandPortRange(route.match.ports);
|
|
113
|
-
// Determine target port
|
|
114
|
-
let toPorts;
|
|
115
|
-
if (defaultTarget.port === 'preserve') {
|
|
116
|
-
// 'preserve' means use the same ports as the source
|
|
117
|
-
toPorts = fromPorts;
|
|
118
|
-
}
|
|
119
|
-
else if (typeof defaultTarget.port === 'function') {
|
|
120
|
-
// For function-based ports, we can't determine at setup time
|
|
121
|
-
// Use the "preserve" approach and let NFTables handle it
|
|
122
|
-
toPorts = fromPorts;
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
toPorts = defaultTarget.port;
|
|
126
|
-
}
|
|
127
|
-
// Determine target host
|
|
128
|
-
let toHost;
|
|
129
|
-
if (typeof defaultTarget.host === 'function') {
|
|
130
|
-
// Can't determine at setup time, use localhost as a placeholder
|
|
131
|
-
// and rely on run-time handling
|
|
132
|
-
toHost = 'localhost';
|
|
133
|
-
}
|
|
134
|
-
else if (Array.isArray(defaultTarget.host)) {
|
|
135
|
-
// Use first host for now - NFTables will do simple round-robin
|
|
136
|
-
toHost = defaultTarget.host[0];
|
|
137
|
-
}
|
|
138
|
-
else {
|
|
139
|
-
toHost = defaultTarget.host;
|
|
140
|
-
}
|
|
141
|
-
// Create options
|
|
142
|
-
const options = {
|
|
143
|
-
fromPort: fromPorts,
|
|
144
|
-
toPort: toPorts,
|
|
145
|
-
toHost: toHost,
|
|
146
|
-
protocol: action.nftables?.protocol || 'tcp',
|
|
147
|
-
preserveSourceIP: action.nftables?.preserveSourceIP !== undefined ?
|
|
148
|
-
action.nftables.preserveSourceIP :
|
|
149
|
-
this.smartProxy.settings.preserveSourceIP,
|
|
150
|
-
useIPSets: action.nftables?.useIPSets !== false,
|
|
151
|
-
useAdvancedNAT: action.nftables?.useAdvancedNAT,
|
|
152
|
-
enableLogging: this.smartProxy.settings.enableDetailedLogging,
|
|
153
|
-
deleteOnExit: true,
|
|
154
|
-
tableName: action.nftables?.tableName || 'smartproxy'
|
|
155
|
-
};
|
|
156
|
-
// Add security-related options
|
|
157
|
-
if (route.security?.ipAllowList?.length) {
|
|
158
|
-
options.ipAllowList = route.security.ipAllowList;
|
|
159
|
-
}
|
|
160
|
-
if (route.security?.ipBlockList?.length) {
|
|
161
|
-
options.ipBlockList = route.security.ipBlockList;
|
|
162
|
-
}
|
|
163
|
-
// Add QoS options
|
|
164
|
-
if (action.nftables?.maxRate || action.nftables?.priority) {
|
|
165
|
-
options.qos = {
|
|
166
|
-
enabled: true,
|
|
167
|
-
maxRate: action.nftables.maxRate,
|
|
168
|
-
priority: action.nftables.priority
|
|
169
|
-
};
|
|
170
|
-
}
|
|
171
|
-
return options;
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* Expand port range specifications
|
|
175
|
-
*
|
|
176
|
-
* @param ports The port range specification
|
|
177
|
-
* @returns Expanded port range
|
|
178
|
-
*/
|
|
179
|
-
expandPortRange(ports) {
|
|
180
|
-
// Process different port specifications
|
|
181
|
-
if (typeof ports === 'number') {
|
|
182
|
-
return ports;
|
|
183
|
-
}
|
|
184
|
-
else if (Array.isArray(ports)) {
|
|
185
|
-
const result = [];
|
|
186
|
-
for (const item of ports) {
|
|
187
|
-
if (typeof item === 'number') {
|
|
188
|
-
result.push(item);
|
|
189
|
-
}
|
|
190
|
-
else if ('from' in item && 'to' in item) {
|
|
191
|
-
result.push({ from: item.from, to: item.to });
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
return result;
|
|
195
|
-
}
|
|
196
|
-
else if (typeof ports === 'object' && ports !== null && 'from' in ports && 'to' in ports) {
|
|
197
|
-
return { from: ports.from, to: ports.to };
|
|
198
|
-
}
|
|
199
|
-
// Fallback to port 80 if something went wrong
|
|
200
|
-
console.warn('Invalid port range specification, using port 80 as fallback');
|
|
201
|
-
return 80;
|
|
202
|
-
}
|
|
203
|
-
/**
|
|
204
|
-
* Get status of all managed rules
|
|
205
|
-
*
|
|
206
|
-
* @returns A promise that resolves to a record of NFTables status objects
|
|
207
|
-
*/
|
|
208
|
-
async getStatus() {
|
|
209
|
-
const result = {};
|
|
210
|
-
for (const [routeId, proxy] of this.rulesMap.entries()) {
|
|
211
|
-
result[routeId] = await proxy.getStatus();
|
|
212
|
-
}
|
|
213
|
-
return result;
|
|
214
|
-
}
|
|
215
|
-
/**
|
|
216
|
-
* Check if a route is currently provisioned
|
|
217
|
-
*
|
|
218
|
-
* @param route The route configuration
|
|
219
|
-
* @returns True if the route is provisioned, false otherwise
|
|
220
|
-
*/
|
|
221
|
-
isRouteProvisioned(route) {
|
|
222
|
-
const routeId = this.generateRouteId(route);
|
|
223
|
-
return this.rulesMap.has(routeId);
|
|
224
|
-
}
|
|
225
|
-
/**
|
|
226
|
-
* Stop all NFTables rules
|
|
227
|
-
*
|
|
228
|
-
* @returns A promise that resolves when all rules have been stopped
|
|
229
|
-
*/
|
|
230
|
-
async stop() {
|
|
231
|
-
// Stop all NFTables proxies
|
|
232
|
-
const stopPromises = Array.from(this.rulesMap.values()).map(proxy => proxy.stop());
|
|
233
|
-
await Promise.all(stopPromises);
|
|
234
|
-
this.rulesMap.clear();
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmZ0YWJsZXMtbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL3Byb3hpZXMvc21hcnQtcHJveHkvbmZ0YWJsZXMtbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQWFwRTs7Ozs7O0dBTUc7QUFDSCxNQUFNLE9BQU8sZUFBZTtJQUcxQjs7OztPQUlHO0lBQ0gsWUFBb0IsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQVBsQyxhQUFRLEdBQStCLElBQUksR0FBRyxFQUFFLENBQUM7SUFPWixDQUFDO0lBRTlDOzs7OztPQUtHO0lBQ0ksS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFtQjtRQUM3QyxzQ0FBc0M7UUFDdEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU1QyxxQ0FBcUM7UUFDckMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLGdCQUFnQixLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ2pELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELG1EQUFtRDtRQUNuRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFckQsNkNBQTZDO1FBQzdDLE1BQU0sS0FBSyxHQUFHLElBQUksYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTVDLElBQUksQ0FBQztZQUNILE1BQU0sS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNsQyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFD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
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../../plugins.js';
|
|
2
|
-
import type { SmartProxy } from './smart-proxy.js';
|
|
3
|
-
/**
|
|
4
|
-
* PortManager handles the dynamic creation and removal of port listeners
|
|
5
|
-
*
|
|
6
|
-
* This class provides methods to add and remove listening ports at runtime,
|
|
7
|
-
* allowing SmartProxy to adapt to configuration changes without requiring
|
|
8
|
-
* a full restart.
|
|
9
|
-
*
|
|
10
|
-
* It includes a reference counting system to track how many routes are using
|
|
11
|
-
* each port, so ports can be automatically released when they are no longer needed.
|
|
12
|
-
*/
|
|
13
|
-
export declare class PortManager {
|
|
14
|
-
private smartProxy;
|
|
15
|
-
private servers;
|
|
16
|
-
private isShuttingDown;
|
|
17
|
-
private portRefCounts;
|
|
18
|
-
/**
|
|
19
|
-
* Create a new PortManager
|
|
20
|
-
*
|
|
21
|
-
* @param smartProxy The SmartProxy instance
|
|
22
|
-
*/
|
|
23
|
-
constructor(smartProxy: SmartProxy);
|
|
24
|
-
/**
|
|
25
|
-
* Start listening on a specific port
|
|
26
|
-
*
|
|
27
|
-
* @param port The port number to listen on
|
|
28
|
-
* @returns Promise that resolves when the server is listening or rejects on error
|
|
29
|
-
*/
|
|
30
|
-
addPort(port: number): Promise<void>;
|
|
31
|
-
/**
|
|
32
|
-
* Stop listening on a specific port
|
|
33
|
-
*
|
|
34
|
-
* @param port The port to stop listening on
|
|
35
|
-
* @returns Promise that resolves when the server is closed
|
|
36
|
-
*/
|
|
37
|
-
removePort(port: number): Promise<void>;
|
|
38
|
-
/**
|
|
39
|
-
* Add multiple ports at once
|
|
40
|
-
*
|
|
41
|
-
* @param ports Array of ports to add
|
|
42
|
-
* @returns Promise that resolves when all servers are listening
|
|
43
|
-
*/
|
|
44
|
-
addPorts(ports: number[]): Promise<void>;
|
|
45
|
-
/**
|
|
46
|
-
* Remove multiple ports at once
|
|
47
|
-
*
|
|
48
|
-
* @param ports Array of ports to remove
|
|
49
|
-
* @returns Promise that resolves when all servers are closed
|
|
50
|
-
*/
|
|
51
|
-
removePorts(ports: number[]): Promise<void>;
|
|
52
|
-
/**
|
|
53
|
-
* Update listening ports to match the provided list
|
|
54
|
-
*
|
|
55
|
-
* This will add any ports that aren't currently listening,
|
|
56
|
-
* and remove any ports that are no longer needed.
|
|
57
|
-
*
|
|
58
|
-
* @param ports Array of ports that should be listening
|
|
59
|
-
* @returns Promise that resolves when all operations are complete
|
|
60
|
-
*/
|
|
61
|
-
updatePorts(ports: number[]): Promise<void>;
|
|
62
|
-
/**
|
|
63
|
-
* Get all ports that are currently listening
|
|
64
|
-
*
|
|
65
|
-
* @returns Array of port numbers
|
|
66
|
-
*/
|
|
67
|
-
getListeningPorts(): number[];
|
|
68
|
-
/**
|
|
69
|
-
* Mark the port manager as shutting down
|
|
70
|
-
*/
|
|
71
|
-
setShuttingDown(isShuttingDown: boolean): void;
|
|
72
|
-
/**
|
|
73
|
-
* Close all listening servers
|
|
74
|
-
*
|
|
75
|
-
* @returns Promise that resolves when all servers are closed
|
|
76
|
-
*/
|
|
77
|
-
closeAll(): Promise<void>;
|
|
78
|
-
/**
|
|
79
|
-
* Get all server instances (for testing or debugging)
|
|
80
|
-
*/
|
|
81
|
-
getServers(): Map<number, plugins.net.Server>;
|
|
82
|
-
/**
|
|
83
|
-
* Check if a port is bound by this SmartProxy instance
|
|
84
|
-
*
|
|
85
|
-
* @param port The port number to check
|
|
86
|
-
* @returns True if the port is currently bound by SmartProxy
|
|
87
|
-
*/
|
|
88
|
-
isPortBoundBySmartProxy(port: number): boolean;
|
|
89
|
-
/**
|
|
90
|
-
* Get the current reference count for a port
|
|
91
|
-
*
|
|
92
|
-
* @param port The port number to check
|
|
93
|
-
* @returns The number of routes using this port, 0 if none
|
|
94
|
-
*/
|
|
95
|
-
getPortRefCount(port: number): number;
|
|
96
|
-
/**
|
|
97
|
-
* Increment the reference count for a port
|
|
98
|
-
*
|
|
99
|
-
* @param port The port number to increment
|
|
100
|
-
* @returns The new reference count
|
|
101
|
-
*/
|
|
102
|
-
incrementPortRefCount(port: number): number;
|
|
103
|
-
/**
|
|
104
|
-
* Decrement the reference count for a port
|
|
105
|
-
*
|
|
106
|
-
* @param port The port number to decrement
|
|
107
|
-
* @returns The new reference count
|
|
108
|
-
*/
|
|
109
|
-
decrementPortRefCount(port: number): number;
|
|
110
|
-
/**
|
|
111
|
-
* Determine if a port binding error is due to an external or internal conflict
|
|
112
|
-
*
|
|
113
|
-
* @param error The error object from a failed port binding
|
|
114
|
-
* @returns Object indicating if this is a conflict and if it's external
|
|
115
|
-
*/
|
|
116
|
-
private isPortConflict;
|
|
117
|
-
}
|