@push.rocks/smartproxy 12.0.0 → 13.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/certificate/acme/acme-factory.d.ts +17 -0
- package/dist_ts/certificate/acme/acme-factory.js +40 -0
- package/dist_ts/certificate/acme/challenge-handler.d.ts +44 -0
- package/dist_ts/certificate/acme/challenge-handler.js +92 -0
- package/dist_ts/certificate/acme/index.d.ts +4 -0
- package/dist_ts/certificate/acme/index.js +5 -0
- package/dist_ts/certificate/events/certificate-events.d.ts +33 -0
- package/dist_ts/certificate/events/certificate-events.js +38 -0
- package/dist_ts/certificate/index.d.ts +24 -0
- package/dist_ts/certificate/index.js +39 -0
- package/dist_ts/certificate/models/certificate-types.d.ts +77 -0
- package/dist_ts/certificate/models/certificate-types.js +2 -0
- package/dist_ts/certificate/providers/cert-provisioner.d.ts +93 -0
- package/dist_ts/certificate/providers/cert-provisioner.js +262 -0
- package/dist_ts/certificate/providers/index.d.ts +4 -0
- package/dist_ts/certificate/providers/index.js +5 -0
- package/dist_ts/certificate/storage/file-storage.d.ts +66 -0
- package/dist_ts/certificate/storage/file-storage.js +194 -0
- package/dist_ts/certificate/storage/index.d.ts +4 -0
- package/dist_ts/certificate/storage/index.js +5 -0
- package/dist_ts/certificate/utils/certificate-helpers.d.ts +17 -0
- package/dist_ts/certificate/utils/certificate-helpers.js +45 -0
- package/dist_ts/common/eventUtils.d.ts +1 -1
- package/dist_ts/common/port80-adapter.d.ts +1 -1
- package/dist_ts/core/events/index.d.ts +4 -0
- package/dist_ts/core/events/index.js +5 -0
- package/dist_ts/core/index.d.ts +6 -0
- package/dist_ts/core/index.js +8 -0
- package/dist_ts/core/models/common-types.d.ts +82 -0
- package/dist_ts/core/models/common-types.js +15 -0
- package/dist_ts/core/models/index.d.ts +4 -0
- package/dist_ts/core/models/index.js +5 -0
- package/dist_ts/core/utils/event-utils.d.ts +15 -0
- package/dist_ts/core/utils/event-utils.js +19 -0
- package/dist_ts/core/utils/index.d.ts +6 -0
- package/dist_ts/core/utils/index.js +7 -0
- package/dist_ts/core/utils/ip-utils.d.ts +53 -0
- package/dist_ts/core/utils/ip-utils.js +153 -0
- package/dist_ts/core/utils/validation-utils.d.ts +61 -0
- package/dist_ts/core/utils/validation-utils.js +149 -0
- package/dist_ts/forwarding/config/domain-config.d.ts +12 -0
- package/dist_ts/forwarding/config/domain-config.js +12 -0
- package/dist_ts/forwarding/config/domain-manager.d.ts +86 -0
- package/dist_ts/forwarding/config/domain-manager.js +242 -0
- package/dist_ts/forwarding/config/forwarding-types.d.ts +104 -0
- package/dist_ts/forwarding/config/forwarding-types.js +50 -0
- package/dist_ts/forwarding/config/index.d.ts +6 -0
- package/dist_ts/forwarding/config/index.js +7 -0
- package/dist_ts/forwarding/factory/forwarding-factory.d.ts +25 -0
- package/dist_ts/forwarding/factory/forwarding-factory.js +138 -0
- package/dist_ts/forwarding/factory/index.d.ts +4 -0
- package/dist_ts/forwarding/factory/index.js +5 -0
- package/dist_ts/forwarding/handlers/base-handler.d.ts +55 -0
- package/dist_ts/forwarding/handlers/base-handler.js +94 -0
- package/dist_ts/forwarding/handlers/http-handler.d.ts +30 -0
- package/dist_ts/forwarding/handlers/http-handler.js +131 -0
- package/dist_ts/forwarding/handlers/https-passthrough-handler.d.ts +29 -0
- package/dist_ts/forwarding/handlers/https-passthrough-handler.js +162 -0
- package/dist_ts/forwarding/handlers/https-terminate-to-http-handler.d.ts +36 -0
- package/dist_ts/forwarding/handlers/https-terminate-to-http-handler.js +229 -0
- package/dist_ts/forwarding/handlers/https-terminate-to-https-handler.d.ts +35 -0
- package/dist_ts/forwarding/handlers/https-terminate-to-https-handler.js +254 -0
- package/dist_ts/forwarding/handlers/index.d.ts +8 -0
- package/dist_ts/forwarding/handlers/index.js +9 -0
- package/dist_ts/forwarding/index.d.ts +19 -0
- package/dist_ts/forwarding/index.js +25 -0
- package/dist_ts/http/index.d.ts +15 -0
- package/dist_ts/http/index.js +20 -0
- package/dist_ts/http/models/http-types.d.ts +81 -0
- package/dist_ts/http/models/http-types.js +62 -0
- package/dist_ts/http/port80/acme-interfaces.d.ts +78 -0
- package/dist_ts/http/port80/acme-interfaces.js +6 -0
- package/dist_ts/http/port80/challenge-responder.d.ts +53 -0
- package/dist_ts/http/port80/challenge-responder.js +203 -0
- package/dist_ts/http/port80/index.d.ts +6 -0
- package/dist_ts/http/port80/index.js +9 -0
- package/dist_ts/http/port80/port80-handler.d.ts +121 -0
- package/dist_ts/http/port80/port80-handler.js +554 -0
- package/dist_ts/http/redirects/index.d.ts +4 -0
- package/dist_ts/http/redirects/index.js +5 -0
- package/dist_ts/http/router/index.d.ts +4 -0
- package/dist_ts/http/router/index.js +5 -0
- package/dist_ts/http/router/proxy-router.d.ts +115 -0
- package/dist_ts/http/router/proxy-router.js +325 -0
- package/dist_ts/index.d.ts +15 -8
- package/dist_ts/index.js +26 -10
- package/dist_ts/networkproxy/classes.np.certificatemanager.js +2 -2
- package/dist_ts/networkproxy/index.d.ts +1 -6
- package/dist_ts/networkproxy/index.js +4 -8
- package/dist_ts/plugins.d.ts +2 -1
- package/dist_ts/plugins.js +3 -2
- package/dist_ts/port80handler/classes.port80handler.d.ts +8 -136
- package/dist_ts/port80handler/classes.port80handler.js +14 -567
- package/dist_ts/proxies/index.d.ts +6 -0
- package/dist_ts/proxies/index.js +8 -0
- package/dist_ts/proxies/network-proxy/certificate-manager.d.ts +77 -0
- package/dist_ts/proxies/network-proxy/certificate-manager.js +373 -0
- package/dist_ts/proxies/network-proxy/connection-pool.d.ts +47 -0
- package/dist_ts/proxies/network-proxy/connection-pool.js +210 -0
- package/dist_ts/proxies/network-proxy/index.d.ts +10 -0
- package/dist_ts/proxies/network-proxy/index.js +12 -0
- package/dist_ts/proxies/network-proxy/models/index.d.ts +4 -0
- package/dist_ts/proxies/network-proxy/models/index.js +5 -0
- package/dist_ts/proxies/network-proxy/models/types.d.ts +80 -0
- package/dist_ts/proxies/network-proxy/models/types.js +35 -0
- package/dist_ts/proxies/network-proxy/network-proxy.d.ts +118 -0
- package/dist_ts/proxies/network-proxy/network-proxy.js +387 -0
- package/dist_ts/proxies/network-proxy/request-handler.d.ts +57 -0
- package/dist_ts/proxies/network-proxy/request-handler.js +394 -0
- package/dist_ts/proxies/network-proxy/websocket-handler.d.ts +38 -0
- package/dist_ts/proxies/network-proxy/websocket-handler.js +188 -0
- package/dist_ts/proxies/nftables-proxy/index.d.ts +5 -0
- package/dist_ts/proxies/nftables-proxy/index.js +6 -0
- package/dist_ts/proxies/nftables-proxy/models/errors.d.ts +15 -0
- package/dist_ts/proxies/nftables-proxy/models/errors.js +28 -0
- package/dist_ts/proxies/nftables-proxy/models/index.d.ts +5 -0
- package/dist_ts/proxies/nftables-proxy/models/index.js +6 -0
- package/dist_ts/proxies/nftables-proxy/models/interfaces.d.ts +75 -0
- package/dist_ts/proxies/nftables-proxy/models/interfaces.js +5 -0
- package/dist_ts/proxies/nftables-proxy/nftables-proxy.d.ts +136 -0
- package/dist_ts/proxies/nftables-proxy/nftables-proxy.js +1516 -0
- package/dist_ts/proxies/smart-proxy/connection-handler.d.ts +39 -0
- package/dist_ts/proxies/smart-proxy/connection-handler.js +894 -0
- package/dist_ts/proxies/smart-proxy/connection-manager.d.ts +78 -0
- package/dist_ts/proxies/smart-proxy/connection-manager.js +378 -0
- package/dist_ts/proxies/smart-proxy/domain-config-manager.d.ts +95 -0
- package/dist_ts/proxies/smart-proxy/domain-config-manager.js +255 -0
- package/dist_ts/proxies/smart-proxy/index.d.ts +13 -0
- package/dist_ts/proxies/smart-proxy/index.js +17 -0
- package/dist_ts/proxies/smart-proxy/models/index.d.ts +4 -0
- package/dist_ts/proxies/smart-proxy/models/index.js +5 -0
- package/dist_ts/proxies/smart-proxy/models/interfaces.d.ts +107 -0
- package/dist_ts/proxies/smart-proxy/models/interfaces.js +2 -0
- package/dist_ts/proxies/smart-proxy/network-proxy-bridge.d.ts +62 -0
- package/dist_ts/proxies/smart-proxy/network-proxy-bridge.js +316 -0
- package/dist_ts/proxies/smart-proxy/port-range-manager.d.ts +56 -0
- package/dist_ts/proxies/smart-proxy/port-range-manager.js +176 -0
- package/dist_ts/proxies/smart-proxy/security-manager.d.ts +64 -0
- package/dist_ts/proxies/smart-proxy/security-manager.js +149 -0
- package/dist_ts/proxies/smart-proxy/smart-proxy.d.ts +63 -0
- package/dist_ts/proxies/smart-proxy/smart-proxy.js +523 -0
- package/dist_ts/proxies/smart-proxy/timeout-manager.d.ts +47 -0
- package/dist_ts/proxies/smart-proxy/timeout-manager.js +154 -0
- package/dist_ts/proxies/smart-proxy/tls-manager.d.ts +57 -0
- package/dist_ts/proxies/smart-proxy/tls-manager.js +132 -0
- package/dist_ts/smartproxy/classes.pp.networkproxybridge.d.ts +2 -2
- package/dist_ts/smartproxy/classes.pp.networkproxybridge.js +1 -1
- package/dist_ts/smartproxy/classes.pp.tlsmanager.js +2 -2
- package/dist_ts/smartproxy/classes.smartproxy.js +3 -3
- package/dist_ts/tls/alerts/index.d.ts +4 -0
- package/dist_ts/tls/alerts/index.js +5 -0
- package/dist_ts/tls/alerts/tls-alert.d.ts +150 -0
- package/dist_ts/tls/alerts/tls-alert.js +226 -0
- package/dist_ts/tls/index.d.ts +18 -0
- package/dist_ts/tls/index.js +27 -0
- package/dist_ts/tls/sni/client-hello-parser.d.ts +100 -0
- package/dist_ts/tls/sni/client-hello-parser.js +463 -0
- package/dist_ts/tls/sni/index.d.ts +4 -0
- package/dist_ts/tls/sni/index.js +5 -0
- package/dist_ts/tls/sni/sni-extraction.d.ts +58 -0
- package/dist_ts/tls/sni/sni-extraction.js +275 -0
- package/dist_ts/tls/sni/sni-handler.d.ts +154 -0
- package/dist_ts/tls/sni/sni-handler.js +191 -0
- package/dist_ts/tls/utils/index.d.ts +4 -0
- package/dist_ts/tls/utils/index.js +5 -0
- package/dist_ts/tls/utils/tls-utils.d.ts +158 -0
- package/dist_ts/tls/utils/tls-utils.js +187 -0
- package/package.json +1 -1
- package/readme.md +89 -21
- package/readme.plan.md +253 -469
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/certificate/acme/acme-factory.ts +48 -0
- package/ts/certificate/acme/challenge-handler.ts +110 -0
- package/ts/certificate/acme/index.ts +3 -0
- package/ts/certificate/events/certificate-events.ts +36 -0
- package/ts/certificate/index.ts +67 -0
- package/ts/certificate/models/certificate-types.ts +88 -0
- package/ts/certificate/providers/cert-provisioner.ts +326 -0
- package/ts/certificate/providers/index.ts +3 -0
- package/ts/certificate/storage/file-storage.ts +234 -0
- package/ts/certificate/storage/index.ts +3 -0
- package/ts/certificate/utils/certificate-helpers.ts +50 -0
- package/ts/common/eventUtils.ts +1 -1
- package/ts/common/port80-adapter.ts +1 -1
- package/ts/core/events/index.ts +3 -0
- package/ts/core/index.ts +8 -0
- package/ts/core/models/common-types.ts +91 -0
- package/ts/core/models/index.ts +5 -0
- package/ts/core/utils/event-utils.ts +34 -0
- package/ts/core/utils/index.ts +7 -0
- package/ts/core/utils/ip-utils.ts +175 -0
- package/ts/core/utils/validation-utils.ts +177 -0
- package/ts/{smartproxy/forwarding → forwarding/config}/domain-config.ts +1 -1
- package/ts/{smartproxy/forwarding → forwarding/config}/domain-manager.ts +8 -8
- package/ts/{smartproxy/types/forwarding.types.ts → forwarding/config/forwarding-types.ts} +6 -6
- package/ts/forwarding/config/index.ts +7 -0
- package/ts/{smartproxy/forwarding/forwarding.factory.ts → forwarding/factory/forwarding-factory.ts} +12 -11
- package/ts/forwarding/factory/index.ts +5 -0
- package/ts/{smartproxy/forwarding/forwarding.handler.ts → forwarding/handlers/base-handler.ts} +2 -2
- package/ts/{smartproxy/forwarding/http.handler.ts → forwarding/handlers/http-handler.ts} +13 -4
- package/ts/{smartproxy/forwarding/https-passthrough.handler.ts → forwarding/handlers/https-passthrough-handler.ts} +13 -4
- package/ts/{smartproxy/forwarding/https-terminate-to-http.handler.ts → forwarding/handlers/https-terminate-to-http-handler.ts} +3 -3
- package/ts/{smartproxy/forwarding/https-terminate-to-https.handler.ts → forwarding/handlers/https-terminate-to-https-handler.ts} +3 -3
- package/ts/forwarding/handlers/index.ts +9 -0
- package/ts/forwarding/index.ts +34 -0
- package/ts/http/index.ts +23 -0
- package/ts/http/models/http-types.ts +105 -0
- package/ts/http/port80/acme-interfaces.ts +85 -0
- package/ts/http/port80/challenge-responder.ts +246 -0
- package/ts/http/port80/index.ts +13 -0
- package/ts/{port80handler/classes.port80handler.ts → http/port80/port80-handler.ts} +164 -161
- package/ts/http/redirects/index.ts +3 -0
- package/ts/http/router/index.ts +5 -0
- package/ts/{classes.router.ts → http/router/proxy-router.ts} +27 -20
- package/ts/index.ts +32 -9
- package/ts/plugins.ts +2 -1
- package/ts/proxies/index.ts +8 -0
- package/ts/{networkproxy/classes.np.certificatemanager.ts → proxies/network-proxy/certificate-manager.ts} +17 -16
- package/ts/{networkproxy/classes.np.connectionpool.ts → proxies/network-proxy/connection-pool.ts} +3 -3
- package/ts/proxies/network-proxy/index.ts +13 -0
- package/ts/proxies/network-proxy/models/index.ts +4 -0
- package/ts/{networkproxy/classes.np.types.ts → proxies/network-proxy/models/types.ts} +7 -11
- package/ts/{networkproxy/classes.np.networkproxy.ts → proxies/network-proxy/network-proxy.ts} +31 -24
- package/ts/{networkproxy/classes.np.requesthandler.ts → proxies/network-proxy/request-handler.ts} +12 -7
- package/ts/{networkproxy/classes.np.websockethandler.ts → proxies/network-proxy/websocket-handler.ts} +6 -6
- package/ts/proxies/nftables-proxy/index.ts +5 -0
- package/ts/proxies/nftables-proxy/models/errors.ts +30 -0
- package/ts/proxies/nftables-proxy/models/index.ts +5 -0
- package/ts/proxies/nftables-proxy/models/interfaces.ts +94 -0
- package/ts/{nfttablesproxy/classes.nftablesproxy.ts → proxies/nftables-proxy/nftables-proxy.ts} +24 -126
- package/ts/{smartproxy/classes.pp.connectionhandler.ts → proxies/smart-proxy/connection-handler.ts} +12 -12
- package/ts/{smartproxy/classes.pp.connectionmanager.ts → proxies/smart-proxy/connection-manager.ts} +8 -8
- package/ts/{smartproxy/classes.pp.domainconfigmanager.ts → proxies/smart-proxy/domain-config-manager.ts} +15 -14
- package/ts/proxies/smart-proxy/index.ts +18 -0
- package/ts/proxies/smart-proxy/models/index.ts +4 -0
- package/ts/{smartproxy/classes.pp.interfaces.ts → proxies/smart-proxy/models/interfaces.ts} +12 -8
- package/ts/{smartproxy/classes.pp.networkproxybridge.ts → proxies/smart-proxy/network-proxy-bridge.ts} +14 -14
- package/ts/{smartproxy/classes.pp.portrangemanager.ts → proxies/smart-proxy/port-range-manager.ts} +1 -1
- package/ts/{smartproxy/classes.pp.securitymanager.ts → proxies/smart-proxy/security-manager.ts} +3 -3
- package/ts/{smartproxy/classes.smartproxy.ts → proxies/smart-proxy/smart-proxy.ts} +29 -24
- package/ts/{smartproxy/classes.pp.timeoutmanager.ts → proxies/smart-proxy/timeout-manager.ts} +3 -3
- package/ts/{smartproxy/classes.pp.tlsmanager.ts → proxies/smart-proxy/tls-manager.ts} +3 -3
- package/ts/tls/alerts/index.ts +3 -0
- package/ts/{smartproxy/classes.pp.tlsalert.ts → tls/alerts/tls-alert.ts} +44 -43
- package/ts/tls/index.ts +33 -0
- package/ts/tls/sni/client-hello-parser.ts +629 -0
- package/ts/tls/sni/index.ts +3 -0
- package/ts/tls/sni/sni-extraction.ts +353 -0
- package/ts/tls/sni/sni-handler.ts +264 -0
- package/ts/tls/utils/index.ts +3 -0
- package/ts/tls/utils/tls-utils.ts +201 -0
- package/ts/common/acmeFactory.ts +0 -23
- package/ts/helpers.certificates.ts +0 -30
- package/ts/networkproxy/index.ts +0 -7
- package/ts/smartproxy/classes.pp.certprovisioner.ts +0 -200
- package/ts/smartproxy/classes.pp.snihandler.ts +0 -1281
- package/ts/smartproxy/forwarding/index.ts +0 -52
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
import * as plugins from '../../plugins.js';
|
|
2
|
+
import { ForwardingHandlerFactory } from '../../forwarding/factory/forwarding-factory.js';
|
|
3
|
+
/**
|
|
4
|
+
* Manages domain configurations and target selection
|
|
5
|
+
*/
|
|
6
|
+
export class DomainConfigManager {
|
|
7
|
+
constructor(settings) {
|
|
8
|
+
this.settings = settings;
|
|
9
|
+
// Track round-robin indices for domain configs
|
|
10
|
+
this.domainTargetIndices = new Map();
|
|
11
|
+
// Cache forwarding handlers for each domain config
|
|
12
|
+
this.forwardingHandlers = new Map();
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Updates the domain configurations
|
|
16
|
+
*/
|
|
17
|
+
updateDomainConfigs(newDomainConfigs) {
|
|
18
|
+
this.settings.domainConfigs = newDomainConfigs;
|
|
19
|
+
// Reset target indices for removed configs
|
|
20
|
+
const currentConfigSet = new Set(newDomainConfigs);
|
|
21
|
+
for (const [config] of this.domainTargetIndices) {
|
|
22
|
+
if (!currentConfigSet.has(config)) {
|
|
23
|
+
this.domainTargetIndices.delete(config);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
// Clear handlers for removed configs and create handlers for new configs
|
|
27
|
+
const handlersToRemove = [];
|
|
28
|
+
for (const [config] of this.forwardingHandlers) {
|
|
29
|
+
if (!currentConfigSet.has(config)) {
|
|
30
|
+
handlersToRemove.push(config);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// Remove handlers that are no longer needed
|
|
34
|
+
for (const config of handlersToRemove) {
|
|
35
|
+
this.forwardingHandlers.delete(config);
|
|
36
|
+
}
|
|
37
|
+
// Create handlers for new configs
|
|
38
|
+
for (const config of newDomainConfigs) {
|
|
39
|
+
if (!this.forwardingHandlers.has(config)) {
|
|
40
|
+
try {
|
|
41
|
+
const handler = this.createForwardingHandler(config);
|
|
42
|
+
this.forwardingHandlers.set(config, handler);
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
console.log(`Error creating forwarding handler for domain ${config.domains.join(', ')}: ${err}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Get all domain configurations
|
|
52
|
+
*/
|
|
53
|
+
getDomainConfigs() {
|
|
54
|
+
return this.settings.domainConfigs;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Find domain config matching a server name
|
|
58
|
+
*/
|
|
59
|
+
findDomainConfig(serverName) {
|
|
60
|
+
if (!serverName)
|
|
61
|
+
return undefined;
|
|
62
|
+
return this.settings.domainConfigs.find((config) => config.domains.some((d) => plugins.minimatch(serverName, d)));
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Find domain config for a specific port
|
|
66
|
+
*/
|
|
67
|
+
findDomainConfigForPort(port) {
|
|
68
|
+
return this.settings.domainConfigs.find((domain) => {
|
|
69
|
+
const portRanges = domain.forwarding?.advanced?.portRanges;
|
|
70
|
+
return portRanges &&
|
|
71
|
+
portRanges.length > 0 &&
|
|
72
|
+
this.isPortInRanges(port, portRanges);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Check if a port is within any of the given ranges
|
|
77
|
+
*/
|
|
78
|
+
isPortInRanges(port, ranges) {
|
|
79
|
+
return ranges.some((range) => port >= range.from && port <= range.to);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Get target IP with round-robin support
|
|
83
|
+
*/
|
|
84
|
+
getTargetIP(domainConfig) {
|
|
85
|
+
const targetHosts = Array.isArray(domainConfig.forwarding.target.host)
|
|
86
|
+
? domainConfig.forwarding.target.host
|
|
87
|
+
: [domainConfig.forwarding.target.host];
|
|
88
|
+
if (targetHosts.length > 0) {
|
|
89
|
+
const currentIndex = this.domainTargetIndices.get(domainConfig) || 0;
|
|
90
|
+
const ip = targetHosts[currentIndex % targetHosts.length];
|
|
91
|
+
this.domainTargetIndices.set(domainConfig, currentIndex + 1);
|
|
92
|
+
return ip;
|
|
93
|
+
}
|
|
94
|
+
return this.settings.targetIP || 'localhost';
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Get target host with round-robin support (for tests)
|
|
98
|
+
* This is just an alias for getTargetIP for easier test compatibility
|
|
99
|
+
*/
|
|
100
|
+
getTargetHost(domainConfig) {
|
|
101
|
+
return this.getTargetIP(domainConfig);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get target port from domain config
|
|
105
|
+
*/
|
|
106
|
+
getTargetPort(domainConfig, defaultPort) {
|
|
107
|
+
return domainConfig.forwarding.target.port || defaultPort;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Checks if a domain should use NetworkProxy
|
|
111
|
+
*/
|
|
112
|
+
shouldUseNetworkProxy(domainConfig) {
|
|
113
|
+
const forwardingType = this.getForwardingType(domainConfig);
|
|
114
|
+
return forwardingType === 'https-terminate-to-http' ||
|
|
115
|
+
forwardingType === 'https-terminate-to-https';
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Gets the NetworkProxy port for a domain
|
|
119
|
+
*/
|
|
120
|
+
getNetworkProxyPort(domainConfig) {
|
|
121
|
+
// First check if we should use NetworkProxy at all
|
|
122
|
+
if (!this.shouldUseNetworkProxy(domainConfig)) {
|
|
123
|
+
return undefined;
|
|
124
|
+
}
|
|
125
|
+
return domainConfig.forwarding.advanced?.networkProxyPort || this.settings.networkProxyPort;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Get effective allowed and blocked IPs for a domain
|
|
129
|
+
*
|
|
130
|
+
* This method combines domain-specific security rules from the forwarding configuration
|
|
131
|
+
* with global security defaults when necessary.
|
|
132
|
+
*/
|
|
133
|
+
getEffectiveIPRules(domainConfig) {
|
|
134
|
+
// Start with empty arrays
|
|
135
|
+
const allowedIPs = [];
|
|
136
|
+
const blockedIPs = [];
|
|
137
|
+
// Add IPs from forwarding security settings if available
|
|
138
|
+
if (domainConfig.forwarding?.security?.allowedIps) {
|
|
139
|
+
allowedIPs.push(...domainConfig.forwarding.security.allowedIps);
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
// If no allowed IPs are specified in forwarding config and global defaults exist, use them
|
|
143
|
+
if (this.settings.defaultAllowedIPs && this.settings.defaultAllowedIPs.length > 0) {
|
|
144
|
+
allowedIPs.push(...this.settings.defaultAllowedIPs);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
// Default to allow all if no specific rules
|
|
148
|
+
allowedIPs.push('*');
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// Add blocked IPs from forwarding security settings if available
|
|
152
|
+
if (domainConfig.forwarding?.security?.blockedIps) {
|
|
153
|
+
blockedIPs.push(...domainConfig.forwarding.security.blockedIps);
|
|
154
|
+
}
|
|
155
|
+
// Always add global blocked IPs, even if domain has its own rules
|
|
156
|
+
// This ensures that global blocks take precedence
|
|
157
|
+
if (this.settings.defaultBlockedIPs && this.settings.defaultBlockedIPs.length > 0) {
|
|
158
|
+
// Add only unique IPs that aren't already in the list
|
|
159
|
+
for (const ip of this.settings.defaultBlockedIPs) {
|
|
160
|
+
if (!blockedIPs.includes(ip)) {
|
|
161
|
+
blockedIPs.push(ip);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return {
|
|
166
|
+
allowedIPs,
|
|
167
|
+
blockedIPs
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Get connection timeout for a domain
|
|
172
|
+
*/
|
|
173
|
+
getConnectionTimeout(domainConfig) {
|
|
174
|
+
if (domainConfig?.forwarding.advanced?.timeout) {
|
|
175
|
+
return domainConfig.forwarding.advanced.timeout;
|
|
176
|
+
}
|
|
177
|
+
return this.settings.maxConnectionLifetime || 86400000; // 24 hours default
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Creates a forwarding handler for a domain configuration
|
|
181
|
+
*/
|
|
182
|
+
createForwardingHandler(domainConfig) {
|
|
183
|
+
// Create a new handler using the factory
|
|
184
|
+
const handler = ForwardingHandlerFactory.createHandler(domainConfig.forwarding);
|
|
185
|
+
// Initialize the handler
|
|
186
|
+
handler.initialize().catch(err => {
|
|
187
|
+
console.log(`Error initializing forwarding handler for ${domainConfig.domains.join(', ')}: ${err}`);
|
|
188
|
+
});
|
|
189
|
+
return handler;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Gets a forwarding handler for a domain config
|
|
193
|
+
* If no handler exists, creates one
|
|
194
|
+
*/
|
|
195
|
+
getForwardingHandler(domainConfig) {
|
|
196
|
+
// If we already have a handler, return it
|
|
197
|
+
if (this.forwardingHandlers.has(domainConfig)) {
|
|
198
|
+
return this.forwardingHandlers.get(domainConfig);
|
|
199
|
+
}
|
|
200
|
+
// Otherwise create a new handler
|
|
201
|
+
const handler = this.createForwardingHandler(domainConfig);
|
|
202
|
+
this.forwardingHandlers.set(domainConfig, handler);
|
|
203
|
+
return handler;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Gets the forwarding type for a domain config
|
|
207
|
+
*/
|
|
208
|
+
getForwardingType(domainConfig) {
|
|
209
|
+
if (!domainConfig?.forwarding)
|
|
210
|
+
return undefined;
|
|
211
|
+
return domainConfig.forwarding.type;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Checks if the forwarding type requires TLS termination
|
|
215
|
+
*/
|
|
216
|
+
requiresTlsTermination(domainConfig) {
|
|
217
|
+
if (!domainConfig)
|
|
218
|
+
return false;
|
|
219
|
+
const forwardingType = this.getForwardingType(domainConfig);
|
|
220
|
+
return forwardingType === 'https-terminate-to-http' ||
|
|
221
|
+
forwardingType === 'https-terminate-to-https';
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Checks if the forwarding type supports HTTP
|
|
225
|
+
*/
|
|
226
|
+
supportsHttp(domainConfig) {
|
|
227
|
+
if (!domainConfig)
|
|
228
|
+
return false;
|
|
229
|
+
const forwardingType = this.getForwardingType(domainConfig);
|
|
230
|
+
// HTTP-only always supports HTTP
|
|
231
|
+
if (forwardingType === 'http-only')
|
|
232
|
+
return true;
|
|
233
|
+
// For termination types, check the HTTP settings
|
|
234
|
+
if (forwardingType === 'https-terminate-to-http' ||
|
|
235
|
+
forwardingType === 'https-terminate-to-https') {
|
|
236
|
+
// HTTP is supported by default for termination types
|
|
237
|
+
return domainConfig.forwarding?.http?.enabled !== false;
|
|
238
|
+
}
|
|
239
|
+
// HTTPS-passthrough doesn't support HTTP
|
|
240
|
+
return false;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Checks if HTTP requests should be redirected to HTTPS
|
|
244
|
+
*/
|
|
245
|
+
shouldRedirectToHttps(domainConfig) {
|
|
246
|
+
if (!domainConfig?.forwarding)
|
|
247
|
+
return false;
|
|
248
|
+
// Only check for redirect if HTTP is enabled
|
|
249
|
+
if (this.supportsHttp(domainConfig)) {
|
|
250
|
+
return !!domainConfig.forwarding.http?.redirectToHttps;
|
|
251
|
+
}
|
|
252
|
+
return false;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tYWluLWNvbmZpZy1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvcHJveGllcy9zbWFydC1wcm94eS9kb21haW4tY29uZmlnLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUk1QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUUxRjs7R0FFRztBQUNILE1BQU0sT0FBTyxtQkFBbUI7SUFPOUIsWUFBb0IsUUFBNEI7UUFBNUIsYUFBUSxHQUFSLFFBQVEsQ0FBb0I7UUFOaEQsK0NBQStDO1FBQ3ZDLHdCQUFtQixHQUErQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRXBFLG1EQUFtRDtRQUMzQyx1QkFBa0IsR0FBMEMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUUzQixDQUFDO0lBRXBEOztPQUVHO0lBQ0ksbUJBQW1CLENBQUMsZ0JBQWlDO1FBQzFELElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxHQUFHLGdCQUFnQixDQUFDO1FBRS9DLDJDQUEyQztRQUMzQyxNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDbkQsS0FBSyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDaEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzFDLENBQUM7UUFDSCxDQUFDO1FBRUQseUVBQXlFO1FBQ3pFLE1BQU0sZ0JBQWdCLEdBQW9CLEVBQUUsQ0FBQztRQUM3QyxLQUFLLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMvQyxJQUFJ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
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SmartProxy implementation
|
|
3
|
+
*/
|
|
4
|
+
export * from './models/index.js';
|
|
5
|
+
export { SmartProxy } from './smart-proxy.js';
|
|
6
|
+
export { ConnectionManager } from './connection-manager.js';
|
|
7
|
+
export { SecurityManager } from './security-manager.js';
|
|
8
|
+
export { DomainConfigManager } from './domain-config-manager.js';
|
|
9
|
+
export { TimeoutManager } from './timeout-manager.js';
|
|
10
|
+
export { TlsManager } from './tls-manager.js';
|
|
11
|
+
export { NetworkProxyBridge } from './network-proxy-bridge.js';
|
|
12
|
+
export { PortRangeManager } from './port-range-manager.js';
|
|
13
|
+
export { ConnectionHandler } from './connection-handler.js';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SmartProxy implementation
|
|
3
|
+
*/
|
|
4
|
+
// Re-export models
|
|
5
|
+
export * from './models/index.js';
|
|
6
|
+
// Export the main SmartProxy class
|
|
7
|
+
export { SmartProxy } from './smart-proxy.js';
|
|
8
|
+
// Export supporting classes
|
|
9
|
+
export { ConnectionManager } from './connection-manager.js';
|
|
10
|
+
export { SecurityManager } from './security-manager.js';
|
|
11
|
+
export { DomainConfigManager } from './domain-config-manager.js';
|
|
12
|
+
export { TimeoutManager } from './timeout-manager.js';
|
|
13
|
+
export { TlsManager } from './tls-manager.js';
|
|
14
|
+
export { NetworkProxyBridge } from './network-proxy-bridge.js';
|
|
15
|
+
export { PortRangeManager } from './port-range-manager.js';
|
|
16
|
+
export { ConnectionHandler } from './connection-handler.js';
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9wcm94aWVzL3NtYXJ0LXByb3h5L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsbUJBQW1CO0FBQ25CLGNBQWMsbUJBQW1CLENBQUM7QUFFbEMsbUNBQW1DO0FBQ25DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU5Qyw0QkFBNEI7QUFDNUIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUMifQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SmartProxy models
|
|
3
|
+
*/
|
|
4
|
+
export * from './interfaces.js';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9wcm94aWVzL3NtYXJ0LXByb3h5L21vZGVscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILGNBQWMsaUJBQWlCLENBQUMifQ==
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import * as plugins from '../../../plugins.js';
|
|
2
|
+
import type { IForwardConfig } from '../../../forwarding/config/forwarding-types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Provision object for static or HTTP-01 certificate
|
|
5
|
+
*/
|
|
6
|
+
export type TSmartProxyCertProvisionObject = plugins.tsclass.network.ICert | 'http01';
|
|
7
|
+
/**
|
|
8
|
+
* Domain configuration with forwarding configuration
|
|
9
|
+
*/
|
|
10
|
+
export interface IDomainConfig {
|
|
11
|
+
domains: string[];
|
|
12
|
+
forwarding: IForwardConfig;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Configuration options for the SmartProxy
|
|
16
|
+
*/
|
|
17
|
+
import type { IAcmeOptions } from '../../../certificate/models/certificate-types.js';
|
|
18
|
+
export interface ISmartProxyOptions {
|
|
19
|
+
fromPort: number;
|
|
20
|
+
toPort: number;
|
|
21
|
+
targetIP?: string;
|
|
22
|
+
domainConfigs: IDomainConfig[];
|
|
23
|
+
sniEnabled?: boolean;
|
|
24
|
+
defaultAllowedIPs?: string[];
|
|
25
|
+
defaultBlockedIPs?: string[];
|
|
26
|
+
preserveSourceIP?: boolean;
|
|
27
|
+
pfx?: Buffer;
|
|
28
|
+
key?: string | Buffer | Array<Buffer | string>;
|
|
29
|
+
passphrase?: string;
|
|
30
|
+
cert?: string | Buffer | Array<string | Buffer>;
|
|
31
|
+
ca?: string | Buffer | Array<string | Buffer>;
|
|
32
|
+
ciphers?: string;
|
|
33
|
+
honorCipherOrder?: boolean;
|
|
34
|
+
rejectUnauthorized?: boolean;
|
|
35
|
+
secureProtocol?: string;
|
|
36
|
+
servername?: string;
|
|
37
|
+
minVersion?: string;
|
|
38
|
+
maxVersion?: string;
|
|
39
|
+
initialDataTimeout?: number;
|
|
40
|
+
socketTimeout?: number;
|
|
41
|
+
inactivityCheckInterval?: number;
|
|
42
|
+
maxConnectionLifetime?: number;
|
|
43
|
+
inactivityTimeout?: number;
|
|
44
|
+
gracefulShutdownTimeout?: number;
|
|
45
|
+
globalPortRanges: Array<{
|
|
46
|
+
from: number;
|
|
47
|
+
to: number;
|
|
48
|
+
}>;
|
|
49
|
+
forwardAllGlobalRanges?: boolean;
|
|
50
|
+
noDelay?: boolean;
|
|
51
|
+
keepAlive?: boolean;
|
|
52
|
+
keepAliveInitialDelay?: number;
|
|
53
|
+
maxPendingDataSize?: number;
|
|
54
|
+
disableInactivityCheck?: boolean;
|
|
55
|
+
enableKeepAliveProbes?: boolean;
|
|
56
|
+
enableDetailedLogging?: boolean;
|
|
57
|
+
enableTlsDebugLogging?: boolean;
|
|
58
|
+
enableRandomizedTimeouts?: boolean;
|
|
59
|
+
allowSessionTicket?: boolean;
|
|
60
|
+
maxConnectionsPerIP?: number;
|
|
61
|
+
connectionRateLimitPerMinute?: number;
|
|
62
|
+
keepAliveTreatment?: 'standard' | 'extended' | 'immortal';
|
|
63
|
+
keepAliveInactivityMultiplier?: number;
|
|
64
|
+
extendedKeepAliveLifetime?: number;
|
|
65
|
+
useNetworkProxy?: number[];
|
|
66
|
+
networkProxyPort?: number;
|
|
67
|
+
acme?: IAcmeOptions;
|
|
68
|
+
/**
|
|
69
|
+
* Optional certificate provider callback. Return 'http01' to use HTTP-01 challenges,
|
|
70
|
+
* or a static certificate object for immediate provisioning.
|
|
71
|
+
*/
|
|
72
|
+
certProvisionFunction?: (domain: string) => Promise<TSmartProxyCertProvisionObject>;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Enhanced connection record
|
|
76
|
+
*/
|
|
77
|
+
export interface IConnectionRecord {
|
|
78
|
+
id: string;
|
|
79
|
+
incoming: plugins.net.Socket;
|
|
80
|
+
outgoing: plugins.net.Socket | null;
|
|
81
|
+
incomingStartTime: number;
|
|
82
|
+
outgoingStartTime?: number;
|
|
83
|
+
outgoingClosedTime?: number;
|
|
84
|
+
lockedDomain?: string;
|
|
85
|
+
connectionClosed: boolean;
|
|
86
|
+
cleanupTimer?: NodeJS.Timeout;
|
|
87
|
+
alertFallbackTimeout?: NodeJS.Timeout;
|
|
88
|
+
lastActivity: number;
|
|
89
|
+
pendingData: Buffer[];
|
|
90
|
+
pendingDataSize: number;
|
|
91
|
+
bytesReceived: number;
|
|
92
|
+
bytesSent: number;
|
|
93
|
+
remoteIP: string;
|
|
94
|
+
localPort: number;
|
|
95
|
+
isTLS: boolean;
|
|
96
|
+
tlsHandshakeComplete: boolean;
|
|
97
|
+
hasReceivedInitialData: boolean;
|
|
98
|
+
domainConfig?: IDomainConfig;
|
|
99
|
+
hasKeepAlive: boolean;
|
|
100
|
+
inactivityWarningIssued?: boolean;
|
|
101
|
+
incomingTerminationReason?: string | null;
|
|
102
|
+
outgoingTerminationReason?: string | null;
|
|
103
|
+
usingNetworkProxy?: boolean;
|
|
104
|
+
renegotiationHandler?: (chunk: Buffer) => void;
|
|
105
|
+
isBrowserConnection?: boolean;
|
|
106
|
+
domainSwitches?: number;
|
|
107
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import * as plugins from '../../../plugins.js';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzL3Byb3hpZXMvc21hcnQtcHJveHkvbW9kZWxzL2ludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxxQkFBcUIsQ0FBQyJ9
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import * as plugins from '../../plugins.js';
|
|
2
|
+
import { NetworkProxy } from '../network-proxy/index.js';
|
|
3
|
+
import { Port80Handler } from '../../http/port80/port80-handler.js';
|
|
4
|
+
import type { ICertificateData } from '../../certificate/models/certificate-types.js';
|
|
5
|
+
import type { IConnectionRecord, ISmartProxyOptions } from './models/interfaces.js';
|
|
6
|
+
/**
|
|
7
|
+
* Manages NetworkProxy integration for TLS termination
|
|
8
|
+
*/
|
|
9
|
+
export declare class NetworkProxyBridge {
|
|
10
|
+
private settings;
|
|
11
|
+
private networkProxy;
|
|
12
|
+
private port80Handler;
|
|
13
|
+
constructor(settings: ISmartProxyOptions);
|
|
14
|
+
/**
|
|
15
|
+
* Set the Port80Handler to use for certificate management
|
|
16
|
+
*/
|
|
17
|
+
setPort80Handler(handler: Port80Handler): void;
|
|
18
|
+
/**
|
|
19
|
+
* Initialize NetworkProxy instance
|
|
20
|
+
*/
|
|
21
|
+
initialize(): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Handle certificate issuance or renewal events
|
|
24
|
+
*/
|
|
25
|
+
private handleCertificateEvent;
|
|
26
|
+
/**
|
|
27
|
+
* Apply an external (static) certificate into NetworkProxy
|
|
28
|
+
*/
|
|
29
|
+
applyExternalCertificate(data: ICertificateData): void;
|
|
30
|
+
/**
|
|
31
|
+
* Get the NetworkProxy instance
|
|
32
|
+
*/
|
|
33
|
+
getNetworkProxy(): NetworkProxy | null;
|
|
34
|
+
/**
|
|
35
|
+
* Get the NetworkProxy port
|
|
36
|
+
*/
|
|
37
|
+
getNetworkProxyPort(): number;
|
|
38
|
+
/**
|
|
39
|
+
* Start NetworkProxy
|
|
40
|
+
*/
|
|
41
|
+
start(): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* Stop NetworkProxy
|
|
44
|
+
*/
|
|
45
|
+
stop(): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Register domains with Port80Handler
|
|
48
|
+
*/
|
|
49
|
+
registerDomainsWithPort80Handler(domains: string[]): void;
|
|
50
|
+
/**
|
|
51
|
+
* Forwards a TLS connection to a NetworkProxy for handling
|
|
52
|
+
*/
|
|
53
|
+
forwardToNetworkProxy(connectionId: string, socket: plugins.net.Socket, record: IConnectionRecord, initialData: Buffer, customProxyPort?: number, onError?: (reason: string) => void): void;
|
|
54
|
+
/**
|
|
55
|
+
* Synchronizes domain configurations to NetworkProxy
|
|
56
|
+
*/
|
|
57
|
+
syncDomainConfigsToNetworkProxy(): Promise<void>;
|
|
58
|
+
/**
|
|
59
|
+
* Request a certificate for a specific domain
|
|
60
|
+
*/
|
|
61
|
+
requestCertificate(domain: string): Promise<boolean>;
|
|
62
|
+
}
|