@push.rocks/smartproxy 16.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/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/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 +3 -5
- package/dist_ts/proxies/smart-proxy/models/route-types.d.ts +56 -3
- package/dist_ts/proxies/smart-proxy/network-proxy-bridge.d.ts +4 -57
- package/dist_ts/proxies/smart-proxy/network-proxy-bridge.js +19 -228
- 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 +5 -0
- package/dist_ts/proxies/smart-proxy/route-connection-handler.js +131 -15
- package/dist_ts/proxies/smart-proxy/route-helpers/index.d.ts +3 -1
- package/dist_ts/proxies/smart-proxy/route-helpers/index.js +5 -3
- package/dist_ts/proxies/smart-proxy/route-helpers.d.ts +5 -178
- package/dist_ts/proxies/smart-proxy/route-helpers.js +8 -296
- package/dist_ts/proxies/smart-proxy/route-manager.d.ts +11 -2
- package/dist_ts/proxies/smart-proxy/route-manager.js +79 -10
- package/dist_ts/proxies/smart-proxy/smart-proxy.d.ts +29 -2
- package/dist_ts/proxies/smart-proxy/smart-proxy.js +48 -43
- package/dist_ts/proxies/smart-proxy/utils/route-helpers.d.ts +67 -1
- package/dist_ts/proxies/smart-proxy/utils/route-helpers.js +120 -1
- package/dist_ts/proxies/smart-proxy/utils/route-validators.d.ts +3 -3
- package/dist_ts/proxies/smart-proxy/utils/route-validators.js +27 -5
- package/package.json +1 -1
- package/readme.md +102 -14
- package/readme.plan.md +103 -168
- package/ts/00_commitinfo_data.ts +1 -1
- 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/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 +7 -4
- package/ts/proxies/smart-proxy/models/route-types.ts +78 -10
- package/ts/proxies/smart-proxy/network-proxy-bridge.ts +20 -257
- package/ts/proxies/smart-proxy/port-manager.ts +195 -0
- package/ts/proxies/smart-proxy/route-connection-handler.ts +156 -21
- package/ts/proxies/smart-proxy/route-manager.ts +98 -14
- package/ts/proxies/smart-proxy/smart-proxy.ts +56 -55
- package/ts/proxies/smart-proxy/utils/route-helpers.ts +167 -1
- package/ts/proxies/smart-proxy/utils/route-validators.ts +24 -5
- package/ts/proxies/smart-proxy/domain-config-manager.ts.bak +0 -441
- package/ts/proxies/smart-proxy/route-helpers/index.ts +0 -9
- package/ts/proxies/smart-proxy/route-helpers.ts +0 -498
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import * as plugins from '../../../plugins.js';
|
|
2
2
|
import type { IAcmeOptions } from '../../../certificate/models/certificate-types.js';
|
|
3
|
+
import type { IRouteConfig } from '../../smart-proxy/models/route-types.js';
|
|
4
|
+
import type { IRouteContext } from '../../../core/models/route-context.js';
|
|
3
5
|
/**
|
|
4
6
|
* Configuration options for NetworkProxy
|
|
5
7
|
*/
|
|
@@ -19,7 +21,10 @@ export interface INetworkProxyOptions {
|
|
|
19
21
|
portProxyIntegration?: boolean;
|
|
20
22
|
useExternalPort80Handler?: boolean;
|
|
21
23
|
backendProtocol?: 'http1' | 'http2';
|
|
24
|
+
functionCacheSize?: number;
|
|
25
|
+
functionCacheTtl?: number;
|
|
22
26
|
acme?: IAcmeOptions;
|
|
27
|
+
routes?: IRouteConfig[];
|
|
23
28
|
}
|
|
24
29
|
/**
|
|
25
30
|
* Interface for a certificate entry in the cache
|
|
@@ -30,19 +35,31 @@ export interface ICertificateEntry {
|
|
|
30
35
|
expires?: Date;
|
|
31
36
|
}
|
|
32
37
|
/**
|
|
33
|
-
*
|
|
38
|
+
* @deprecated Use IRouteConfig instead. This interface will be removed in a future release.
|
|
39
|
+
*
|
|
40
|
+
* IMPORTANT: This is a legacy interface maintained only for backward compatibility.
|
|
41
|
+
* New code should use IRouteConfig for all configuration purposes.
|
|
42
|
+
*
|
|
43
|
+
* @see IRouteConfig for the modern, recommended configuration format
|
|
34
44
|
*/
|
|
35
45
|
export interface IReverseProxyConfig {
|
|
46
|
+
/** Target hostnames/IPs to proxy requests to */
|
|
36
47
|
destinationIps: string[];
|
|
48
|
+
/** Target ports to proxy requests to */
|
|
37
49
|
destinationPorts: number[];
|
|
50
|
+
/** Hostname to match for routing */
|
|
38
51
|
hostName: string;
|
|
52
|
+
/** SSL private key for this host (PEM format) */
|
|
39
53
|
privateKey: string;
|
|
54
|
+
/** SSL public key/certificate for this host (PEM format) */
|
|
40
55
|
publicKey: string;
|
|
56
|
+
/** Basic authentication configuration */
|
|
41
57
|
authentication?: {
|
|
42
58
|
type: 'Basic';
|
|
43
59
|
user: string;
|
|
44
60
|
pass: string;
|
|
45
61
|
};
|
|
62
|
+
/** Whether to rewrite the Host header to match the target */
|
|
46
63
|
rewriteHostHeader?: boolean;
|
|
47
64
|
/**
|
|
48
65
|
* Protocol to use when proxying to this backend: 'http1' or 'http2'.
|
|
@@ -50,6 +67,61 @@ export interface IReverseProxyConfig {
|
|
|
50
67
|
*/
|
|
51
68
|
backendProtocol?: 'http1' | 'http2';
|
|
52
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Convert a legacy IReverseProxyConfig to the modern IRouteConfig format
|
|
72
|
+
*
|
|
73
|
+
* @deprecated This function is maintained for backward compatibility.
|
|
74
|
+
* New code should create IRouteConfig objects directly.
|
|
75
|
+
*
|
|
76
|
+
* @param legacyConfig The legacy configuration to convert
|
|
77
|
+
* @param proxyPort The port the proxy listens on
|
|
78
|
+
* @returns A modern route configuration equivalent to the legacy config
|
|
79
|
+
*/
|
|
80
|
+
export declare function convertLegacyConfigToRouteConfig(legacyConfig: IReverseProxyConfig, proxyPort: number): IRouteConfig;
|
|
81
|
+
/**
|
|
82
|
+
* Route manager for NetworkProxy
|
|
83
|
+
* Handles route matching and configuration
|
|
84
|
+
*/
|
|
85
|
+
export declare class RouteManager {
|
|
86
|
+
private routes;
|
|
87
|
+
private logger;
|
|
88
|
+
constructor(logger: ILogger);
|
|
89
|
+
/**
|
|
90
|
+
* Update the routes configuration
|
|
91
|
+
*/
|
|
92
|
+
updateRoutes(routes: IRouteConfig[]): void;
|
|
93
|
+
/**
|
|
94
|
+
* Get all routes
|
|
95
|
+
*/
|
|
96
|
+
getRoutes(): IRouteConfig[];
|
|
97
|
+
/**
|
|
98
|
+
* Find the first matching route for a context
|
|
99
|
+
*/
|
|
100
|
+
findMatchingRoute(context: IRouteContext): IRouteConfig | null;
|
|
101
|
+
/**
|
|
102
|
+
* Check if a route matches the given context
|
|
103
|
+
*/
|
|
104
|
+
private matchesRoute;
|
|
105
|
+
/**
|
|
106
|
+
* Match a domain pattern against a domain
|
|
107
|
+
*/
|
|
108
|
+
private matchDomain;
|
|
109
|
+
/**
|
|
110
|
+
* Match a path pattern against a path
|
|
111
|
+
*/
|
|
112
|
+
private matchPath;
|
|
113
|
+
/**
|
|
114
|
+
* Match an IP pattern against an IP
|
|
115
|
+
* Supports exact matches, wildcard patterns, and CIDR notation
|
|
116
|
+
*/
|
|
117
|
+
private matchIp;
|
|
118
|
+
/**
|
|
119
|
+
* Convert an IP address to its binary representation
|
|
120
|
+
* @param ip The IP address to convert
|
|
121
|
+
* @returns Binary string representation or null if invalid
|
|
122
|
+
*/
|
|
123
|
+
private ipToBinary;
|
|
124
|
+
}
|
|
53
125
|
/**
|
|
54
126
|
* Interface for connection tracking in the pool
|
|
55
127
|
*/
|
|
@@ -1,4 +1,245 @@
|
|
|
1
1
|
import * as plugins from '../../../plugins.js';
|
|
2
|
+
/**
|
|
3
|
+
* Convert a legacy IReverseProxyConfig to the modern IRouteConfig format
|
|
4
|
+
*
|
|
5
|
+
* @deprecated This function is maintained for backward compatibility.
|
|
6
|
+
* New code should create IRouteConfig objects directly.
|
|
7
|
+
*
|
|
8
|
+
* @param legacyConfig The legacy configuration to convert
|
|
9
|
+
* @param proxyPort The port the proxy listens on
|
|
10
|
+
* @returns A modern route configuration equivalent to the legacy config
|
|
11
|
+
*/
|
|
12
|
+
export function convertLegacyConfigToRouteConfig(legacyConfig, proxyPort) {
|
|
13
|
+
// Create basic route configuration
|
|
14
|
+
const routeConfig = {
|
|
15
|
+
// Match properties
|
|
16
|
+
match: {
|
|
17
|
+
ports: proxyPort,
|
|
18
|
+
domains: legacyConfig.hostName
|
|
19
|
+
},
|
|
20
|
+
// Action properties
|
|
21
|
+
action: {
|
|
22
|
+
type: 'forward',
|
|
23
|
+
target: {
|
|
24
|
+
host: legacyConfig.destinationIps,
|
|
25
|
+
port: legacyConfig.destinationPorts[0]
|
|
26
|
+
},
|
|
27
|
+
// TLS mode is always 'terminate' for legacy configs
|
|
28
|
+
tls: {
|
|
29
|
+
mode: 'terminate',
|
|
30
|
+
certificate: {
|
|
31
|
+
key: legacyConfig.privateKey,
|
|
32
|
+
cert: legacyConfig.publicKey
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
// Advanced options
|
|
36
|
+
advanced: {
|
|
37
|
+
// Rewrite host header if specified
|
|
38
|
+
headers: legacyConfig.rewriteHostHeader ? { 'host': '{domain}' } : {}
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
// Metadata
|
|
42
|
+
name: `Legacy Config - ${legacyConfig.hostName}`,
|
|
43
|
+
priority: 0, // Default priority
|
|
44
|
+
enabled: true
|
|
45
|
+
};
|
|
46
|
+
// Add authentication if present
|
|
47
|
+
if (legacyConfig.authentication) {
|
|
48
|
+
routeConfig.action.security = {
|
|
49
|
+
authentication: {
|
|
50
|
+
type: 'basic',
|
|
51
|
+
credentials: [{
|
|
52
|
+
username: legacyConfig.authentication.user,
|
|
53
|
+
password: legacyConfig.authentication.pass
|
|
54
|
+
}]
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
// Add backend protocol if specified
|
|
59
|
+
if (legacyConfig.backendProtocol) {
|
|
60
|
+
if (!routeConfig.action.options) {
|
|
61
|
+
routeConfig.action.options = {};
|
|
62
|
+
}
|
|
63
|
+
routeConfig.action.options.backendProtocol = legacyConfig.backendProtocol;
|
|
64
|
+
}
|
|
65
|
+
return routeConfig;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Route manager for NetworkProxy
|
|
69
|
+
* Handles route matching and configuration
|
|
70
|
+
*/
|
|
71
|
+
export class RouteManager {
|
|
72
|
+
constructor(logger) {
|
|
73
|
+
this.routes = [];
|
|
74
|
+
this.logger = logger;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Update the routes configuration
|
|
78
|
+
*/
|
|
79
|
+
updateRoutes(routes) {
|
|
80
|
+
// Sort routes by priority (higher first)
|
|
81
|
+
this.routes = [...routes].sort((a, b) => {
|
|
82
|
+
const priorityA = a.priority ?? 0;
|
|
83
|
+
const priorityB = b.priority ?? 0;
|
|
84
|
+
return priorityB - priorityA;
|
|
85
|
+
});
|
|
86
|
+
this.logger.info(`Updated RouteManager with ${this.routes.length} routes`);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Get all routes
|
|
90
|
+
*/
|
|
91
|
+
getRoutes() {
|
|
92
|
+
return [...this.routes];
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Find the first matching route for a context
|
|
96
|
+
*/
|
|
97
|
+
findMatchingRoute(context) {
|
|
98
|
+
for (const route of this.routes) {
|
|
99
|
+
if (this.matchesRoute(route, context)) {
|
|
100
|
+
return route;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Check if a route matches the given context
|
|
107
|
+
*/
|
|
108
|
+
matchesRoute(route, context) {
|
|
109
|
+
// Skip disabled routes
|
|
110
|
+
if (route.enabled === false) {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
// Check domain match if specified
|
|
114
|
+
if (route.match.domains && context.domain) {
|
|
115
|
+
const domains = Array.isArray(route.match.domains)
|
|
116
|
+
? route.match.domains
|
|
117
|
+
: [route.match.domains];
|
|
118
|
+
if (!domains.some(domainPattern => this.matchDomain(domainPattern, context.domain))) {
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// Check path match if specified
|
|
123
|
+
if (route.match.path && context.path) {
|
|
124
|
+
if (!this.matchPath(route.match.path, context.path)) {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// Check client IP match if specified
|
|
129
|
+
if (route.match.clientIp && context.clientIp) {
|
|
130
|
+
if (!route.match.clientIp.some(ip => this.matchIp(ip, context.clientIp))) {
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// Check TLS version match if specified
|
|
135
|
+
if (route.match.tlsVersion && context.tlsVersion) {
|
|
136
|
+
if (!route.match.tlsVersion.includes(context.tlsVersion)) {
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// All criteria matched
|
|
141
|
+
return true;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Match a domain pattern against a domain
|
|
145
|
+
*/
|
|
146
|
+
matchDomain(pattern, domain) {
|
|
147
|
+
if (pattern === domain) {
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
if (pattern.includes('*')) {
|
|
151
|
+
const regexPattern = pattern
|
|
152
|
+
.replace(/\./g, '\\.')
|
|
153
|
+
.replace(/\*/g, '.*');
|
|
154
|
+
const regex = new RegExp(`^${regexPattern}$`, 'i');
|
|
155
|
+
return regex.test(domain);
|
|
156
|
+
}
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Match a path pattern against a path
|
|
161
|
+
*/
|
|
162
|
+
matchPath(pattern, path) {
|
|
163
|
+
if (pattern === path) {
|
|
164
|
+
return true;
|
|
165
|
+
}
|
|
166
|
+
if (pattern.endsWith('*')) {
|
|
167
|
+
const prefix = pattern.slice(0, -1);
|
|
168
|
+
return path.startsWith(prefix);
|
|
169
|
+
}
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Match an IP pattern against an IP
|
|
174
|
+
* Supports exact matches, wildcard patterns, and CIDR notation
|
|
175
|
+
*/
|
|
176
|
+
matchIp(pattern, ip) {
|
|
177
|
+
// Exact match
|
|
178
|
+
if (pattern === ip) {
|
|
179
|
+
return true;
|
|
180
|
+
}
|
|
181
|
+
// Wildcard matching (e.g., 192.168.0.*)
|
|
182
|
+
if (pattern.includes('*')) {
|
|
183
|
+
const regexPattern = pattern
|
|
184
|
+
.replace(/\./g, '\\.')
|
|
185
|
+
.replace(/\*/g, '.*');
|
|
186
|
+
const regex = new RegExp(`^${regexPattern}$`);
|
|
187
|
+
return regex.test(ip);
|
|
188
|
+
}
|
|
189
|
+
// CIDR matching (e.g., 192.168.0.0/24)
|
|
190
|
+
if (pattern.includes('/')) {
|
|
191
|
+
try {
|
|
192
|
+
const [subnet, bits] = pattern.split('/');
|
|
193
|
+
// Convert IP addresses to numeric format for comparison
|
|
194
|
+
const ipBinary = this.ipToBinary(ip);
|
|
195
|
+
const subnetBinary = this.ipToBinary(subnet);
|
|
196
|
+
if (!ipBinary || !subnetBinary) {
|
|
197
|
+
return false;
|
|
198
|
+
}
|
|
199
|
+
// Get the subnet mask from CIDR notation
|
|
200
|
+
const mask = parseInt(bits, 10);
|
|
201
|
+
if (isNaN(mask) || mask < 0 || mask > 32) {
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
204
|
+
// Check if the first 'mask' bits match between IP and subnet
|
|
205
|
+
return ipBinary.slice(0, mask) === subnetBinary.slice(0, mask);
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
// If we encounter any error during CIDR matching, return false
|
|
209
|
+
return false;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return false;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Convert an IP address to its binary representation
|
|
216
|
+
* @param ip The IP address to convert
|
|
217
|
+
* @returns Binary string representation or null if invalid
|
|
218
|
+
*/
|
|
219
|
+
ipToBinary(ip) {
|
|
220
|
+
// Handle IPv4 addresses only for now
|
|
221
|
+
const parts = ip.split('.');
|
|
222
|
+
// Validate IP format
|
|
223
|
+
if (parts.length !== 4) {
|
|
224
|
+
return null;
|
|
225
|
+
}
|
|
226
|
+
// Convert each octet to 8-bit binary and concatenate
|
|
227
|
+
try {
|
|
228
|
+
return parts
|
|
229
|
+
.map(part => {
|
|
230
|
+
const num = parseInt(part, 10);
|
|
231
|
+
if (isNaN(num) || num < 0 || num > 255) {
|
|
232
|
+
throw new Error('Invalid IP octet');
|
|
233
|
+
}
|
|
234
|
+
return num.toString(2).padStart(8, '0');
|
|
235
|
+
})
|
|
236
|
+
.join('');
|
|
237
|
+
}
|
|
238
|
+
catch (error) {
|
|
239
|
+
return null;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
2
243
|
/**
|
|
3
244
|
* Creates a logger based on the specified log level
|
|
4
245
|
*/
|
|
@@ -32,4 +273,4 @@ export function createLogger(logLevel = 'info') {
|
|
|
32
273
|
}
|
|
33
274
|
};
|
|
34
275
|
}
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
276
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9wcm94aWVzL25ldHdvcmstcHJveHkvbW9kZWxzL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0scUJBQXFCLENBQUM7QUF5Ri9DOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxnQ0FBZ0MsQ0FDOUMsWUFBaUMsRUFDakMsU0FBaUI7SUFFakIsbUNBQW1DO0lBQ25DLE1BQU0sV0FBVyxHQUFpQjtRQUNoQyxtQkFBbUI7UUFDbkIsS0FBSyxFQUFFO1lBQ0wsS0FBSyxFQUFFLFNBQVM7WUFDaEIsT0FBTyxFQUFFLFlBQVksQ0FBQyxRQUFRO1NBQy9CO1FBRUQsb0JBQW9CO1FBQ3BCLE1BQU0sRUFBRTtZQUNOLElBQUksRUFBRSxTQUFTO1lBQ2YsTUFBTSxFQUFFO2dCQUNOLElBQUksRUFBRSxZQUFZLENBQUMsY0FBYztnQkFDakMsSUFBSSxFQUFFLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7YUFDdkM7WUFFRCxvREFBb0Q7WUFDcEQsR0FBRyxFQUFFO2dCQUNILElBQUksRUFBRSxXQUFXO2dCQUNqQixXQUFXLEVBQUU7b0JBQ1gsR0FBRyxFQUFFLFlBQVksQ0FBQyxVQUFVO29CQUM1QixJQUFJLEVBQUUsWUFBWSxDQUFDLFNBQVM7aUJBQzdCO2FBQ0Y7WUFFRCxtQkFBbUI7WUFDbkIsUUFBUSxFQUFFO2dCQUNSLG1DQUFtQztnQkFDbkMsT0FBTyxFQUFFLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7YUFDdEU7U0FDRjtRQUVELFdBQVc7UUFDWCxJQUFJLEVBQUUsbUJBQW1CLFlBQVksQ0FBQyxRQUFRLEVBQUU7UUFDaEQsUUFBUSxFQUFFLENBQUMsRUFBRSxtQkFBbUI7UUFDaEMsT0FBTyxFQUFFLElB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
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as plugins from '../../plugins.js';
|
|
2
|
-
import type { INetworkProxyOptions
|
|
2
|
+
import type { INetworkProxyOptions } from './models/types.js';
|
|
3
|
+
import type { IRouteConfig } from '../smart-proxy/models/route-types.js';
|
|
3
4
|
import { type IMetricsTracker } from './request-handler.js';
|
|
4
5
|
import { Port80Handler } from '../../http/port80/port80-handler.js';
|
|
5
6
|
/**
|
|
@@ -9,13 +10,16 @@ import { Port80Handler } from '../../http/port80/port80-handler.js';
|
|
|
9
10
|
export declare class NetworkProxy implements IMetricsTracker {
|
|
10
11
|
toJSON(): any;
|
|
11
12
|
options: INetworkProxyOptions;
|
|
12
|
-
|
|
13
|
+
routes: IRouteConfig[];
|
|
13
14
|
httpsServer: any;
|
|
14
15
|
private certificateManager;
|
|
15
16
|
private connectionPool;
|
|
16
17
|
private requestHandler;
|
|
17
18
|
private webSocketHandler;
|
|
19
|
+
private legacyRouter;
|
|
18
20
|
private router;
|
|
21
|
+
private routeManager;
|
|
22
|
+
private functionCache;
|
|
19
23
|
socketMap: plugins.lik.ObjectMap<plugins.net.Socket>;
|
|
20
24
|
activeContexts: Set<string>;
|
|
21
25
|
connectedClients: number;
|
|
@@ -77,23 +81,10 @@ export declare class NetworkProxy implements IMetricsTracker {
|
|
|
77
81
|
*/
|
|
78
82
|
private setupMetricsCollection;
|
|
79
83
|
/**
|
|
80
|
-
* Updates
|
|
84
|
+
* Updates the route configurations - this is the primary method for configuring NetworkProxy
|
|
85
|
+
* @param routes The new route configurations to use
|
|
81
86
|
*/
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Converts SmartProxy domain configurations to NetworkProxy configs
|
|
85
|
-
* @param domainConfigs SmartProxy domain configs
|
|
86
|
-
* @param sslKeyPair Default SSL key pair to use if not specified
|
|
87
|
-
* @returns Array of NetworkProxy configs
|
|
88
|
-
*/
|
|
89
|
-
convertSmartProxyConfigs(domainConfigs: Array<{
|
|
90
|
-
domains: string[];
|
|
91
|
-
targetIPs?: string[];
|
|
92
|
-
allowedIPs?: string[];
|
|
93
|
-
}>, sslKeyPair?: {
|
|
94
|
-
key: string;
|
|
95
|
-
cert: string;
|
|
96
|
-
}): IReverseProxyConfig[];
|
|
87
|
+
updateRouteConfigs(routes: IRouteConfig[]): Promise<void>;
|
|
97
88
|
/**
|
|
98
89
|
* Adds default headers to be included in all responses
|
|
99
90
|
*/
|
|
@@ -112,7 +103,19 @@ export declare class NetworkProxy implements IMetricsTracker {
|
|
|
112
103
|
*/
|
|
113
104
|
requestCertificate(domain: string): Promise<boolean>;
|
|
114
105
|
/**
|
|
115
|
-
*
|
|
106
|
+
* Update certificate for a domain
|
|
107
|
+
*
|
|
108
|
+
* This method allows direct updates of certificates from external sources
|
|
109
|
+
* like Port80Handler or custom certificate providers.
|
|
110
|
+
*
|
|
111
|
+
* @param domain The domain to update certificate for
|
|
112
|
+
* @param certificate The new certificate (public key)
|
|
113
|
+
* @param privateKey The new private key
|
|
114
|
+
* @param expiryDate Optional expiry date
|
|
115
|
+
*/
|
|
116
|
+
updateCertificate(domain: string, certificate: string, privateKey: string, expiryDate?: Date): void;
|
|
117
|
+
/**
|
|
118
|
+
* Gets all route configurations currently in use
|
|
116
119
|
*/
|
|
117
|
-
|
|
120
|
+
getRouteConfigs(): IRouteConfig[];
|
|
118
121
|
}
|