@push.rocks/smartproxy 23.0.0 → 23.1.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/changelog.md +17 -0
- package/dist_rust/{rustproxy → rustproxy_linux_amd64} +0 -0
- package/dist_rust/rustproxy_linux_arm64 +0 -0
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/plugins.d.ts +2 -1
- package/dist_ts/plugins.js +3 -2
- package/dist_ts/proxies/smart-proxy/rust-proxy-bridge.d.ts +9 -21
- package/dist_ts/proxies/smart-proxy/rust-proxy-bridge.js +84 -212
- package/dist_ts/proxies/smart-proxy/smart-proxy.js +2 -3
- package/npmextra.json +3 -0
- package/package.json +13 -11
- package/readme.md +41 -11
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/plugins.ts +2 -0
- package/ts/proxies/smart-proxy/rust-proxy-bridge.ts +103 -233
- package/ts/proxies/smart-proxy/smart-proxy.ts +1 -2
- package/dist_ts/common/eventUtils.d.ts +0 -14
- package/dist_ts/common/eventUtils.js +0 -20
- package/dist_ts/common/types.d.ts +0 -82
- package/dist_ts/common/types.js +0 -15
- package/dist_ts/core/utils/event-system.d.ts +0 -200
- package/dist_ts/core/utils/event-system.js +0 -224
- package/dist_ts/core/utils/event-utils.d.ts +0 -15
- package/dist_ts/core/utils/event-utils.js +0 -11
- package/dist_ts/core/utils/route-manager.d.ts +0 -88
- package/dist_ts/core/utils/route-manager.js +0 -342
- package/dist_ts/core/utils/route-utils.d.ts +0 -28
- package/dist_ts/core/utils/route-utils.js +0 -67
- package/dist_ts/detection/detectors/http-detector-v2.d.ts +0 -33
- package/dist_ts/detection/detectors/http-detector-v2.js +0 -87
- package/dist_ts/detection/detectors/tls-detector-v2.d.ts +0 -33
- package/dist_ts/detection/detectors/tls-detector-v2.js +0 -80
- package/dist_ts/detection/protocol-detector-v2.d.ts +0 -46
- package/dist_ts/detection/protocol-detector-v2.js +0 -116
- package/dist_ts/forwarding/config/forwarding-types.d.ts +0 -42
- package/dist_ts/forwarding/config/forwarding-types.js +0 -18
- package/dist_ts/forwarding/config/index.d.ts +0 -9
- package/dist_ts/forwarding/config/index.js +0 -10
- package/dist_ts/forwarding/factory/forwarding-factory.d.ts +0 -25
- package/dist_ts/forwarding/factory/forwarding-factory.js +0 -172
- package/dist_ts/forwarding/factory/index.d.ts +0 -4
- package/dist_ts/forwarding/factory/index.js +0 -5
- package/dist_ts/forwarding/handlers/base-handler.d.ts +0 -62
- package/dist_ts/forwarding/handlers/base-handler.js +0 -121
- package/dist_ts/forwarding/handlers/http-handler.d.ts +0 -30
- package/dist_ts/forwarding/handlers/http-handler.js +0 -143
- package/dist_ts/forwarding/handlers/https-passthrough-handler.d.ts +0 -29
- package/dist_ts/forwarding/handlers/https-passthrough-handler.js +0 -156
- package/dist_ts/forwarding/handlers/https-terminate-to-http-handler.d.ts +0 -36
- package/dist_ts/forwarding/handlers/https-terminate-to-http-handler.js +0 -276
- package/dist_ts/forwarding/handlers/https-terminate-to-https-handler.d.ts +0 -35
- package/dist_ts/forwarding/handlers/https-terminate-to-https-handler.js +0 -261
- package/dist_ts/forwarding/handlers/index.d.ts +0 -8
- package/dist_ts/forwarding/handlers/index.js +0 -9
- package/dist_ts/forwarding/index.d.ts +0 -13
- package/dist_ts/forwarding/index.js +0 -16
- package/dist_ts/http/index.d.ts +0 -5
- package/dist_ts/http/index.js +0 -8
- package/dist_ts/http/models/http-types.d.ts +0 -6
- package/dist_ts/http/models/http-types.js +0 -7
- package/dist_ts/http/router/index.d.ts +0 -8
- package/dist_ts/http/router/index.js +0 -7
- package/dist_ts/http/router/proxy-router.d.ts +0 -115
- package/dist_ts/http/router/proxy-router.js +0 -325
- package/dist_ts/http/router/route-router.d.ts +0 -108
- package/dist_ts/http/router/route-router.js +0 -393
- package/dist_ts/protocols/tls/constants.d.ts +0 -122
- package/dist_ts/protocols/tls/constants.js +0 -135
- package/dist_ts/protocols/tls/parser.d.ts +0 -53
- package/dist_ts/protocols/tls/parser.js +0 -294
- package/dist_ts/protocols/tls/types.d.ts +0 -65
- package/dist_ts/protocols/tls/types.js +0 -5
- package/dist_ts/proxies/http-proxy/certificate-manager.d.ts +0 -95
- package/dist_ts/proxies/http-proxy/certificate-manager.js +0 -214
- package/dist_ts/proxies/http-proxy/connection-pool.d.ts +0 -47
- package/dist_ts/proxies/http-proxy/connection-pool.js +0 -195
- package/dist_ts/proxies/http-proxy/context-creator.d.ts +0 -34
- package/dist_ts/proxies/http-proxy/context-creator.js +0 -108
- package/dist_ts/proxies/http-proxy/default-certificates.d.ts +0 -54
- package/dist_ts/proxies/http-proxy/default-certificates.js +0 -127
- package/dist_ts/proxies/http-proxy/function-cache.d.ts +0 -95
- package/dist_ts/proxies/http-proxy/function-cache.js +0 -215
- package/dist_ts/proxies/http-proxy/handlers/index.d.ts +0 -4
- package/dist_ts/proxies/http-proxy/handlers/index.js +0 -6
- package/dist_ts/proxies/http-proxy/handlers/redirect-handler.d.ts +0 -18
- package/dist_ts/proxies/http-proxy/handlers/redirect-handler.js +0 -78
- package/dist_ts/proxies/http-proxy/handlers/static-handler.d.ts +0 -19
- package/dist_ts/proxies/http-proxy/handlers/static-handler.js +0 -211
- package/dist_ts/proxies/http-proxy/http-proxy.d.ts +0 -117
- package/dist_ts/proxies/http-proxy/http-proxy.js +0 -521
- package/dist_ts/proxies/http-proxy/http-request-handler.d.ts +0 -40
- package/dist_ts/proxies/http-proxy/http-request-handler.js +0 -257
- package/dist_ts/proxies/http-proxy/http2-request-handler.d.ts +0 -24
- package/dist_ts/proxies/http-proxy/http2-request-handler.js +0 -201
- package/dist_ts/proxies/http-proxy/index.d.ts +0 -14
- package/dist_ts/proxies/http-proxy/index.js +0 -16
- package/dist_ts/proxies/http-proxy/models/http-types.d.ts +0 -117
- package/dist_ts/proxies/http-proxy/models/http-types.js +0 -92
- package/dist_ts/proxies/http-proxy/models/index.d.ts +0 -5
- package/dist_ts/proxies/http-proxy/models/index.js +0 -6
- package/dist_ts/proxies/http-proxy/models/types.d.ts +0 -75
- package/dist_ts/proxies/http-proxy/models/types.js +0 -35
- package/dist_ts/proxies/http-proxy/request-handler.d.ts +0 -97
- package/dist_ts/proxies/http-proxy/request-handler.js +0 -737
- package/dist_ts/proxies/http-proxy/security-manager.d.ts +0 -98
- package/dist_ts/proxies/http-proxy/security-manager.js +0 -341
- package/dist_ts/proxies/http-proxy/websocket-handler.d.ts +0 -50
- package/dist_ts/proxies/http-proxy/websocket-handler.js +0 -505
- package/dist_ts/proxies/smart-proxy/acme-state-manager.d.ts +0 -42
- package/dist_ts/proxies/smart-proxy/acme-state-manager.js +0 -101
- package/dist_ts/proxies/smart-proxy/cert-store.d.ts +0 -10
- package/dist_ts/proxies/smart-proxy/cert-store.js +0 -72
- package/dist_ts/proxies/smart-proxy/certificate-manager.d.ts +0 -164
- package/dist_ts/proxies/smart-proxy/certificate-manager.js +0 -745
- package/dist_ts/proxies/smart-proxy/connection-manager.d.ts +0 -128
- package/dist_ts/proxies/smart-proxy/connection-manager.js +0 -689
- package/dist_ts/proxies/smart-proxy/http-proxy-bridge.d.ts +0 -43
- package/dist_ts/proxies/smart-proxy/http-proxy-bridge.js +0 -180
- package/dist_ts/proxies/smart-proxy/metrics-collector.d.ts +0 -98
- package/dist_ts/proxies/smart-proxy/metrics-collector.js +0 -355
- package/dist_ts/proxies/smart-proxy/nftables-manager.d.ts +0 -82
- package/dist_ts/proxies/smart-proxy/nftables-manager.js +0 -237
- package/dist_ts/proxies/smart-proxy/port-manager.d.ts +0 -117
- package/dist_ts/proxies/smart-proxy/port-manager.js +0 -318
- package/dist_ts/proxies/smart-proxy/route-connection-handler.d.ts +0 -60
- package/dist_ts/proxies/smart-proxy/route-connection-handler.js +0 -1407
- package/dist_ts/proxies/smart-proxy/route-manager.d.ts +0 -112
- package/dist_ts/proxies/smart-proxy/route-manager.js +0 -453
- package/dist_ts/proxies/smart-proxy/route-orchestrator.d.ts +0 -56
- package/dist_ts/proxies/smart-proxy/route-orchestrator.js +0 -204
- package/dist_ts/proxies/smart-proxy/rust-binary-locator.d.ts +0 -23
- package/dist_ts/proxies/smart-proxy/rust-binary-locator.js +0 -104
- package/dist_ts/proxies/smart-proxy/security-manager.d.ts +0 -74
- package/dist_ts/proxies/smart-proxy/security-manager.js +0 -227
- package/dist_ts/proxies/smart-proxy/throughput-tracker.d.ts +0 -36
- package/dist_ts/proxies/smart-proxy/throughput-tracker.js +0 -115
- package/dist_ts/proxies/smart-proxy/timeout-manager.d.ts +0 -48
- package/dist_ts/proxies/smart-proxy/timeout-manager.js +0 -158
- package/dist_ts/proxies/smart-proxy/tls-manager.d.ts +0 -50
- package/dist_ts/proxies/smart-proxy/tls-manager.js +0 -110
- package/dist_ts/proxies/smart-proxy/utils/route-patterns.d.ts +0 -161
- package/dist_ts/proxies/smart-proxy/utils/route-patterns.js +0 -282
- package/dist_ts/proxies/smart-proxy/utils/route-validators.d.ts +0 -73
- package/dist_ts/proxies/smart-proxy/utils/route-validators.js +0 -259
- package/dist_ts/routing/router/proxy-router.d.ts +0 -115
- package/dist_ts/routing/router/proxy-router.js +0 -325
- package/dist_ts/routing/router/route-router.d.ts +0 -108
- package/dist_ts/routing/router/route-router.js +0 -393
- package/dist_ts/tls/alerts/index.d.ts +0 -4
- package/dist_ts/tls/alerts/index.js +0 -5
- package/dist_ts/tls/alerts/tls-alert.d.ts +0 -150
- package/dist_ts/tls/alerts/tls-alert.js +0 -226
- package/dist_ts/tls/sni/client-hello-parser.d.ts +0 -100
- package/dist_ts/tls/sni/client-hello-parser.js +0 -464
- package/dist_ts/tls/sni/sni-extraction.d.ts +0 -58
- package/dist_ts/tls/sni/sni-extraction.js +0 -275
- package/dist_ts/tls/utils/index.d.ts +0 -4
- package/dist_ts/tls/utils/index.js +0 -5
- package/dist_ts/tls/utils/tls-utils.d.ts +0 -49
- package/dist_ts/tls/utils/tls-utils.js +0 -75
- package/ts/proxies/smart-proxy/rust-binary-locator.ts +0 -112
|
@@ -1,259 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Route Validators
|
|
3
|
-
*
|
|
4
|
-
* This file provides utility functions for validating route configurations.
|
|
5
|
-
* These validators help ensure that route configurations are valid and correctly structured.
|
|
6
|
-
*/
|
|
7
|
-
/**
|
|
8
|
-
* Validates a port range or port number
|
|
9
|
-
* @param port Port number, port range, or port function
|
|
10
|
-
* @returns True if valid, false otherwise
|
|
11
|
-
*/
|
|
12
|
-
export function isValidPort(port) {
|
|
13
|
-
if (typeof port === 'number') {
|
|
14
|
-
return port > 0 && port < 65536; // Valid port range is 1-65535
|
|
15
|
-
}
|
|
16
|
-
else if (Array.isArray(port)) {
|
|
17
|
-
return port.every(p => (typeof p === 'number' && p > 0 && p < 65536) ||
|
|
18
|
-
(typeof p === 'object' && 'from' in p && 'to' in p &&
|
|
19
|
-
p.from > 0 && p.from < 65536 && p.to > 0 && p.to < 65536));
|
|
20
|
-
}
|
|
21
|
-
else if (typeof port === 'function') {
|
|
22
|
-
// For function-based ports, we can't validate the result at config time
|
|
23
|
-
// so we just check that it's a function
|
|
24
|
-
return true;
|
|
25
|
-
}
|
|
26
|
-
else if (typeof port === 'object' && 'from' in port && 'to' in port) {
|
|
27
|
-
return port.from > 0 && port.from < 65536 && port.to > 0 && port.to < 65536;
|
|
28
|
-
}
|
|
29
|
-
return false;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Validates a domain string
|
|
33
|
-
* @param domain Domain string to validate
|
|
34
|
-
* @returns True if valid, false otherwise
|
|
35
|
-
*/
|
|
36
|
-
export function isValidDomain(domain) {
|
|
37
|
-
// Basic domain validation regex - allows wildcards (*.example.com)
|
|
38
|
-
const domainRegex = /^(\*\.)?([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/;
|
|
39
|
-
return domainRegex.test(domain);
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Validates a route match configuration
|
|
43
|
-
* @param match Route match configuration to validate
|
|
44
|
-
* @returns { valid: boolean, errors: string[] } Validation result
|
|
45
|
-
*/
|
|
46
|
-
export function validateRouteMatch(match) {
|
|
47
|
-
const errors = [];
|
|
48
|
-
// Validate ports
|
|
49
|
-
if (match.ports !== undefined) {
|
|
50
|
-
if (!isValidPort(match.ports)) {
|
|
51
|
-
errors.push('Invalid port number or port range in match.ports');
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
// Validate domains
|
|
55
|
-
if (match.domains !== undefined) {
|
|
56
|
-
if (typeof match.domains === 'string') {
|
|
57
|
-
if (!isValidDomain(match.domains)) {
|
|
58
|
-
errors.push(`Invalid domain format: ${match.domains}`);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
else if (Array.isArray(match.domains)) {
|
|
62
|
-
for (const domain of match.domains) {
|
|
63
|
-
if (!isValidDomain(domain)) {
|
|
64
|
-
errors.push(`Invalid domain format: ${domain}`);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
errors.push('Domains must be a string or an array of strings');
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
// Validate path
|
|
73
|
-
if (match.path !== undefined) {
|
|
74
|
-
if (typeof match.path !== 'string' || !match.path.startsWith('/')) {
|
|
75
|
-
errors.push('Path must be a string starting with /');
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
return {
|
|
79
|
-
valid: errors.length === 0,
|
|
80
|
-
errors
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Validates a route action configuration
|
|
85
|
-
* @param action Route action configuration to validate
|
|
86
|
-
* @returns { valid: boolean, errors: string[] } Validation result
|
|
87
|
-
*/
|
|
88
|
-
export function validateRouteAction(action) {
|
|
89
|
-
const errors = [];
|
|
90
|
-
// Validate action type
|
|
91
|
-
if (!action.type) {
|
|
92
|
-
errors.push('Action type is required');
|
|
93
|
-
}
|
|
94
|
-
else if (!['forward', 'socket-handler'].includes(action.type)) {
|
|
95
|
-
errors.push(`Invalid action type: ${action.type}`);
|
|
96
|
-
}
|
|
97
|
-
// Validate targets for 'forward' action
|
|
98
|
-
if (action.type === 'forward') {
|
|
99
|
-
if (!action.targets || !Array.isArray(action.targets) || action.targets.length === 0) {
|
|
100
|
-
errors.push('Targets array is required for forward action');
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
// Validate each target
|
|
104
|
-
action.targets.forEach((target, index) => {
|
|
105
|
-
// Validate target host
|
|
106
|
-
if (!target.host) {
|
|
107
|
-
errors.push(`Target[${index}] host is required`);
|
|
108
|
-
}
|
|
109
|
-
else if (typeof target.host !== 'string' &&
|
|
110
|
-
!Array.isArray(target.host) &&
|
|
111
|
-
typeof target.host !== 'function') {
|
|
112
|
-
errors.push(`Target[${index}] host must be a string, array of strings, or function`);
|
|
113
|
-
}
|
|
114
|
-
// Validate target port
|
|
115
|
-
if (target.port === undefined) {
|
|
116
|
-
errors.push(`Target[${index}] port is required`);
|
|
117
|
-
}
|
|
118
|
-
else if (typeof target.port !== 'number' &&
|
|
119
|
-
typeof target.port !== 'function' &&
|
|
120
|
-
target.port !== 'preserve') {
|
|
121
|
-
errors.push(`Target[${index}] port must be a number, 'preserve', or a function`);
|
|
122
|
-
}
|
|
123
|
-
else if (typeof target.port === 'number' && !isValidPort(target.port)) {
|
|
124
|
-
errors.push(`Target[${index}] port must be between 1 and 65535`);
|
|
125
|
-
}
|
|
126
|
-
// Validate match criteria if present
|
|
127
|
-
if (target.match) {
|
|
128
|
-
if (target.match.ports && !Array.isArray(target.match.ports)) {
|
|
129
|
-
errors.push(`Target[${index}] match.ports must be an array`);
|
|
130
|
-
}
|
|
131
|
-
if (target.match.method && !Array.isArray(target.match.method)) {
|
|
132
|
-
errors.push(`Target[${index}] match.method must be an array`);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
// Validate TLS options for forward actions
|
|
138
|
-
if (action.tls) {
|
|
139
|
-
if (!['passthrough', 'terminate', 'terminate-and-reencrypt'].includes(action.tls.mode)) {
|
|
140
|
-
errors.push(`Invalid TLS mode: ${action.tls.mode}`);
|
|
141
|
-
}
|
|
142
|
-
// For termination modes, validate certificate
|
|
143
|
-
if (['terminate', 'terminate-and-reencrypt'].includes(action.tls.mode)) {
|
|
144
|
-
if (action.tls.certificate !== 'auto' &&
|
|
145
|
-
(!action.tls.certificate || !action.tls.certificate.key || !action.tls.certificate.cert)) {
|
|
146
|
-
errors.push('Certificate must be "auto" or an object with key and cert properties');
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
// Validate socket handler for 'socket-handler' action
|
|
152
|
-
if (action.type === 'socket-handler') {
|
|
153
|
-
if (!action.socketHandler) {
|
|
154
|
-
errors.push('Socket handler function is required for socket-handler action');
|
|
155
|
-
}
|
|
156
|
-
else if (typeof action.socketHandler !== 'function') {
|
|
157
|
-
errors.push('Socket handler must be a function');
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
return {
|
|
161
|
-
valid: errors.length === 0,
|
|
162
|
-
errors
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Validates a complete route configuration
|
|
167
|
-
* @param route Route configuration to validate
|
|
168
|
-
* @returns { valid: boolean, errors: string[] } Validation result
|
|
169
|
-
*/
|
|
170
|
-
export function validateRouteConfig(route) {
|
|
171
|
-
const errors = [];
|
|
172
|
-
// Check for required properties
|
|
173
|
-
if (!route.match) {
|
|
174
|
-
errors.push('Route match configuration is required');
|
|
175
|
-
}
|
|
176
|
-
if (!route.action) {
|
|
177
|
-
errors.push('Route action configuration is required');
|
|
178
|
-
}
|
|
179
|
-
// Validate match configuration
|
|
180
|
-
if (route.match) {
|
|
181
|
-
const matchValidation = validateRouteMatch(route.match);
|
|
182
|
-
if (!matchValidation.valid) {
|
|
183
|
-
errors.push(...matchValidation.errors.map(err => `Match: ${err}`));
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
// Validate action configuration
|
|
187
|
-
if (route.action) {
|
|
188
|
-
const actionValidation = validateRouteAction(route.action);
|
|
189
|
-
if (!actionValidation.valid) {
|
|
190
|
-
errors.push(...actionValidation.errors.map(err => `Action: ${err}`));
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
// Ensure the route has a unique identifier
|
|
194
|
-
if (!route.id && !route.name) {
|
|
195
|
-
errors.push('Route should have either an id or a name for identification');
|
|
196
|
-
}
|
|
197
|
-
return {
|
|
198
|
-
valid: errors.length === 0,
|
|
199
|
-
errors
|
|
200
|
-
};
|
|
201
|
-
}
|
|
202
|
-
/**
|
|
203
|
-
* Validate an array of route configurations
|
|
204
|
-
* @param routes Array of route configurations to validate
|
|
205
|
-
* @returns { valid: boolean, errors: { index: number, errors: string[] }[] } Validation result
|
|
206
|
-
*/
|
|
207
|
-
export function validateRoutes(routes) {
|
|
208
|
-
const results = [];
|
|
209
|
-
routes.forEach((route, index) => {
|
|
210
|
-
const validation = validateRouteConfig(route);
|
|
211
|
-
if (!validation.valid) {
|
|
212
|
-
results.push({
|
|
213
|
-
index,
|
|
214
|
-
errors: validation.errors
|
|
215
|
-
});
|
|
216
|
-
}
|
|
217
|
-
});
|
|
218
|
-
return {
|
|
219
|
-
valid: results.length === 0,
|
|
220
|
-
errors: results
|
|
221
|
-
};
|
|
222
|
-
}
|
|
223
|
-
/**
|
|
224
|
-
* Check if a route configuration has the required properties for a specific action type
|
|
225
|
-
* @param route Route configuration to check
|
|
226
|
-
* @param actionType Expected action type
|
|
227
|
-
* @returns True if the route has the necessary properties, false otherwise
|
|
228
|
-
*/
|
|
229
|
-
export function hasRequiredPropertiesForAction(route, actionType) {
|
|
230
|
-
if (!route.action || route.action.type !== actionType) {
|
|
231
|
-
return false;
|
|
232
|
-
}
|
|
233
|
-
switch (actionType) {
|
|
234
|
-
case 'forward':
|
|
235
|
-
return !!route.action.targets &&
|
|
236
|
-
Array.isArray(route.action.targets) &&
|
|
237
|
-
route.action.targets.length > 0 &&
|
|
238
|
-
route.action.targets.every(t => t.host && t.port !== undefined);
|
|
239
|
-
case 'socket-handler':
|
|
240
|
-
return !!route.action.socketHandler && typeof route.action.socketHandler === 'function';
|
|
241
|
-
default:
|
|
242
|
-
return false;
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
/**
|
|
246
|
-
* Throws an error if the route config is invalid, returns the config if valid
|
|
247
|
-
* Useful for immediate validation when creating routes
|
|
248
|
-
* @param route Route configuration to validate
|
|
249
|
-
* @returns The validated route configuration
|
|
250
|
-
* @throws Error if the route configuration is invalid
|
|
251
|
-
*/
|
|
252
|
-
export function assertValidRoute(route) {
|
|
253
|
-
const validation = validateRouteConfig(route);
|
|
254
|
-
if (!validation.valid) {
|
|
255
|
-
throw new Error(`Invalid route configuration: ${validation.errors.join(', ')}`);
|
|
256
|
-
}
|
|
257
|
-
return route;
|
|
258
|
-
}
|
|
259
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtdmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzL3Byb3hpZXMvc21hcnQtcHJveHkvdXRpbHMvcm91dGUtdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUlIOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLElBQVM7SUFDbkMsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM3QixPQUFPLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLDhCQUE4QjtJQUNqRSxDQUFDO1NBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDL0IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ3BCLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUM3QyxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxNQUFNLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDO2dCQUNqRCxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUMzRCxDQUFDO0lBQ0osQ0FBQztTQUFNLElBQUksT0FBTyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDdEMsd0VBQXdFO1FBQ3hFLHdDQUF3QztRQUN4QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7U0FBTSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxNQUFNLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN0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
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../../plugins.js';
|
|
2
|
-
import type { IReverseProxyConfig } from '../../proxies/http-proxy/models/types.js';
|
|
3
|
-
/**
|
|
4
|
-
* Optional path pattern configuration that can be added to proxy configs
|
|
5
|
-
*/
|
|
6
|
-
export interface PathPatternConfig {
|
|
7
|
-
pathPattern?: string;
|
|
8
|
-
}
|
|
9
|
-
export type IPathPatternConfig = PathPatternConfig;
|
|
10
|
-
/**
|
|
11
|
-
* Interface for router result with additional metadata
|
|
12
|
-
*/
|
|
13
|
-
export interface RouterResult {
|
|
14
|
-
config: IReverseProxyConfig;
|
|
15
|
-
pathMatch?: string;
|
|
16
|
-
pathParams?: Record<string, string>;
|
|
17
|
-
pathRemainder?: string;
|
|
18
|
-
}
|
|
19
|
-
export type IRouterResult = RouterResult;
|
|
20
|
-
/**
|
|
21
|
-
* Router for HTTP reverse proxy requests
|
|
22
|
-
*
|
|
23
|
-
* Supports the following domain matching patterns:
|
|
24
|
-
* - Exact matches: "example.com"
|
|
25
|
-
* - Wildcard subdomains: "*.example.com" (matches any subdomain of example.com)
|
|
26
|
-
* - TLD wildcards: "example.*" (matches example.com, example.org, etc.)
|
|
27
|
-
* - Complex wildcards: "*.lossless*" (matches any subdomain of any lossless domain)
|
|
28
|
-
* - Default fallback: "*" (matches any unmatched domain)
|
|
29
|
-
*
|
|
30
|
-
* Also supports path pattern matching for each domain:
|
|
31
|
-
* - Exact path: "/api/users"
|
|
32
|
-
* - Wildcard paths: "/api/*"
|
|
33
|
-
* - Path parameters: "/users/:id/profile"
|
|
34
|
-
*/
|
|
35
|
-
export declare class ProxyRouter {
|
|
36
|
-
private reverseProxyConfigs;
|
|
37
|
-
private defaultConfig?;
|
|
38
|
-
private pathPatterns;
|
|
39
|
-
private logger;
|
|
40
|
-
constructor(configs?: IReverseProxyConfig[], logger?: {
|
|
41
|
-
error: (message: string, data?: any) => void;
|
|
42
|
-
warn: (message: string, data?: any) => void;
|
|
43
|
-
info: (message: string, data?: any) => void;
|
|
44
|
-
debug: (message: string, data?: any) => void;
|
|
45
|
-
});
|
|
46
|
-
/**
|
|
47
|
-
* Sets a new set of reverse configs to be routed to
|
|
48
|
-
* @param reverseCandidatesArg Array of reverse proxy configurations
|
|
49
|
-
*/
|
|
50
|
-
setNewProxyConfigs(reverseCandidatesArg: IReverseProxyConfig[]): void;
|
|
51
|
-
/**
|
|
52
|
-
* Routes a request based on hostname and path
|
|
53
|
-
* @param req The incoming HTTP request
|
|
54
|
-
* @returns The matching proxy config or undefined if no match found
|
|
55
|
-
*/
|
|
56
|
-
routeReq(req: plugins.http.IncomingMessage): IReverseProxyConfig;
|
|
57
|
-
/**
|
|
58
|
-
* Routes a request with detailed matching information
|
|
59
|
-
* @param req The incoming HTTP request
|
|
60
|
-
* @returns Detailed routing result including matched config and path information
|
|
61
|
-
*/
|
|
62
|
-
routeReqWithDetails(req: plugins.http.IncomingMessage): RouterResult | undefined;
|
|
63
|
-
/**
|
|
64
|
-
* Find potential wildcard patterns that could match a given hostname
|
|
65
|
-
* Handles complex patterns like "*.lossless*" or other partial matches
|
|
66
|
-
* @param hostname The hostname to find wildcard matches for
|
|
67
|
-
* @returns Array of potential wildcard patterns that could match
|
|
68
|
-
*/
|
|
69
|
-
private findWildcardMatches;
|
|
70
|
-
/**
|
|
71
|
-
* Find a config for a specific host and path
|
|
72
|
-
*/
|
|
73
|
-
private findConfigForHost;
|
|
74
|
-
/**
|
|
75
|
-
* Matches a URL path against a pattern
|
|
76
|
-
* Supports:
|
|
77
|
-
* - Exact matches: /users/profile
|
|
78
|
-
* - Wildcards: /api/* (matches any path starting with /api/)
|
|
79
|
-
* - Path parameters: /users/:id (captures id as a parameter)
|
|
80
|
-
*
|
|
81
|
-
* @param path The URL path to match
|
|
82
|
-
* @param pattern The pattern to match against
|
|
83
|
-
* @returns Match result with params and remainder, or null if no match
|
|
84
|
-
*/
|
|
85
|
-
private matchPath;
|
|
86
|
-
/**
|
|
87
|
-
* Gets all currently active proxy configurations
|
|
88
|
-
* @returns Array of all active configurations
|
|
89
|
-
*/
|
|
90
|
-
getProxyConfigs(): IReverseProxyConfig[];
|
|
91
|
-
/**
|
|
92
|
-
* Gets all hostnames that this router is configured to handle
|
|
93
|
-
* @returns Array of hostnames
|
|
94
|
-
*/
|
|
95
|
-
getHostnames(): string[];
|
|
96
|
-
/**
|
|
97
|
-
* Adds a single new proxy configuration
|
|
98
|
-
* @param config The configuration to add
|
|
99
|
-
* @param pathPattern Optional path pattern for route matching
|
|
100
|
-
*/
|
|
101
|
-
addProxyConfig(config: IReverseProxyConfig, pathPattern?: string): void;
|
|
102
|
-
/**
|
|
103
|
-
* Sets a path pattern for an existing config
|
|
104
|
-
* @param config The existing configuration
|
|
105
|
-
* @param pathPattern The path pattern to set
|
|
106
|
-
* @returns Boolean indicating if the config was found and updated
|
|
107
|
-
*/
|
|
108
|
-
setPathPattern(config: IReverseProxyConfig, pathPattern: string): boolean;
|
|
109
|
-
/**
|
|
110
|
-
* Removes a proxy configuration by hostname
|
|
111
|
-
* @param hostname The hostname to remove
|
|
112
|
-
* @returns Boolean indicating whether any configs were removed
|
|
113
|
-
*/
|
|
114
|
-
removeProxyConfig(hostname: string): boolean;
|
|
115
|
-
}
|