@push.rocks/smartproxy 15.0.2 → 16.0.3
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/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/certificate/index.d.ts +10 -4
- package/dist_ts/certificate/index.js +5 -7
- package/dist_ts/certificate/models/certificate-types.d.ts +35 -15
- package/dist_ts/certificate/providers/cert-provisioner.d.ts +41 -15
- package/dist_ts/certificate/providers/cert-provisioner.js +201 -41
- package/dist_ts/core/models/index.d.ts +2 -0
- package/dist_ts/core/models/index.js +3 -1
- package/dist_ts/core/models/route-context.d.ts +62 -0
- package/dist_ts/core/models/route-context.js +43 -0
- package/dist_ts/core/models/socket-augmentation.d.ts +12 -0
- package/dist_ts/core/models/socket-augmentation.js +18 -0
- package/dist_ts/core/utils/event-system.d.ts +200 -0
- package/dist_ts/core/utils/event-system.js +224 -0
- package/dist_ts/core/utils/index.d.ts +7 -0
- package/dist_ts/core/utils/index.js +8 -1
- package/dist_ts/core/utils/route-manager.d.ts +118 -0
- package/dist_ts/core/utils/route-manager.js +383 -0
- package/dist_ts/core/utils/route-utils.d.ts +94 -0
- package/dist_ts/core/utils/route-utils.js +264 -0
- package/dist_ts/core/utils/security-utils.d.ts +111 -0
- package/dist_ts/core/utils/security-utils.js +212 -0
- package/dist_ts/core/utils/shared-security-manager.d.ts +110 -0
- package/dist_ts/core/utils/shared-security-manager.js +252 -0
- package/dist_ts/core/utils/template-utils.d.ts +37 -0
- package/dist_ts/core/utils/template-utils.js +104 -0
- package/dist_ts/core/utils/websocket-utils.d.ts +23 -0
- package/dist_ts/core/utils/websocket-utils.js +86 -0
- package/dist_ts/forwarding/config/forwarding-types.d.ts +40 -76
- package/dist_ts/forwarding/config/forwarding-types.js +19 -18
- package/dist_ts/forwarding/config/index.d.ts +4 -2
- package/dist_ts/forwarding/config/index.js +5 -3
- package/dist_ts/forwarding/handlers/base-handler.js +3 -1
- package/dist_ts/forwarding/index.d.ts +5 -6
- package/dist_ts/forwarding/index.js +3 -3
- package/dist_ts/http/models/http-types.js +1 -1
- package/dist_ts/http/port80/acme-interfaces.d.ts +30 -0
- package/dist_ts/http/port80/acme-interfaces.js +46 -1
- package/dist_ts/http/port80/port80-handler.d.ts +17 -2
- package/dist_ts/http/port80/port80-handler.js +49 -11
- package/dist_ts/http/router/index.d.ts +5 -1
- package/dist_ts/http/router/index.js +4 -2
- package/dist_ts/http/router/route-router.d.ts +108 -0
- package/dist_ts/http/router/route-router.js +393 -0
- package/dist_ts/index.d.ts +8 -2
- package/dist_ts/index.js +10 -3
- package/dist_ts/proxies/index.d.ts +7 -2
- package/dist_ts/proxies/index.js +10 -4
- package/dist_ts/proxies/network-proxy/certificate-manager.d.ts +21 -0
- package/dist_ts/proxies/network-proxy/certificate-manager.js +92 -1
- package/dist_ts/proxies/network-proxy/context-creator.d.ts +34 -0
- package/dist_ts/proxies/network-proxy/context-creator.js +108 -0
- package/dist_ts/proxies/network-proxy/function-cache.d.ts +90 -0
- package/dist_ts/proxies/network-proxy/function-cache.js +198 -0
- package/dist_ts/proxies/network-proxy/http-request-handler.d.ts +40 -0
- package/dist_ts/proxies/network-proxy/http-request-handler.js +256 -0
- package/dist_ts/proxies/network-proxy/http2-request-handler.d.ts +24 -0
- package/dist_ts/proxies/network-proxy/http2-request-handler.js +201 -0
- package/dist_ts/proxies/network-proxy/models/types.d.ts +73 -1
- package/dist_ts/proxies/network-proxy/models/types.js +242 -1
- package/dist_ts/proxies/network-proxy/network-proxy.d.ts +23 -20
- package/dist_ts/proxies/network-proxy/network-proxy.js +147 -60
- package/dist_ts/proxies/network-proxy/request-handler.d.ts +38 -5
- package/dist_ts/proxies/network-proxy/request-handler.js +584 -198
- package/dist_ts/proxies/network-proxy/security-manager.d.ts +65 -0
- package/dist_ts/proxies/network-proxy/security-manager.js +255 -0
- package/dist_ts/proxies/network-proxy/websocket-handler.d.ts +13 -2
- package/dist_ts/proxies/network-proxy/websocket-handler.js +238 -20
- package/dist_ts/proxies/smart-proxy/index.d.ts +1 -1
- package/dist_ts/proxies/smart-proxy/index.js +3 -3
- package/dist_ts/proxies/smart-proxy/models/interfaces.d.ts +5 -66
- package/dist_ts/proxies/smart-proxy/models/interfaces.js +5 -4
- package/dist_ts/proxies/smart-proxy/models/route-types.d.ts +173 -6
- package/dist_ts/proxies/smart-proxy/network-proxy-bridge.d.ts +20 -7
- package/dist_ts/proxies/smart-proxy/network-proxy-bridge.js +49 -108
- package/dist_ts/proxies/smart-proxy/port-manager.d.ts +81 -0
- package/dist_ts/proxies/smart-proxy/port-manager.js +166 -0
- package/dist_ts/proxies/smart-proxy/route-connection-handler.d.ts +7 -5
- package/dist_ts/proxies/smart-proxy/route-connection-handler.js +155 -160
- package/dist_ts/proxies/smart-proxy/route-helpers/index.d.ts +9 -0
- package/dist_ts/proxies/smart-proxy/route-helpers/index.js +11 -0
- package/dist_ts/proxies/smart-proxy/route-helpers.d.ts +5 -125
- package/dist_ts/proxies/smart-proxy/route-helpers.js +8 -195
- package/dist_ts/proxies/smart-proxy/route-manager.d.ts +14 -11
- package/dist_ts/proxies/smart-proxy/route-manager.js +81 -124
- package/dist_ts/proxies/smart-proxy/smart-proxy.d.ts +101 -12
- package/dist_ts/proxies/smart-proxy/smart-proxy.js +178 -306
- package/dist_ts/proxies/smart-proxy/timeout-manager.js +3 -3
- package/dist_ts/proxies/smart-proxy/utils/index.d.ts +12 -0
- package/dist_ts/proxies/smart-proxy/utils/index.js +19 -0
- package/dist_ts/proxies/smart-proxy/utils/route-helpers.d.ts +240 -0
- package/dist_ts/proxies/smart-proxy/utils/route-helpers.js +451 -0
- package/dist_ts/proxies/smart-proxy/utils/route-migration-utils.d.ts +51 -0
- package/dist_ts/proxies/smart-proxy/utils/route-migration-utils.js +124 -0
- package/dist_ts/proxies/smart-proxy/utils/route-patterns.d.ts +131 -0
- package/dist_ts/proxies/smart-proxy/utils/route-patterns.js +217 -0
- package/dist_ts/proxies/smart-proxy/utils/route-utils.d.ts +79 -0
- package/dist_ts/proxies/smart-proxy/utils/route-utils.js +266 -0
- package/dist_ts/proxies/smart-proxy/utils/route-validators.d.ts +73 -0
- package/dist_ts/proxies/smart-proxy/utils/route-validators.js +264 -0
- package/package.json +1 -1
- package/readme.md +241 -125
- package/readme.plan.md +73 -286
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/certificate/index.ts +17 -9
- package/ts/certificate/models/certificate-types.ts +37 -16
- package/ts/certificate/providers/cert-provisioner.ts +247 -54
- package/ts/core/models/index.ts +2 -0
- package/ts/core/models/route-context.ts +113 -0
- package/ts/core/models/socket-augmentation.ts +33 -0
- package/ts/core/utils/event-system.ts +376 -0
- package/ts/core/utils/index.ts +7 -0
- package/ts/core/utils/route-manager.ts +489 -0
- package/ts/core/utils/route-utils.ts +312 -0
- package/ts/core/utils/security-utils.ts +309 -0
- package/ts/core/utils/shared-security-manager.ts +333 -0
- package/ts/core/utils/template-utils.ts +124 -0
- package/ts/core/utils/websocket-utils.ts +81 -0
- package/ts/forwarding/config/forwarding-types.ts +79 -107
- package/ts/forwarding/config/index.ts +4 -2
- package/ts/forwarding/handlers/base-handler.ts +4 -2
- package/ts/forwarding/index.ts +3 -2
- package/ts/http/models/http-types.ts +0 -1
- package/ts/http/port80/acme-interfaces.ts +84 -0
- package/ts/http/port80/port80-handler.ts +61 -15
- package/ts/http/router/index.ts +8 -1
- package/ts/http/router/route-router.ts +482 -0
- package/ts/index.ts +14 -2
- package/ts/proxies/index.ts +12 -3
- package/ts/proxies/network-proxy/certificate-manager.ts +114 -10
- package/ts/proxies/network-proxy/context-creator.ts +145 -0
- package/ts/proxies/network-proxy/function-cache.ts +259 -0
- package/ts/proxies/network-proxy/http-request-handler.ts +330 -0
- package/ts/proxies/network-proxy/http2-request-handler.ts +255 -0
- package/ts/proxies/network-proxy/models/types.ts +312 -1
- package/ts/proxies/network-proxy/network-proxy.ts +195 -86
- package/ts/proxies/network-proxy/request-handler.ts +698 -246
- package/ts/proxies/network-proxy/security-manager.ts +298 -0
- package/ts/proxies/network-proxy/websocket-handler.ts +276 -33
- package/ts/proxies/smart-proxy/index.ts +2 -12
- package/ts/proxies/smart-proxy/models/interfaces.ts +13 -67
- package/ts/proxies/smart-proxy/models/route-types.ts +223 -25
- package/ts/proxies/smart-proxy/network-proxy-bridge.ts +57 -123
- package/ts/proxies/smart-proxy/port-manager.ts +195 -0
- package/ts/proxies/smart-proxy/route-connection-handler.ts +191 -225
- package/ts/proxies/smart-proxy/route-manager.ts +101 -144
- package/ts/proxies/smart-proxy/smart-proxy.ts +206 -377
- package/ts/proxies/smart-proxy/timeout-manager.ts +2 -2
- package/ts/proxies/smart-proxy/utils/index.ts +40 -0
- package/ts/proxies/smart-proxy/utils/route-helpers.ts +621 -0
- package/ts/proxies/smart-proxy/utils/route-migration-utils.ts +165 -0
- package/ts/proxies/smart-proxy/utils/route-patterns.ts +309 -0
- package/ts/proxies/smart-proxy/utils/route-utils.ts +330 -0
- package/ts/proxies/smart-proxy/utils/route-validators.ts +288 -0
- package/ts/forwarding/config/domain-config.ts +0 -28
- package/ts/forwarding/config/domain-manager.ts +0 -283
- package/ts/proxies/smart-proxy/connection-handler.ts +0 -1240
- package/ts/proxies/smart-proxy/domain-config-manager.ts +0 -441
- package/ts/proxies/smart-proxy/port-range-manager.ts +0 -211
- package/ts/proxies/smart-proxy/route-helpers.ts +0 -344
|
@@ -2,7 +2,7 @@ import type { IAcmeOptions } from '../../../certificate/models/certificate-types
|
|
|
2
2
|
/**
|
|
3
3
|
* Supported action types for route configurations
|
|
4
4
|
*/
|
|
5
|
-
export type TRouteActionType = 'forward' | 'redirect' | 'block';
|
|
5
|
+
export type TRouteActionType = 'forward' | 'redirect' | 'block' | 'static';
|
|
6
6
|
/**
|
|
7
7
|
* TLS handling modes for route configurations
|
|
8
8
|
*/
|
|
@@ -23,13 +23,34 @@ export interface IRouteMatch {
|
|
|
23
23
|
path?: string;
|
|
24
24
|
clientIp?: string[];
|
|
25
25
|
tlsVersion?: string[];
|
|
26
|
+
headers?: Record<string, string | RegExp>;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Context provided to port and host mapping functions
|
|
30
|
+
*/
|
|
31
|
+
export interface IRouteContext {
|
|
32
|
+
port: number;
|
|
33
|
+
domain?: string;
|
|
34
|
+
clientIp: string;
|
|
35
|
+
serverIp: string;
|
|
36
|
+
path?: string;
|
|
37
|
+
query?: string;
|
|
38
|
+
headers?: Record<string, string>;
|
|
39
|
+
isTls: boolean;
|
|
40
|
+
tlsVersion?: string;
|
|
41
|
+
routeName?: string;
|
|
42
|
+
routeId?: string;
|
|
43
|
+
targetHost?: string | string[];
|
|
44
|
+
targetPort?: number;
|
|
45
|
+
timestamp: number;
|
|
46
|
+
connectionId: string;
|
|
26
47
|
}
|
|
27
48
|
/**
|
|
28
49
|
* Target configuration for forwarding
|
|
29
50
|
*/
|
|
30
51
|
export interface IRouteTarget {
|
|
31
|
-
host: string | string[];
|
|
32
|
-
port: number;
|
|
52
|
+
host: string | string[] | ((context: IRouteContext) => string | string[]);
|
|
53
|
+
port: number | ((context: IRouteContext) => number);
|
|
33
54
|
preservePort?: boolean;
|
|
34
55
|
}
|
|
35
56
|
/**
|
|
@@ -49,6 +70,24 @@ export interface IRouteRedirect {
|
|
|
49
70
|
to: string;
|
|
50
71
|
status: 301 | 302 | 307 | 308;
|
|
51
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Authentication options
|
|
75
|
+
*/
|
|
76
|
+
export interface IRouteAuthentication {
|
|
77
|
+
type: 'basic' | 'digest' | 'oauth' | 'jwt';
|
|
78
|
+
credentials?: {
|
|
79
|
+
username: string;
|
|
80
|
+
password: string;
|
|
81
|
+
}[];
|
|
82
|
+
realm?: string;
|
|
83
|
+
jwtSecret?: string;
|
|
84
|
+
jwtIssuer?: string;
|
|
85
|
+
oauthProvider?: string;
|
|
86
|
+
oauthClientId?: string;
|
|
87
|
+
oauthClientSecret?: string;
|
|
88
|
+
oauthRedirectUri?: string;
|
|
89
|
+
options?: Record<string, unknown>;
|
|
90
|
+
}
|
|
52
91
|
/**
|
|
53
92
|
* Security options for route actions
|
|
54
93
|
*/
|
|
@@ -56,9 +95,38 @@ export interface IRouteSecurity {
|
|
|
56
95
|
allowedIps?: string[];
|
|
57
96
|
blockedIps?: string[];
|
|
58
97
|
maxConnections?: number;
|
|
59
|
-
authentication?:
|
|
60
|
-
|
|
61
|
-
|
|
98
|
+
authentication?: IRouteAuthentication;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Static file server configuration
|
|
102
|
+
*/
|
|
103
|
+
export interface IRouteStaticFiles {
|
|
104
|
+
root: string;
|
|
105
|
+
index?: string[];
|
|
106
|
+
headers?: Record<string, string>;
|
|
107
|
+
directory?: string;
|
|
108
|
+
indexFiles?: string[];
|
|
109
|
+
cacheControl?: string;
|
|
110
|
+
expires?: number;
|
|
111
|
+
followSymlinks?: boolean;
|
|
112
|
+
disableDirectoryListing?: boolean;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Test route response configuration
|
|
116
|
+
*/
|
|
117
|
+
export interface IRouteTestResponse {
|
|
118
|
+
status: number;
|
|
119
|
+
headers: Record<string, string>;
|
|
120
|
+
body: string;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* URL rewriting configuration
|
|
124
|
+
*/
|
|
125
|
+
export interface IRouteUrlRewrite {
|
|
126
|
+
pattern: string;
|
|
127
|
+
target: string;
|
|
128
|
+
flags?: string;
|
|
129
|
+
onlyRewritePath?: boolean;
|
|
62
130
|
}
|
|
63
131
|
/**
|
|
64
132
|
* Advanced options for route actions
|
|
@@ -67,6 +135,36 @@ export interface IRouteAdvanced {
|
|
|
67
135
|
timeout?: number;
|
|
68
136
|
headers?: Record<string, string>;
|
|
69
137
|
keepAlive?: boolean;
|
|
138
|
+
staticFiles?: IRouteStaticFiles;
|
|
139
|
+
testResponse?: IRouteTestResponse;
|
|
140
|
+
urlRewrite?: IRouteUrlRewrite;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* WebSocket configuration
|
|
144
|
+
*/
|
|
145
|
+
export interface IRouteWebSocket {
|
|
146
|
+
enabled: boolean;
|
|
147
|
+
pingInterval?: number;
|
|
148
|
+
pingTimeout?: number;
|
|
149
|
+
maxPayloadSize?: number;
|
|
150
|
+
customHeaders?: Record<string, string>;
|
|
151
|
+
subprotocols?: string[];
|
|
152
|
+
rewritePath?: string;
|
|
153
|
+
allowedOrigins?: string[];
|
|
154
|
+
authenticateRequest?: boolean;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Load balancing configuration
|
|
158
|
+
*/
|
|
159
|
+
export interface IRouteLoadBalancing {
|
|
160
|
+
algorithm: 'round-robin' | 'least-connections' | 'ip-hash';
|
|
161
|
+
healthCheck?: {
|
|
162
|
+
path: string;
|
|
163
|
+
interval: number;
|
|
164
|
+
timeout: number;
|
|
165
|
+
unhealthyThreshold: number;
|
|
166
|
+
healthyThreshold: number;
|
|
167
|
+
};
|
|
70
168
|
}
|
|
71
169
|
/**
|
|
72
170
|
* Action configuration for route handling
|
|
@@ -76,19 +174,88 @@ export interface IRouteAction {
|
|
|
76
174
|
target?: IRouteTarget;
|
|
77
175
|
tls?: IRouteTls;
|
|
78
176
|
redirect?: IRouteRedirect;
|
|
177
|
+
static?: IRouteStaticFiles;
|
|
178
|
+
websocket?: IRouteWebSocket;
|
|
179
|
+
loadBalancing?: IRouteLoadBalancing;
|
|
79
180
|
security?: IRouteSecurity;
|
|
80
181
|
advanced?: IRouteAdvanced;
|
|
182
|
+
options?: {
|
|
183
|
+
backendProtocol?: 'http1' | 'http2';
|
|
184
|
+
[key: string]: any;
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Rate limiting configuration
|
|
189
|
+
*/
|
|
190
|
+
export interface IRouteRateLimit {
|
|
191
|
+
enabled: boolean;
|
|
192
|
+
maxRequests: number;
|
|
193
|
+
window: number;
|
|
194
|
+
keyBy?: 'ip' | 'path' | 'header';
|
|
195
|
+
headerName?: string;
|
|
196
|
+
errorMessage?: string;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Security features for routes
|
|
200
|
+
*/
|
|
201
|
+
export interface IRouteSecurity {
|
|
202
|
+
rateLimit?: IRouteRateLimit;
|
|
203
|
+
basicAuth?: {
|
|
204
|
+
enabled: boolean;
|
|
205
|
+
users: Array<{
|
|
206
|
+
username: string;
|
|
207
|
+
password: string;
|
|
208
|
+
}>;
|
|
209
|
+
realm?: string;
|
|
210
|
+
excludePaths?: string[];
|
|
211
|
+
};
|
|
212
|
+
jwtAuth?: {
|
|
213
|
+
enabled: boolean;
|
|
214
|
+
secret: string;
|
|
215
|
+
algorithm?: string;
|
|
216
|
+
issuer?: string;
|
|
217
|
+
audience?: string;
|
|
218
|
+
expiresIn?: number;
|
|
219
|
+
excludePaths?: string[];
|
|
220
|
+
};
|
|
221
|
+
ipAllowList?: string[];
|
|
222
|
+
ipBlockList?: string[];
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* CORS configuration for a route
|
|
226
|
+
*/
|
|
227
|
+
export interface IRouteCors {
|
|
228
|
+
enabled: boolean;
|
|
229
|
+
allowOrigin?: string | string[];
|
|
230
|
+
allowMethods?: string;
|
|
231
|
+
allowHeaders?: string;
|
|
232
|
+
allowCredentials?: boolean;
|
|
233
|
+
exposeHeaders?: string;
|
|
234
|
+
maxAge?: number;
|
|
235
|
+
preflight?: boolean;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Headers configuration
|
|
239
|
+
*/
|
|
240
|
+
export interface IRouteHeaders {
|
|
241
|
+
request?: Record<string, string>;
|
|
242
|
+
response?: Record<string, string>;
|
|
243
|
+
cors?: IRouteCors;
|
|
81
244
|
}
|
|
82
245
|
/**
|
|
83
246
|
* The core unified configuration interface
|
|
84
247
|
*/
|
|
85
248
|
export interface IRouteConfig {
|
|
249
|
+
id?: string;
|
|
86
250
|
match: IRouteMatch;
|
|
87
251
|
action: IRouteAction;
|
|
252
|
+
headers?: IRouteHeaders;
|
|
253
|
+
security?: IRouteSecurity;
|
|
88
254
|
name?: string;
|
|
89
255
|
description?: string;
|
|
90
256
|
priority?: number;
|
|
91
257
|
tags?: string[];
|
|
258
|
+
enabled?: boolean;
|
|
92
259
|
}
|
|
93
260
|
/**
|
|
94
261
|
* Unified SmartProxy options with routes-based configuration
|
|
@@ -3,8 +3,17 @@ import { NetworkProxy } from '../network-proxy/index.js';
|
|
|
3
3
|
import { Port80Handler } from '../../http/port80/port80-handler.js';
|
|
4
4
|
import type { ICertificateData } from '../../certificate/models/certificate-types.js';
|
|
5
5
|
import type { IConnectionRecord, ISmartProxyOptions } from './models/interfaces.js';
|
|
6
|
+
import type { IRouteConfig } from './models/route-types.js';
|
|
6
7
|
/**
|
|
7
8
|
* Manages NetworkProxy integration for TLS termination
|
|
9
|
+
*
|
|
10
|
+
* NetworkProxyBridge connects SmartProxy with NetworkProxy to handle TLS termination.
|
|
11
|
+
* It directly passes route configurations to NetworkProxy and manages the physical
|
|
12
|
+
* connection piping between SmartProxy and NetworkProxy for TLS termination.
|
|
13
|
+
*
|
|
14
|
+
* It is used by SmartProxy for routes that have:
|
|
15
|
+
* - TLS mode of 'terminate' or 'terminate-and-reencrypt'
|
|
16
|
+
* - Certificate set to 'auto' or custom certificate
|
|
8
17
|
*/
|
|
9
18
|
export declare class NetworkProxyBridge {
|
|
10
19
|
private settings;
|
|
@@ -43,20 +52,24 @@ export declare class NetworkProxyBridge {
|
|
|
43
52
|
* Stop NetworkProxy
|
|
44
53
|
*/
|
|
45
54
|
stop(): Promise<void>;
|
|
46
|
-
/**
|
|
47
|
-
* Register domains with Port80Handler
|
|
48
|
-
*/
|
|
49
|
-
registerDomainsWithPort80Handler(domains: string[]): void;
|
|
50
55
|
/**
|
|
51
56
|
* Forwards a TLS connection to a NetworkProxy for handling
|
|
52
57
|
*/
|
|
53
58
|
forwardToNetworkProxy(connectionId: string, socket: plugins.net.Socket, record: IConnectionRecord, initialData: Buffer, customProxyPort?: number, onError?: (reason: string) => void): void;
|
|
54
59
|
/**
|
|
55
|
-
* Synchronizes
|
|
60
|
+
* Synchronizes routes to NetworkProxy
|
|
61
|
+
*
|
|
62
|
+
* This method directly passes route configurations to NetworkProxy without any
|
|
63
|
+
* intermediate conversion. NetworkProxy natively understands route configurations.
|
|
64
|
+
*
|
|
65
|
+
* @param routes The route configurations to sync to NetworkProxy
|
|
56
66
|
*/
|
|
57
|
-
|
|
67
|
+
syncRoutesToNetworkProxy(routes: IRouteConfig[]): Promise<void>;
|
|
58
68
|
/**
|
|
59
69
|
* Request a certificate for a specific domain
|
|
70
|
+
*
|
|
71
|
+
* @param domain The domain to request a certificate for
|
|
72
|
+
* @param routeName Optional route name to associate with this certificate
|
|
60
73
|
*/
|
|
61
|
-
requestCertificate(domain: string): Promise<boolean>;
|
|
74
|
+
requestCertificate(domain: string, routeName?: string): Promise<boolean>;
|
|
62
75
|
}
|
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
import * as plugins from '../../plugins.js';
|
|
2
2
|
import { NetworkProxy } from '../network-proxy/index.js';
|
|
3
3
|
import { Port80Handler } from '../../http/port80/port80-handler.js';
|
|
4
|
-
import { Port80HandlerEvents } from '../../core/models/common-types.js';
|
|
5
4
|
import { subscribeToPort80Handler } from '../../core/utils/event-utils.js';
|
|
6
5
|
/**
|
|
7
6
|
* Manages NetworkProxy integration for TLS termination
|
|
7
|
+
*
|
|
8
|
+
* NetworkProxyBridge connects SmartProxy with NetworkProxy to handle TLS termination.
|
|
9
|
+
* It directly passes route configurations to NetworkProxy and manages the physical
|
|
10
|
+
* connection piping between SmartProxy and NetworkProxy for TLS termination.
|
|
11
|
+
*
|
|
12
|
+
* It is used by SmartProxy for routes that have:
|
|
13
|
+
* - TLS mode of 'terminate' or 'terminate-and-reencrypt'
|
|
14
|
+
* - Certificate set to 'auto' or custom certificate
|
|
8
15
|
*/
|
|
9
16
|
export class NetworkProxyBridge {
|
|
10
17
|
constructor(settings) {
|
|
@@ -33,7 +40,7 @@ export class NetworkProxyBridge {
|
|
|
33
40
|
*/
|
|
34
41
|
async initialize() {
|
|
35
42
|
if (!this.networkProxy && this.settings.useNetworkProxy && this.settings.useNetworkProxy.length > 0) {
|
|
36
|
-
// Configure NetworkProxy options based on
|
|
43
|
+
// Configure NetworkProxy options based on SmartProxy settings
|
|
37
44
|
const networkProxyOptions = {
|
|
38
45
|
port: this.settings.networkProxyPort,
|
|
39
46
|
portProxyIntegration: true,
|
|
@@ -46,8 +53,8 @@ export class NetworkProxyBridge {
|
|
|
46
53
|
if (this.port80Handler) {
|
|
47
54
|
this.networkProxy.setExternalPort80Handler(this.port80Handler);
|
|
48
55
|
}
|
|
49
|
-
//
|
|
50
|
-
await this.
|
|
56
|
+
// Apply route configurations to NetworkProxy
|
|
57
|
+
await this.syncRoutesToNetworkProxy(this.settings.routes || []);
|
|
51
58
|
}
|
|
52
59
|
}
|
|
53
60
|
/**
|
|
@@ -57,29 +64,8 @@ export class NetworkProxyBridge {
|
|
|
57
64
|
if (!this.networkProxy)
|
|
58
65
|
return;
|
|
59
66
|
console.log(`Received certificate for ${data.domain} from Port80Handler, updating NetworkProxy`);
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
const existingConfigs = this.networkProxy.getProxyConfigs()
|
|
63
|
-
.filter(config => config.hostName === data.domain);
|
|
64
|
-
if (existingConfigs.length > 0) {
|
|
65
|
-
// Update existing configs with new certificate
|
|
66
|
-
for (const config of existingConfigs) {
|
|
67
|
-
config.privateKey = data.privateKey;
|
|
68
|
-
config.publicKey = data.certificate;
|
|
69
|
-
}
|
|
70
|
-
// Apply updated configs
|
|
71
|
-
this.networkProxy.updateProxyConfigs(existingConfigs)
|
|
72
|
-
.then(() => console.log(`Updated certificate for ${data.domain} in NetworkProxy`))
|
|
73
|
-
.catch(err => console.log(`Error updating certificate in NetworkProxy: ${err}`));
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
// Create a new config for this domain
|
|
77
|
-
console.log(`No existing config found for ${data.domain}, creating new config in NetworkProxy`);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
catch (err) {
|
|
81
|
-
console.log(`Error handling certificate event: ${err}`);
|
|
82
|
-
}
|
|
67
|
+
// Apply certificate directly to NetworkProxy
|
|
68
|
+
this.networkProxy.updateCertificate(data.domain, data.certificate, data.privateKey);
|
|
83
69
|
}
|
|
84
70
|
/**
|
|
85
71
|
* Apply an external (static) certificate into NetworkProxy
|
|
@@ -89,7 +75,8 @@ export class NetworkProxyBridge {
|
|
|
89
75
|
console.log(`NetworkProxy not initialized: cannot apply external certificate for ${data.domain}`);
|
|
90
76
|
return;
|
|
91
77
|
}
|
|
92
|
-
|
|
78
|
+
// Apply certificate directly to NetworkProxy
|
|
79
|
+
this.networkProxy.updateCertificate(data.domain, data.certificate, data.privateKey);
|
|
93
80
|
}
|
|
94
81
|
/**
|
|
95
82
|
* Get the NetworkProxy instance
|
|
@@ -127,34 +114,6 @@ export class NetworkProxyBridge {
|
|
|
127
114
|
}
|
|
128
115
|
}
|
|
129
116
|
}
|
|
130
|
-
/**
|
|
131
|
-
* Register domains with Port80Handler
|
|
132
|
-
*/
|
|
133
|
-
registerDomainsWithPort80Handler(domains) {
|
|
134
|
-
if (!this.port80Handler) {
|
|
135
|
-
console.log('Cannot register domains - Port80Handler not initialized');
|
|
136
|
-
return;
|
|
137
|
-
}
|
|
138
|
-
for (const domain of domains) {
|
|
139
|
-
// Skip wildcards
|
|
140
|
-
if (domain.includes('*')) {
|
|
141
|
-
console.log(`Skipping wildcard domain for ACME: ${domain}`);
|
|
142
|
-
continue;
|
|
143
|
-
}
|
|
144
|
-
// Register the domain
|
|
145
|
-
try {
|
|
146
|
-
this.port80Handler.addDomain({
|
|
147
|
-
domainName: domain,
|
|
148
|
-
sslRedirect: true,
|
|
149
|
-
acmeMaintenance: true
|
|
150
|
-
});
|
|
151
|
-
console.log(`Registered domain with Port80Handler: ${domain}`);
|
|
152
|
-
}
|
|
153
|
-
catch (err) {
|
|
154
|
-
console.log(`Error registering domain ${domain} with Port80Handler: ${err}`);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
117
|
/**
|
|
159
118
|
* Forwards a TLS connection to a NetworkProxy for handling
|
|
160
119
|
*/
|
|
@@ -199,72 +158,46 @@ export class NetworkProxyBridge {
|
|
|
199
158
|
// Now set up bidirectional piping between client and NetworkProxy
|
|
200
159
|
socket.pipe(proxySocket);
|
|
201
160
|
proxySocket.pipe(socket);
|
|
202
|
-
// Update activity on data transfer (caller should handle this)
|
|
203
161
|
if (this.settings.enableDetailedLogging) {
|
|
204
162
|
console.log(`[${connectionId}] TLS connection successfully forwarded to NetworkProxy`);
|
|
205
163
|
}
|
|
206
164
|
});
|
|
207
165
|
}
|
|
208
166
|
/**
|
|
209
|
-
* Synchronizes
|
|
167
|
+
* Synchronizes routes to NetworkProxy
|
|
168
|
+
*
|
|
169
|
+
* This method directly passes route configurations to NetworkProxy without any
|
|
170
|
+
* intermediate conversion. NetworkProxy natively understands route configurations.
|
|
171
|
+
*
|
|
172
|
+
* @param routes The route configurations to sync to NetworkProxy
|
|
210
173
|
*/
|
|
211
|
-
async
|
|
174
|
+
async syncRoutesToNetworkProxy(routes) {
|
|
212
175
|
if (!this.networkProxy) {
|
|
213
176
|
console.log('Cannot sync configurations - NetworkProxy not initialized');
|
|
214
177
|
return;
|
|
215
178
|
}
|
|
216
179
|
try {
|
|
217
|
-
//
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
}
|
|
227
|
-
catch (certError) {
|
|
228
|
-
console.log(`Warning: Could not read default certificates: ${certError}`);
|
|
229
|
-
console.log('Using empty certificate placeholders - ACME will generate proper certificates if enabled');
|
|
230
|
-
// Use empty placeholders - NetworkProxy will use its internal defaults
|
|
231
|
-
// or ACME will generate proper ones if enabled
|
|
232
|
-
certPair = {
|
|
233
|
-
key: '',
|
|
234
|
-
cert: '',
|
|
235
|
-
};
|
|
236
|
-
}
|
|
237
|
-
// Convert domain configs to NetworkProxy configs
|
|
238
|
-
const proxyConfigs = this.networkProxy.convertSmartProxyConfigs(this.settings.domainConfigs, certPair);
|
|
239
|
-
// Log ACME-eligible domains
|
|
240
|
-
const acmeEnabled = !!this.settings.acme?.enabled;
|
|
241
|
-
if (acmeEnabled) {
|
|
242
|
-
const acmeEligibleDomains = proxyConfigs
|
|
243
|
-
.filter((config) => !config.hostName.includes('*')) // Exclude wildcards
|
|
244
|
-
.map((config) => config.hostName);
|
|
245
|
-
if (acmeEligibleDomains.length > 0) {
|
|
246
|
-
console.log(`Domains eligible for ACME certificates: ${acmeEligibleDomains.join(', ')}`);
|
|
247
|
-
// Register these domains with Port80Handler if available
|
|
248
|
-
if (this.port80Handler) {
|
|
249
|
-
this.registerDomainsWithPort80Handler(acmeEligibleDomains);
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
else {
|
|
253
|
-
console.log('No domains eligible for ACME certificates found in configuration');
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
// Update NetworkProxy with the converted configs
|
|
257
|
-
await this.networkProxy.updateProxyConfigs(proxyConfigs);
|
|
258
|
-
console.log(`Successfully synchronized ${proxyConfigs.length} domain configurations to NetworkProxy`);
|
|
180
|
+
// Filter only routes that are applicable to NetworkProxy (TLS termination)
|
|
181
|
+
const networkProxyRoutes = routes.filter(route => {
|
|
182
|
+
return (route.action.type === 'forward' &&
|
|
183
|
+
route.action.tls &&
|
|
184
|
+
(route.action.tls.mode === 'terminate' || route.action.tls.mode === 'terminate-and-reencrypt'));
|
|
185
|
+
});
|
|
186
|
+
// Pass routes directly to NetworkProxy
|
|
187
|
+
await this.networkProxy.updateRouteConfigs(networkProxyRoutes);
|
|
188
|
+
console.log(`Synced ${networkProxyRoutes.length} routes directly to NetworkProxy`);
|
|
259
189
|
}
|
|
260
190
|
catch (err) {
|
|
261
|
-
console.log(`
|
|
191
|
+
console.log(`Error syncing routes to NetworkProxy: ${err}`);
|
|
262
192
|
}
|
|
263
193
|
}
|
|
264
194
|
/**
|
|
265
195
|
* Request a certificate for a specific domain
|
|
196
|
+
*
|
|
197
|
+
* @param domain The domain to request a certificate for
|
|
198
|
+
* @param routeName Optional route name to associate with this certificate
|
|
266
199
|
*/
|
|
267
|
-
async requestCertificate(domain) {
|
|
200
|
+
async requestCertificate(domain, routeName) {
|
|
268
201
|
// Delegate to Port80Handler if available
|
|
269
202
|
if (this.port80Handler) {
|
|
270
203
|
try {
|
|
@@ -274,12 +207,20 @@ export class NetworkProxyBridge {
|
|
|
274
207
|
console.log(`Certificate already exists for ${domain}`);
|
|
275
208
|
return true;
|
|
276
209
|
}
|
|
277
|
-
//
|
|
278
|
-
|
|
210
|
+
// Build the domain options
|
|
211
|
+
const domainOptions = {
|
|
279
212
|
domainName: domain,
|
|
280
213
|
sslRedirect: true,
|
|
281
|
-
acmeMaintenance: true
|
|
282
|
-
}
|
|
214
|
+
acmeMaintenance: true,
|
|
215
|
+
};
|
|
216
|
+
// Add route reference if available
|
|
217
|
+
if (routeName) {
|
|
218
|
+
domainOptions.routeReference = {
|
|
219
|
+
routeName
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
// Register the domain for certificate issuance
|
|
223
|
+
this.port80Handler.addDomain(domainOptions);
|
|
283
224
|
console.log(`Domain ${domain} registered for certificate issuance`);
|
|
284
225
|
return true;
|
|
285
226
|
}
|
|
@@ -313,4 +254,4 @@ export class NetworkProxyBridge {
|
|
|
313
254
|
}
|
|
314
255
|
}
|
|
315
256
|
}
|
|
316
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay1wcm94eS1icmlkZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9wcm94aWVzL3NtYXJ0LXByb3h5L25ldHdvcmstcHJveHktYnJpZGdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUkzRTs7R0FFRztBQUNILE1BQU0sT0FBTyxrQkFBa0I7SUFJN0IsWUFBb0IsUUFBNEI7UUFBNUIsYUFBUSxHQUFSLFFBQVEsQ0FBb0I7UUFIeEMsaUJBQVksR0FBd0IsSUFBSSxDQUFDO1FBQ3pDLGtCQUFhLEdBQXlCLElBQUksQ0FBQztJQUVBLENBQUM7SUFFcEQ7O09BRUc7SUFDSSxnQkFBZ0IsQ0FBQyxPQUFzQjtRQUM1QyxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQztRQUU3QixrQ0FBa0M7UUFDbEMsd0JBQXdCLENBQUMsT0FBTyxFQUFFO1lBQ2hDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzNELG9CQUFvQixFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQzdELENBQUMsQ0FBQztRQUVILHdFQUF3RTtRQUN4RSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLCtD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
|
|
257
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay1wcm94eS1icmlkZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9wcm94aWVzL3NtYXJ0LXByb3h5L25ldHdvcmstcHJveHktYnJpZGdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUszRTs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxPQUFPLGtCQUFrQjtJQUk3QixZQUFvQixRQUE0QjtRQUE1QixhQUFRLEdBQVIsUUFBUSxDQUFvQjtRQUh4QyxpQkFBWSxHQUF3QixJQUFJLENBQUM7UUFDekMsa0JBQWEsR0FBeUIsSUFBSSxDQUFDO0lBRUEsQ0FBQztJQUVwRDs7T0FFRztJQUNJLGdCQUFnQixDQUFDLE9BQXNCO1FBQzVDLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDO1FBRTdCLGtDQUFrQztRQUNsQyx3QkFBd0IsQ0FBQyxPQUFPLEVBQUU7WUFDaEMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDM0Qsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDN0QsQ0FBQyxDQUFDO1FBRUgsd0VBQXdFO1FBQ3hFLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsK0NBQStDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsVUFBVTtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEcsOERBQThEO1lBQzlELE1BQU0sbUJBQW1CLEdBQVE7Z0JBQy9CLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFpQjtnQkFDckMsb0JBQW9CLEVBQUUsSUFBSTtnQkFDMUIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTTtnQkFDaEUsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsaUNBQWlDO2FBQ2pGLENBQUM7WUFFRixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksWUFBWSxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFFMUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQ0FBb0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7WUFFbEYscUNBQXFDO1lBQ3JDLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNqRSxDQUFDO1lBRUQsNkNBQTZDO1lBQzdDLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxzQkFBc0IsQ0FBQyxJQUFzQjtRQUNuRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVk7WUFBRSxPQUFPO1FBRS9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLElBQUksQ0FBQyxNQUFNLDRDQUE0QyxDQUFDLENBQUM7UUFFakcsNkNBQTZDO1FBQzdDLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRUQ7O09BRUc7SUFDSSx3QkFBd0IsQ0FBQyxJQUFzQjtRQUNwRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUVBQXVFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ2xHLE9BQU87UUFDVCxDQUFDO1FBRUQsNkNBQTZDO1FBQzdDLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRUQ7O09BRUc7SUFDSSxlQUFlO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxtQkFBbUI7UUFDeEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDO0lBQzNHLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxLQUFLO1FBQ2hCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoQyxPQUFPLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUNoRixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLElBQUk7UUFDZixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUM7Z0JBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO2dCQUN4QyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQy9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUNBQW1DLENBQUMsQ0FBQztZQUNuRCxDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDYixPQUFPLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ3JELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0kscUJBQXFCLENBQzFCLFlBQW9CLEVBQ3BCLE1BQTBCLEVBQzFCLE1BQXlCLEVBQ3pCLFdBQW1CLEVBQ25CLGVBQXdCLEVBQ3hCLE9BQWtDO1FBRWxDLHFDQUFxQztRQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sQ0FBQyxHQUFHLENBQ1QsSUFBSSxZQUFZLDREQUE0RCxDQUM3RSxDQUFDO1lBQ0YsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDWixPQUFPLENBQUMsK0JBQStCLENBQUMsQ0FBQztZQUMzQyxDQUFDO1lBQ0QsT0FBTztRQUNULENBQUM7UUFFRCwrRUFBK0U7UUFDL0UsTUFBTSxTQUFTLEdBQUcsZUFBZSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMxRSxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsQ0FBQyxxQ0FBcUM7UUFFcEUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDeEMsT0FBTyxDQUFDLEdBQUcsQ0FDVCxJQUFJLFlBQVksa0RBQWtELFNBQVMsSUFBSSxTQUFTLEVBQUUsQ0FDM0YsQ0FBQztRQUNKLENBQUM7UUFFRCwwQ0FBMEM7UUFDMUMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7WUFDdEMsSUFBSSxFQUFFLFNBQVM7WUFDZixJQUFJLEVBQUUsU0FBUztTQUNoQixDQUFDLENBQUM7UUFFSCwwQ0FBMEM7UUFDMUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUM7UUFDOUIsTUFBTSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN0QyxNQUFNLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBRWhDLHdCQUF3QjtRQUN4QixXQUFXLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzlCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxZQUFZLHVDQUF1QyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNsRixJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNaLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1lBQ3pDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILG9DQUFvQztRQUNwQyxXQUFXLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7WUFDN0IsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFxQixFQUFFLENBQUM7Z0JBQ3hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxZQUFZLGtDQUFrQyxTQUFTLElBQUksU0FBUyxFQUFFLENBQUMsQ0FBQztZQUMxRixDQUFDO1lBRUQsZ0VBQWdFO1lBQ2hFLFdBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFL0Isa0VBQWtFO1lBQ2xFLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDekIsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUV6QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDeEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLFlBQVkseURBQXlELENBQUMsQ0FBQztZQUN6RixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxNQUFzQjtRQUMxRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkRBQTJELENBQUMsQ0FBQztZQUN6RSxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILDJFQUEyRTtZQUMzRSxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQy9DLE9BQU8sQ0FDTCxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxTQUFTO29CQUMvQixLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUc7b0JBQ2hCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUsseUJBQXlCLENBQUMsQ0FDL0YsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBRUgsdUNBQXVDO1lBQ3ZDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQy9ELE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxrQkFBa0IsQ0FBQyxNQUFNLGtDQUFrQyxDQUFDLENBQUM7UUFDckYsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixPQUFPLENBQUMsR0FBRyxDQUFDLHlDQUF5QyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzlELENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsTUFBYyxFQUFFLFNBQWtCO1FBQ2hFLHlDQUF5QztRQUN6QyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUM7Z0JBQ0gsNENBQTRDO2dCQUM1QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDdkQsSUFBSSxJQUFJLEVBQUUsQ0FBQztvQkFDVCxPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO29CQUN4RCxPQUFPLElBQUksQ0FBQztnQkFDZCxDQUFDO2dCQUVELDJCQUEyQjtnQkFDM0IsTUFBTSxhQUFhLEdBQVE7b0JBQ3pCLFVBQVUsRUFBRSxNQUFNO29CQUNsQixXQUFXLEVBQUUsSUFBSTtvQkFDakIsZUFBZSxFQUFFLElBQUk7aUJBQ3RCLENBQUM7Z0JBRUYsbUNBQW1DO2dCQUNuQyxJQUFJLFNBQVMsRUFBRSxDQUFDO29CQUNkLGFBQWEsQ0FBQyxjQUFjLEdBQUc7d0JBQzdCLFNBQVM7cUJBQ1YsQ0FBQztnQkFDSixDQUFDO2dCQUVELCtDQUErQztnQkFDL0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBRTVDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxNQUFNLHNDQUFzQyxDQUFDLENBQUM7Z0JBQ3BFLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDcEQsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1FBQ0gsQ0FBQztRQUVELDhEQUE4RDtRQUM5RCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkRBQTJELENBQUMsQ0FBQztZQUN6RSxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDakMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1lBQ2hFLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsRSxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNYLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLE1BQU0seUJBQXlCLENBQUMsQ0FBQztZQUMxRSxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsTUFBTSxTQUFTLENBQUMsQ0FBQztZQUMxRCxDQUFDO1lBQ0QsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixPQUFPLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ3BELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7Q0FDRiJ9
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import * as plugins from '../../plugins.js';
|
|
2
|
+
import type { ISmartProxyOptions } from './models/interfaces.js';
|
|
3
|
+
import { RouteConnectionHandler } from './route-connection-handler.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
|
+
export declare class PortManager {
|
|
12
|
+
private servers;
|
|
13
|
+
private settings;
|
|
14
|
+
private routeConnectionHandler;
|
|
15
|
+
private isShuttingDown;
|
|
16
|
+
/**
|
|
17
|
+
* Create a new PortManager
|
|
18
|
+
*
|
|
19
|
+
* @param settings The SmartProxy settings
|
|
20
|
+
* @param routeConnectionHandler The handler for new connections
|
|
21
|
+
*/
|
|
22
|
+
constructor(settings: ISmartProxyOptions, routeConnectionHandler: RouteConnectionHandler);
|
|
23
|
+
/**
|
|
24
|
+
* Start listening on a specific port
|
|
25
|
+
*
|
|
26
|
+
* @param port The port number to listen on
|
|
27
|
+
* @returns Promise that resolves when the server is listening or rejects on error
|
|
28
|
+
*/
|
|
29
|
+
addPort(port: number): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Stop listening on a specific port
|
|
32
|
+
*
|
|
33
|
+
* @param port The port to stop listening on
|
|
34
|
+
* @returns Promise that resolves when the server is closed
|
|
35
|
+
*/
|
|
36
|
+
removePort(port: number): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Add multiple ports at once
|
|
39
|
+
*
|
|
40
|
+
* @param ports Array of ports to add
|
|
41
|
+
* @returns Promise that resolves when all servers are listening
|
|
42
|
+
*/
|
|
43
|
+
addPorts(ports: number[]): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Remove multiple ports at once
|
|
46
|
+
*
|
|
47
|
+
* @param ports Array of ports to remove
|
|
48
|
+
* @returns Promise that resolves when all servers are closed
|
|
49
|
+
*/
|
|
50
|
+
removePorts(ports: number[]): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* Update listening ports to match the provided list
|
|
53
|
+
*
|
|
54
|
+
* This will add any ports that aren't currently listening,
|
|
55
|
+
* and remove any ports that are no longer needed.
|
|
56
|
+
*
|
|
57
|
+
* @param ports Array of ports that should be listening
|
|
58
|
+
* @returns Promise that resolves when all operations are complete
|
|
59
|
+
*/
|
|
60
|
+
updatePorts(ports: number[]): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Get all ports that are currently listening
|
|
63
|
+
*
|
|
64
|
+
* @returns Array of port numbers
|
|
65
|
+
*/
|
|
66
|
+
getListeningPorts(): number[];
|
|
67
|
+
/**
|
|
68
|
+
* Mark the port manager as shutting down
|
|
69
|
+
*/
|
|
70
|
+
setShuttingDown(isShuttingDown: boolean): void;
|
|
71
|
+
/**
|
|
72
|
+
* Close all listening servers
|
|
73
|
+
*
|
|
74
|
+
* @returns Promise that resolves when all servers are closed
|
|
75
|
+
*/
|
|
76
|
+
closeAll(): Promise<void>;
|
|
77
|
+
/**
|
|
78
|
+
* Get all server instances (for testing or debugging)
|
|
79
|
+
*/
|
|
80
|
+
getServers(): Map<number, plugins.net.Server>;
|
|
81
|
+
}
|