@push.rocks/smartproxy 22.6.0 → 23.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/changelog.md +18 -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/index.d.ts +0 -1
- package/dist_ts/index.js +1 -3
- package/dist_ts/plugins.d.ts +2 -1
- package/dist_ts/plugins.js +3 -2
- package/dist_ts/proxies/index.d.ts +0 -1
- package/dist_ts/proxies/index.js +1 -3
- package/dist_ts/proxies/smart-proxy/models/route-types.js +1 -1
- package/dist_ts/proxies/smart-proxy/rust-proxy-bridge.d.ts +9 -21
- package/dist_ts/proxies/smart-proxy/rust-proxy-bridge.js +83 -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 +35 -31
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/index.ts +0 -3
- package/ts/plugins.ts +2 -0
- package/ts/proxies/index.ts +0 -3
- package/ts/proxies/smart-proxy/models/route-types.ts +0 -2
- package/ts/proxies/smart-proxy/rust-proxy-bridge.ts +102 -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/nftables-proxy/index.d.ts +0 -6
- package/dist_ts/proxies/nftables-proxy/index.js +0 -7
- package/dist_ts/proxies/nftables-proxy/models/errors.d.ts +0 -15
- package/dist_ts/proxies/nftables-proxy/models/errors.js +0 -28
- package/dist_ts/proxies/nftables-proxy/models/index.d.ts +0 -5
- package/dist_ts/proxies/nftables-proxy/models/index.js +0 -6
- package/dist_ts/proxies/nftables-proxy/models/interfaces.d.ts +0 -75
- package/dist_ts/proxies/nftables-proxy/models/interfaces.js +0 -5
- package/dist_ts/proxies/nftables-proxy/nftables-proxy.d.ts +0 -124
- package/dist_ts/proxies/nftables-proxy/nftables-proxy.js +0 -1374
- package/dist_ts/proxies/nftables-proxy/utils/index.d.ts +0 -9
- package/dist_ts/proxies/nftables-proxy/utils/index.js +0 -12
- package/dist_ts/proxies/nftables-proxy/utils/nft-command-executor.d.ts +0 -66
- package/dist_ts/proxies/nftables-proxy/utils/nft-command-executor.js +0 -131
- package/dist_ts/proxies/nftables-proxy/utils/nft-port-spec-normalizer.d.ts +0 -39
- package/dist_ts/proxies/nftables-proxy/utils/nft-port-spec-normalizer.js +0 -112
- package/dist_ts/proxies/nftables-proxy/utils/nft-rule-validator.d.ts +0 -59
- package/dist_ts/proxies/nftables-proxy/utils/nft-rule-validator.js +0 -130
- 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/nftables-proxy/index.ts +0 -6
- package/ts/proxies/nftables-proxy/models/errors.ts +0 -30
- package/ts/proxies/nftables-proxy/models/index.ts +0 -5
- package/ts/proxies/nftables-proxy/models/interfaces.ts +0 -94
- package/ts/proxies/nftables-proxy/nftables-proxy.ts +0 -1754
- package/ts/proxies/nftables-proxy/utils/index.ts +0 -38
- package/ts/proxies/nftables-proxy/utils/nft-command-executor.ts +0 -162
- package/ts/proxies/nftables-proxy/utils/nft-port-spec-normalizer.ts +0 -125
- package/ts/proxies/nftables-proxy/utils/nft-rule-validator.ts +0 -156
- package/ts/proxies/smart-proxy/rust-binary-locator.ts +0 -112
|
@@ -1,393 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../../plugins.js';
|
|
2
|
-
/**
|
|
3
|
-
* Router for HTTP reverse proxy requests based on route configurations
|
|
4
|
-
*
|
|
5
|
-
* Supports the following domain matching patterns:
|
|
6
|
-
* - Exact matches: "example.com"
|
|
7
|
-
* - Wildcard subdomains: "*.example.com" (matches any subdomain of example.com)
|
|
8
|
-
* - TLD wildcards: "example.*" (matches example.com, example.org, etc.)
|
|
9
|
-
* - Complex wildcards: "*.lossless*" (matches any subdomain of any lossless domain)
|
|
10
|
-
* - Default fallback: "*" (matches any unmatched domain)
|
|
11
|
-
*
|
|
12
|
-
* Also supports path pattern matching for each domain:
|
|
13
|
-
* - Exact path: "/api/users"
|
|
14
|
-
* - Wildcard paths: "/api/*"
|
|
15
|
-
* - Path parameters: "/users/:id/profile"
|
|
16
|
-
*/
|
|
17
|
-
export class RouteRouter {
|
|
18
|
-
constructor(routes, logger) {
|
|
19
|
-
// Store original routes for reference
|
|
20
|
-
this.routes = [];
|
|
21
|
-
// Store path patterns separately since they're not in the original interface
|
|
22
|
-
this.pathPatterns = new Map();
|
|
23
|
-
this.logger = logger || {
|
|
24
|
-
error: console.error,
|
|
25
|
-
warn: console.warn,
|
|
26
|
-
info: console.info,
|
|
27
|
-
debug: console.debug
|
|
28
|
-
};
|
|
29
|
-
if (routes) {
|
|
30
|
-
this.setRoutes(routes);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Sets a new set of routes to be routed to
|
|
35
|
-
* @param routes Array of route configurations
|
|
36
|
-
*/
|
|
37
|
-
setRoutes(routes) {
|
|
38
|
-
this.routes = [...routes];
|
|
39
|
-
// Sort routes by priority
|
|
40
|
-
this.routes.sort((a, b) => {
|
|
41
|
-
const priorityA = a.priority ?? 0;
|
|
42
|
-
const priorityB = b.priority ?? 0;
|
|
43
|
-
return priorityB - priorityA;
|
|
44
|
-
});
|
|
45
|
-
// Find default route if any (route with "*" as domain)
|
|
46
|
-
this.defaultRoute = this.routes.find(route => {
|
|
47
|
-
const domains = Array.isArray(route.match.domains)
|
|
48
|
-
? route.match.domains
|
|
49
|
-
: [route.match.domains];
|
|
50
|
-
return domains.includes('*');
|
|
51
|
-
});
|
|
52
|
-
// Extract path patterns from route match.path
|
|
53
|
-
for (const route of this.routes) {
|
|
54
|
-
if (route.match.path) {
|
|
55
|
-
this.pathPatterns.set(route, route.match.path);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
const uniqueDomains = this.getHostnames();
|
|
59
|
-
this.logger.info(`Router initialized with ${this.routes.length} routes (${uniqueDomains.length} unique hosts)`);
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Routes a request based on hostname and path
|
|
63
|
-
* @param req The incoming HTTP request
|
|
64
|
-
* @returns The matching route or undefined if no match found
|
|
65
|
-
*/
|
|
66
|
-
routeReq(req) {
|
|
67
|
-
const result = this.routeReqWithDetails(req);
|
|
68
|
-
return result ? result.route : undefined;
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Routes a request with detailed matching information
|
|
72
|
-
* @param req The incoming HTTP request
|
|
73
|
-
* @returns Detailed routing result including matched route and path information
|
|
74
|
-
*/
|
|
75
|
-
routeReqWithDetails(req) {
|
|
76
|
-
// Extract and validate host header
|
|
77
|
-
const originalHost = req.headers.host;
|
|
78
|
-
if (!originalHost) {
|
|
79
|
-
this.logger.error('No host header found in request');
|
|
80
|
-
return this.defaultRoute ? { route: this.defaultRoute } : undefined;
|
|
81
|
-
}
|
|
82
|
-
// Parse URL for path matching
|
|
83
|
-
const parsedUrl = plugins.url.parse(req.url || '/');
|
|
84
|
-
const urlPath = parsedUrl.pathname || '/';
|
|
85
|
-
// Extract hostname without port
|
|
86
|
-
const hostWithoutPort = originalHost.split(':')[0].toLowerCase();
|
|
87
|
-
// First try exact hostname match
|
|
88
|
-
const exactRoute = this.findRouteForHost(hostWithoutPort, urlPath);
|
|
89
|
-
if (exactRoute) {
|
|
90
|
-
return exactRoute;
|
|
91
|
-
}
|
|
92
|
-
// Try various wildcard patterns
|
|
93
|
-
if (hostWithoutPort.includes('.')) {
|
|
94
|
-
const domainParts = hostWithoutPort.split('.');
|
|
95
|
-
// Try wildcard subdomain (*.example.com)
|
|
96
|
-
if (domainParts.length > 2) {
|
|
97
|
-
const wildcardDomain = `*.${domainParts.slice(1).join('.')}`;
|
|
98
|
-
const wildcardRoute = this.findRouteForHost(wildcardDomain, urlPath);
|
|
99
|
-
if (wildcardRoute) {
|
|
100
|
-
return wildcardRoute;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
// Try TLD wildcard (example.*)
|
|
104
|
-
const baseDomain = domainParts.slice(0, -1).join('.');
|
|
105
|
-
const tldWildcardDomain = `${baseDomain}.*`;
|
|
106
|
-
const tldWildcardRoute = this.findRouteForHost(tldWildcardDomain, urlPath);
|
|
107
|
-
if (tldWildcardRoute) {
|
|
108
|
-
return tldWildcardRoute;
|
|
109
|
-
}
|
|
110
|
-
// Try complex wildcard patterns
|
|
111
|
-
const wildcardPatterns = this.findWildcardMatches(hostWithoutPort);
|
|
112
|
-
for (const pattern of wildcardPatterns) {
|
|
113
|
-
const wildcardRoute = this.findRouteForHost(pattern, urlPath);
|
|
114
|
-
if (wildcardRoute) {
|
|
115
|
-
return wildcardRoute;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
// Fall back to default route if available
|
|
120
|
-
if (this.defaultRoute) {
|
|
121
|
-
this.logger.warn(`No specific route found for host: ${hostWithoutPort}, using default`);
|
|
122
|
-
return { route: this.defaultRoute };
|
|
123
|
-
}
|
|
124
|
-
this.logger.error(`No route found for host: ${hostWithoutPort}`);
|
|
125
|
-
return undefined;
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Find potential wildcard patterns that could match a given hostname
|
|
129
|
-
* Handles complex patterns like "*.lossless*" or other partial matches
|
|
130
|
-
* @param hostname The hostname to find wildcard matches for
|
|
131
|
-
* @returns Array of potential wildcard patterns that could match
|
|
132
|
-
*/
|
|
133
|
-
findWildcardMatches(hostname) {
|
|
134
|
-
const patterns = [];
|
|
135
|
-
// Find all routes with wildcard domains
|
|
136
|
-
for (const route of this.routes) {
|
|
137
|
-
if (!route.match.domains)
|
|
138
|
-
continue;
|
|
139
|
-
const domains = Array.isArray(route.match.domains)
|
|
140
|
-
? route.match.domains
|
|
141
|
-
: [route.match.domains];
|
|
142
|
-
// Filter to only wildcard domains
|
|
143
|
-
const wildcardDomains = domains.filter(domain => domain.includes('*'));
|
|
144
|
-
// Convert each wildcard domain to a regex pattern and check if it matches
|
|
145
|
-
for (const domain of wildcardDomains) {
|
|
146
|
-
// Skip the default wildcard '*'
|
|
147
|
-
if (domain === '*')
|
|
148
|
-
continue;
|
|
149
|
-
// Skip already checked patterns (*.domain.com and domain.*)
|
|
150
|
-
if (domain.startsWith('*.') && domain.indexOf('*', 2) === -1)
|
|
151
|
-
continue;
|
|
152
|
-
if (domain.endsWith('.*') && domain.indexOf('*') === domain.length - 1)
|
|
153
|
-
continue;
|
|
154
|
-
// Convert wildcard pattern to regex
|
|
155
|
-
const regexPattern = domain
|
|
156
|
-
.replace(/\./g, '\\.') // Escape dots
|
|
157
|
-
.replace(/\*/g, '.*'); // Convert * to .* for regex
|
|
158
|
-
// Create regex object with case insensitive flag
|
|
159
|
-
const regex = new RegExp(`^${regexPattern}$`, 'i');
|
|
160
|
-
// If hostname matches this complex pattern, add it to the list
|
|
161
|
-
if (regex.test(hostname)) {
|
|
162
|
-
patterns.push(domain);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
return patterns;
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* Find a route for a specific host and path
|
|
170
|
-
*/
|
|
171
|
-
findRouteForHost(hostname, path) {
|
|
172
|
-
// Find all routes for this hostname
|
|
173
|
-
const matchingRoutes = this.routes.filter(route => {
|
|
174
|
-
if (!route.match.domains)
|
|
175
|
-
return false;
|
|
176
|
-
const domains = Array.isArray(route.match.domains)
|
|
177
|
-
? route.match.domains
|
|
178
|
-
: [route.match.domains];
|
|
179
|
-
return domains.some(domain => domain.toLowerCase() === hostname.toLowerCase());
|
|
180
|
-
});
|
|
181
|
-
if (matchingRoutes.length === 0) {
|
|
182
|
-
return undefined;
|
|
183
|
-
}
|
|
184
|
-
// First try routes with path patterns
|
|
185
|
-
const routesWithPaths = matchingRoutes.filter(route => this.pathPatterns.has(route));
|
|
186
|
-
// Already sorted by priority during setRoutes
|
|
187
|
-
// Check each route with path pattern
|
|
188
|
-
for (const route of routesWithPaths) {
|
|
189
|
-
const pathPattern = this.pathPatterns.get(route);
|
|
190
|
-
if (pathPattern) {
|
|
191
|
-
const pathMatch = this.matchPath(path, pathPattern);
|
|
192
|
-
if (pathMatch) {
|
|
193
|
-
return {
|
|
194
|
-
route,
|
|
195
|
-
pathMatch: pathMatch.matched,
|
|
196
|
-
pathParams: pathMatch.params,
|
|
197
|
-
pathRemainder: pathMatch.remainder
|
|
198
|
-
};
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
// If no path pattern matched, use the first route without a path pattern
|
|
203
|
-
const routeWithoutPath = matchingRoutes.find(route => !this.pathPatterns.has(route));
|
|
204
|
-
if (routeWithoutPath) {
|
|
205
|
-
return { route: routeWithoutPath };
|
|
206
|
-
}
|
|
207
|
-
return undefined;
|
|
208
|
-
}
|
|
209
|
-
/**
|
|
210
|
-
* Matches a URL path against a pattern
|
|
211
|
-
* Supports:
|
|
212
|
-
* - Exact matches: /users/profile
|
|
213
|
-
* - Wildcards: /api/* (matches any path starting with /api/)
|
|
214
|
-
* - Path parameters: /users/:id (captures id as a parameter)
|
|
215
|
-
*
|
|
216
|
-
* @param path The URL path to match
|
|
217
|
-
* @param pattern The pattern to match against
|
|
218
|
-
* @returns Match result with params and remainder, or null if no match
|
|
219
|
-
*/
|
|
220
|
-
matchPath(path, pattern) {
|
|
221
|
-
// Handle exact match
|
|
222
|
-
if (path === pattern) {
|
|
223
|
-
return {
|
|
224
|
-
matched: pattern,
|
|
225
|
-
params: {},
|
|
226
|
-
remainder: ''
|
|
227
|
-
};
|
|
228
|
-
}
|
|
229
|
-
// Handle wildcard match
|
|
230
|
-
if (pattern.endsWith('/*')) {
|
|
231
|
-
const prefix = pattern.slice(0, -2);
|
|
232
|
-
if (path === prefix || path.startsWith(`${prefix}/`)) {
|
|
233
|
-
return {
|
|
234
|
-
matched: prefix,
|
|
235
|
-
params: {},
|
|
236
|
-
remainder: path.slice(prefix.length)
|
|
237
|
-
};
|
|
238
|
-
}
|
|
239
|
-
return null;
|
|
240
|
-
}
|
|
241
|
-
// Handle path parameters
|
|
242
|
-
const patternParts = pattern.split('/').filter(p => p);
|
|
243
|
-
const pathParts = path.split('/').filter(p => p);
|
|
244
|
-
// Too few path parts to match
|
|
245
|
-
if (pathParts.length < patternParts.length) {
|
|
246
|
-
return null;
|
|
247
|
-
}
|
|
248
|
-
const params = {};
|
|
249
|
-
// Compare each part
|
|
250
|
-
for (let i = 0; i < patternParts.length; i++) {
|
|
251
|
-
const patternPart = patternParts[i];
|
|
252
|
-
const pathPart = pathParts[i];
|
|
253
|
-
// Handle parameter
|
|
254
|
-
if (patternPart.startsWith(':')) {
|
|
255
|
-
const paramName = patternPart.slice(1);
|
|
256
|
-
params[paramName] = pathPart;
|
|
257
|
-
continue;
|
|
258
|
-
}
|
|
259
|
-
// Handle wildcard at the end
|
|
260
|
-
if (patternPart === '*' && i === patternParts.length - 1) {
|
|
261
|
-
break;
|
|
262
|
-
}
|
|
263
|
-
// Handle exact match for this part
|
|
264
|
-
if (patternPart !== pathPart) {
|
|
265
|
-
return null;
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
// Calculate the remainder - the unmatched path parts
|
|
269
|
-
const remainderParts = pathParts.slice(patternParts.length);
|
|
270
|
-
const remainder = remainderParts.length ? '/' + remainderParts.join('/') : '';
|
|
271
|
-
// Calculate the matched path
|
|
272
|
-
const matchedParts = patternParts.map((part, i) => {
|
|
273
|
-
return part.startsWith(':') ? pathParts[i] : part;
|
|
274
|
-
});
|
|
275
|
-
const matched = '/' + matchedParts.join('/');
|
|
276
|
-
return {
|
|
277
|
-
matched,
|
|
278
|
-
params,
|
|
279
|
-
remainder
|
|
280
|
-
};
|
|
281
|
-
}
|
|
282
|
-
/**
|
|
283
|
-
* Gets all currently active route configurations
|
|
284
|
-
* @returns Array of all active routes
|
|
285
|
-
*/
|
|
286
|
-
getRoutes() {
|
|
287
|
-
return [...this.routes];
|
|
288
|
-
}
|
|
289
|
-
/**
|
|
290
|
-
* Gets all hostnames that this router is configured to handle
|
|
291
|
-
* @returns Array of hostnames
|
|
292
|
-
*/
|
|
293
|
-
getHostnames() {
|
|
294
|
-
const hostnames = new Set();
|
|
295
|
-
for (const route of this.routes) {
|
|
296
|
-
if (!route.match.domains)
|
|
297
|
-
continue;
|
|
298
|
-
const domains = Array.isArray(route.match.domains)
|
|
299
|
-
? route.match.domains
|
|
300
|
-
: [route.match.domains];
|
|
301
|
-
for (const domain of domains) {
|
|
302
|
-
if (domain !== '*') {
|
|
303
|
-
hostnames.add(domain.toLowerCase());
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
return Array.from(hostnames);
|
|
308
|
-
}
|
|
309
|
-
/**
|
|
310
|
-
* Adds a single new route configuration
|
|
311
|
-
* @param route The route configuration to add
|
|
312
|
-
*/
|
|
313
|
-
addRoute(route) {
|
|
314
|
-
this.routes.push(route);
|
|
315
|
-
// Store path pattern if present
|
|
316
|
-
if (route.match.path) {
|
|
317
|
-
this.pathPatterns.set(route, route.match.path);
|
|
318
|
-
}
|
|
319
|
-
// Re-sort routes by priority
|
|
320
|
-
this.routes.sort((a, b) => {
|
|
321
|
-
const priorityA = a.priority ?? 0;
|
|
322
|
-
const priorityB = b.priority ?? 0;
|
|
323
|
-
return priorityB - priorityA;
|
|
324
|
-
});
|
|
325
|
-
}
|
|
326
|
-
/**
|
|
327
|
-
* Removes routes by domain pattern
|
|
328
|
-
* @param domain The domain pattern to remove routes for
|
|
329
|
-
* @returns Boolean indicating whether any routes were removed
|
|
330
|
-
*/
|
|
331
|
-
removeRoutesByDomain(domain) {
|
|
332
|
-
const initialCount = this.routes.length;
|
|
333
|
-
// Find routes to remove
|
|
334
|
-
const routesToRemove = this.routes.filter(route => {
|
|
335
|
-
if (!route.match.domains)
|
|
336
|
-
return false;
|
|
337
|
-
const domains = Array.isArray(route.match.domains)
|
|
338
|
-
? route.match.domains
|
|
339
|
-
: [route.match.domains];
|
|
340
|
-
return domains.includes(domain);
|
|
341
|
-
});
|
|
342
|
-
// Remove them from the patterns map
|
|
343
|
-
for (const route of routesToRemove) {
|
|
344
|
-
this.pathPatterns.delete(route);
|
|
345
|
-
}
|
|
346
|
-
// Filter them out of the routes array
|
|
347
|
-
this.routes = this.routes.filter(route => {
|
|
348
|
-
if (!route.match.domains)
|
|
349
|
-
return true;
|
|
350
|
-
const domains = Array.isArray(route.match.domains)
|
|
351
|
-
? route.match.domains
|
|
352
|
-
: [route.match.domains];
|
|
353
|
-
return !domains.includes(domain);
|
|
354
|
-
});
|
|
355
|
-
return this.routes.length !== initialCount;
|
|
356
|
-
}
|
|
357
|
-
/**
|
|
358
|
-
* Legacy method for compatibility with ProxyRouter
|
|
359
|
-
* Converts IReverseProxyConfig to IRouteConfig and calls setRoutes
|
|
360
|
-
*
|
|
361
|
-
* @param configs Array of legacy proxy configurations
|
|
362
|
-
*/
|
|
363
|
-
setNewProxyConfigs(configs) {
|
|
364
|
-
// Convert legacy configs to routes and add them
|
|
365
|
-
const routes = configs.map(config => {
|
|
366
|
-
// Create a basic route configuration from the legacy config
|
|
367
|
-
return {
|
|
368
|
-
match: {
|
|
369
|
-
ports: config.destinationPorts[0], // Just use the first port
|
|
370
|
-
domains: config.hostName
|
|
371
|
-
},
|
|
372
|
-
action: {
|
|
373
|
-
type: 'forward',
|
|
374
|
-
target: {
|
|
375
|
-
host: config.destinationIps,
|
|
376
|
-
port: config.destinationPorts[0]
|
|
377
|
-
},
|
|
378
|
-
tls: {
|
|
379
|
-
mode: 'terminate',
|
|
380
|
-
certificate: {
|
|
381
|
-
key: config.privateKey,
|
|
382
|
-
cert: config.publicKey
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
},
|
|
386
|
-
name: `Legacy Config - ${config.hostName}`,
|
|
387
|
-
enabled: true
|
|
388
|
-
};
|
|
389
|
-
});
|
|
390
|
-
this.setRoutes(routes);
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtcm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvcm91dGluZy9yb3V0ZXIvcm91dGUtcm91dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFxQjVDOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxPQUFPLFdBQVc7SUFVdEIsWUFDRSxNQUF1QixFQUN2QixNQUFnQjtRQVhsQixzQ0FBc0M7UUFDOUIsV0FBTSxHQUFtQixFQUFFLENBQUM7UUFHcEMsNkVBQTZFO1FBQ3JFLGlCQUFZLEdBQThCLElBQUksR0FBRyxFQUFFLENBQUM7UUFRMUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLElBQUk7WUFDdEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO1lBQ3BCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtZQUNsQixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7WUFDbEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO1NBQ3JCLENBQUM7UUFFRixJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFNBQVMsQ0FBQyxNQUFzQjtRQUNyQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztRQUUxQiwwQkFBMEI7UUFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEIsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUM7WUFDbEMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUM7WUFDbEMsT0FBTyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQy9CLENBQUMs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
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../../plugins.js';
|
|
2
|
-
import { TlsAlertLevel, TlsAlertDescription } from '../utils/tls-utils.js';
|
|
3
|
-
/**
|
|
4
|
-
* TlsAlert class for creating and sending TLS alert messages
|
|
5
|
-
*/
|
|
6
|
-
export declare class TlsAlert {
|
|
7
|
-
static readonly LEVEL_WARNING = TlsAlertLevel.WARNING;
|
|
8
|
-
static readonly LEVEL_FATAL = TlsAlertLevel.FATAL;
|
|
9
|
-
static readonly CLOSE_NOTIFY = TlsAlertDescription.CLOSE_NOTIFY;
|
|
10
|
-
static readonly UNEXPECTED_MESSAGE = TlsAlertDescription.UNEXPECTED_MESSAGE;
|
|
11
|
-
static readonly BAD_RECORD_MAC = TlsAlertDescription.BAD_RECORD_MAC;
|
|
12
|
-
static readonly DECRYPTION_FAILED = TlsAlertDescription.DECRYPTION_FAILED;
|
|
13
|
-
static readonly RECORD_OVERFLOW = TlsAlertDescription.RECORD_OVERFLOW;
|
|
14
|
-
static readonly DECOMPRESSION_FAILURE = TlsAlertDescription.DECOMPRESSION_FAILURE;
|
|
15
|
-
static readonly HANDSHAKE_FAILURE = TlsAlertDescription.HANDSHAKE_FAILURE;
|
|
16
|
-
static readonly NO_CERTIFICATE = TlsAlertDescription.NO_CERTIFICATE;
|
|
17
|
-
static readonly BAD_CERTIFICATE = TlsAlertDescription.BAD_CERTIFICATE;
|
|
18
|
-
static readonly UNSUPPORTED_CERTIFICATE = TlsAlertDescription.UNSUPPORTED_CERTIFICATE;
|
|
19
|
-
static readonly CERTIFICATE_REVOKED = TlsAlertDescription.CERTIFICATE_REVOKED;
|
|
20
|
-
static readonly CERTIFICATE_EXPIRED = TlsAlertDescription.CERTIFICATE_EXPIRED;
|
|
21
|
-
static readonly CERTIFICATE_UNKNOWN = TlsAlertDescription.CERTIFICATE_UNKNOWN;
|
|
22
|
-
static readonly ILLEGAL_PARAMETER = TlsAlertDescription.ILLEGAL_PARAMETER;
|
|
23
|
-
static readonly UNKNOWN_CA = TlsAlertDescription.UNKNOWN_CA;
|
|
24
|
-
static readonly ACCESS_DENIED = TlsAlertDescription.ACCESS_DENIED;
|
|
25
|
-
static readonly DECODE_ERROR = TlsAlertDescription.DECODE_ERROR;
|
|
26
|
-
static readonly DECRYPT_ERROR = TlsAlertDescription.DECRYPT_ERROR;
|
|
27
|
-
static readonly EXPORT_RESTRICTION = TlsAlertDescription.EXPORT_RESTRICTION;
|
|
28
|
-
static readonly PROTOCOL_VERSION = TlsAlertDescription.PROTOCOL_VERSION;
|
|
29
|
-
static readonly INSUFFICIENT_SECURITY = TlsAlertDescription.INSUFFICIENT_SECURITY;
|
|
30
|
-
static readonly INTERNAL_ERROR = TlsAlertDescription.INTERNAL_ERROR;
|
|
31
|
-
static readonly INAPPROPRIATE_FALLBACK = TlsAlertDescription.INAPPROPRIATE_FALLBACK;
|
|
32
|
-
static readonly USER_CANCELED = TlsAlertDescription.USER_CANCELED;
|
|
33
|
-
static readonly NO_RENEGOTIATION = TlsAlertDescription.NO_RENEGOTIATION;
|
|
34
|
-
static readonly MISSING_EXTENSION = TlsAlertDescription.MISSING_EXTENSION;
|
|
35
|
-
static readonly UNSUPPORTED_EXTENSION = TlsAlertDescription.UNSUPPORTED_EXTENSION;
|
|
36
|
-
static readonly CERTIFICATE_REQUIRED = TlsAlertDescription.CERTIFICATE_REQUIRED;
|
|
37
|
-
static readonly UNRECOGNIZED_NAME = TlsAlertDescription.UNRECOGNIZED_NAME;
|
|
38
|
-
static readonly BAD_CERTIFICATE_STATUS_RESPONSE = TlsAlertDescription.BAD_CERTIFICATE_STATUS_RESPONSE;
|
|
39
|
-
static readonly BAD_CERTIFICATE_HASH_VALUE = TlsAlertDescription.BAD_CERTIFICATE_HASH_VALUE;
|
|
40
|
-
static readonly UNKNOWN_PSK_IDENTITY = TlsAlertDescription.UNKNOWN_PSK_IDENTITY;
|
|
41
|
-
static readonly CERTIFICATE_REQUIRED_1_3 = TlsAlertDescription.CERTIFICATE_REQUIRED_1_3;
|
|
42
|
-
static readonly NO_APPLICATION_PROTOCOL = TlsAlertDescription.NO_APPLICATION_PROTOCOL;
|
|
43
|
-
/**
|
|
44
|
-
* Create a TLS alert buffer with the specified level and description code
|
|
45
|
-
*
|
|
46
|
-
* @param level Alert level (warning or fatal)
|
|
47
|
-
* @param description Alert description code
|
|
48
|
-
* @param tlsVersion TLS version bytes (default is TLS 1.2: 0x0303)
|
|
49
|
-
* @returns Buffer containing the TLS alert message
|
|
50
|
-
*/
|
|
51
|
-
static create(level: number, description: number, tlsVersion?: [number, number]): Buffer;
|
|
52
|
-
/**
|
|
53
|
-
* Create a warning-level TLS alert
|
|
54
|
-
*
|
|
55
|
-
* @param description Alert description code
|
|
56
|
-
* @returns Buffer containing the warning-level TLS alert message
|
|
57
|
-
*/
|
|
58
|
-
static createWarning(description: number): Buffer;
|
|
59
|
-
/**
|
|
60
|
-
* Create a fatal-level TLS alert
|
|
61
|
-
*
|
|
62
|
-
* @param description Alert description code
|
|
63
|
-
* @returns Buffer containing the fatal-level TLS alert message
|
|
64
|
-
*/
|
|
65
|
-
static createFatal(description: number): Buffer;
|
|
66
|
-
/**
|
|
67
|
-
* Send a TLS alert to a socket and optionally close the connection
|
|
68
|
-
*
|
|
69
|
-
* @param socket The socket to send the alert to
|
|
70
|
-
* @param level Alert level (warning or fatal)
|
|
71
|
-
* @param description Alert description code
|
|
72
|
-
* @param closeAfterSend Whether to close the connection after sending the alert
|
|
73
|
-
* @param closeDelay Milliseconds to wait before closing the connection (default: 200ms)
|
|
74
|
-
* @returns Promise that resolves when the alert has been sent
|
|
75
|
-
*/
|
|
76
|
-
static send(socket: plugins.net.Socket, level: number, description: number, closeAfterSend?: boolean, closeDelay?: number): Promise<void>;
|
|
77
|
-
/**
|
|
78
|
-
* Pre-defined TLS alert messages
|
|
79
|
-
*/
|
|
80
|
-
static readonly alerts: {
|
|
81
|
-
closeNotify: Buffer<ArrayBufferLike>;
|
|
82
|
-
unsupportedExtension: Buffer<ArrayBufferLike>;
|
|
83
|
-
certificateRequired: Buffer<ArrayBufferLike>;
|
|
84
|
-
unrecognizedName: Buffer<ArrayBufferLike>;
|
|
85
|
-
noRenegotiation: Buffer<ArrayBufferLike>;
|
|
86
|
-
userCanceled: Buffer<ArrayBufferLike>;
|
|
87
|
-
certificateExpiredWarning: Buffer<ArrayBufferLike>;
|
|
88
|
-
handshakeFailureWarning: Buffer<ArrayBufferLike>;
|
|
89
|
-
insufficientSecurityWarning: Buffer<ArrayBufferLike>;
|
|
90
|
-
unexpectedMessage: Buffer<ArrayBufferLike>;
|
|
91
|
-
badRecordMac: Buffer<ArrayBufferLike>;
|
|
92
|
-
recordOverflow: Buffer<ArrayBufferLike>;
|
|
93
|
-
handshakeFailure: Buffer<ArrayBufferLike>;
|
|
94
|
-
badCertificate: Buffer<ArrayBufferLike>;
|
|
95
|
-
certificateExpired: Buffer<ArrayBufferLike>;
|
|
96
|
-
certificateUnknown: Buffer<ArrayBufferLike>;
|
|
97
|
-
illegalParameter: Buffer<ArrayBufferLike>;
|
|
98
|
-
unknownCA: Buffer<ArrayBufferLike>;
|
|
99
|
-
accessDenied: Buffer<ArrayBufferLike>;
|
|
100
|
-
decodeError: Buffer<ArrayBufferLike>;
|
|
101
|
-
decryptError: Buffer<ArrayBufferLike>;
|
|
102
|
-
protocolVersion: Buffer<ArrayBufferLike>;
|
|
103
|
-
insufficientSecurity: Buffer<ArrayBufferLike>;
|
|
104
|
-
internalError: Buffer<ArrayBufferLike>;
|
|
105
|
-
unrecognizedNameFatal: Buffer<ArrayBufferLike>;
|
|
106
|
-
};
|
|
107
|
-
/**
|
|
108
|
-
* Utility method to send a warning-level unrecognized_name alert
|
|
109
|
-
* Specifically designed for SNI issues to encourage the client to retry with SNI
|
|
110
|
-
*
|
|
111
|
-
* @param socket The socket to send the alert to
|
|
112
|
-
* @returns Promise that resolves when the alert has been sent
|
|
113
|
-
*/
|
|
114
|
-
static sendSniRequired(socket: plugins.net.Socket): Promise<void>;
|
|
115
|
-
/**
|
|
116
|
-
* Utility method to send a close_notify alert and close the connection
|
|
117
|
-
*
|
|
118
|
-
* @param socket The socket to send the alert to
|
|
119
|
-
* @param closeDelay Milliseconds to wait before closing the connection (default: 200ms)
|
|
120
|
-
* @returns Promise that resolves when the alert has been sent and the connection closed
|
|
121
|
-
*/
|
|
122
|
-
static sendCloseNotify(socket: plugins.net.Socket, closeDelay?: number): Promise<void>;
|
|
123
|
-
/**
|
|
124
|
-
* Utility method to send a certificate_expired alert to force new TLS session
|
|
125
|
-
*
|
|
126
|
-
* @param socket The socket to send the alert to
|
|
127
|
-
* @param fatal Whether to send as a fatal alert (default: false)
|
|
128
|
-
* @param closeAfterSend Whether to close the connection after sending the alert (default: true)
|
|
129
|
-
* @param closeDelay Milliseconds to wait before closing the connection (default: 200ms)
|
|
130
|
-
* @returns Promise that resolves when the alert has been sent
|
|
131
|
-
*/
|
|
132
|
-
static sendCertificateExpired(socket: plugins.net.Socket, fatal?: boolean, closeAfterSend?: boolean, closeDelay?: number): Promise<void>;
|
|
133
|
-
/**
|
|
134
|
-
* Send a sequence of alerts to force SNI from clients
|
|
135
|
-
* This combines multiple alerts to ensure maximum browser compatibility
|
|
136
|
-
*
|
|
137
|
-
* @param socket The socket to send the alerts to
|
|
138
|
-
* @returns Promise that resolves when all alerts have been sent
|
|
139
|
-
*/
|
|
140
|
-
static sendForceSniSequence(socket: plugins.net.Socket): Promise<void>;
|
|
141
|
-
/**
|
|
142
|
-
* Send a fatal level alert that immediately terminates the connection
|
|
143
|
-
*
|
|
144
|
-
* @param socket The socket to send the alert to
|
|
145
|
-
* @param description Alert description code
|
|
146
|
-
* @param closeDelay Milliseconds to wait before closing the connection (default: 100ms)
|
|
147
|
-
* @returns Promise that resolves when the alert has been sent and the connection closed
|
|
148
|
-
*/
|
|
149
|
-
static sendFatalAndClose(socket: plugins.net.Socket, description: number, closeDelay?: number): Promise<void>;
|
|
150
|
-
}
|