@push.rocks/smartproxy 18.0.2 → 18.2.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/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/certificate/certificate-manager.d.ts +150 -0
- package/dist_ts/certificate/certificate-manager.js +505 -0
- package/dist_ts/certificate/events/simplified-events.d.ts +56 -0
- package/dist_ts/certificate/events/simplified-events.js +13 -0
- package/dist_ts/certificate/models/certificate-errors.d.ts +69 -0
- package/dist_ts/certificate/models/certificate-errors.js +141 -0
- package/dist_ts/certificate/models/certificate-strategy.d.ts +60 -0
- package/dist_ts/certificate/models/certificate-strategy.js +73 -0
- package/dist_ts/certificate/simplified-certificate-manager.d.ts +150 -0
- package/dist_ts/certificate/simplified-certificate-manager.js +501 -0
- package/dist_ts/http/index.d.ts +1 -9
- package/dist_ts/http/index.js +5 -11
- package/dist_ts/plugins.d.ts +3 -1
- package/dist_ts/plugins.js +4 -2
- package/dist_ts/proxies/network-proxy/network-proxy.js +3 -1
- package/dist_ts/proxies/network-proxy/simplified-certificate-bridge.d.ts +48 -0
- package/dist_ts/proxies/network-proxy/simplified-certificate-bridge.js +76 -0
- package/dist_ts/proxies/network-proxy/websocket-handler.js +41 -4
- package/dist_ts/proxies/smart-proxy/cert-store.d.ts +10 -0
- package/dist_ts/proxies/smart-proxy/cert-store.js +70 -0
- package/dist_ts/proxies/smart-proxy/certificate-manager.d.ts +116 -0
- package/dist_ts/proxies/smart-proxy/certificate-manager.js +401 -0
- package/dist_ts/proxies/smart-proxy/legacy-smart-proxy.d.ts +168 -0
- package/dist_ts/proxies/smart-proxy/legacy-smart-proxy.js +642 -0
- package/dist_ts/proxies/smart-proxy/models/route-types.d.ts +26 -0
- package/dist_ts/proxies/smart-proxy/models/route-types.js +1 -1
- package/dist_ts/proxies/smart-proxy/models/simplified-smartproxy-config.d.ts +65 -0
- package/dist_ts/proxies/smart-proxy/models/simplified-smartproxy-config.js +31 -0
- package/dist_ts/proxies/smart-proxy/models/smartproxy-options.d.ts +102 -0
- package/dist_ts/proxies/smart-proxy/models/smartproxy-options.js +73 -0
- package/dist_ts/proxies/smart-proxy/network-proxy-bridge.d.ts +10 -44
- package/dist_ts/proxies/smart-proxy/network-proxy-bridge.js +66 -202
- package/dist_ts/proxies/smart-proxy/route-connection-handler.d.ts +4 -0
- package/dist_ts/proxies/smart-proxy/route-connection-handler.js +62 -2
- package/dist_ts/proxies/smart-proxy/simplified-smart-proxy.d.ts +41 -0
- package/dist_ts/proxies/smart-proxy/simplified-smart-proxy.js +132 -0
- package/dist_ts/proxies/smart-proxy/smart-proxy.d.ts +18 -13
- package/dist_ts/proxies/smart-proxy/smart-proxy.js +79 -196
- package/package.json +7 -5
- package/readme.md +224 -10
- package/readme.plan.md +1405 -617
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/http/index.ts +5 -12
- package/ts/plugins.ts +4 -1
- package/ts/proxies/network-proxy/network-proxy.ts +3 -0
- package/ts/proxies/network-proxy/websocket-handler.ts +38 -3
- package/ts/proxies/smart-proxy/cert-store.ts +86 -0
- package/ts/proxies/smart-proxy/certificate-manager.ts +506 -0
- package/ts/proxies/smart-proxy/models/route-types.ts +33 -3
- package/ts/proxies/smart-proxy/network-proxy-bridge.ts +86 -239
- package/ts/proxies/smart-proxy/route-connection-handler.ts +74 -1
- package/ts/proxies/smart-proxy/smart-proxy.ts +105 -222
|
@@ -51,6 +51,23 @@ export interface IRouteTarget {
|
|
|
51
51
|
host: string | string[] | ((context: IRouteContext) => string | string[]);
|
|
52
52
|
port: number | 'preserve' | ((context: IRouteContext) => number);
|
|
53
53
|
}
|
|
54
|
+
/**
|
|
55
|
+
* ACME configuration for automatic certificate provisioning
|
|
56
|
+
*/
|
|
57
|
+
export interface IRouteAcme {
|
|
58
|
+
email: string;
|
|
59
|
+
useProduction?: boolean;
|
|
60
|
+
challengePort?: number;
|
|
61
|
+
renewBeforeDays?: number;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Static route handler response
|
|
65
|
+
*/
|
|
66
|
+
export interface IStaticResponse {
|
|
67
|
+
status: number;
|
|
68
|
+
headers?: Record<string, string>;
|
|
69
|
+
body: string | Buffer;
|
|
70
|
+
}
|
|
54
71
|
/**
|
|
55
72
|
* TLS configuration for route actions
|
|
56
73
|
*/
|
|
@@ -59,7 +76,15 @@ export interface IRouteTls {
|
|
|
59
76
|
certificate?: 'auto' | {
|
|
60
77
|
key: string;
|
|
61
78
|
cert: string;
|
|
79
|
+
ca?: string;
|
|
80
|
+
keyFile?: string;
|
|
81
|
+
certFile?: string;
|
|
62
82
|
};
|
|
83
|
+
acme?: IRouteAcme;
|
|
84
|
+
versions?: string[];
|
|
85
|
+
ciphers?: string;
|
|
86
|
+
honorCipherOrder?: boolean;
|
|
87
|
+
sessionTimeout?: number;
|
|
63
88
|
}
|
|
64
89
|
/**
|
|
65
90
|
* Redirect configuration for route actions
|
|
@@ -202,6 +227,7 @@ export interface IRouteAction {
|
|
|
202
227
|
};
|
|
203
228
|
forwardingEngine?: 'node' | 'nftables';
|
|
204
229
|
nftables?: INfTablesOptions;
|
|
230
|
+
handler?: (context: IRouteContext) => Promise<IStaticResponse>;
|
|
205
231
|
}
|
|
206
232
|
/**
|
|
207
233
|
* Rate limiting configuration
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import * as plugins from '../../../plugins.js';
|
|
2
2
|
// Configuration moved to models/interfaces.ts as ISmartProxyOptions
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtdHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9wcm94aWVzL3NtYXJ0LXByb3h5L21vZGVscy9yb3V0ZS10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHFCQUFxQixDQUFDO0FBeVgvQyxvRUFBb0UifQ==
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simplified SmartProxy configuration
|
|
3
|
+
*/
|
|
4
|
+
import type { CertProvider } from '../../../certificate/models/certificate-strategy.js';
|
|
5
|
+
import type { IRouteConfig } from './route-types.js';
|
|
6
|
+
/**
|
|
7
|
+
* ACME configuration - all certificate options in one place
|
|
8
|
+
*/
|
|
9
|
+
export interface AcmeConfig {
|
|
10
|
+
/**
|
|
11
|
+
* Email address for ACME account (required)
|
|
12
|
+
*/
|
|
13
|
+
email: string;
|
|
14
|
+
/**
|
|
15
|
+
* ACME server environment
|
|
16
|
+
*/
|
|
17
|
+
server: 'production' | 'staging';
|
|
18
|
+
/**
|
|
19
|
+
* Certificate provider function (required)
|
|
20
|
+
*/
|
|
21
|
+
certProvider: CertProvider;
|
|
22
|
+
/**
|
|
23
|
+
* Certificate storage directory
|
|
24
|
+
* @default './certs'
|
|
25
|
+
*/
|
|
26
|
+
storageDir?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Days before expiry to renew certificates
|
|
29
|
+
* @default 30
|
|
30
|
+
*/
|
|
31
|
+
renewBeforeDays?: number;
|
|
32
|
+
/**
|
|
33
|
+
* Enable ACME certificate management
|
|
34
|
+
* @default true
|
|
35
|
+
*/
|
|
36
|
+
enabled?: boolean;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Simplified SmartProxy options
|
|
40
|
+
*/
|
|
41
|
+
export interface SimplifiedSmartProxyOptions {
|
|
42
|
+
/**
|
|
43
|
+
* Port to listen on
|
|
44
|
+
* @default 443
|
|
45
|
+
*/
|
|
46
|
+
port?: number;
|
|
47
|
+
/**
|
|
48
|
+
* ACME/Certificate configuration
|
|
49
|
+
* Required if you want automatic certificate management
|
|
50
|
+
*/
|
|
51
|
+
acme?: AcmeConfig;
|
|
52
|
+
/**
|
|
53
|
+
* Route configurations
|
|
54
|
+
*/
|
|
55
|
+
routes: IRouteConfig[];
|
|
56
|
+
/**
|
|
57
|
+
* Log level
|
|
58
|
+
* @default 'info'
|
|
59
|
+
*/
|
|
60
|
+
logLevel?: 'debug' | 'info' | 'warn' | 'error';
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Helper to validate SmartProxy configuration
|
|
64
|
+
*/
|
|
65
|
+
export declare function validateSmartProxyConfig(options: SimplifiedSmartProxyOptions): void;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simplified SmartProxy configuration
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Helper to validate SmartProxy configuration
|
|
6
|
+
*/
|
|
7
|
+
export function validateSmartProxyConfig(options) {
|
|
8
|
+
// If ACME is enabled, certProvider is required
|
|
9
|
+
if (options.acme?.enabled !== false) {
|
|
10
|
+
if (!options.acme?.certProvider) {
|
|
11
|
+
throw new Error('ACME is enabled but no certProvider configured. Please provide acme.certProvider or disable ACME with acme.enabled = false');
|
|
12
|
+
}
|
|
13
|
+
if (!options.acme?.email) {
|
|
14
|
+
throw new Error('ACME is enabled but no email configured. Please provide acme.email');
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
// Validate routes
|
|
18
|
+
if (!options.routes || options.routes.length === 0) {
|
|
19
|
+
throw new Error('At least one route must be configured');
|
|
20
|
+
}
|
|
21
|
+
// Validate routes have required fields
|
|
22
|
+
for (const route of options.routes) {
|
|
23
|
+
if (!route.match) {
|
|
24
|
+
throw new Error('Route must have match criteria');
|
|
25
|
+
}
|
|
26
|
+
if (!route.action) {
|
|
27
|
+
throw new Error('Route must have action configuration');
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxpZmllZC1zbWFydHByb3h5LWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzL3Byb3hpZXMvc21hcnQtcHJveHkvbW9kZWxzL3NpbXBsaWZpZWQtc21hcnRwcm94eS1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUF1RUg7O0dBRUc7QUFDSCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsT0FBb0M7SUFDM0UsK0NBQStDO0lBQy9DLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLEtBQUssS0FBSyxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUM7WUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw0SEFBNEgsQ0FBQyxDQUFDO1FBQ2hKLENBQUM7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLG9FQUFvRSxDQUFDLENBQUM7UUFDeEYsQ0FBQztJQUNILENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbkQsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCx1Q0FBdUM7SUFDdkMsS0FBSyxNQUFNLEtBQUssSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1FBQzFELENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyJ9
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified SmartProxy configuration options
|
|
3
|
+
*/
|
|
4
|
+
import type { CertProvider } from '../../../certificate/models/certificate-strategy.js';
|
|
5
|
+
import type { IRouteConfig } from './route-types.js';
|
|
6
|
+
/**
|
|
7
|
+
* ACME configuration for automatic certificate management
|
|
8
|
+
*/
|
|
9
|
+
export interface IAcmeConfig {
|
|
10
|
+
/**
|
|
11
|
+
* Email address for ACME account (required if enabled)
|
|
12
|
+
*/
|
|
13
|
+
email: string;
|
|
14
|
+
/**
|
|
15
|
+
* ACME server environment
|
|
16
|
+
* @default 'production'
|
|
17
|
+
*/
|
|
18
|
+
server: 'production' | 'staging';
|
|
19
|
+
/**
|
|
20
|
+
* Certificate provider function (required if enabled)
|
|
21
|
+
* Returns strategy for each domain (acme-http, acme-dns, static, skip)
|
|
22
|
+
*/
|
|
23
|
+
certProvider: CertProvider;
|
|
24
|
+
/**
|
|
25
|
+
* Certificate storage directory
|
|
26
|
+
* @default './certs'
|
|
27
|
+
*/
|
|
28
|
+
storageDir?: string;
|
|
29
|
+
/**
|
|
30
|
+
* Days before expiry to renew certificates
|
|
31
|
+
* @default 30
|
|
32
|
+
*/
|
|
33
|
+
renewBeforeDays?: number;
|
|
34
|
+
/**
|
|
35
|
+
* Enable automatic certificate management
|
|
36
|
+
* @default true
|
|
37
|
+
*/
|
|
38
|
+
enabled?: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Port for ACME HTTP-01 challenges
|
|
41
|
+
* @default 80
|
|
42
|
+
*/
|
|
43
|
+
port?: number;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Unified SmartProxy options
|
|
47
|
+
*/
|
|
48
|
+
export interface ISmartProxyOptions {
|
|
49
|
+
/**
|
|
50
|
+
* HTTPS port to listen on
|
|
51
|
+
* @default 443
|
|
52
|
+
*/
|
|
53
|
+
port?: number;
|
|
54
|
+
/**
|
|
55
|
+
* HTTP port to listen on (for redirects and ACME challenges)
|
|
56
|
+
* @default 80
|
|
57
|
+
*/
|
|
58
|
+
httpPort?: number;
|
|
59
|
+
/**
|
|
60
|
+
* Route configurations - the core of SmartProxy
|
|
61
|
+
* Each route defines matching criteria and actions
|
|
62
|
+
*/
|
|
63
|
+
routes: IRouteConfig[];
|
|
64
|
+
/**
|
|
65
|
+
* ACME/Certificate configuration
|
|
66
|
+
* Required for automatic certificate provisioning
|
|
67
|
+
* If not provided or disabled, only static certificates will work
|
|
68
|
+
*/
|
|
69
|
+
acme?: IAcmeConfig;
|
|
70
|
+
/**
|
|
71
|
+
* Certificate provider function for backward compatibility
|
|
72
|
+
* @deprecated Use acme.certProvider instead
|
|
73
|
+
*/
|
|
74
|
+
certProviderFunction?: CertProvider;
|
|
75
|
+
/**
|
|
76
|
+
* Log level for debugging
|
|
77
|
+
* @default 'info'
|
|
78
|
+
*/
|
|
79
|
+
logLevel?: 'debug' | 'info' | 'warn' | 'error';
|
|
80
|
+
/**
|
|
81
|
+
* Enable NFTables integration for advanced networking
|
|
82
|
+
* @default false
|
|
83
|
+
*/
|
|
84
|
+
enableNFTables?: boolean;
|
|
85
|
+
/**
|
|
86
|
+
* Preserve client source IP when forwarding
|
|
87
|
+
* @default false
|
|
88
|
+
*/
|
|
89
|
+
preserveSourceIP?: boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Default forwarding target when not specified in routes
|
|
92
|
+
* @deprecated Define targets in individual routes
|
|
93
|
+
*/
|
|
94
|
+
defaultTarget?: {
|
|
95
|
+
host: string;
|
|
96
|
+
port: number;
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Validate SmartProxy configuration
|
|
101
|
+
*/
|
|
102
|
+
export declare function validateSmartProxyConfig(options: ISmartProxyOptions): void;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified SmartProxy configuration options
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Validate SmartProxy configuration
|
|
6
|
+
*/
|
|
7
|
+
export function validateSmartProxyConfig(options) {
|
|
8
|
+
// If ACME is enabled, certProvider is required
|
|
9
|
+
if (options.acme?.enabled !== false) {
|
|
10
|
+
if (!options.acme?.certProvider && !options.certProviderFunction) {
|
|
11
|
+
throw new Error('Certificate management is enabled but no certProvider configured. ' +
|
|
12
|
+
'Please provide acme.certProvider or disable ACME with acme.enabled = false');
|
|
13
|
+
}
|
|
14
|
+
if (!options.acme?.email) {
|
|
15
|
+
throw new Error('Certificate management is enabled but no email configured. ' +
|
|
16
|
+
'Please provide acme.email for ACME account registration');
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
// Validate routes
|
|
20
|
+
if (!options.routes || options.routes.length === 0) {
|
|
21
|
+
throw new Error('At least one route must be configured');
|
|
22
|
+
}
|
|
23
|
+
// Validate each route
|
|
24
|
+
for (const route of options.routes) {
|
|
25
|
+
if (!route.match) {
|
|
26
|
+
throw new Error(`Route '${route.name || 'unnamed'}' must have match criteria`);
|
|
27
|
+
}
|
|
28
|
+
if (!route.action) {
|
|
29
|
+
throw new Error(`Route '${route.name || 'unnamed'}' must have action configuration`);
|
|
30
|
+
}
|
|
31
|
+
// Validate ports if specified
|
|
32
|
+
if (route.match.ports) {
|
|
33
|
+
const validatePort = (port) => {
|
|
34
|
+
if (port < 1 || port > 65535) {
|
|
35
|
+
throw new Error(`Invalid port number ${port} in route '${route.name || 'unnamed'}'`);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
// Handle different port specification formats
|
|
39
|
+
const ports = route.match.ports;
|
|
40
|
+
if (typeof ports === 'number') {
|
|
41
|
+
validatePort(ports);
|
|
42
|
+
}
|
|
43
|
+
else if (Array.isArray(ports)) {
|
|
44
|
+
for (const port of ports) {
|
|
45
|
+
if (typeof port === 'number') {
|
|
46
|
+
validatePort(port);
|
|
47
|
+
}
|
|
48
|
+
else if (typeof port === 'object' && port.from && port.to) {
|
|
49
|
+
validatePort(port.from);
|
|
50
|
+
validatePort(port.to);
|
|
51
|
+
if (port.from > port.to) {
|
|
52
|
+
throw new Error(`Invalid port range ${port.from}-${port.to} in route '${route.name || 'unnamed'}'`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
throw new Error(`Invalid port specification in route '${route.name || 'unnamed'}'`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
throw new Error(`Invalid ports configuration in route '${route.name || 'unnamed'}'`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Warn about deprecated options
|
|
66
|
+
if (options.certProviderFunction) {
|
|
67
|
+
console.warn('Warning: certProviderFunction is deprecated. Use acme.certProvider instead');
|
|
68
|
+
}
|
|
69
|
+
if (options.defaultTarget) {
|
|
70
|
+
console.warn('Warning: defaultTarget is deprecated. Define targets in individual routes instead');
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRwcm94eS1vcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHMvcHJveGllcy9zbWFydC1wcm94eS9tb2RlbHMvc21hcnRwcm94eS1vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBa0hIOztHQUVHO0FBQ0gsTUFBTSxVQUFVLHdCQUF3QixDQUFDLE9BQTJCO0lBQ2xFLCtDQUErQztJQUMvQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLFlBQVksSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQ2pFLE1BQU0sSUFBSSxLQUFLLENBQ2Isb0VBQW9FO2dCQUNwRSw0RUFBNEUsQ0FDN0UsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksS0FBSyxDQUNiLDZEQUE2RDtnQkFDN0QseURBQXlELENBQzFELENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNuRCxNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELHNCQUFzQjtJQUN0QixLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLENBQUMsSUFBSSxJQUFJLFNBQVMsNEJBQTRCLENBQUMsQ0FBQztRQUNqRixDQUFDO1FBRUQs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
|
|
@@ -1,49 +1,35 @@
|
|
|
1
1
|
import * as plugins from '../../plugins.js';
|
|
2
2
|
import { NetworkProxy } from '../network-proxy/index.js';
|
|
3
|
-
import { Port80Handler } from '../../http/port80/port80-handler.js';
|
|
4
|
-
import type { ICertificateData } from '../../certificate/models/certificate-types.js';
|
|
5
3
|
import type { IConnectionRecord, ISmartProxyOptions } from './models/interfaces.js';
|
|
6
4
|
import type { IRouteConfig } from './models/route-types.js';
|
|
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
|
|
17
|
-
*/
|
|
18
5
|
export declare class NetworkProxyBridge {
|
|
19
6
|
private settings;
|
|
20
7
|
private networkProxy;
|
|
21
|
-
private port80Handler;
|
|
22
8
|
constructor(settings: ISmartProxyOptions);
|
|
23
9
|
/**
|
|
24
|
-
*
|
|
10
|
+
* Get the NetworkProxy instance
|
|
25
11
|
*/
|
|
26
|
-
|
|
12
|
+
getNetworkProxy(): NetworkProxy | null;
|
|
27
13
|
/**
|
|
28
14
|
* Initialize NetworkProxy instance
|
|
29
15
|
*/
|
|
30
16
|
initialize(): Promise<void>;
|
|
31
17
|
/**
|
|
32
|
-
*
|
|
18
|
+
* Sync routes to NetworkProxy
|
|
33
19
|
*/
|
|
34
|
-
|
|
20
|
+
syncRoutesToNetworkProxy(routes: IRouteConfig[]): Promise<void>;
|
|
35
21
|
/**
|
|
36
|
-
*
|
|
22
|
+
* Convert route to NetworkProxy configuration
|
|
37
23
|
*/
|
|
38
|
-
|
|
24
|
+
private routeToNetworkProxyConfig;
|
|
39
25
|
/**
|
|
40
|
-
*
|
|
26
|
+
* Check if connection should use NetworkProxy
|
|
41
27
|
*/
|
|
42
|
-
|
|
28
|
+
shouldUseNetworkProxy(connection: IConnectionRecord, routeMatch: any): boolean;
|
|
43
29
|
/**
|
|
44
|
-
*
|
|
30
|
+
* Forward connection to NetworkProxy
|
|
45
31
|
*/
|
|
46
|
-
|
|
32
|
+
forwardToNetworkProxy(connectionId: string, socket: plugins.net.Socket, record: IConnectionRecord, initialChunk: Buffer, networkProxyPort: number, cleanupCallback: (reason: string) => void): Promise<void>;
|
|
47
33
|
/**
|
|
48
34
|
* Start NetworkProxy
|
|
49
35
|
*/
|
|
@@ -52,24 +38,4 @@ export declare class NetworkProxyBridge {
|
|
|
52
38
|
* Stop NetworkProxy
|
|
53
39
|
*/
|
|
54
40
|
stop(): Promise<void>;
|
|
55
|
-
/**
|
|
56
|
-
* Forwards a TLS connection to a NetworkProxy for handling
|
|
57
|
-
*/
|
|
58
|
-
forwardToNetworkProxy(connectionId: string, socket: plugins.net.Socket, record: IConnectionRecord, initialData: Buffer, customProxyPort?: number, onError?: (reason: string) => void): void;
|
|
59
|
-
/**
|
|
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
|
|
66
|
-
*/
|
|
67
|
-
syncRoutesToNetworkProxy(routes: IRouteConfig[]): Promise<void>;
|
|
68
|
-
/**
|
|
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
|
|
73
|
-
*/
|
|
74
|
-
requestCertificate(domain: string, routeName?: string): Promise<boolean>;
|
|
75
41
|
}
|