@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,121 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../../plugins.js';
|
|
2
|
-
import { ForwardingHandlerEvents } from '../config/forwarding-types.js';
|
|
3
|
-
/**
|
|
4
|
-
* Base class for all forwarding handlers
|
|
5
|
-
*/
|
|
6
|
-
export class ForwardingHandler extends plugins.EventEmitter {
|
|
7
|
-
/**
|
|
8
|
-
* Create a new ForwardingHandler
|
|
9
|
-
* @param config The forwarding configuration
|
|
10
|
-
*/
|
|
11
|
-
constructor(config) {
|
|
12
|
-
super();
|
|
13
|
-
this.config = config;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Initialize the handler
|
|
17
|
-
* Base implementation does nothing, subclasses should override as needed
|
|
18
|
-
*/
|
|
19
|
-
async initialize() {
|
|
20
|
-
// Base implementation - no initialization needed
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Get a target from the configuration, supporting round-robin selection
|
|
24
|
-
* @param incomingPort Optional incoming port for 'preserve' mode
|
|
25
|
-
* @returns A resolved target object with host and port
|
|
26
|
-
*/
|
|
27
|
-
getTargetFromConfig(incomingPort = 80) {
|
|
28
|
-
const { target } = this.config;
|
|
29
|
-
// Handle round-robin host selection
|
|
30
|
-
if (Array.isArray(target.host)) {
|
|
31
|
-
if (target.host.length === 0) {
|
|
32
|
-
throw new Error('No target hosts specified');
|
|
33
|
-
}
|
|
34
|
-
// Simple round-robin selection
|
|
35
|
-
const randomIndex = Math.floor(Math.random() * target.host.length);
|
|
36
|
-
return {
|
|
37
|
-
host: target.host[randomIndex],
|
|
38
|
-
port: this.resolvePort(target.port, incomingPort)
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
// Single host
|
|
42
|
-
return {
|
|
43
|
-
host: target.host,
|
|
44
|
-
port: this.resolvePort(target.port, incomingPort)
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Resolves a port value, handling 'preserve' and function ports
|
|
49
|
-
* @param port The port value to resolve
|
|
50
|
-
* @param incomingPort Optional incoming port to use for 'preserve' mode
|
|
51
|
-
*/
|
|
52
|
-
resolvePort(port, incomingPort = 80) {
|
|
53
|
-
if (typeof port === 'function') {
|
|
54
|
-
try {
|
|
55
|
-
// Create a minimal context for the function that includes the incoming port
|
|
56
|
-
const ctx = { port: incomingPort };
|
|
57
|
-
return port(ctx);
|
|
58
|
-
}
|
|
59
|
-
catch (err) {
|
|
60
|
-
console.error('Error resolving port function:', err);
|
|
61
|
-
return incomingPort; // Fall back to incoming port
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
else if (port === 'preserve') {
|
|
65
|
-
return incomingPort; // Use the actual incoming port for 'preserve'
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
return port;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Redirect an HTTP request to HTTPS
|
|
73
|
-
* @param req The HTTP request
|
|
74
|
-
* @param res The HTTP response
|
|
75
|
-
*/
|
|
76
|
-
redirectToHttps(req, res) {
|
|
77
|
-
const host = req.headers.host || '';
|
|
78
|
-
const path = req.url || '/';
|
|
79
|
-
const redirectUrl = `https://${host}${path}`;
|
|
80
|
-
res.writeHead(301, {
|
|
81
|
-
'Location': redirectUrl,
|
|
82
|
-
'Cache-Control': 'no-cache'
|
|
83
|
-
});
|
|
84
|
-
res.end(`Redirecting to ${redirectUrl}`);
|
|
85
|
-
this.emit(ForwardingHandlerEvents.HTTP_RESPONSE, {
|
|
86
|
-
statusCode: 301,
|
|
87
|
-
headers: { 'Location': redirectUrl },
|
|
88
|
-
size: 0
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Apply custom headers from configuration
|
|
93
|
-
* @param headers The original headers
|
|
94
|
-
* @param variables Variables to replace in the headers
|
|
95
|
-
* @returns The headers with custom values applied
|
|
96
|
-
*/
|
|
97
|
-
applyCustomHeaders(headers, variables) {
|
|
98
|
-
const customHeaders = this.config.advanced?.headers || {};
|
|
99
|
-
const result = { ...headers };
|
|
100
|
-
// Apply custom headers with variable substitution
|
|
101
|
-
for (const [key, value] of Object.entries(customHeaders)) {
|
|
102
|
-
if (typeof value !== 'string')
|
|
103
|
-
continue;
|
|
104
|
-
let processedValue = value;
|
|
105
|
-
// Replace variables in the header value
|
|
106
|
-
for (const [varName, varValue] of Object.entries(variables)) {
|
|
107
|
-
processedValue = processedValue.replace(`{${varName}}`, varValue);
|
|
108
|
-
}
|
|
109
|
-
result[key] = processedValue;
|
|
110
|
-
}
|
|
111
|
-
return result;
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Get the timeout for this connection from configuration
|
|
115
|
-
* @returns Timeout in milliseconds
|
|
116
|
-
*/
|
|
117
|
-
getTimeout() {
|
|
118
|
-
return this.config.advanced?.timeout || 60000; // Default: 60 seconds
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvZm9yd2FyZGluZy9oYW5kbGVycy9iYXNlLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUs1QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUV4RTs7R0FFRztBQUNILE1BQU0sT0FBZ0IsaUJBQWtCLFNBQVEsT0FBTyxDQUFDLFlBQVk7SUFDbEU7OztPQUdHO0lBQ0gsWUFBc0IsTUFBc0I7UUFDMUMsS0FBSyxFQUFFLENBQUM7UUFEWSxXQUFNLEdBQU4sTUFBTSxDQUFnQjtJQUU1QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLFVBQVU7UUFDckIsaURBQWlEO0lBQ25ELENBQUM7SUFlRDs7OztPQUlHO0lBQ08sbUJBQW1CLENBQUMsZUFBdUIsRUFBRTtRQUNyRCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUUvQixvQ0FBb0M7UUFDcEMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQy9CLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztZQUMvQyxDQUFDO1lBRUQsK0JBQStCO1lBQy9CLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbkUsT0FBTztnQkFDTCxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQzlCLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxD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
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../../plugins.js';
|
|
2
|
-
import { ForwardingHandler } from './base-handler.js';
|
|
3
|
-
import type { IForwardConfig } from '../config/forwarding-types.js';
|
|
4
|
-
/**
|
|
5
|
-
* Handler for HTTP-only forwarding
|
|
6
|
-
*/
|
|
7
|
-
export declare class HttpForwardingHandler extends ForwardingHandler {
|
|
8
|
-
/**
|
|
9
|
-
* Create a new HTTP forwarding handler
|
|
10
|
-
* @param config The forwarding configuration
|
|
11
|
-
*/
|
|
12
|
-
constructor(config: IForwardConfig);
|
|
13
|
-
/**
|
|
14
|
-
* Initialize the handler
|
|
15
|
-
* HTTP handler doesn't need special initialization
|
|
16
|
-
*/
|
|
17
|
-
initialize(): Promise<void>;
|
|
18
|
-
/**
|
|
19
|
-
* Handle a raw socket connection
|
|
20
|
-
* HTTP handler doesn't do much with raw sockets as it mainly processes
|
|
21
|
-
* parsed HTTP requests
|
|
22
|
-
*/
|
|
23
|
-
handleConnection(socket: plugins.net.Socket): void;
|
|
24
|
-
/**
|
|
25
|
-
* Handle an HTTP request
|
|
26
|
-
* @param req The HTTP request
|
|
27
|
-
* @param res The HTTP response
|
|
28
|
-
*/
|
|
29
|
-
handleHttpRequest(req: plugins.http.IncomingMessage, res: plugins.http.ServerResponse): void;
|
|
30
|
-
}
|
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../../plugins.js';
|
|
2
|
-
import { ForwardingHandler } from './base-handler.js';
|
|
3
|
-
import { ForwardingHandlerEvents } from '../config/forwarding-types.js';
|
|
4
|
-
import { setupSocketHandlers } from '../../core/utils/socket-utils.js';
|
|
5
|
-
/**
|
|
6
|
-
* Handler for HTTP-only forwarding
|
|
7
|
-
*/
|
|
8
|
-
export class HttpForwardingHandler extends ForwardingHandler {
|
|
9
|
-
/**
|
|
10
|
-
* Create a new HTTP forwarding handler
|
|
11
|
-
* @param config The forwarding configuration
|
|
12
|
-
*/
|
|
13
|
-
constructor(config) {
|
|
14
|
-
super(config);
|
|
15
|
-
// Validate that this is an HTTP-only configuration
|
|
16
|
-
if (config.type !== 'http-only') {
|
|
17
|
-
throw new Error(`Invalid configuration type for HttpForwardingHandler: ${config.type}`);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Initialize the handler
|
|
22
|
-
* HTTP handler doesn't need special initialization
|
|
23
|
-
*/
|
|
24
|
-
async initialize() {
|
|
25
|
-
// Basic initialization from parent class
|
|
26
|
-
await super.initialize();
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Handle a raw socket connection
|
|
30
|
-
* HTTP handler doesn't do much with raw sockets as it mainly processes
|
|
31
|
-
* parsed HTTP requests
|
|
32
|
-
*/
|
|
33
|
-
handleConnection(socket) {
|
|
34
|
-
// For HTTP, we mainly handle parsed requests, but we can still set up
|
|
35
|
-
// some basic connection tracking
|
|
36
|
-
const remoteAddress = socket.remoteAddress || 'unknown';
|
|
37
|
-
const localPort = socket.localPort || 80;
|
|
38
|
-
// Set up socket handlers with proper cleanup
|
|
39
|
-
const handleClose = (reason) => {
|
|
40
|
-
this.emit(ForwardingHandlerEvents.DISCONNECTED, {
|
|
41
|
-
remoteAddress,
|
|
42
|
-
reason
|
|
43
|
-
});
|
|
44
|
-
};
|
|
45
|
-
// Use custom timeout handler that doesn't close the socket
|
|
46
|
-
setupSocketHandlers(socket, handleClose, () => {
|
|
47
|
-
// For HTTP, we can be more aggressive with timeouts since connections are shorter
|
|
48
|
-
// But still don't close immediately - let the connection finish naturally
|
|
49
|
-
console.warn(`HTTP socket timeout from ${remoteAddress}`);
|
|
50
|
-
}, 'http');
|
|
51
|
-
socket.on('error', (error) => {
|
|
52
|
-
this.emit(ForwardingHandlerEvents.ERROR, {
|
|
53
|
-
remoteAddress,
|
|
54
|
-
error: error.message
|
|
55
|
-
});
|
|
56
|
-
});
|
|
57
|
-
this.emit(ForwardingHandlerEvents.CONNECTED, {
|
|
58
|
-
remoteAddress,
|
|
59
|
-
localPort
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Handle an HTTP request
|
|
64
|
-
* @param req The HTTP request
|
|
65
|
-
* @param res The HTTP response
|
|
66
|
-
*/
|
|
67
|
-
handleHttpRequest(req, res) {
|
|
68
|
-
// Get the local port from the request (for 'preserve' port handling)
|
|
69
|
-
const localPort = req.socket.localPort || 80;
|
|
70
|
-
// Get the target from configuration, passing the incoming port
|
|
71
|
-
const target = this.getTargetFromConfig(localPort);
|
|
72
|
-
// Create a custom headers object with variables for substitution
|
|
73
|
-
const variables = {
|
|
74
|
-
clientIp: req.socket.remoteAddress || 'unknown'
|
|
75
|
-
};
|
|
76
|
-
// Prepare headers, merging with any custom headers from config
|
|
77
|
-
const headers = this.applyCustomHeaders(req.headers, variables);
|
|
78
|
-
// Create the proxy request options
|
|
79
|
-
const options = {
|
|
80
|
-
hostname: target.host,
|
|
81
|
-
port: target.port,
|
|
82
|
-
path: req.url,
|
|
83
|
-
method: req.method,
|
|
84
|
-
headers
|
|
85
|
-
};
|
|
86
|
-
// Create the proxy request
|
|
87
|
-
const proxyReq = plugins.http.request(options, (proxyRes) => {
|
|
88
|
-
// Copy status code and headers from the proxied response
|
|
89
|
-
res.writeHead(proxyRes.statusCode || 500, proxyRes.headers);
|
|
90
|
-
// Pipe the proxy response to the client response
|
|
91
|
-
proxyRes.pipe(res);
|
|
92
|
-
// Track bytes for logging
|
|
93
|
-
let responseSize = 0;
|
|
94
|
-
proxyRes.on('data', (chunk) => {
|
|
95
|
-
responseSize += chunk.length;
|
|
96
|
-
});
|
|
97
|
-
proxyRes.on('end', () => {
|
|
98
|
-
this.emit(ForwardingHandlerEvents.HTTP_RESPONSE, {
|
|
99
|
-
statusCode: proxyRes.statusCode,
|
|
100
|
-
headers: proxyRes.headers,
|
|
101
|
-
size: responseSize
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
// Handle errors in the proxy request
|
|
106
|
-
proxyReq.on('error', (error) => {
|
|
107
|
-
this.emit(ForwardingHandlerEvents.ERROR, {
|
|
108
|
-
remoteAddress: req.socket.remoteAddress,
|
|
109
|
-
error: `Proxy request error: ${error.message}`
|
|
110
|
-
});
|
|
111
|
-
// Send an error response if headers haven't been sent yet
|
|
112
|
-
if (!res.headersSent) {
|
|
113
|
-
res.writeHead(502, { 'Content-Type': 'text/plain' });
|
|
114
|
-
res.end(`Error forwarding request: ${error.message}`);
|
|
115
|
-
}
|
|
116
|
-
else {
|
|
117
|
-
// Just end the response if headers have already been sent
|
|
118
|
-
res.end();
|
|
119
|
-
}
|
|
120
|
-
});
|
|
121
|
-
// Track request details for logging
|
|
122
|
-
let requestSize = 0;
|
|
123
|
-
req.on('data', (chunk) => {
|
|
124
|
-
requestSize += chunk.length;
|
|
125
|
-
});
|
|
126
|
-
// Log the request
|
|
127
|
-
this.emit(ForwardingHandlerEvents.HTTP_REQUEST, {
|
|
128
|
-
method: req.method,
|
|
129
|
-
url: req.url,
|
|
130
|
-
headers: req.headers,
|
|
131
|
-
remoteAddress: req.socket.remoteAddress,
|
|
132
|
-
target: `${target.host}:${target.port}`
|
|
133
|
-
});
|
|
134
|
-
// Pipe the client request to the proxy request
|
|
135
|
-
if (req.readable) {
|
|
136
|
-
req.pipe(proxyReq);
|
|
137
|
-
}
|
|
138
|
-
else {
|
|
139
|
-
proxyReq.end();
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvZm9yd2FyZGluZy9oYW5kbGVycy9odHRwLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUV2RTs7R0FFRztBQUNILE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxpQkFBaUI7SUFDMUQ7OztPQUdHO0lBQ0gsWUFBWSxNQUFzQjtRQUNoQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFZCxtREFBbUQ7UUFDbkQsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMseURBQXlELE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzFGLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLFVBQVU7UUFDckIseUNBQXlDO1FBQ3pDLE1BQU0sS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksZ0JBQWdCLENBQUMsTUFBMEI7UUFDaEQsc0VBQXNFO1FBQ3RFLGlDQUFpQztRQUNqQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxJQUFJLFNBQVMsQ0FBQztRQUN4RCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztRQUV6Qyw2Q0FBNkM7UUFDN0MsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFjLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1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
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../../plugins.js';
|
|
2
|
-
import { ForwardingHandler } from './base-handler.js';
|
|
3
|
-
import type { IForwardConfig } from '../config/forwarding-types.js';
|
|
4
|
-
/**
|
|
5
|
-
* Handler for HTTPS passthrough (SNI forwarding without termination)
|
|
6
|
-
*/
|
|
7
|
-
export declare class HttpsPassthroughHandler extends ForwardingHandler {
|
|
8
|
-
/**
|
|
9
|
-
* Create a new HTTPS passthrough handler
|
|
10
|
-
* @param config The forwarding configuration
|
|
11
|
-
*/
|
|
12
|
-
constructor(config: IForwardConfig);
|
|
13
|
-
/**
|
|
14
|
-
* Initialize the handler
|
|
15
|
-
* HTTPS passthrough handler doesn't need special initialization
|
|
16
|
-
*/
|
|
17
|
-
initialize(): Promise<void>;
|
|
18
|
-
/**
|
|
19
|
-
* Handle a TLS/SSL socket connection by forwarding it without termination
|
|
20
|
-
* @param clientSocket The incoming socket from the client
|
|
21
|
-
*/
|
|
22
|
-
handleConnection(clientSocket: plugins.net.Socket): void;
|
|
23
|
-
/**
|
|
24
|
-
* Handle an HTTP request - HTTPS passthrough doesn't support HTTP
|
|
25
|
-
* @param req The HTTP request
|
|
26
|
-
* @param res The HTTP response
|
|
27
|
-
*/
|
|
28
|
-
handleHttpRequest(_req: plugins.http.IncomingMessage, res: plugins.http.ServerResponse): void;
|
|
29
|
-
}
|
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../../plugins.js';
|
|
2
|
-
import { ForwardingHandler } from './base-handler.js';
|
|
3
|
-
import { ForwardingHandlerEvents } from '../config/forwarding-types.js';
|
|
4
|
-
import { createIndependentSocketHandlers, setupSocketHandlers, createSocketWithErrorHandler } from '../../core/utils/socket-utils.js';
|
|
5
|
-
/**
|
|
6
|
-
* Handler for HTTPS passthrough (SNI forwarding without termination)
|
|
7
|
-
*/
|
|
8
|
-
export class HttpsPassthroughHandler extends ForwardingHandler {
|
|
9
|
-
/**
|
|
10
|
-
* Create a new HTTPS passthrough handler
|
|
11
|
-
* @param config The forwarding configuration
|
|
12
|
-
*/
|
|
13
|
-
constructor(config) {
|
|
14
|
-
super(config);
|
|
15
|
-
// Validate that this is an HTTPS passthrough configuration
|
|
16
|
-
if (config.type !== 'https-passthrough') {
|
|
17
|
-
throw new Error(`Invalid configuration type for HttpsPassthroughHandler: ${config.type}`);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Initialize the handler
|
|
22
|
-
* HTTPS passthrough handler doesn't need special initialization
|
|
23
|
-
*/
|
|
24
|
-
async initialize() {
|
|
25
|
-
// Basic initialization from parent class
|
|
26
|
-
await super.initialize();
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Handle a TLS/SSL socket connection by forwarding it without termination
|
|
30
|
-
* @param clientSocket The incoming socket from the client
|
|
31
|
-
*/
|
|
32
|
-
handleConnection(clientSocket) {
|
|
33
|
-
// Get the target from configuration
|
|
34
|
-
const target = this.getTargetFromConfig();
|
|
35
|
-
// Log the connection
|
|
36
|
-
const remoteAddress = clientSocket.remoteAddress || 'unknown';
|
|
37
|
-
const remotePort = clientSocket.remotePort || 0;
|
|
38
|
-
this.emit(ForwardingHandlerEvents.CONNECTED, {
|
|
39
|
-
remoteAddress,
|
|
40
|
-
remotePort,
|
|
41
|
-
target: `${target.host}:${target.port}`
|
|
42
|
-
});
|
|
43
|
-
// Track data transfer for logging
|
|
44
|
-
let bytesSent = 0;
|
|
45
|
-
let bytesReceived = 0;
|
|
46
|
-
let serverSocket = null;
|
|
47
|
-
let cleanupClient = null;
|
|
48
|
-
let cleanupServer = null;
|
|
49
|
-
// Create a connection to the target server with immediate error handling
|
|
50
|
-
serverSocket = createSocketWithErrorHandler({
|
|
51
|
-
port: target.port,
|
|
52
|
-
host: target.host,
|
|
53
|
-
onError: async (error) => {
|
|
54
|
-
// Server connection failed - clean up client socket immediately
|
|
55
|
-
this.emit(ForwardingHandlerEvents.ERROR, {
|
|
56
|
-
error: error.message,
|
|
57
|
-
code: error.code || 'UNKNOWN',
|
|
58
|
-
remoteAddress,
|
|
59
|
-
target: `${target.host}:${target.port}`
|
|
60
|
-
});
|
|
61
|
-
// Clean up the client socket since we can't forward
|
|
62
|
-
if (!clientSocket.destroyed) {
|
|
63
|
-
clientSocket.destroy();
|
|
64
|
-
}
|
|
65
|
-
this.emit(ForwardingHandlerEvents.DISCONNECTED, {
|
|
66
|
-
remoteAddress,
|
|
67
|
-
bytesSent: 0,
|
|
68
|
-
bytesReceived: 0,
|
|
69
|
-
reason: `server_connection_failed: ${error.message}`
|
|
70
|
-
});
|
|
71
|
-
},
|
|
72
|
-
onConnect: () => {
|
|
73
|
-
// Connection successful - set up forwarding handlers
|
|
74
|
-
const handlers = createIndependentSocketHandlers(clientSocket, serverSocket, (reason) => {
|
|
75
|
-
this.emit(ForwardingHandlerEvents.DISCONNECTED, {
|
|
76
|
-
remoteAddress,
|
|
77
|
-
bytesSent,
|
|
78
|
-
bytesReceived,
|
|
79
|
-
reason
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
cleanupClient = handlers.cleanupClient;
|
|
83
|
-
cleanupServer = handlers.cleanupServer;
|
|
84
|
-
// Setup handlers with custom timeout handling that doesn't close connections
|
|
85
|
-
const timeout = this.getTimeout();
|
|
86
|
-
setupSocketHandlers(clientSocket, cleanupClient, (socket) => {
|
|
87
|
-
// Just reset timeout, don't close
|
|
88
|
-
socket.setTimeout(timeout);
|
|
89
|
-
}, 'client');
|
|
90
|
-
setupSocketHandlers(serverSocket, cleanupServer, (socket) => {
|
|
91
|
-
// Just reset timeout, don't close
|
|
92
|
-
socket.setTimeout(timeout);
|
|
93
|
-
}, 'server');
|
|
94
|
-
// Forward data from client to server
|
|
95
|
-
clientSocket.on('data', (data) => {
|
|
96
|
-
bytesSent += data.length;
|
|
97
|
-
// Check if server socket is writable
|
|
98
|
-
if (serverSocket && serverSocket.writable) {
|
|
99
|
-
const flushed = serverSocket.write(data);
|
|
100
|
-
// Handle backpressure
|
|
101
|
-
if (!flushed) {
|
|
102
|
-
clientSocket.pause();
|
|
103
|
-
serverSocket.once('drain', () => {
|
|
104
|
-
clientSocket.resume();
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
this.emit(ForwardingHandlerEvents.DATA_FORWARDED, {
|
|
109
|
-
direction: 'outbound',
|
|
110
|
-
bytes: data.length,
|
|
111
|
-
total: bytesSent
|
|
112
|
-
});
|
|
113
|
-
});
|
|
114
|
-
// Forward data from server to client
|
|
115
|
-
serverSocket.on('data', (data) => {
|
|
116
|
-
bytesReceived += data.length;
|
|
117
|
-
// Check if client socket is writable
|
|
118
|
-
if (clientSocket.writable) {
|
|
119
|
-
const flushed = clientSocket.write(data);
|
|
120
|
-
// Handle backpressure
|
|
121
|
-
if (!flushed) {
|
|
122
|
-
serverSocket.pause();
|
|
123
|
-
clientSocket.once('drain', () => {
|
|
124
|
-
serverSocket.resume();
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
this.emit(ForwardingHandlerEvents.DATA_FORWARDED, {
|
|
129
|
-
direction: 'inbound',
|
|
130
|
-
bytes: data.length,
|
|
131
|
-
total: bytesReceived
|
|
132
|
-
});
|
|
133
|
-
});
|
|
134
|
-
// Set initial timeouts - they will be reset on each timeout event
|
|
135
|
-
clientSocket.setTimeout(timeout);
|
|
136
|
-
serverSocket.setTimeout(timeout);
|
|
137
|
-
}
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* Handle an HTTP request - HTTPS passthrough doesn't support HTTP
|
|
142
|
-
* @param req The HTTP request
|
|
143
|
-
* @param res The HTTP response
|
|
144
|
-
*/
|
|
145
|
-
handleHttpRequest(_req, res) {
|
|
146
|
-
// HTTPS passthrough doesn't support HTTP requests
|
|
147
|
-
res.writeHead(404, { 'Content-Type': 'text/plain' });
|
|
148
|
-
res.end('HTTP not supported for this domain');
|
|
149
|
-
this.emit(ForwardingHandlerEvents.HTTP_RESPONSE, {
|
|
150
|
-
statusCode: 404,
|
|
151
|
-
headers: { 'Content-Type': 'text/plain' },
|
|
152
|
-
size: 'HTTP not supported for this domain'.length
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cHMtcGFzc3Rocm91Z2gtaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2ZvcndhcmRpbmcvaGFuZGxlcnMvaHR0cHMtcGFzc3Rocm91Z2gtaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXRELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxtQkFBbUIsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXRJOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHVCQUF3QixTQUFRLGlCQUFpQjtJQUM1RDs7O09BR0c7SUFDSCxZQUFZLE1BQXNCO1FBQ2hDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVkLDJEQUEyRDtRQUMzRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssbUJBQW1CLEVBQUUsQ0FBQztZQUN4QyxNQUFNLElBQUksS0FBSyxDQUFDLDJEQUEyRCxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM1RixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxVQUFVO1FBQ3JCLHlDQUF5QztRQUN6QyxNQUFNLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksZ0JBQWdCLENBQUMsWUFBZ0M7UUFDdEQsb0NBQW9DO1FBQ3BDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBRTFDLHFCQUFxQjtRQUNyQixNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsYUFBYSxJQUFJLFNBQVMsQ0FBQztRQUM5RCxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQztRQUVoRCxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsRUFBRTtZQUMzQyxhQUFhO1lBQ2IsVUFBVTtZQUNWLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksRUFBRTtTQUN4QyxDQUFDLENBQUM7UUFFSCxrQ0FBa0M7UUFDbEMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztRQUN0QixJQUFJLFlBQVksR0FBOEIsSUFBSSxDQUFDO1FBQ25ELElBQUksYUFBYSxHQUErQyxJQUFJLENBQUM7UUFDckUsSUFBSSxhQUFhLEdBQStDLElBQUksQ0FBQztRQUVyRSx5RUFBeUU7UUFDekUsWUFBWSxHQUFHLDRCQUE0QixDQUFDO1lBQzFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtZQUNqQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7WUFDakIsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDdkIsZ0VBQWdFO2dCQUNoRSxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssRUFBRTtvQkFDdkMsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPO29CQUNwQixJQUFJLEVBQUcsS0FBYSxDQUFDLElBQUksSUFBSSxTQUFTO29CQUN0QyxhQUFhO29CQUNiLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksRUFBRTtpQkFDeEMsQ0FBQyxDQUFDO2dCQUVILG9EQUFvRDtnQkFDcEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDNUIsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN6QixDQUFDO2dCQUVELElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsWUFBWSxFQUFFO29CQUM5QyxhQUFhO29CQUNiLFNBQVMsRUFBRSxDQUFDO29CQUNaLGFBQWEsRUFBRSxDQUFDO29CQUNoQixNQUFNLEVBQUUsNkJBQTZCLEtBQUssQ0FBQyxPQUFPLEVBQUU7aUJBQ3JELENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxTQUFTLEVBQUUsR0FBRyxFQUFFO2dCQUNkLHFEQUFxRDtnQkFDckQsTUFBTSxRQUFRLEdBQUcsK0JBQStCLENBQzlDLFlBQVksRUFDWixZQUFhLEVBQ2IsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFlBQVksRUFBRTt3QkFDOUMsYUFBYTt3QkFDYixTQUFTO3dCQUNULGFBQWE7d0JBQ2IsTUFBTTtxQkFDUCxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUNGLENBQUM7Z0JBRUYsYUFBYSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUM7Z0JBQ3ZDLGFBQWEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDO2dCQUV2Qyw2RUFBNkU7Z0JBQzdFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFFbEMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFO29CQUMxRCxrQ0FBa0M7b0JBQ2xDLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzdCLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFFYixtQkFBbUIsQ0FBQyxZQUFhLEVBQUUsYUFBYSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUU7b0JBQzNELG9DQUFvQztvQkFDcEMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDN0IsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUViLHFDQUFxQztnQkFDckMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDL0IsU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUM7b0JBRXpCLHFDQUFxQztvQkFDckMsSUFBSSxZQUFZLElBQUksWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUMxQyxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUV6QyxzQkFBc0I7d0JBQ3RCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQzs0QkFDYixZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7NEJBQ3JCLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtnQ0FDOUIsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDOzRCQUN4QixDQUFDLENBQUMsQ0FBQzt3QkFDTCxDQUFDO29CQUNILENBQUM7b0JBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxjQUFjLEVBQUU7d0JBQ2hELFNBQVMsRUFBRSxVQUFVO3dCQUNyQixLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU07d0JBQ2xCLEtBQUssRUFBRSxTQUFTO3FCQUNqQixDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBRUgscUNBQXFDO2dCQUNyQyxZQUFhLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO29CQUNoQyxhQUFhLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztvQkFFN0IscUNBQXFDO29CQUNyQyxJQUFJLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDMUIsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFFekMsc0JBQXNCO3dCQUN0QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7NEJBQ2IsWUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDOzRCQUN0QixZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7Z0NBQzlCLFlBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQzs0QkFDekIsQ0FBQyxDQUFDLENBQUM7d0JBQ0wsQ0FBQztvQkFDSCxDQUFDO29CQUVELElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsY0FBYyxFQUFFO3dCQUNoRCxTQUFTLEVBQUUsU0FBUzt3QkFDcEIsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNO3dCQUNsQixLQUFLLEVBQUUsYUFBYTtxQkFDckIsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUVILG9FQUFvRTtnQkFDcEUsWUFBWSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDakMsWUFBYSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwQyxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxpQkFBaUIsQ0FBQyxJQUFrQyxFQUFFLEdBQWdDO1FBQzNGLGtEQUFrRDtRQUNsRCxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELEdBQUcsQ0FBQyxHQUFHLENBQUMsb0NBQW9DLENBQUMsQ0FBQztRQUU5QyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGFBQWEsRUFBRTtZQUMvQyxVQUFVLEVBQUUsR0FBRztZQUNmLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUU7WUFDekMsSUFBSSxFQUFFLG9DQUFvQyxDQUFDLE1BQU07U0FDbEQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIn0=
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../../plugins.js';
|
|
2
|
-
import { ForwardingHandler } from './base-handler.js';
|
|
3
|
-
import type { IForwardConfig } from '../config/forwarding-types.js';
|
|
4
|
-
/**
|
|
5
|
-
* Handler for HTTPS termination with HTTP backend
|
|
6
|
-
*/
|
|
7
|
-
export declare class HttpsTerminateToHttpHandler extends ForwardingHandler {
|
|
8
|
-
private tlsServer;
|
|
9
|
-
private secureContext;
|
|
10
|
-
/**
|
|
11
|
-
* Create a new HTTPS termination with HTTP backend handler
|
|
12
|
-
* @param config The forwarding configuration
|
|
13
|
-
*/
|
|
14
|
-
constructor(config: IForwardConfig);
|
|
15
|
-
/**
|
|
16
|
-
* Initialize the handler, setting up TLS context
|
|
17
|
-
*/
|
|
18
|
-
initialize(): Promise<void>;
|
|
19
|
-
/**
|
|
20
|
-
* Set the secure context for TLS termination
|
|
21
|
-
* Called when a certificate is available
|
|
22
|
-
* @param context The secure context
|
|
23
|
-
*/
|
|
24
|
-
setSecureContext(context: plugins.tls.SecureContext): void;
|
|
25
|
-
/**
|
|
26
|
-
* Handle a TLS/SSL socket connection by terminating TLS and forwarding to HTTP backend
|
|
27
|
-
* @param clientSocket The incoming socket from the client
|
|
28
|
-
*/
|
|
29
|
-
handleConnection(clientSocket: plugins.net.Socket): void;
|
|
30
|
-
/**
|
|
31
|
-
* Handle an HTTP request by forwarding to the HTTP backend
|
|
32
|
-
* @param req The HTTP request
|
|
33
|
-
* @param res The HTTP response
|
|
34
|
-
*/
|
|
35
|
-
handleHttpRequest(req: plugins.http.IncomingMessage, res: plugins.http.ServerResponse): void;
|
|
36
|
-
}
|