@push.rocks/smartproxy 21.1.6 → 22.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/changelog.md +89 -0
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/core/utils/shared-security-manager.d.ts +17 -0
- package/dist_ts/core/utils/shared-security-manager.js +66 -1
- package/dist_ts/proxies/http-proxy/default-certificates.d.ts +54 -0
- package/dist_ts/proxies/http-proxy/default-certificates.js +127 -0
- package/dist_ts/proxies/http-proxy/http-proxy.d.ts +1 -1
- package/dist_ts/proxies/http-proxy/http-proxy.js +9 -14
- package/dist_ts/proxies/http-proxy/index.d.ts +5 -1
- package/dist_ts/proxies/http-proxy/index.js +6 -2
- package/dist_ts/proxies/http-proxy/security-manager.d.ts +4 -12
- package/dist_ts/proxies/http-proxy/security-manager.js +66 -99
- package/dist_ts/proxies/nftables-proxy/index.d.ts +1 -0
- package/dist_ts/proxies/nftables-proxy/index.js +2 -1
- package/dist_ts/proxies/nftables-proxy/nftables-proxy.d.ts +4 -26
- package/dist_ts/proxies/nftables-proxy/nftables-proxy.js +84 -236
- package/dist_ts/proxies/nftables-proxy/utils/index.d.ts +9 -0
- package/dist_ts/proxies/nftables-proxy/utils/index.js +12 -0
- package/dist_ts/proxies/nftables-proxy/utils/nft-command-executor.d.ts +66 -0
- package/dist_ts/proxies/nftables-proxy/utils/nft-command-executor.js +131 -0
- package/dist_ts/proxies/nftables-proxy/utils/nft-port-spec-normalizer.d.ts +39 -0
- package/dist_ts/proxies/nftables-proxy/utils/nft-port-spec-normalizer.js +112 -0
- package/dist_ts/proxies/nftables-proxy/utils/nft-rule-validator.d.ts +59 -0
- package/dist_ts/proxies/nftables-proxy/utils/nft-rule-validator.js +130 -0
- package/dist_ts/proxies/smart-proxy/certificate-manager.js +4 -3
- package/dist_ts/proxies/smart-proxy/connection-manager.d.ts +13 -2
- package/dist_ts/proxies/smart-proxy/connection-manager.js +16 -6
- package/dist_ts/proxies/smart-proxy/http-proxy-bridge.js +35 -10
- package/dist_ts/proxies/smart-proxy/models/interfaces.d.ts +0 -1
- package/dist_ts/proxies/smart-proxy/route-connection-handler.d.ts +17 -0
- package/dist_ts/proxies/smart-proxy/route-connection-handler.js +72 -9
- package/dist_ts/proxies/smart-proxy/security-manager.d.ts +14 -12
- package/dist_ts/proxies/smart-proxy/security-manager.js +80 -74
- package/dist_ts/proxies/smart-proxy/smart-proxy.js +1 -2
- package/dist_ts/proxies/smart-proxy/tls-manager.d.ts +2 -9
- package/dist_ts/proxies/smart-proxy/tls-manager.js +3 -26
- package/dist_ts/proxies/smart-proxy/utils/index.d.ts +1 -1
- package/dist_ts/proxies/smart-proxy/utils/index.js +3 -4
- package/dist_ts/proxies/smart-proxy/utils/route-helpers/api-helpers.d.ts +49 -0
- package/dist_ts/proxies/smart-proxy/utils/route-helpers/api-helpers.js +108 -0
- package/dist_ts/proxies/smart-proxy/utils/route-helpers/dynamic-helpers.d.ts +57 -0
- package/dist_ts/proxies/smart-proxy/utils/route-helpers/dynamic-helpers.js +89 -0
- package/dist_ts/proxies/smart-proxy/utils/route-helpers/http-helpers.d.ts +17 -0
- package/dist_ts/proxies/smart-proxy/utils/route-helpers/http-helpers.js +32 -0
- package/dist_ts/proxies/smart-proxy/utils/route-helpers/https-helpers.d.ts +68 -0
- package/dist_ts/proxies/smart-proxy/utils/route-helpers/https-helpers.js +117 -0
- package/dist_ts/proxies/smart-proxy/utils/route-helpers/index.d.ts +17 -0
- package/dist_ts/proxies/smart-proxy/utils/route-helpers/index.js +27 -0
- package/dist_ts/proxies/smart-proxy/utils/route-helpers/load-balancer-helpers.d.ts +63 -0
- package/dist_ts/proxies/smart-proxy/utils/route-helpers/load-balancer-helpers.js +105 -0
- package/dist_ts/proxies/smart-proxy/utils/route-helpers/nftables-helpers.d.ts +83 -0
- package/dist_ts/proxies/smart-proxy/utils/route-helpers/nftables-helpers.js +126 -0
- package/dist_ts/proxies/smart-proxy/utils/route-helpers/security-helpers.d.ts +47 -0
- package/dist_ts/proxies/smart-proxy/utils/route-helpers/security-helpers.js +66 -0
- package/dist_ts/proxies/smart-proxy/utils/route-helpers/socket-handlers.d.ts +70 -0
- package/dist_ts/proxies/smart-proxy/utils/route-helpers/socket-handlers.js +287 -0
- package/dist_ts/proxies/smart-proxy/utils/route-helpers/websocket-helpers.d.ts +46 -0
- package/dist_ts/proxies/smart-proxy/utils/route-helpers/websocket-helpers.js +67 -0
- package/dist_ts/proxies/smart-proxy/utils/route-helpers.d.ts +4 -457
- package/dist_ts/proxies/smart-proxy/utils/route-helpers.js +6 -950
- package/dist_ts/proxies/smart-proxy/utils/route-utils.js +2 -2
- package/dist_ts/proxies/smart-proxy/utils/route-validator.d.ts +67 -1
- package/dist_ts/proxies/smart-proxy/utils/route-validator.js +266 -6
- package/npmextra.json +12 -6
- package/package.json +34 -24
- package/readme.hints.md +184 -1
- package/readme.md +235 -172
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/core/utils/shared-security-manager.ts +98 -13
- package/ts/proxies/http-proxy/default-certificates.ts +150 -0
- package/ts/proxies/http-proxy/http-proxy.ts +9 -15
- package/ts/proxies/http-proxy/index.ts +6 -1
- package/ts/proxies/http-proxy/security-manager.ts +141 -161
- package/ts/proxies/nftables-proxy/index.ts +1 -0
- package/ts/proxies/nftables-proxy/nftables-proxy.ts +116 -290
- package/ts/proxies/nftables-proxy/utils/index.ts +38 -0
- package/ts/proxies/nftables-proxy/utils/nft-command-executor.ts +162 -0
- package/ts/proxies/nftables-proxy/utils/nft-port-spec-normalizer.ts +125 -0
- package/ts/proxies/nftables-proxy/utils/nft-rule-validator.ts +156 -0
- package/ts/proxies/smart-proxy/certificate-manager.ts +3 -2
- package/ts/proxies/smart-proxy/connection-manager.ts +21 -8
- package/ts/proxies/smart-proxy/http-proxy-bridge.ts +39 -13
- package/ts/proxies/smart-proxy/models/interfaces.ts +0 -1
- package/ts/proxies/smart-proxy/route-connection-handler.ts +88 -16
- package/ts/proxies/smart-proxy/security-manager.ts +98 -86
- package/ts/proxies/smart-proxy/smart-proxy.ts +0 -2
- package/ts/proxies/smart-proxy/tls-manager.ts +1 -37
- package/ts/proxies/smart-proxy/utils/index.ts +3 -5
- package/ts/proxies/smart-proxy/utils/route-helpers/api-helpers.ts +144 -0
- package/ts/proxies/smart-proxy/utils/route-helpers/dynamic-helpers.ts +124 -0
- package/ts/proxies/smart-proxy/utils/route-helpers/http-helpers.ts +40 -0
- package/ts/proxies/smart-proxy/utils/route-helpers/https-helpers.ts +163 -0
- package/ts/proxies/smart-proxy/utils/route-helpers/index.ts +62 -0
- package/ts/proxies/smart-proxy/utils/route-helpers/load-balancer-helpers.ts +154 -0
- package/ts/proxies/smart-proxy/utils/route-helpers/nftables-helpers.ts +202 -0
- package/ts/proxies/smart-proxy/utils/route-helpers/security-helpers.ts +96 -0
- package/ts/proxies/smart-proxy/utils/route-helpers/socket-handlers.ts +337 -0
- package/ts/proxies/smart-proxy/utils/route-helpers/websocket-helpers.ts +98 -0
- package/ts/proxies/smart-proxy/utils/route-helpers.ts +5 -1302
- package/ts/proxies/smart-proxy/utils/route-utils.ts +1 -1
- package/ts/proxies/smart-proxy/utils/route-validator.ts +289 -7
- package/ts/proxies/http-proxy/certificate-manager.ts +0 -244
- package/ts/proxies/smart-proxy/utils/route-validators.ts +0 -283
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Route Helper Functions
|
|
3
|
+
*
|
|
4
|
+
* This module provides utility functions for creating API route configurations.
|
|
5
|
+
*/
|
|
6
|
+
import { mergeRouteConfigs } from '../route-utils.js';
|
|
7
|
+
import { createHttpRoute } from './http-helpers.js';
|
|
8
|
+
import { createHttpsTerminateRoute } from './https-helpers.js';
|
|
9
|
+
/**
|
|
10
|
+
* Create an API route configuration
|
|
11
|
+
* @param domains Domain(s) to match
|
|
12
|
+
* @param apiPath API base path (e.g., "/api")
|
|
13
|
+
* @param target Target host and port
|
|
14
|
+
* @param options Additional route options
|
|
15
|
+
* @returns Route configuration object
|
|
16
|
+
*/
|
|
17
|
+
export function createApiRoute(domains, apiPath, target, options = {}) {
|
|
18
|
+
// Normalize API path
|
|
19
|
+
const normalizedPath = apiPath.startsWith('/') ? apiPath : `/${apiPath}`;
|
|
20
|
+
const pathWithWildcard = normalizedPath.endsWith('/')
|
|
21
|
+
? `${normalizedPath}*`
|
|
22
|
+
: `${normalizedPath}/*`;
|
|
23
|
+
// Create route match
|
|
24
|
+
const match = {
|
|
25
|
+
ports: options.useTls
|
|
26
|
+
? (options.httpsPort || 443)
|
|
27
|
+
: (options.httpPort || 80),
|
|
28
|
+
domains,
|
|
29
|
+
path: pathWithWildcard
|
|
30
|
+
};
|
|
31
|
+
// Create route action
|
|
32
|
+
const action = {
|
|
33
|
+
type: 'forward',
|
|
34
|
+
targets: [target]
|
|
35
|
+
};
|
|
36
|
+
// Add TLS configuration if using HTTPS
|
|
37
|
+
if (options.useTls) {
|
|
38
|
+
action.tls = {
|
|
39
|
+
mode: 'terminate',
|
|
40
|
+
certificate: options.certificate || 'auto'
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
// Add CORS headers if requested
|
|
44
|
+
const headers = {};
|
|
45
|
+
if (options.addCorsHeaders) {
|
|
46
|
+
headers.response = {
|
|
47
|
+
'Access-Control-Allow-Origin': '*',
|
|
48
|
+
'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
|
|
49
|
+
'Access-Control-Allow-Headers': 'Content-Type, Authorization',
|
|
50
|
+
'Access-Control-Max-Age': '86400'
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
// Create the route config
|
|
54
|
+
return {
|
|
55
|
+
match,
|
|
56
|
+
action,
|
|
57
|
+
headers: Object.keys(headers).length > 0 ? headers : undefined,
|
|
58
|
+
name: options.name || `API Route ${normalizedPath} for ${Array.isArray(domains) ? domains.join(', ') : domains}`,
|
|
59
|
+
priority: options.priority || 100, // Higher priority for specific path matches
|
|
60
|
+
...options
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Create an API Gateway route pattern
|
|
65
|
+
* @param domains Domain(s) to match
|
|
66
|
+
* @param apiBasePath Base path for API endpoints (e.g., '/api')
|
|
67
|
+
* @param target Target host and port
|
|
68
|
+
* @param options Additional route options
|
|
69
|
+
* @returns API route configuration
|
|
70
|
+
*/
|
|
71
|
+
export function createApiGatewayRoute(domains, apiBasePath, target, options = {}) {
|
|
72
|
+
// Normalize apiBasePath to ensure it starts with / and doesn't end with /
|
|
73
|
+
const normalizedPath = apiBasePath.startsWith('/')
|
|
74
|
+
? apiBasePath
|
|
75
|
+
: `/${apiBasePath}`;
|
|
76
|
+
// Add wildcard to path to match all API endpoints
|
|
77
|
+
const apiPath = normalizedPath.endsWith('/')
|
|
78
|
+
? `${normalizedPath}*`
|
|
79
|
+
: `${normalizedPath}/*`;
|
|
80
|
+
// Create base route
|
|
81
|
+
const baseRoute = options.useTls
|
|
82
|
+
? createHttpsTerminateRoute(domains, target, {
|
|
83
|
+
certificate: options.certificate || 'auto'
|
|
84
|
+
})
|
|
85
|
+
: createHttpRoute(domains, target);
|
|
86
|
+
// Add API-specific configurations
|
|
87
|
+
const apiRoute = {
|
|
88
|
+
match: {
|
|
89
|
+
...baseRoute.match,
|
|
90
|
+
path: apiPath
|
|
91
|
+
},
|
|
92
|
+
name: options.name || `API Gateway: ${apiPath} -> ${Array.isArray(target.host) ? target.host.join(', ') : target.host}:${target.port}`,
|
|
93
|
+
priority: options.priority || 100 // Higher priority for specific path matching
|
|
94
|
+
};
|
|
95
|
+
// Add CORS headers if requested
|
|
96
|
+
if (options.addCorsHeaders) {
|
|
97
|
+
apiRoute.headers = {
|
|
98
|
+
response: {
|
|
99
|
+
'Access-Control-Allow-Origin': '*',
|
|
100
|
+
'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
|
|
101
|
+
'Access-Control-Allow-Headers': 'Content-Type, Authorization',
|
|
102
|
+
'Access-Control-Max-Age': '86400'
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
return mergeRouteConfigs(baseRoute, apiRoute);
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90cy9wcm94aWVzL3NtYXJ0LXByb3h5L3V0aWxzL3JvdXRlLWhlbHBlcnMvYXBpLWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUdILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUUvRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsT0FBMEIsRUFDMUIsT0FBZSxFQUNmLE1BQWlELEVBQ2pELFVBUUksRUFBRTtJQUVOLHFCQUFxQjtJQUNyQixNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxFQUFFLENBQUM7SUFDekUsTUFBTSxnQkFBZ0IsR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztRQUNuRCxDQUFDLENBQUMsR0FBRyxjQUFjLEdBQUc7UUFDdEIsQ0FBQyxDQUFDLEdBQUcsY0FBYyxJQUFJLENBQUM7SUFFMUIscUJBQXFCO0lBQ3JCLE1BQU0sS0FBSyxHQUFnQjtRQUN6QixLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU07WUFDbkIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxHQUFHLENBQUM7WUFDNUIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDNUIsT0FBTztRQUNQLElBQUksRUFBRSxnQkFBZ0I7S0FDdkIsQ0FBQztJQUVGLHNCQUFzQjtJQUN0QixNQUFNLE1BQU0sR0FBaUI7UUFDM0IsSUFBSSxFQUFFLFNBQVM7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
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dynamic Route Helper Functions
|
|
3
|
+
*
|
|
4
|
+
* This module provides utility functions for creating dynamic routes
|
|
5
|
+
* with context-based host and port mapping.
|
|
6
|
+
*/
|
|
7
|
+
import type { IRouteConfig, TPortRange, IRouteContext } from '../../models/route-types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Create a helper function that applies a port offset
|
|
10
|
+
* @param offset The offset to apply to the matched port
|
|
11
|
+
* @returns A function that adds the offset to the matched port
|
|
12
|
+
*/
|
|
13
|
+
export declare function createPortOffset(offset: number): (context: IRouteContext) => number;
|
|
14
|
+
/**
|
|
15
|
+
* Create a port mapping route with context-based port function
|
|
16
|
+
* @param options Port mapping route options
|
|
17
|
+
* @returns Route configuration object
|
|
18
|
+
*/
|
|
19
|
+
export declare function createPortMappingRoute(options: {
|
|
20
|
+
sourcePortRange: TPortRange;
|
|
21
|
+
targetHost: string | string[] | ((context: IRouteContext) => string | string[]);
|
|
22
|
+
portMapper: (context: IRouteContext) => number;
|
|
23
|
+
name?: string;
|
|
24
|
+
domains?: string | string[];
|
|
25
|
+
priority?: number;
|
|
26
|
+
[key: string]: any;
|
|
27
|
+
}): IRouteConfig;
|
|
28
|
+
/**
|
|
29
|
+
* Create a simple offset port mapping route
|
|
30
|
+
* @param options Offset port mapping route options
|
|
31
|
+
* @returns Route configuration object
|
|
32
|
+
*/
|
|
33
|
+
export declare function createOffsetPortMappingRoute(options: {
|
|
34
|
+
ports: TPortRange;
|
|
35
|
+
targetHost: string | string[];
|
|
36
|
+
offset: number;
|
|
37
|
+
name?: string;
|
|
38
|
+
domains?: string | string[];
|
|
39
|
+
priority?: number;
|
|
40
|
+
[key: string]: any;
|
|
41
|
+
}): IRouteConfig;
|
|
42
|
+
/**
|
|
43
|
+
* Create a dynamic route with context-based host and port mapping
|
|
44
|
+
* @param options Dynamic route options
|
|
45
|
+
* @returns Route configuration object
|
|
46
|
+
*/
|
|
47
|
+
export declare function createDynamicRoute(options: {
|
|
48
|
+
ports: TPortRange;
|
|
49
|
+
targetHost: (context: IRouteContext) => string | string[];
|
|
50
|
+
portMapper: (context: IRouteContext) => number;
|
|
51
|
+
name?: string;
|
|
52
|
+
domains?: string | string[];
|
|
53
|
+
path?: string;
|
|
54
|
+
clientIp?: string[];
|
|
55
|
+
priority?: number;
|
|
56
|
+
[key: string]: any;
|
|
57
|
+
}): IRouteConfig;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dynamic Route Helper Functions
|
|
3
|
+
*
|
|
4
|
+
* This module provides utility functions for creating dynamic routes
|
|
5
|
+
* with context-based host and port mapping.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Create a helper function that applies a port offset
|
|
9
|
+
* @param offset The offset to apply to the matched port
|
|
10
|
+
* @returns A function that adds the offset to the matched port
|
|
11
|
+
*/
|
|
12
|
+
export function createPortOffset(offset) {
|
|
13
|
+
return (context) => context.port + offset;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Create a port mapping route with context-based port function
|
|
17
|
+
* @param options Port mapping route options
|
|
18
|
+
* @returns Route configuration object
|
|
19
|
+
*/
|
|
20
|
+
export function createPortMappingRoute(options) {
|
|
21
|
+
// Create route match
|
|
22
|
+
const match = {
|
|
23
|
+
ports: options.sourcePortRange,
|
|
24
|
+
domains: options.domains
|
|
25
|
+
};
|
|
26
|
+
// Create route action
|
|
27
|
+
const action = {
|
|
28
|
+
type: 'forward',
|
|
29
|
+
targets: [{
|
|
30
|
+
host: options.targetHost,
|
|
31
|
+
port: options.portMapper
|
|
32
|
+
}]
|
|
33
|
+
};
|
|
34
|
+
// Create the route config
|
|
35
|
+
return {
|
|
36
|
+
match,
|
|
37
|
+
action,
|
|
38
|
+
name: options.name || `Port Mapping Route for ${options.domains || 'all domains'}`,
|
|
39
|
+
priority: options.priority,
|
|
40
|
+
...options
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Create a simple offset port mapping route
|
|
45
|
+
* @param options Offset port mapping route options
|
|
46
|
+
* @returns Route configuration object
|
|
47
|
+
*/
|
|
48
|
+
export function createOffsetPortMappingRoute(options) {
|
|
49
|
+
return createPortMappingRoute({
|
|
50
|
+
sourcePortRange: options.ports,
|
|
51
|
+
targetHost: options.targetHost,
|
|
52
|
+
portMapper: (context) => context.port + options.offset,
|
|
53
|
+
name: options.name || `Offset Mapping (${options.offset > 0 ? '+' : ''}${options.offset}) for ${options.domains || 'all domains'}`,
|
|
54
|
+
domains: options.domains,
|
|
55
|
+
priority: options.priority,
|
|
56
|
+
...options
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Create a dynamic route with context-based host and port mapping
|
|
61
|
+
* @param options Dynamic route options
|
|
62
|
+
* @returns Route configuration object
|
|
63
|
+
*/
|
|
64
|
+
export function createDynamicRoute(options) {
|
|
65
|
+
// Create route match
|
|
66
|
+
const match = {
|
|
67
|
+
ports: options.ports,
|
|
68
|
+
domains: options.domains,
|
|
69
|
+
path: options.path,
|
|
70
|
+
clientIp: options.clientIp
|
|
71
|
+
};
|
|
72
|
+
// Create route action
|
|
73
|
+
const action = {
|
|
74
|
+
type: 'forward',
|
|
75
|
+
targets: [{
|
|
76
|
+
host: options.targetHost,
|
|
77
|
+
port: options.portMapper
|
|
78
|
+
}]
|
|
79
|
+
};
|
|
80
|
+
// Create the route config
|
|
81
|
+
return {
|
|
82
|
+
match,
|
|
83
|
+
action,
|
|
84
|
+
name: options.name || `Dynamic Route for ${options.domains || 'all domains'}`,
|
|
85
|
+
priority: options.priority,
|
|
86
|
+
...options
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdHMvcHJveGllcy9zbWFydC1wcm94eS91dGlscy9yb3V0ZS1oZWxwZXJzL2R5bmFtaWMtaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUlIOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsTUFBYztJQUM3QyxPQUFPLENBQUMsT0FBc0IsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDM0QsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsT0FRdEM7SUFDQyxxQkFBcUI7SUFDckIsTUFBTSxLQUFLLEdBQWdCO1FBQ3pCLEtBQUssRUFBRSxPQUFPLENBQUMsZUFBZTtRQUM5QixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87S0FDekIsQ0FBQztJQUVGLHNCQUFzQjtJQUN0QixNQUFNLE1BQU0sR0FBaUI7UUFDM0IsSUFBSSxFQUFFLFNBQVM7UUFDZixPQUFPLEVBQUUsQ0FBQztnQkFDUixJQUFJLEVBQUUsT0FBTyxDQUFDLFVBQVU7Z0JBQ3hCLElBQUksRUFBRSxPQUFPLENBQUMsVUFBVTthQUN6QixDQUFDO0tBQ0gsQ0FBQztJQUVGLDBCQUEwQjtJQUMxQixPQUFPO1FBQ0wsS0FBSztRQUNMLE1BQU07UUFDTixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksSUFBSSwwQkFBMEIsT0FBTyxDQUFDLE9BQU8sSUFBSSxhQUFhLEVBQUU7UUFDbEYsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1FBQzFCLEdBQUcsT0FBTztLQUNYLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSw0QkFBNEIsQ0FBQyxPQVE1QztJQUNDLE9BQU8sc0JBQXNCLENBQUM7UUFDNUIsZUFBZSxFQUFFLE9BQU8sQ0FBQyxLQUFLO1FBQzlCLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtRQUM5QixVQUFVLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU07UUFDdEQsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLElBQUksbUJBQW1CLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxTQUFTLE9BQU8sQ0FBQyxPQUFPLElBQUksYUFBYSxFQUFFO1FBQ2xJLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztRQUN4QixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7UUFDMUIsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsT0FVbEM7SUFDQyxxQkFBcUI7SUFDckIsTUFBTSxLQUFLLEdBQWdCO1FBQ3pCLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztRQUNwQixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87UUFDeEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1FBQ2xCLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtLQUMzQixDQUFDO0lBRUYsc0JBQXNCO0lBQ3RCLE1BQU0sTUFBTSxHQUFpQjtRQUMzQixJQUFJLEVBQUUsU0FBUztRQUNmLE9BQU8sRUFBRSxDQUFDO2dCQUNSLElBQUksRUFBRSxPQUFPLENBQUMsVUFBVTtnQkFDeEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxVQUFVO2FBQ3pCLENBQUM7S0FDSCxDQUFDO0lBRUYsMEJBQTBCO0lBQzFCLE9BQU87UUFDTCxLQUFLO1FBQ0wsTUFBTTtRQUNOLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxJQUFJLHFCQUFxQixPQUFPLENBQUMsT0FBTyxJQUFJLGFBQWEsRUFBRTtRQUM3RSxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7UUFDMUIsR0FBRyxPQUFPO0tBQ1gsQ0FBQztBQUNKLENBQUMifQ==
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP Route Helper Functions
|
|
3
|
+
*
|
|
4
|
+
* This module provides utility functions for creating HTTP route configurations.
|
|
5
|
+
*/
|
|
6
|
+
import type { IRouteConfig } from '../../models/route-types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Create an HTTP-only route configuration
|
|
9
|
+
* @param domains Domain(s) to match
|
|
10
|
+
* @param target Target host and port
|
|
11
|
+
* @param options Additional route options
|
|
12
|
+
* @returns Route configuration object
|
|
13
|
+
*/
|
|
14
|
+
export declare function createHttpRoute(domains: string | string[], target: {
|
|
15
|
+
host: string | string[];
|
|
16
|
+
port: number;
|
|
17
|
+
}, options?: Partial<IRouteConfig>): IRouteConfig;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP Route Helper Functions
|
|
3
|
+
*
|
|
4
|
+
* This module provides utility functions for creating HTTP route configurations.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Create an HTTP-only route configuration
|
|
8
|
+
* @param domains Domain(s) to match
|
|
9
|
+
* @param target Target host and port
|
|
10
|
+
* @param options Additional route options
|
|
11
|
+
* @returns Route configuration object
|
|
12
|
+
*/
|
|
13
|
+
export function createHttpRoute(domains, target, options = {}) {
|
|
14
|
+
// Create route match
|
|
15
|
+
const match = {
|
|
16
|
+
ports: options.match?.ports || 80,
|
|
17
|
+
domains
|
|
18
|
+
};
|
|
19
|
+
// Create route action
|
|
20
|
+
const action = {
|
|
21
|
+
type: 'forward',
|
|
22
|
+
targets: [target]
|
|
23
|
+
};
|
|
24
|
+
// Create the route config
|
|
25
|
+
return {
|
|
26
|
+
match,
|
|
27
|
+
action,
|
|
28
|
+
name: options.name || `HTTP Route for ${Array.isArray(domains) ? domains.join(', ') : domains}`,
|
|
29
|
+
...options
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdHMvcHJveGllcy9zbWFydC1wcm94eS91dGlscy9yb3V0ZS1oZWxwZXJzL2h0dHAtaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBSUg7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FDN0IsT0FBMEIsRUFDMUIsTUFBaUQsRUFDakQsVUFBaUMsRUFBRTtJQUVuQyxxQkFBcUI7SUFDckIsTUFBTSxLQUFLLEdBQWdCO1FBQ3pCLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2pDLE9BQU87S0FDUixDQUFDO0lBRUYsc0JBQXNCO0lBQ3RCLE1BQU0sTUFBTSxHQUFpQjtRQUMzQixJQUFJLEVBQUUsU0FBUztRQUNmLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztLQUNsQixDQUFDO0lBRUYsMEJBQTBCO0lBQzFCLE9BQU87UUFDTCxLQUFLO1FBQ0wsTUFBTTtRQUNOLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxJQUFJLGtCQUFrQixLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUU7UUFDL0YsR0FBRyxPQUFPO0tBQ1gsQ0FBQztBQUNKLENBQUMifQ==
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTPS Route Helper Functions
|
|
3
|
+
*
|
|
4
|
+
* This module provides utility functions for creating HTTPS route configurations
|
|
5
|
+
* including TLS termination and passthrough routes.
|
|
6
|
+
*/
|
|
7
|
+
import type { IRouteConfig } from '../../models/route-types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Create an HTTPS route with TLS termination
|
|
10
|
+
* @param domains Domain(s) to match
|
|
11
|
+
* @param target Target host and port
|
|
12
|
+
* @param options Additional route options
|
|
13
|
+
* @returns Route configuration object
|
|
14
|
+
*/
|
|
15
|
+
export declare function createHttpsTerminateRoute(domains: string | string[], target: {
|
|
16
|
+
host: string | string[];
|
|
17
|
+
port: number;
|
|
18
|
+
}, options?: {
|
|
19
|
+
certificate?: 'auto' | {
|
|
20
|
+
key: string;
|
|
21
|
+
cert: string;
|
|
22
|
+
};
|
|
23
|
+
httpPort?: number | number[];
|
|
24
|
+
httpsPort?: number | number[];
|
|
25
|
+
reencrypt?: boolean;
|
|
26
|
+
name?: string;
|
|
27
|
+
[key: string]: any;
|
|
28
|
+
}): IRouteConfig;
|
|
29
|
+
/**
|
|
30
|
+
* Create an HTTP to HTTPS redirect route
|
|
31
|
+
* @param domains Domain(s) to match
|
|
32
|
+
* @param httpsPort HTTPS port to redirect to (default: 443)
|
|
33
|
+
* @param options Additional route options
|
|
34
|
+
* @returns Route configuration object
|
|
35
|
+
*/
|
|
36
|
+
export declare function createHttpToHttpsRedirect(domains: string | string[], httpsPort?: number, options?: Partial<IRouteConfig>): IRouteConfig;
|
|
37
|
+
/**
|
|
38
|
+
* Create an HTTPS passthrough route (SNI-based forwarding without TLS termination)
|
|
39
|
+
* @param domains Domain(s) to match
|
|
40
|
+
* @param target Target host and port
|
|
41
|
+
* @param options Additional route options
|
|
42
|
+
* @returns Route configuration object
|
|
43
|
+
*/
|
|
44
|
+
export declare function createHttpsPassthroughRoute(domains: string | string[], target: {
|
|
45
|
+
host: string | string[];
|
|
46
|
+
port: number;
|
|
47
|
+
}, options?: Partial<IRouteConfig>): IRouteConfig;
|
|
48
|
+
/**
|
|
49
|
+
* Create a complete HTTPS server with HTTP to HTTPS redirects
|
|
50
|
+
* @param domains Domain(s) to match
|
|
51
|
+
* @param target Target host and port
|
|
52
|
+
* @param options Additional configuration options
|
|
53
|
+
* @returns Array of two route configurations (HTTPS and HTTP redirect)
|
|
54
|
+
*/
|
|
55
|
+
export declare function createCompleteHttpsServer(domains: string | string[], target: {
|
|
56
|
+
host: string | string[];
|
|
57
|
+
port: number;
|
|
58
|
+
}, options?: {
|
|
59
|
+
certificate?: 'auto' | {
|
|
60
|
+
key: string;
|
|
61
|
+
cert: string;
|
|
62
|
+
};
|
|
63
|
+
httpPort?: number | number[];
|
|
64
|
+
httpsPort?: number | number[];
|
|
65
|
+
reencrypt?: boolean;
|
|
66
|
+
name?: string;
|
|
67
|
+
[key: string]: any;
|
|
68
|
+
}): IRouteConfig[];
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTPS Route Helper Functions
|
|
3
|
+
*
|
|
4
|
+
* This module provides utility functions for creating HTTPS route configurations
|
|
5
|
+
* including TLS termination and passthrough routes.
|
|
6
|
+
*/
|
|
7
|
+
import { SocketHandlers } from './socket-handlers.js';
|
|
8
|
+
/**
|
|
9
|
+
* Create an HTTPS route with TLS termination
|
|
10
|
+
* @param domains Domain(s) to match
|
|
11
|
+
* @param target Target host and port
|
|
12
|
+
* @param options Additional route options
|
|
13
|
+
* @returns Route configuration object
|
|
14
|
+
*/
|
|
15
|
+
export function createHttpsTerminateRoute(domains, target, options = {}) {
|
|
16
|
+
// Create route match
|
|
17
|
+
const match = {
|
|
18
|
+
ports: options.httpsPort || 443,
|
|
19
|
+
domains
|
|
20
|
+
};
|
|
21
|
+
// Create route action
|
|
22
|
+
const action = {
|
|
23
|
+
type: 'forward',
|
|
24
|
+
targets: [target],
|
|
25
|
+
tls: {
|
|
26
|
+
mode: options.reencrypt ? 'terminate-and-reencrypt' : 'terminate',
|
|
27
|
+
certificate: options.certificate || 'auto'
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
// Create the route config
|
|
31
|
+
return {
|
|
32
|
+
match,
|
|
33
|
+
action,
|
|
34
|
+
name: options.name || `HTTPS Route for ${Array.isArray(domains) ? domains.join(', ') : domains}`,
|
|
35
|
+
...options
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Create an HTTP to HTTPS redirect route
|
|
40
|
+
* @param domains Domain(s) to match
|
|
41
|
+
* @param httpsPort HTTPS port to redirect to (default: 443)
|
|
42
|
+
* @param options Additional route options
|
|
43
|
+
* @returns Route configuration object
|
|
44
|
+
*/
|
|
45
|
+
export function createHttpToHttpsRedirect(domains, httpsPort = 443, options = {}) {
|
|
46
|
+
// Create route match
|
|
47
|
+
const match = {
|
|
48
|
+
ports: options.match?.ports || 80,
|
|
49
|
+
domains
|
|
50
|
+
};
|
|
51
|
+
// Create route action
|
|
52
|
+
const action = {
|
|
53
|
+
type: 'socket-handler',
|
|
54
|
+
socketHandler: SocketHandlers.httpRedirect(`https://{domain}:${httpsPort}{path}`, 301)
|
|
55
|
+
};
|
|
56
|
+
// Create the route config
|
|
57
|
+
return {
|
|
58
|
+
match,
|
|
59
|
+
action,
|
|
60
|
+
name: options.name || `HTTP to HTTPS Redirect for ${Array.isArray(domains) ? domains.join(', ') : domains}`,
|
|
61
|
+
...options
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Create an HTTPS passthrough route (SNI-based forwarding without TLS termination)
|
|
66
|
+
* @param domains Domain(s) to match
|
|
67
|
+
* @param target Target host and port
|
|
68
|
+
* @param options Additional route options
|
|
69
|
+
* @returns Route configuration object
|
|
70
|
+
*/
|
|
71
|
+
export function createHttpsPassthroughRoute(domains, target, options = {}) {
|
|
72
|
+
// Create route match
|
|
73
|
+
const match = {
|
|
74
|
+
ports: options.match?.ports || 443,
|
|
75
|
+
domains
|
|
76
|
+
};
|
|
77
|
+
// Create route action
|
|
78
|
+
const action = {
|
|
79
|
+
type: 'forward',
|
|
80
|
+
targets: [target],
|
|
81
|
+
tls: {
|
|
82
|
+
mode: 'passthrough'
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
// Create the route config
|
|
86
|
+
return {
|
|
87
|
+
match,
|
|
88
|
+
action,
|
|
89
|
+
name: options.name || `HTTPS Passthrough for ${Array.isArray(domains) ? domains.join(', ') : domains}`,
|
|
90
|
+
...options
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Create a complete HTTPS server with HTTP to HTTPS redirects
|
|
95
|
+
* @param domains Domain(s) to match
|
|
96
|
+
* @param target Target host and port
|
|
97
|
+
* @param options Additional configuration options
|
|
98
|
+
* @returns Array of two route configurations (HTTPS and HTTP redirect)
|
|
99
|
+
*/
|
|
100
|
+
export function createCompleteHttpsServer(domains, target, options = {}) {
|
|
101
|
+
// Create the HTTPS route
|
|
102
|
+
const httpsRoute = createHttpsTerminateRoute(domains, target, options);
|
|
103
|
+
// Create the HTTP redirect route
|
|
104
|
+
const httpRedirectRoute = createHttpToHttpsRedirect(domains,
|
|
105
|
+
// Extract the HTTPS port from the HTTPS route - ensure it's a number
|
|
106
|
+
typeof options.httpsPort === 'number' ? options.httpsPort :
|
|
107
|
+
Array.isArray(options.httpsPort) ? options.httpsPort[0] : 443, {
|
|
108
|
+
// Set the HTTP port
|
|
109
|
+
match: {
|
|
110
|
+
ports: options.httpPort || 80,
|
|
111
|
+
domains
|
|
112
|
+
},
|
|
113
|
+
name: `HTTP to HTTPS Redirect for ${Array.isArray(domains) ? domains.join(', ') : domains}`
|
|
114
|
+
});
|
|
115
|
+
return [httpsRoute, httpRedirectRoute];
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cHMtaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RzL3Byb3hpZXMvc21hcnQtcHJveHkvdXRpbHMvcm91dGUtaGVscGVycy9odHRwcy1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBR0gsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXREOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSx5QkFBeUIsQ0FDdkMsT0FBMEIsRUFDMUIsTUFBaUQsRUFDakQsVUFPSSxFQUFFO0lBRU4scUJBQXFCO0lBQ3JCLE1BQU0sS0FBSyxHQUFnQjtRQUN6QixLQUFLLEVBQUUsT0FBTyxDQUFDLFNBQVMsSUFBSSxHQUFHO1FBQy9CLE9BQU87S0FDUixDQUFDO0lBRUYsc0JBQXNCO0lBQ3RCLE1BQU0sTUFBTSxHQUFpQjtRQUMzQixJQUFJLEVBQUUsU0FBUztRQUNmLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUNqQixHQUFHLEVBQUU7WUFDSCxJQUFJLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLFdBQVc7WUFDakUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXLElBQUksTUFBTTtTQUMzQztLQUNGLENBQUM7SUFFRiwwQkFBMEI7SUFDMUIsT0FBTztRQUNMLEtBQUs7UUFDTCxNQUFNO1FBQ04sSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLElBQUksbUJBQW1CLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRTtRQUNoRyxHQUFHLE9BQU87S0FDWCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSx5QkFBeUIsQ0FDdkMsT0FBMEIsRUFD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
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route Helper Functions
|
|
3
|
+
*
|
|
4
|
+
* This module provides utility functions for creating route configurations for common scenarios.
|
|
5
|
+
* These functions aim to simplify the creation of route configurations for typical use cases.
|
|
6
|
+
*
|
|
7
|
+
* This barrel file re-exports all helper functions for backwards compatibility.
|
|
8
|
+
*/
|
|
9
|
+
export { createHttpRoute } from './http-helpers.js';
|
|
10
|
+
export { createHttpsTerminateRoute, createHttpToHttpsRedirect, createHttpsPassthroughRoute, createCompleteHttpsServer } from './https-helpers.js';
|
|
11
|
+
export { createWebSocketRoute } from './websocket-helpers.js';
|
|
12
|
+
export { createLoadBalancerRoute, createSmartLoadBalancer } from './load-balancer-helpers.js';
|
|
13
|
+
export { createNfTablesRoute, createNfTablesTerminateRoute, createCompleteNfTablesHttpsServer } from './nftables-helpers.js';
|
|
14
|
+
export { createPortOffset, createPortMappingRoute, createOffsetPortMappingRoute, createDynamicRoute } from './dynamic-helpers.js';
|
|
15
|
+
export { createApiRoute, createApiGatewayRoute } from './api-helpers.js';
|
|
16
|
+
export { addRateLimiting, addBasicAuth, addJwtAuth } from './security-helpers.js';
|
|
17
|
+
export { SocketHandlers, createSocketHandlerRoute } from './socket-handlers.js';
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route Helper Functions
|
|
3
|
+
*
|
|
4
|
+
* This module provides utility functions for creating route configurations for common scenarios.
|
|
5
|
+
* These functions aim to simplify the creation of route configurations for typical use cases.
|
|
6
|
+
*
|
|
7
|
+
* This barrel file re-exports all helper functions for backwards compatibility.
|
|
8
|
+
*/
|
|
9
|
+
// HTTP helpers
|
|
10
|
+
export { createHttpRoute } from './http-helpers.js';
|
|
11
|
+
// HTTPS helpers
|
|
12
|
+
export { createHttpsTerminateRoute, createHttpToHttpsRedirect, createHttpsPassthroughRoute, createCompleteHttpsServer } from './https-helpers.js';
|
|
13
|
+
// WebSocket helpers
|
|
14
|
+
export { createWebSocketRoute } from './websocket-helpers.js';
|
|
15
|
+
// Load balancer helpers
|
|
16
|
+
export { createLoadBalancerRoute, createSmartLoadBalancer } from './load-balancer-helpers.js';
|
|
17
|
+
// NFTables helpers
|
|
18
|
+
export { createNfTablesRoute, createNfTablesTerminateRoute, createCompleteNfTablesHttpsServer } from './nftables-helpers.js';
|
|
19
|
+
// Dynamic routing helpers
|
|
20
|
+
export { createPortOffset, createPortMappingRoute, createOffsetPortMappingRoute, createDynamicRoute } from './dynamic-helpers.js';
|
|
21
|
+
// API helpers
|
|
22
|
+
export { createApiRoute, createApiGatewayRoute } from './api-helpers.js';
|
|
23
|
+
// Security helpers
|
|
24
|
+
export { addRateLimiting, addBasicAuth, addJwtAuth } from './security-helpers.js';
|
|
25
|
+
// Socket handlers
|
|
26
|
+
export { SocketHandlers, createSocketHandlerRoute } from './socket-handlers.js';
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90cy9wcm94aWVzL3NtYXJ0LXByb3h5L3V0aWxzL3JvdXRlLWhlbHBlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUVILGVBQWU7QUFDZixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQsZ0JBQWdCO0FBQ2hCLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIseUJBQXlCLEVBQ3pCLDJCQUEyQixFQUMzQix5QkFBeUIsRUFDMUIsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QixvQkFBb0I7QUFDcEIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFOUQsd0JBQXdCO0FBQ3hCLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsdUJBQXVCLEVBQ3hCLE1BQU0sNEJBQTRCLENBQUM7QUFFcEMsbUJBQW1CO0FBQ25CLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsNEJBQTRCLEVBQzVCLGlDQUFpQyxFQUNsQyxNQUFNLHVCQUF1QixDQUFDO0FBRS9CLDBCQUEwQjtBQUMxQixPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLHNCQUFzQixFQUN0Qiw0QkFBNEIsRUFDNUIsa0JBQWtCLEVBQ25CLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsY0FBYztBQUNkLE9BQU8sRUFDTCxjQUFjLEVBQ2QscUJBQXFCLEVBQ3RCLE1BQU0sa0JBQWtCLENBQUM7QUFFMUIsbUJBQW1CO0FBQ25CLE9BQU8sRUFDTCxlQUFlLEVBQ2YsWUFBWSxFQUNaLFVBQVUsRUFDWCxNQUFNLHVCQUF1QixDQUFDO0FBRS9CLGtCQUFrQjtBQUNsQixPQUFPLEVBQ0wsY0FBYyxFQUNkLHdCQUF3QixFQUN6QixNQUFNLHNCQUFzQixDQUFDIn0=
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Load Balancer Route Helper Functions
|
|
3
|
+
*
|
|
4
|
+
* This module provides utility functions for creating load balancer route configurations.
|
|
5
|
+
*/
|
|
6
|
+
import type { IRouteConfig, TPortRange, IRouteContext } from '../../models/route-types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Create a load balancer route (round-robin between multiple backend hosts)
|
|
9
|
+
* @param domains Domain(s) to match
|
|
10
|
+
* @param backendsOrHosts Array of backend servers OR array of host strings (legacy)
|
|
11
|
+
* @param portOrOptions Port number (legacy) OR options object
|
|
12
|
+
* @param options Additional route options (legacy)
|
|
13
|
+
* @returns Route configuration object
|
|
14
|
+
*/
|
|
15
|
+
export declare function createLoadBalancerRoute(domains: string | string[], backendsOrHosts: Array<{
|
|
16
|
+
host: string;
|
|
17
|
+
port: number;
|
|
18
|
+
}> | string[], portOrOptions?: number | {
|
|
19
|
+
tls?: {
|
|
20
|
+
mode: 'passthrough' | 'terminate' | 'terminate-and-reencrypt';
|
|
21
|
+
certificate?: 'auto' | {
|
|
22
|
+
key: string;
|
|
23
|
+
cert: string;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
useTls?: boolean;
|
|
27
|
+
certificate?: 'auto' | {
|
|
28
|
+
key: string;
|
|
29
|
+
cert: string;
|
|
30
|
+
};
|
|
31
|
+
algorithm?: 'round-robin' | 'least-connections' | 'ip-hash';
|
|
32
|
+
healthCheck?: {
|
|
33
|
+
path: string;
|
|
34
|
+
interval: number;
|
|
35
|
+
timeout: number;
|
|
36
|
+
unhealthyThreshold: number;
|
|
37
|
+
healthyThreshold: number;
|
|
38
|
+
};
|
|
39
|
+
[key: string]: any;
|
|
40
|
+
}, options?: {
|
|
41
|
+
tls?: {
|
|
42
|
+
mode: 'passthrough' | 'terminate' | 'terminate-and-reencrypt';
|
|
43
|
+
certificate?: 'auto' | {
|
|
44
|
+
key: string;
|
|
45
|
+
cert: string;
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
[key: string]: any;
|
|
49
|
+
}): IRouteConfig;
|
|
50
|
+
/**
|
|
51
|
+
* Create a smart load balancer with dynamic domain-based backend selection
|
|
52
|
+
* @param options Smart load balancer options
|
|
53
|
+
* @returns Route configuration object
|
|
54
|
+
*/
|
|
55
|
+
export declare function createSmartLoadBalancer(options: {
|
|
56
|
+
ports: TPortRange;
|
|
57
|
+
domainTargets: Record<string, string | string[]>;
|
|
58
|
+
portMapper: (context: IRouteContext) => number;
|
|
59
|
+
name?: string;
|
|
60
|
+
defaultTarget?: string | string[];
|
|
61
|
+
priority?: number;
|
|
62
|
+
[key: string]: any;
|
|
63
|
+
}): IRouteConfig;
|