@push.rocks/smartproxy 13.1.3 → 15.0.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/dist_ts/00_commitinfo_data.js +3 -3
- package/dist_ts/proxies/smart-proxy/domain-config-manager.d.ts +15 -0
- package/dist_ts/proxies/smart-proxy/domain-config-manager.js +140 -9
- package/dist_ts/proxies/smart-proxy/index.d.ts +5 -3
- package/dist_ts/proxies/smart-proxy/index.js +9 -5
- package/dist_ts/proxies/smart-proxy/models/index.d.ts +2 -0
- package/dist_ts/proxies/smart-proxy/models/index.js +2 -1
- package/dist_ts/proxies/smart-proxy/models/interfaces.d.ts +82 -15
- package/dist_ts/proxies/smart-proxy/models/interfaces.js +11 -1
- package/dist_ts/proxies/smart-proxy/models/route-types.d.ts +133 -0
- package/dist_ts/proxies/smart-proxy/models/route-types.js +2 -0
- package/dist_ts/proxies/smart-proxy/route-connection-handler.d.ts +55 -0
- package/dist_ts/proxies/smart-proxy/route-connection-handler.js +804 -0
- package/dist_ts/proxies/smart-proxy/route-helpers.d.ts +127 -0
- package/dist_ts/proxies/smart-proxy/route-helpers.js +196 -0
- package/dist_ts/proxies/smart-proxy/route-manager.d.ts +103 -0
- package/dist_ts/proxies/smart-proxy/route-manager.js +483 -0
- package/dist_ts/proxies/smart-proxy/smart-proxy.d.ts +19 -8
- package/dist_ts/proxies/smart-proxy/smart-proxy.js +250 -46
- package/package.json +2 -2
- package/readme.md +675 -446
- package/readme.plan.md +311 -250
- package/ts/00_commitinfo_data.ts +2 -2
- package/ts/proxies/smart-proxy/domain-config-manager.ts +157 -14
- package/ts/proxies/smart-proxy/index.ts +20 -4
- package/ts/proxies/smart-proxy/models/index.ts +4 -0
- package/ts/proxies/smart-proxy/models/interfaces.ts +92 -13
- package/ts/proxies/smart-proxy/models/route-types.ts +184 -0
- package/ts/proxies/smart-proxy/route-connection-handler.ts +1117 -0
- package/ts/proxies/smart-proxy/route-helpers.ts +344 -0
- package/ts/proxies/smart-proxy/route-manager.ts +587 -0
- package/ts/proxies/smart-proxy/smart-proxy.ts +312 -69
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@push.rocks/smartproxy',
|
|
6
|
-
version: '
|
|
7
|
-
description: 'A powerful proxy package
|
|
6
|
+
version: '15.0.0',
|
|
7
|
+
description: 'A powerful proxy package with unified route-based configuration for high traffic management. Features include SSL/TLS support, flexible routing patterns, WebSocket handling, advanced security options, and automatic ACME certificate management.'
|
|
8
8
|
};
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx3QkFBd0I7SUFDOUIsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLHFQQUFxUDtDQUNuUSxDQUFBIn0=
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { IDomainConfig, ISmartProxyOptions } from './models/interfaces.js';
|
|
2
2
|
import type { TForwardingType } from '../../forwarding/config/forwarding-types.js';
|
|
3
3
|
import type { ForwardingHandler } from '../../forwarding/handlers/base-handler.js';
|
|
4
|
+
import { RouteManager } from './route-manager.js';
|
|
4
5
|
/**
|
|
5
6
|
* Manages domain configurations and target selection
|
|
6
7
|
*/
|
|
@@ -8,7 +9,21 @@ export declare class DomainConfigManager {
|
|
|
8
9
|
private settings;
|
|
9
10
|
private domainTargetIndices;
|
|
10
11
|
private forwardingHandlers;
|
|
12
|
+
private derivedDomainConfigs;
|
|
13
|
+
private routeManager?;
|
|
11
14
|
constructor(settings: ISmartProxyOptions);
|
|
15
|
+
/**
|
|
16
|
+
* Set the route manager reference for route-based queries
|
|
17
|
+
*/
|
|
18
|
+
setRouteManager(routeManager: RouteManager): void;
|
|
19
|
+
/**
|
|
20
|
+
* Generate domain configs from routes
|
|
21
|
+
*/
|
|
22
|
+
generateDomainConfigsFromRoutes(): void;
|
|
23
|
+
/**
|
|
24
|
+
* Convert a route to a domain config
|
|
25
|
+
*/
|
|
26
|
+
private routeToDomainConfig;
|
|
12
27
|
/**
|
|
13
28
|
* Updates the domain configurations
|
|
14
29
|
*/
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as plugins from '../../plugins.js';
|
|
2
2
|
import { ForwardingHandlerFactory } from '../../forwarding/factory/forwarding-factory.js';
|
|
3
|
+
import { RouteManager } from './route-manager.js';
|
|
3
4
|
/**
|
|
4
5
|
* Manages domain configurations and target selection
|
|
5
6
|
*/
|
|
@@ -10,12 +11,100 @@ export class DomainConfigManager {
|
|
|
10
11
|
this.domainTargetIndices = new Map();
|
|
11
12
|
// Cache forwarding handlers for each domain config
|
|
12
13
|
this.forwardingHandlers = new Map();
|
|
14
|
+
// Store derived domain configs from routes
|
|
15
|
+
this.derivedDomainConfigs = [];
|
|
16
|
+
// Initialize with derived domain configs if using route-based configuration
|
|
17
|
+
if (settings.routes && !settings.domainConfigs) {
|
|
18
|
+
this.generateDomainConfigsFromRoutes();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Set the route manager reference for route-based queries
|
|
23
|
+
*/
|
|
24
|
+
setRouteManager(routeManager) {
|
|
25
|
+
this.routeManager = routeManager;
|
|
26
|
+
// Regenerate domain configs from routes if needed
|
|
27
|
+
if (this.settings.routes && (!this.settings.domainConfigs || this.settings.domainConfigs.length === 0)) {
|
|
28
|
+
this.generateDomainConfigsFromRoutes();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Generate domain configs from routes
|
|
33
|
+
*/
|
|
34
|
+
generateDomainConfigsFromRoutes() {
|
|
35
|
+
this.derivedDomainConfigs = [];
|
|
36
|
+
if (!this.settings.routes)
|
|
37
|
+
return;
|
|
38
|
+
for (const route of this.settings.routes) {
|
|
39
|
+
if (route.action.type !== 'forward' || !route.match.domains)
|
|
40
|
+
continue;
|
|
41
|
+
// Convert route to domain config
|
|
42
|
+
const domainConfig = this.routeToDomainConfig(route);
|
|
43
|
+
if (domainConfig) {
|
|
44
|
+
this.derivedDomainConfigs.push(domainConfig);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Convert a route to a domain config
|
|
50
|
+
*/
|
|
51
|
+
routeToDomainConfig(route) {
|
|
52
|
+
if (route.action.type !== 'forward' || !route.action.target)
|
|
53
|
+
return null;
|
|
54
|
+
// Get domains from route
|
|
55
|
+
const domains = Array.isArray(route.match.domains) ?
|
|
56
|
+
route.match.domains :
|
|
57
|
+
(route.match.domains ? [route.match.domains] : []);
|
|
58
|
+
if (domains.length === 0)
|
|
59
|
+
return null;
|
|
60
|
+
// Determine forwarding type based on TLS mode
|
|
61
|
+
let forwardingType = 'http-only';
|
|
62
|
+
if (route.action.tls) {
|
|
63
|
+
switch (route.action.tls.mode) {
|
|
64
|
+
case 'passthrough':
|
|
65
|
+
forwardingType = 'https-passthrough';
|
|
66
|
+
break;
|
|
67
|
+
case 'terminate':
|
|
68
|
+
forwardingType = 'https-terminate-to-http';
|
|
69
|
+
break;
|
|
70
|
+
case 'terminate-and-reencrypt':
|
|
71
|
+
forwardingType = 'https-terminate-to-https';
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Create domain config
|
|
76
|
+
return {
|
|
77
|
+
domains,
|
|
78
|
+
forwarding: {
|
|
79
|
+
type: forwardingType,
|
|
80
|
+
target: {
|
|
81
|
+
host: route.action.target.host,
|
|
82
|
+
port: route.action.target.port
|
|
83
|
+
},
|
|
84
|
+
security: route.action.security ? {
|
|
85
|
+
allowedIps: route.action.security.allowedIps,
|
|
86
|
+
blockedIps: route.action.security.blockedIps,
|
|
87
|
+
maxConnections: route.action.security.maxConnections
|
|
88
|
+
} : undefined,
|
|
89
|
+
https: route.action.tls && route.action.tls.certificate !== 'auto' ? {
|
|
90
|
+
customCert: route.action.tls.certificate
|
|
91
|
+
} : undefined,
|
|
92
|
+
advanced: route.action.advanced
|
|
93
|
+
}
|
|
94
|
+
};
|
|
13
95
|
}
|
|
14
96
|
/**
|
|
15
97
|
* Updates the domain configurations
|
|
16
98
|
*/
|
|
17
99
|
updateDomainConfigs(newDomainConfigs) {
|
|
18
|
-
|
|
100
|
+
// If we're using domainConfigs property, update it
|
|
101
|
+
if (this.settings.domainConfigs) {
|
|
102
|
+
this.settings.domainConfigs = newDomainConfigs;
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
// Otherwise update our derived configs
|
|
106
|
+
this.derivedDomainConfigs = newDomainConfigs;
|
|
107
|
+
}
|
|
19
108
|
// Reset target indices for removed configs
|
|
20
109
|
const currentConfigSet = new Set(newDomainConfigs);
|
|
21
110
|
for (const [config] of this.domainTargetIndices) {
|
|
@@ -51,7 +140,8 @@ export class DomainConfigManager {
|
|
|
51
140
|
* Get all domain configurations
|
|
52
141
|
*/
|
|
53
142
|
getDomainConfigs() {
|
|
54
|
-
|
|
143
|
+
// Use domainConfigs from settings if available, otherwise use derived configs
|
|
144
|
+
return this.settings.domainConfigs || this.derivedDomainConfigs;
|
|
55
145
|
}
|
|
56
146
|
/**
|
|
57
147
|
* Find domain config matching a server name
|
|
@@ -59,18 +149,59 @@ export class DomainConfigManager {
|
|
|
59
149
|
findDomainConfig(serverName) {
|
|
60
150
|
if (!serverName)
|
|
61
151
|
return undefined;
|
|
62
|
-
|
|
152
|
+
// Get domain configs from the appropriate source
|
|
153
|
+
const domainConfigs = this.getDomainConfigs();
|
|
154
|
+
// Check for direct match
|
|
155
|
+
for (const config of domainConfigs) {
|
|
156
|
+
if (config.domains.some(d => plugins.minimatch(serverName, d))) {
|
|
157
|
+
return config;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// No match found
|
|
161
|
+
return undefined;
|
|
63
162
|
}
|
|
64
163
|
/**
|
|
65
164
|
* Find domain config for a specific port
|
|
66
165
|
*/
|
|
67
166
|
findDomainConfigForPort(port) {
|
|
68
|
-
|
|
167
|
+
// Get domain configs from the appropriate source
|
|
168
|
+
const domainConfigs = this.getDomainConfigs();
|
|
169
|
+
// Check if any domain config has a matching port range
|
|
170
|
+
for (const domain of domainConfigs) {
|
|
69
171
|
const portRanges = domain.forwarding?.advanced?.portRanges;
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
}
|
|
172
|
+
if (portRanges && portRanges.length > 0 && this.isPortInRanges(port, portRanges)) {
|
|
173
|
+
return domain;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
// If we're in route-based mode, also check routes for this port
|
|
177
|
+
if (this.settings.routes && (!this.settings.domainConfigs || this.settings.domainConfigs.length === 0)) {
|
|
178
|
+
const routesForPort = this.settings.routes.filter(route => {
|
|
179
|
+
// Check if this port is in the route's ports
|
|
180
|
+
if (typeof route.match.ports === 'number') {
|
|
181
|
+
return route.match.ports === port;
|
|
182
|
+
}
|
|
183
|
+
else if (Array.isArray(route.match.ports)) {
|
|
184
|
+
return route.match.ports.some(p => {
|
|
185
|
+
if (typeof p === 'number') {
|
|
186
|
+
return p === port;
|
|
187
|
+
}
|
|
188
|
+
else if (p.from && p.to) {
|
|
189
|
+
return port >= p.from && port <= p.to;
|
|
190
|
+
}
|
|
191
|
+
return false;
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
return false;
|
|
195
|
+
});
|
|
196
|
+
// If we found any routes for this port, convert the first one to a domain config
|
|
197
|
+
if (routesForPort.length > 0 && routesForPort[0].action.type === 'forward') {
|
|
198
|
+
const domainConfig = this.routeToDomainConfig(routesForPort[0]);
|
|
199
|
+
if (domainConfig) {
|
|
200
|
+
return domainConfig;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return undefined;
|
|
74
205
|
}
|
|
75
206
|
/**
|
|
76
207
|
* Check if a port is within any of the given ranges
|
|
@@ -252,4 +383,4 @@ export class DomainConfigManager {
|
|
|
252
383
|
return false;
|
|
253
384
|
}
|
|
254
385
|
}
|
|
255
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tYWluLWNvbmZpZy1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvcHJveGllcy9zbWFydC1wcm94eS9kb21haW4tY29uZmlnLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUk1QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUUxRjs7R0FFRztBQUNILE1BQU0sT0FBTyxtQkFBbUI7SUFPOUIsWUFBb0IsUUFBNEI7UUFBNUIsYUFBUSxHQUFSLFFBQVEsQ0FBb0I7UUFOaEQsK0NBQStDO1FBQ3ZDLHdCQUFtQixHQUErQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRXBFLG1EQUFtRDtRQUMzQyx1QkFBa0IsR0FBMEMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUUzQixDQUFDO0lBRXBEOztPQUVHO0lBQ0ksbUJBQW1CLENBQUMsZ0JBQWlDO1FBQzFELElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxHQUFHLGdCQUFnQixDQUFDO1FBRS9DLDJDQUEyQztRQUMzQyxNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDbkQsS0FBSyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDaEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzFDLENBQUM7UUFDSCxDQUFDO1FBRUQseUVBQXlFO1FBQ3pFLE1BQU0sZ0JBQWdCLEdBQW9CLEVBQUUsQ0FBQztRQUM3QyxLQUFLLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMvQyxJQUFJ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
|
|
386
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tYWluLWNvbmZpZy1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvcHJveGllcy9zbWFydC1wcm94eS9kb21haW4tY29uZmlnLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUk1QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUUxRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFbEQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sbUJBQW1CO0lBYTlCLFlBQW9CLFFBQTRCO1FBQTVCLGFBQVEsR0FBUixRQUFRLENBQW9CO1FBWmhELCtDQUErQztRQUN2Qyx3QkFBbUIsR0FBK0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUVwRSxtREFBbUQ7UUFDM0MsdUJBQWtCLEdBQTBDLElBQUksR0FBRyxFQUFFLENBQUM7UUFFOUUsMkNBQTJDO1FBQ25DLHlCQUFvQixHQUFvQixFQUFFLENBQUM7UUFNakQsNEVBQTRFO1FBQzVFLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsK0JBQStCLEVBQUUsQ0FBQztRQUN6QyxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksZUFBZSxDQUFDLFlBQTBCO1FBQy9DLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBRWpDLGtEQUFrRDtRQUNsRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN2RyxJQUFJLENBQUMsK0JBQStCLEVBQUUsQ0FBQztRQUN6QyxDQUFD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
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* SmartProxy implementation
|
|
3
|
+
*
|
|
4
|
+
* Version 14.0.0: Unified Route-Based Configuration API
|
|
3
5
|
*/
|
|
4
6
|
export * from './models/index.js';
|
|
5
7
|
export { SmartProxy } from './smart-proxy.js';
|
|
6
8
|
export { ConnectionManager } from './connection-manager.js';
|
|
7
9
|
export { SecurityManager } from './security-manager.js';
|
|
8
|
-
export { DomainConfigManager } from './domain-config-manager.js';
|
|
9
10
|
export { TimeoutManager } from './timeout-manager.js';
|
|
10
11
|
export { TlsManager } from './tls-manager.js';
|
|
11
12
|
export { NetworkProxyBridge } from './network-proxy-bridge.js';
|
|
12
|
-
export {
|
|
13
|
-
export {
|
|
13
|
+
export { RouteManager } from './route-manager.js';
|
|
14
|
+
export { RouteConnectionHandler } from './route-connection-handler.js';
|
|
15
|
+
export { createRoute, createHttpRoute, createHttpsRoute, createPassthroughRoute, createRedirectRoute, createHttpToHttpsRedirect, createBlockRoute, createLoadBalancerRoute, createHttpsServer } from './route-helpers.js';
|
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* SmartProxy implementation
|
|
3
|
+
*
|
|
4
|
+
* Version 14.0.0: Unified Route-Based Configuration API
|
|
3
5
|
*/
|
|
4
6
|
// Re-export models
|
|
5
7
|
export * from './models/index.js';
|
|
6
8
|
// Export the main SmartProxy class
|
|
7
9
|
export { SmartProxy } from './smart-proxy.js';
|
|
8
|
-
// Export supporting classes
|
|
10
|
+
// Export core supporting classes
|
|
9
11
|
export { ConnectionManager } from './connection-manager.js';
|
|
10
12
|
export { SecurityManager } from './security-manager.js';
|
|
11
|
-
export { DomainConfigManager } from './domain-config-manager.js';
|
|
12
13
|
export { TimeoutManager } from './timeout-manager.js';
|
|
13
14
|
export { TlsManager } from './tls-manager.js';
|
|
14
15
|
export { NetworkProxyBridge } from './network-proxy-bridge.js';
|
|
15
|
-
|
|
16
|
-
export {
|
|
17
|
-
|
|
16
|
+
// Export route-based components
|
|
17
|
+
export { RouteManager } from './route-manager.js';
|
|
18
|
+
export { RouteConnectionHandler } from './route-connection-handler.js';
|
|
19
|
+
// Export route helpers for configuration
|
|
20
|
+
export { createRoute, createHttpRoute, createHttpsRoute, createPassthroughRoute, createRedirectRoute, createHttpToHttpsRedirect, createBlockRoute, createLoadBalancerRoute, createHttpsServer } from './route-helpers.js';
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9wcm94aWVzL3NtYXJ0LXByb3h5L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSCxtQkFBbUI7QUFDbkIsY0FBYyxtQkFBbUIsQ0FBQztBQUVsQyxtQ0FBbUM7QUFDbkMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTlDLGlDQUFpQztBQUNqQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUUvRCxnQ0FBZ0M7QUFDaEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXZFLHlDQUF5QztBQUN6QyxPQUFPLEVBQ0wsV0FBVyxFQUNYLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsc0JBQXNCLEVBQ3RCLG1CQUFtQixFQUNuQix5QkFBeUIsRUFDekIsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDbEIsTUFBTSxvQkFBb0IsQ0FBQyJ9
|
|
@@ -2,4 +2,5 @@
|
|
|
2
2
|
* SmartProxy models
|
|
3
3
|
*/
|
|
4
4
|
export * from './interfaces.js';
|
|
5
|
-
|
|
5
|
+
export * from './route-types.js';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9wcm94aWVzL3NtYXJ0LXByb3h5L21vZGVscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxrQkFBa0IsQ0FBQyJ9
|
|
@@ -1,29 +1,100 @@
|
|
|
1
1
|
import * as plugins from '../../../plugins.js';
|
|
2
|
-
import type {
|
|
2
|
+
import type { IAcmeOptions } from '../../../certificate/models/certificate-types.js';
|
|
3
|
+
import type { IRouteConfig } from './route-types.js';
|
|
4
|
+
import type { TForwardingType } from '../../../forwarding/config/forwarding-types.js';
|
|
3
5
|
/**
|
|
4
6
|
* Provision object for static or HTTP-01 certificate
|
|
5
7
|
*/
|
|
6
8
|
export type TSmartProxyCertProvisionObject = plugins.tsclass.network.ICert | 'http01';
|
|
7
9
|
/**
|
|
8
|
-
*
|
|
10
|
+
* Alias for backward compatibility with code that uses IRoutedSmartProxyOptions
|
|
11
|
+
*/
|
|
12
|
+
export type IRoutedSmartProxyOptions = ISmartProxyOptions;
|
|
13
|
+
/**
|
|
14
|
+
* Legacy domain configuration interface for backward compatibility
|
|
9
15
|
*/
|
|
10
16
|
export interface IDomainConfig {
|
|
11
17
|
domains: string[];
|
|
12
|
-
forwarding:
|
|
18
|
+
forwarding: {
|
|
19
|
+
type: TForwardingType;
|
|
20
|
+
target: {
|
|
21
|
+
host: string | string[];
|
|
22
|
+
port: number;
|
|
23
|
+
};
|
|
24
|
+
acme?: {
|
|
25
|
+
enabled?: boolean;
|
|
26
|
+
maintenance?: boolean;
|
|
27
|
+
production?: boolean;
|
|
28
|
+
forwardChallenges?: {
|
|
29
|
+
host: string;
|
|
30
|
+
port: number;
|
|
31
|
+
useTls?: boolean;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
http?: {
|
|
35
|
+
enabled?: boolean;
|
|
36
|
+
redirectToHttps?: boolean;
|
|
37
|
+
headers?: Record<string, string>;
|
|
38
|
+
};
|
|
39
|
+
https?: {
|
|
40
|
+
customCert?: {
|
|
41
|
+
key: string;
|
|
42
|
+
cert: string;
|
|
43
|
+
};
|
|
44
|
+
forwardSni?: boolean;
|
|
45
|
+
};
|
|
46
|
+
security?: {
|
|
47
|
+
allowedIps?: string[];
|
|
48
|
+
blockedIps?: string[];
|
|
49
|
+
maxConnections?: number;
|
|
50
|
+
};
|
|
51
|
+
advanced?: {
|
|
52
|
+
portRanges?: Array<{
|
|
53
|
+
from: number;
|
|
54
|
+
to: number;
|
|
55
|
+
}>;
|
|
56
|
+
networkProxyPort?: number;
|
|
57
|
+
keepAlive?: boolean;
|
|
58
|
+
timeout?: number;
|
|
59
|
+
headers?: Record<string, string>;
|
|
60
|
+
};
|
|
61
|
+
};
|
|
13
62
|
}
|
|
14
63
|
/**
|
|
15
|
-
*
|
|
64
|
+
* Helper functions for type checking configuration types
|
|
65
|
+
*/
|
|
66
|
+
export declare function isLegacyOptions(options: any): boolean;
|
|
67
|
+
export declare function isRoutedOptions(options: any): boolean;
|
|
68
|
+
/**
|
|
69
|
+
* SmartProxy configuration options
|
|
16
70
|
*/
|
|
17
|
-
import type { IAcmeOptions } from '../../../certificate/models/certificate-types.js';
|
|
18
71
|
export interface ISmartProxyOptions {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
domainConfigs: IDomainConfig[];
|
|
72
|
+
routes: IRouteConfig[];
|
|
73
|
+
fromPort?: number;
|
|
74
|
+
toPort?: number;
|
|
23
75
|
sniEnabled?: boolean;
|
|
76
|
+
domainConfigs?: IDomainConfig[];
|
|
77
|
+
targetIP?: string;
|
|
24
78
|
defaultAllowedIPs?: string[];
|
|
25
79
|
defaultBlockedIPs?: string[];
|
|
80
|
+
globalPortRanges?: Array<{
|
|
81
|
+
from: number;
|
|
82
|
+
to: number;
|
|
83
|
+
}>;
|
|
84
|
+
forwardAllGlobalRanges?: boolean;
|
|
26
85
|
preserveSourceIP?: boolean;
|
|
86
|
+
defaults?: {
|
|
87
|
+
target?: {
|
|
88
|
+
host: string;
|
|
89
|
+
port: number;
|
|
90
|
+
};
|
|
91
|
+
security?: {
|
|
92
|
+
allowedIPs?: string[];
|
|
93
|
+
blockedIPs?: string[];
|
|
94
|
+
maxConnections?: number;
|
|
95
|
+
};
|
|
96
|
+
preserveSourceIP?: boolean;
|
|
97
|
+
};
|
|
27
98
|
pfx?: Buffer;
|
|
28
99
|
key?: string | Buffer | Array<Buffer | string>;
|
|
29
100
|
passphrase?: string;
|
|
@@ -42,11 +113,6 @@ export interface ISmartProxyOptions {
|
|
|
42
113
|
maxConnectionLifetime?: number;
|
|
43
114
|
inactivityTimeout?: number;
|
|
44
115
|
gracefulShutdownTimeout?: number;
|
|
45
|
-
globalPortRanges: Array<{
|
|
46
|
-
from: number;
|
|
47
|
-
to: number;
|
|
48
|
-
}>;
|
|
49
|
-
forwardAllGlobalRanges?: boolean;
|
|
50
116
|
noDelay?: boolean;
|
|
51
117
|
keepAlive?: boolean;
|
|
52
118
|
keepAliveInitialDelay?: number;
|
|
@@ -88,6 +154,7 @@ export interface IConnectionRecord {
|
|
|
88
154
|
lastActivity: number;
|
|
89
155
|
pendingData: Buffer[];
|
|
90
156
|
pendingDataSize: number;
|
|
157
|
+
domainConfig?: IDomainConfig;
|
|
91
158
|
bytesReceived: number;
|
|
92
159
|
bytesSent: number;
|
|
93
160
|
remoteIP: string;
|
|
@@ -95,7 +162,7 @@ export interface IConnectionRecord {
|
|
|
95
162
|
isTLS: boolean;
|
|
96
163
|
tlsHandshakeComplete: boolean;
|
|
97
164
|
hasReceivedInitialData: boolean;
|
|
98
|
-
|
|
165
|
+
routeConfig?: IRouteConfig;
|
|
99
166
|
hasKeepAlive: boolean;
|
|
100
167
|
inactivityWarningIssued?: boolean;
|
|
101
168
|
incomingTerminationReason?: string | null;
|
|
@@ -1,2 +1,12 @@
|
|
|
1
1
|
import * as plugins from '../../../plugins.js';
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Helper functions for type checking configuration types
|
|
4
|
+
*/
|
|
5
|
+
export function isLegacyOptions(options) {
|
|
6
|
+
return !!(options.domainConfigs && options.domainConfigs.length > 0 &&
|
|
7
|
+
(!options.routes || options.routes.length === 0));
|
|
8
|
+
}
|
|
9
|
+
export function isRoutedOptions(options) {
|
|
10
|
+
return !!(options.routes && options.routes.length > 0);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzL3Byb3hpZXMvc21hcnQtcHJveHkvbW9kZWxzL2ludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxxQkFBcUIsQ0FBQztBQStEL0M7O0dBRUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLE9BQVk7SUFDMUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUM7UUFDMUQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RCxDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWUsQ0FBQyxPQUFZO0lBQzFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN6RCxDQUFDIn0=
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import type { IAcmeOptions } from '../../../certificate/models/certificate-types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Supported action types for route configurations
|
|
4
|
+
*/
|
|
5
|
+
export type TRouteActionType = 'forward' | 'redirect' | 'block';
|
|
6
|
+
/**
|
|
7
|
+
* TLS handling modes for route configurations
|
|
8
|
+
*/
|
|
9
|
+
export type TTlsMode = 'passthrough' | 'terminate' | 'terminate-and-reencrypt';
|
|
10
|
+
/**
|
|
11
|
+
* Port range specification format
|
|
12
|
+
*/
|
|
13
|
+
export type TPortRange = number | number[] | Array<{
|
|
14
|
+
from: number;
|
|
15
|
+
to: number;
|
|
16
|
+
}>;
|
|
17
|
+
/**
|
|
18
|
+
* Route match criteria for incoming requests
|
|
19
|
+
*/
|
|
20
|
+
export interface IRouteMatch {
|
|
21
|
+
ports: TPortRange;
|
|
22
|
+
domains?: string | string[];
|
|
23
|
+
path?: string;
|
|
24
|
+
clientIp?: string[];
|
|
25
|
+
tlsVersion?: string[];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Target configuration for forwarding
|
|
29
|
+
*/
|
|
30
|
+
export interface IRouteTarget {
|
|
31
|
+
host: string | string[];
|
|
32
|
+
port: number;
|
|
33
|
+
preservePort?: boolean;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* TLS configuration for route actions
|
|
37
|
+
*/
|
|
38
|
+
export interface IRouteTls {
|
|
39
|
+
mode: TTlsMode;
|
|
40
|
+
certificate?: 'auto' | {
|
|
41
|
+
key: string;
|
|
42
|
+
cert: string;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Redirect configuration for route actions
|
|
47
|
+
*/
|
|
48
|
+
export interface IRouteRedirect {
|
|
49
|
+
to: string;
|
|
50
|
+
status: 301 | 302 | 307 | 308;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Security options for route actions
|
|
54
|
+
*/
|
|
55
|
+
export interface IRouteSecurity {
|
|
56
|
+
allowedIps?: string[];
|
|
57
|
+
blockedIps?: string[];
|
|
58
|
+
maxConnections?: number;
|
|
59
|
+
authentication?: {
|
|
60
|
+
type: 'basic' | 'digest' | 'oauth';
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Advanced options for route actions
|
|
65
|
+
*/
|
|
66
|
+
export interface IRouteAdvanced {
|
|
67
|
+
timeout?: number;
|
|
68
|
+
headers?: Record<string, string>;
|
|
69
|
+
keepAlive?: boolean;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Action configuration for route handling
|
|
73
|
+
*/
|
|
74
|
+
export interface IRouteAction {
|
|
75
|
+
type: TRouteActionType;
|
|
76
|
+
target?: IRouteTarget;
|
|
77
|
+
tls?: IRouteTls;
|
|
78
|
+
redirect?: IRouteRedirect;
|
|
79
|
+
security?: IRouteSecurity;
|
|
80
|
+
advanced?: IRouteAdvanced;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* The core unified configuration interface
|
|
84
|
+
*/
|
|
85
|
+
export interface IRouteConfig {
|
|
86
|
+
match: IRouteMatch;
|
|
87
|
+
action: IRouteAction;
|
|
88
|
+
name?: string;
|
|
89
|
+
description?: string;
|
|
90
|
+
priority?: number;
|
|
91
|
+
tags?: string[];
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Unified SmartProxy options with routes-based configuration
|
|
95
|
+
*/
|
|
96
|
+
export interface IRoutedSmartProxyOptions {
|
|
97
|
+
routes: IRouteConfig[];
|
|
98
|
+
defaults?: {
|
|
99
|
+
target?: {
|
|
100
|
+
host: string;
|
|
101
|
+
port: number;
|
|
102
|
+
};
|
|
103
|
+
security?: IRouteSecurity;
|
|
104
|
+
tls?: IRouteTls;
|
|
105
|
+
};
|
|
106
|
+
acme?: IAcmeOptions;
|
|
107
|
+
initialDataTimeout?: number;
|
|
108
|
+
socketTimeout?: number;
|
|
109
|
+
inactivityCheckInterval?: number;
|
|
110
|
+
maxConnectionLifetime?: number;
|
|
111
|
+
inactivityTimeout?: number;
|
|
112
|
+
gracefulShutdownTimeout?: number;
|
|
113
|
+
noDelay?: boolean;
|
|
114
|
+
keepAlive?: boolean;
|
|
115
|
+
keepAliveInitialDelay?: number;
|
|
116
|
+
maxPendingDataSize?: number;
|
|
117
|
+
disableInactivityCheck?: boolean;
|
|
118
|
+
enableKeepAliveProbes?: boolean;
|
|
119
|
+
enableDetailedLogging?: boolean;
|
|
120
|
+
enableTlsDebugLogging?: boolean;
|
|
121
|
+
enableRandomizedTimeouts?: boolean;
|
|
122
|
+
allowSessionTicket?: boolean;
|
|
123
|
+
maxConnectionsPerIP?: number;
|
|
124
|
+
connectionRateLimitPerMinute?: number;
|
|
125
|
+
keepAliveTreatment?: 'standard' | 'extended' | 'immortal';
|
|
126
|
+
keepAliveInactivityMultiplier?: number;
|
|
127
|
+
extendedKeepAliveLifetime?: number;
|
|
128
|
+
/**
|
|
129
|
+
* Optional certificate provider callback. Return 'http01' to use HTTP-01 challenges,
|
|
130
|
+
* or a static certificate object for immediate provisioning.
|
|
131
|
+
*/
|
|
132
|
+
certProvisionFunction?: (domain: string) => Promise<any>;
|
|
133
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import * as plugins from '../../../plugins.js';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtdHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9wcm94aWVzL3NtYXJ0LXByb3h5L21vZGVscy9yb3V0ZS10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHFCQUFxQixDQUFDIn0=
|