@push.rocks/smartproxy 19.3.2 → 19.3.4
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/forwarding/factory/forwarding-factory.js +29 -1
- package/dist_ts/http/index.d.ts +1 -3
- package/dist_ts/http/index.js +4 -10
- package/dist_ts/http/models/http-types.d.ts +4 -91
- package/dist_ts/http/models/http-types.js +5 -60
- package/dist_ts/http/router/proxy-router.d.ts +1 -1
- package/dist_ts/http/router/route-router.d.ts +1 -1
- package/dist_ts/index.d.ts +9 -7
- package/dist_ts/index.js +10 -7
- package/dist_ts/proxies/{network-proxy → http-proxy}/certificate-manager.d.ts +2 -2
- package/dist_ts/proxies/{network-proxy → http-proxy}/certificate-manager.js +1 -1
- package/dist_ts/proxies/{network-proxy → http-proxy}/connection-pool.d.ts +2 -2
- package/dist_ts/proxies/http-proxy/connection-pool.js +210 -0
- package/dist_ts/proxies/http-proxy/context-creator.js +108 -0
- package/dist_ts/proxies/{network-proxy → http-proxy}/function-cache.js +1 -1
- package/dist_ts/proxies/http-proxy/handlers/index.d.ts +5 -0
- package/dist_ts/proxies/http-proxy/handlers/index.js +6 -0
- package/dist_ts/proxies/http-proxy/handlers/redirect-handler.d.ts +18 -0
- package/dist_ts/proxies/http-proxy/handlers/redirect-handler.js +78 -0
- package/dist_ts/proxies/http-proxy/handlers/static-handler.d.ts +19 -0
- package/dist_ts/proxies/http-proxy/handlers/static-handler.js +203 -0
- package/dist_ts/proxies/{network-proxy/network-proxy.d.ts → http-proxy/http-proxy.d.ts} +10 -9
- package/dist_ts/proxies/{network-proxy/network-proxy.js → http-proxy/http-proxy.js} +13 -12
- package/dist_ts/proxies/{network-proxy → http-proxy}/http-request-handler.js +1 -1
- package/dist_ts/proxies/http-proxy/http2-request-handler.js +201 -0
- package/dist_ts/proxies/{network-proxy → http-proxy}/index.d.ts +2 -2
- package/dist_ts/proxies/http-proxy/index.js +12 -0
- package/dist_ts/proxies/http-proxy/models/http-types.d.ts +119 -0
- package/dist_ts/proxies/http-proxy/models/http-types.js +112 -0
- package/dist_ts/proxies/http-proxy/models/index.d.ts +5 -0
- package/dist_ts/proxies/http-proxy/models/index.js +6 -0
- package/dist_ts/proxies/{network-proxy → http-proxy}/models/types.d.ts +2 -2
- package/dist_ts/proxies/http-proxy/models/types.js +276 -0
- package/dist_ts/proxies/{network-proxy → http-proxy}/request-handler.d.ts +3 -3
- package/dist_ts/proxies/{network-proxy → http-proxy}/request-handler.js +2 -2
- package/dist_ts/proxies/http-proxy/security-manager.js +255 -0
- package/dist_ts/proxies/{network-proxy → http-proxy}/websocket-handler.d.ts +3 -3
- package/dist_ts/proxies/{network-proxy → http-proxy}/websocket-handler.js +2 -2
- package/dist_ts/proxies/index.d.ts +5 -5
- package/dist_ts/proxies/index.js +5 -5
- package/dist_ts/proxies/smart-proxy/certificate-manager.d.ts +4 -4
- package/dist_ts/proxies/smart-proxy/certificate-manager.js +11 -11
- package/dist_ts/proxies/smart-proxy/http-proxy-bridge.d.ts +41 -0
- package/dist_ts/proxies/smart-proxy/http-proxy-bridge.js +121 -0
- package/dist_ts/proxies/smart-proxy/index.d.ts +2 -1
- package/dist_ts/proxies/smart-proxy/index.js +4 -2
- package/dist_ts/proxies/smart-proxy/models/interfaces.d.ts +2 -2
- package/dist_ts/proxies/smart-proxy/port-manager.js +3 -3
- package/dist_ts/proxies/smart-proxy/route-connection-handler.d.ts +3 -3
- package/dist_ts/proxies/smart-proxy/route-connection-handler.js +24 -265
- package/dist_ts/proxies/smart-proxy/smart-proxy.d.ts +1 -1
- package/dist_ts/proxies/smart-proxy/smart-proxy.js +25 -25
- package/dist_ts/routing/index.d.ts +5 -0
- package/dist_ts/routing/index.js +8 -0
- package/dist_ts/routing/models/http-types.d.ts +6 -0
- package/dist_ts/routing/models/http-types.js +7 -0
- package/dist_ts/routing/router/index.d.ts +8 -0
- package/dist_ts/routing/router/index.js +7 -0
- package/dist_ts/{classes.router.d.ts → routing/router/proxy-router.d.ts} +14 -11
- package/dist_ts/{classes.router.js → routing/router/proxy-router.js} +2 -2
- package/dist_ts/routing/router/route-router.d.ts +108 -0
- package/dist_ts/routing/router/route-router.js +393 -0
- package/package.json +1 -1
- package/readme.md +18 -35
- package/readme.plan.md +173 -271
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/forwarding/factory/forwarding-factory.ts +28 -0
- package/ts/index.ts +13 -9
- package/ts/proxies/{network-proxy → http-proxy}/certificate-manager.ts +2 -2
- package/ts/proxies/{network-proxy → http-proxy}/connection-pool.ts +2 -2
- package/ts/proxies/http-proxy/handlers/index.ts +6 -0
- package/ts/proxies/http-proxy/handlers/redirect-handler.ts +105 -0
- package/ts/proxies/http-proxy/handlers/static-handler.ts +251 -0
- package/ts/proxies/{network-proxy/network-proxy.ts → http-proxy/http-proxy.ts} +15 -14
- package/ts/proxies/{network-proxy → http-proxy}/index.ts +3 -3
- package/ts/proxies/http-proxy/models/http-types.ts +165 -0
- package/ts/proxies/http-proxy/models/index.ts +5 -0
- package/ts/proxies/{network-proxy → http-proxy}/models/types.ts +2 -2
- package/ts/proxies/{network-proxy → http-proxy}/request-handler.ts +3 -3
- package/ts/proxies/{network-proxy → http-proxy}/websocket-handler.ts +3 -3
- package/ts/proxies/index.ts +7 -7
- package/ts/proxies/smart-proxy/certificate-manager.ts +10 -10
- package/ts/proxies/smart-proxy/{network-proxy-bridge.ts → http-proxy-bridge.ts} +44 -44
- package/ts/proxies/smart-proxy/index.ts +4 -1
- package/ts/proxies/smart-proxy/models/interfaces.ts +3 -3
- package/ts/proxies/smart-proxy/port-manager.ts +2 -2
- package/ts/proxies/smart-proxy/route-connection-handler.ts +23 -307
- package/ts/proxies/smart-proxy/smart-proxy.ts +25 -25
- package/ts/routing/index.ts +9 -0
- package/ts/routing/models/http-types.ts +6 -0
- package/ts/{http → routing}/router/proxy-router.ts +1 -1
- package/ts/{http → routing}/router/route-router.ts +1 -1
- package/dist_ts/certificate/acme/acme-factory.d.ts +0 -17
- package/dist_ts/certificate/acme/acme-factory.js +0 -40
- package/dist_ts/certificate/acme/challenge-handler.d.ts +0 -44
- package/dist_ts/certificate/acme/challenge-handler.js +0 -92
- package/dist_ts/certificate/acme/index.d.ts +0 -4
- package/dist_ts/certificate/acme/index.js +0 -5
- package/dist_ts/certificate/certificate-manager.d.ts +0 -150
- package/dist_ts/certificate/certificate-manager.js +0 -505
- package/dist_ts/certificate/events/certificate-events.d.ts +0 -33
- package/dist_ts/certificate/events/certificate-events.js +0 -38
- package/dist_ts/certificate/events/simplified-events.d.ts +0 -56
- package/dist_ts/certificate/events/simplified-events.js +0 -13
- package/dist_ts/certificate/index.d.ts +0 -30
- package/dist_ts/certificate/index.js +0 -37
- package/dist_ts/certificate/models/certificate-errors.d.ts +0 -69
- package/dist_ts/certificate/models/certificate-errors.js +0 -141
- package/dist_ts/certificate/models/certificate-strategy.d.ts +0 -60
- package/dist_ts/certificate/models/certificate-strategy.js +0 -73
- package/dist_ts/certificate/models/certificate-types.d.ts +0 -97
- package/dist_ts/certificate/models/certificate-types.js +0 -2
- package/dist_ts/certificate/providers/cert-provisioner.d.ts +0 -119
- package/dist_ts/certificate/providers/cert-provisioner.js +0 -422
- package/dist_ts/certificate/providers/index.d.ts +0 -4
- package/dist_ts/certificate/providers/index.js +0 -5
- package/dist_ts/certificate/simplified-certificate-manager.d.ts +0 -150
- package/dist_ts/certificate/simplified-certificate-manager.js +0 -501
- package/dist_ts/certificate/storage/file-storage.d.ts +0 -66
- package/dist_ts/certificate/storage/file-storage.js +0 -194
- package/dist_ts/certificate/storage/index.d.ts +0 -4
- package/dist_ts/certificate/storage/index.js +0 -5
- package/dist_ts/certificate/utils/certificate-helpers.d.ts +0 -17
- package/dist_ts/certificate/utils/certificate-helpers.js +0 -45
- package/dist_ts/classes.iptablesproxy.d.ts +0 -112
- package/dist_ts/classes.iptablesproxy.js +0 -765
- package/dist_ts/classes.networkproxy.d.ts +0 -243
- package/dist_ts/classes.networkproxy.js +0 -1424
- package/dist_ts/classes.nftablesproxy.d.ts +0 -219
- package/dist_ts/classes.nftablesproxy.js +0 -1542
- package/dist_ts/classes.port80handler.d.ts +0 -215
- package/dist_ts/classes.port80handler.js +0 -736
- package/dist_ts/classes.portproxy.d.ts +0 -171
- package/dist_ts/classes.portproxy.js +0 -1802
- package/dist_ts/classes.pp.acmemanager.d.ts +0 -34
- package/dist_ts/classes.pp.acmemanager.js +0 -123
- package/dist_ts/classes.pp.connectionhandler.d.ts +0 -39
- package/dist_ts/classes.pp.connectionhandler.js +0 -754
- package/dist_ts/classes.pp.connectionmanager.d.ts +0 -78
- package/dist_ts/classes.pp.connectionmanager.js +0 -378
- package/dist_ts/classes.pp.domainconfigmanager.d.ts +0 -55
- package/dist_ts/classes.pp.domainconfigmanager.js +0 -103
- package/dist_ts/classes.pp.interfaces.d.ts +0 -133
- package/dist_ts/classes.pp.interfaces.js +0 -2
- package/dist_ts/classes.pp.networkproxybridge.d.ts +0 -57
- package/dist_ts/classes.pp.networkproxybridge.js +0 -306
- package/dist_ts/classes.pp.portproxy.d.ts +0 -64
- package/dist_ts/classes.pp.portproxy.js +0 -567
- package/dist_ts/classes.pp.portrangemanager.d.ts +0 -56
- package/dist_ts/classes.pp.portrangemanager.js +0 -179
- package/dist_ts/classes.pp.securitymanager.d.ts +0 -47
- package/dist_ts/classes.pp.securitymanager.js +0 -126
- package/dist_ts/classes.pp.snihandler.d.ts +0 -153
- package/dist_ts/classes.pp.snihandler.js +0 -1053
- package/dist_ts/classes.pp.timeoutmanager.d.ts +0 -47
- package/dist_ts/classes.pp.timeoutmanager.js +0 -154
- package/dist_ts/classes.pp.tlsalert.d.ts +0 -149
- package/dist_ts/classes.pp.tlsalert.js +0 -225
- package/dist_ts/classes.pp.tlsmanager.d.ts +0 -57
- package/dist_ts/classes.pp.tlsmanager.js +0 -132
- package/dist_ts/classes.snihandler.d.ts +0 -198
- package/dist_ts/classes.snihandler.js +0 -1210
- package/dist_ts/classes.sslredirect.d.ts +0 -8
- package/dist_ts/classes.sslredirect.js +0 -28
- package/dist_ts/common/acmeFactory.d.ts +0 -9
- package/dist_ts/common/acmeFactory.js +0 -20
- package/dist_ts/common/port80-adapter.d.ts +0 -11
- package/dist_ts/common/port80-adapter.js +0 -87
- package/dist_ts/examples/forwarding-example.d.ts +0 -1
- package/dist_ts/examples/forwarding-example.js +0 -96
- package/dist_ts/forwarding/config/domain-config.d.ts +0 -12
- package/dist_ts/forwarding/config/domain-config.js +0 -12
- package/dist_ts/forwarding/config/domain-manager.d.ts +0 -86
- package/dist_ts/forwarding/config/domain-manager.js +0 -242
- package/dist_ts/helpers.certificates.d.ts +0 -5
- package/dist_ts/helpers.certificates.js +0 -23
- package/dist_ts/http/port80/acme-interfaces.d.ts +0 -108
- package/dist_ts/http/port80/acme-interfaces.js +0 -51
- package/dist_ts/http/port80/challenge-responder.d.ts +0 -53
- package/dist_ts/http/port80/challenge-responder.js +0 -203
- package/dist_ts/http/port80/index.d.ts +0 -6
- package/dist_ts/http/port80/index.js +0 -9
- package/dist_ts/http/port80/port80-handler.d.ts +0 -136
- package/dist_ts/http/port80/port80-handler.js +0 -592
- package/dist_ts/http/redirects/index.d.ts +0 -4
- package/dist_ts/http/redirects/index.js +0 -5
- package/dist_ts/networkproxy/classes.np.certificatemanager.d.ts +0 -77
- package/dist_ts/networkproxy/classes.np.certificatemanager.js +0 -372
- package/dist_ts/networkproxy/classes.np.connectionpool.d.ts +0 -47
- package/dist_ts/networkproxy/classes.np.connectionpool.js +0 -210
- package/dist_ts/networkproxy/classes.np.networkproxy.d.ts +0 -118
- package/dist_ts/networkproxy/classes.np.networkproxy.js +0 -387
- package/dist_ts/networkproxy/classes.np.requesthandler.d.ts +0 -56
- package/dist_ts/networkproxy/classes.np.requesthandler.js +0 -393
- package/dist_ts/networkproxy/classes.np.types.d.ts +0 -83
- package/dist_ts/networkproxy/classes.np.types.js +0 -35
- package/dist_ts/networkproxy/classes.np.websockethandler.d.ts +0 -38
- package/dist_ts/networkproxy/classes.np.websockethandler.js +0 -188
- package/dist_ts/networkproxy/index.d.ts +0 -1
- package/dist_ts/networkproxy/index.js +0 -4
- package/dist_ts/nfttablesproxy/classes.nftablesproxy.d.ts +0 -219
- package/dist_ts/nfttablesproxy/classes.nftablesproxy.js +0 -1542
- package/dist_ts/port80handler/classes.port80handler.d.ts +0 -10
- package/dist_ts/port80handler/classes.port80handler.js +0 -16
- package/dist_ts/proxies/network-proxy/connection-pool.js +0 -210
- package/dist_ts/proxies/network-proxy/context-creator.js +0 -108
- package/dist_ts/proxies/network-proxy/http2-request-handler.js +0 -201
- package/dist_ts/proxies/network-proxy/index.js +0 -12
- package/dist_ts/proxies/network-proxy/models/index.d.ts +0 -4
- package/dist_ts/proxies/network-proxy/models/index.js +0 -5
- package/dist_ts/proxies/network-proxy/models/types.js +0 -276
- package/dist_ts/proxies/network-proxy/security-manager.js +0 -255
- package/dist_ts/proxies/network-proxy/simplified-certificate-bridge.d.ts +0 -48
- package/dist_ts/proxies/network-proxy/simplified-certificate-bridge.js +0 -76
- package/dist_ts/proxies/smart-proxy/connection-handler.d.ts +0 -39
- package/dist_ts/proxies/smart-proxy/connection-handler.js +0 -894
- package/dist_ts/proxies/smart-proxy/domain-config-manager.d.ts +0 -110
- package/dist_ts/proxies/smart-proxy/domain-config-manager.js +0 -386
- package/dist_ts/proxies/smart-proxy/legacy-smart-proxy.d.ts +0 -168
- package/dist_ts/proxies/smart-proxy/legacy-smart-proxy.js +0 -642
- package/dist_ts/proxies/smart-proxy/models/simplified-smartproxy-config.d.ts +0 -65
- package/dist_ts/proxies/smart-proxy/models/simplified-smartproxy-config.js +0 -31
- package/dist_ts/proxies/smart-proxy/models/smartproxy-options.d.ts +0 -102
- package/dist_ts/proxies/smart-proxy/models/smartproxy-options.js +0 -73
- package/dist_ts/proxies/smart-proxy/network-proxy-bridge.d.ts +0 -41
- package/dist_ts/proxies/smart-proxy/network-proxy-bridge.js +0 -121
- package/dist_ts/proxies/smart-proxy/port-range-manager.d.ts +0 -56
- package/dist_ts/proxies/smart-proxy/port-range-manager.js +0 -176
- package/dist_ts/proxies/smart-proxy/route-helpers/index.d.ts +0 -9
- package/dist_ts/proxies/smart-proxy/route-helpers/index.js +0 -11
- package/dist_ts/proxies/smart-proxy/route-helpers.d.ts +0 -7
- package/dist_ts/proxies/smart-proxy/route-helpers.js +0 -9
- package/dist_ts/proxies/smart-proxy/simplified-smart-proxy.d.ts +0 -41
- package/dist_ts/proxies/smart-proxy/simplified-smart-proxy.js +0 -132
- package/dist_ts/proxies/smart-proxy/utils/route-migration-utils.d.ts +0 -51
- package/dist_ts/proxies/smart-proxy/utils/route-migration-utils.js +0 -124
- package/dist_ts/redirect/classes.redirect.d.ts +0 -96
- package/dist_ts/redirect/classes.redirect.js +0 -194
- package/dist_ts/smartproxy/classes.pp.certprovisioner.d.ts +0 -54
- package/dist_ts/smartproxy/classes.pp.certprovisioner.js +0 -179
- package/dist_ts/smartproxy/classes.pp.connectionhandler.d.ts +0 -39
- package/dist_ts/smartproxy/classes.pp.connectionhandler.js +0 -894
- package/dist_ts/smartproxy/classes.pp.connectionmanager.d.ts +0 -78
- package/dist_ts/smartproxy/classes.pp.connectionmanager.js +0 -378
- package/dist_ts/smartproxy/classes.pp.domainconfigmanager.d.ts +0 -94
- package/dist_ts/smartproxy/classes.pp.domainconfigmanager.js +0 -255
- package/dist_ts/smartproxy/classes.pp.interfaces.d.ts +0 -103
- package/dist_ts/smartproxy/classes.pp.interfaces.js +0 -2
- package/dist_ts/smartproxy/classes.pp.networkproxybridge.d.ts +0 -62
- package/dist_ts/smartproxy/classes.pp.networkproxybridge.js +0 -316
- package/dist_ts/smartproxy/classes.pp.portrangemanager.d.ts +0 -56
- package/dist_ts/smartproxy/classes.pp.portrangemanager.js +0 -176
- package/dist_ts/smartproxy/classes.pp.securitymanager.d.ts +0 -64
- package/dist_ts/smartproxy/classes.pp.securitymanager.js +0 -149
- package/dist_ts/smartproxy/classes.pp.snihandler.d.ts +0 -153
- package/dist_ts/smartproxy/classes.pp.snihandler.js +0 -1053
- package/dist_ts/smartproxy/classes.pp.timeoutmanager.d.ts +0 -47
- package/dist_ts/smartproxy/classes.pp.timeoutmanager.js +0 -154
- package/dist_ts/smartproxy/classes.pp.tlsalert.d.ts +0 -149
- package/dist_ts/smartproxy/classes.pp.tlsalert.js +0 -225
- package/dist_ts/smartproxy/classes.pp.tlsmanager.d.ts +0 -57
- package/dist_ts/smartproxy/classes.pp.tlsmanager.js +0 -132
- package/dist_ts/smartproxy/classes.smartproxy.d.ts +0 -63
- package/dist_ts/smartproxy/classes.smartproxy.js +0 -521
- package/dist_ts/smartproxy/forwarding/domain-config.d.ts +0 -12
- package/dist_ts/smartproxy/forwarding/domain-config.js +0 -12
- package/dist_ts/smartproxy/forwarding/domain-manager.d.ts +0 -86
- package/dist_ts/smartproxy/forwarding/domain-manager.js +0 -241
- package/dist_ts/smartproxy/forwarding/forwarding.factory.d.ts +0 -24
- package/dist_ts/smartproxy/forwarding/forwarding.factory.js +0 -137
- package/dist_ts/smartproxy/forwarding/forwarding.handler.d.ts +0 -55
- package/dist_ts/smartproxy/forwarding/forwarding.handler.js +0 -94
- package/dist_ts/smartproxy/forwarding/http.handler.d.ts +0 -25
- package/dist_ts/smartproxy/forwarding/http.handler.js +0 -123
- package/dist_ts/smartproxy/forwarding/https-passthrough.handler.d.ts +0 -24
- package/dist_ts/smartproxy/forwarding/https-passthrough.handler.js +0 -154
- package/dist_ts/smartproxy/forwarding/https-terminate-to-http.handler.d.ts +0 -36
- package/dist_ts/smartproxy/forwarding/https-terminate-to-http.handler.js +0 -229
- package/dist_ts/smartproxy/forwarding/https-terminate-to-https.handler.d.ts +0 -35
- package/dist_ts/smartproxy/forwarding/https-terminate-to-https.handler.js +0 -254
- package/dist_ts/smartproxy/forwarding/index.d.ts +0 -16
- package/dist_ts/smartproxy/forwarding/index.js +0 -23
- package/dist_ts/smartproxy/types/forwarding.types.d.ts +0 -104
- package/dist_ts/smartproxy/types/forwarding.types.js +0 -50
- package/dist_ts/smartproxy.classes.networkproxy.d.ts +0 -31
- package/dist_ts/smartproxy.classes.networkproxy.js +0 -305
- package/dist_ts/smartproxy.classes.router.d.ts +0 -13
- package/dist_ts/smartproxy.classes.router.js +0 -33
- package/dist_ts/smartproxy.classes.sslredirect.d.ts +0 -8
- package/dist_ts/smartproxy.classes.sslredirect.js +0 -28
- package/dist_ts/smartproxy.helpers.certificates.d.ts +0 -5
- package/dist_ts/smartproxy.helpers.certificates.js +0 -23
- package/dist_ts/smartproxy.plugins.d.ts +0 -18
- package/dist_ts/smartproxy.plugins.js +0 -23
- package/dist_ts/smartproxy.portproxy.d.ts +0 -26
- package/dist_ts/smartproxy.portproxy.js +0 -295
- package/ts/http/index.ts +0 -16
- package/ts/http/models/http-types.ts +0 -108
- package/ts/http/redirects/index.ts +0 -3
- package/ts/proxies/network-proxy/models/index.ts +0 -4
- package/ts/redirect/classes.redirect.ts +0 -295
- /package/dist_ts/proxies/{network-proxy → http-proxy}/context-creator.d.ts +0 -0
- /package/dist_ts/proxies/{network-proxy → http-proxy}/function-cache.d.ts +0 -0
- /package/dist_ts/proxies/{network-proxy → http-proxy}/http-request-handler.d.ts +0 -0
- /package/dist_ts/proxies/{network-proxy → http-proxy}/http2-request-handler.d.ts +0 -0
- /package/dist_ts/proxies/{network-proxy → http-proxy}/security-manager.d.ts +0 -0
- /package/ts/proxies/{network-proxy → http-proxy}/context-creator.ts +0 -0
- /package/ts/proxies/{network-proxy → http-proxy}/function-cache.ts +0 -0
- /package/ts/proxies/{network-proxy → http-proxy}/http-request-handler.ts +0 -0
- /package/ts/proxies/{network-proxy → http-proxy}/http2-request-handler.ts +0 -0
- /package/ts/proxies/{network-proxy → http-proxy}/security-manager.ts +0 -0
- /package/ts/{http → routing}/router/index.ts +0 -0
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import * as plugins from './plugins.js';
|
|
2
|
-
export class SslRedirect {
|
|
3
|
-
constructor(portArg) {
|
|
4
|
-
this.port = portArg;
|
|
5
|
-
}
|
|
6
|
-
async start() {
|
|
7
|
-
this.httpServer = plugins.http.createServer((request, response) => {
|
|
8
|
-
const requestUrl = new URL(request.url, `http://${request.headers.host}`);
|
|
9
|
-
const completeUrlWithoutProtocol = `${requestUrl.host}${requestUrl.pathname}${requestUrl.search}`;
|
|
10
|
-
const redirectUrl = `https://${completeUrlWithoutProtocol}`;
|
|
11
|
-
console.log(`Got http request for http://${completeUrlWithoutProtocol}`);
|
|
12
|
-
console.log(`Redirecting to ${redirectUrl}`);
|
|
13
|
-
response.writeHead(302, {
|
|
14
|
-
Location: redirectUrl,
|
|
15
|
-
});
|
|
16
|
-
response.end();
|
|
17
|
-
});
|
|
18
|
-
this.httpServer.listen(this.port);
|
|
19
|
-
}
|
|
20
|
-
async stop() {
|
|
21
|
-
const done = plugins.smartpromise.defer();
|
|
22
|
-
this.httpServer.close(() => {
|
|
23
|
-
done.resolve();
|
|
24
|
-
});
|
|
25
|
-
await done.promise;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5zc2xyZWRpcmVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NsYXNzZXMuc3NscmVkaXJlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFFeEMsTUFBTSxPQUFPLFdBQVc7SUFHdEIsWUFBWSxPQUFlO1FBQ3pCLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFTSxLQUFLLENBQUMsS0FBSztRQUNoQixJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFO1lBQ2hFLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsVUFBVSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDMUUsTUFBTSwwQkFBMEIsR0FBRyxHQUFHLFVBQVUsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEcsTUFBTSxXQUFXLEdBQUcsV0FBVywwQkFBMEIsRUFBRSxDQUFDO1lBQzVELE9BQU8sQ0FBQyxHQUFHLENBQUMsK0JBQStCLDBCQUEwQixFQUFFLENBQUMsQ0FBQztZQUN6RSxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUN0QixRQUFRLEVBQUUsV0FBVzthQUN0QixDQUFDLENBQUM7WUFDSCxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVNLEtBQUssQ0FBQyxJQUFJO1FBQ2YsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDekIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3JCLENBQUM7Q0FDRiJ9
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { IAcmeOptions } from './types.js';
|
|
2
|
-
import { Port80Handler } from '../port80handler/classes.port80handler.js';
|
|
3
|
-
/**
|
|
4
|
-
* Factory to create a Port80Handler with common setup.
|
|
5
|
-
* Ensures the certificate store directory exists and instantiates the handler.
|
|
6
|
-
* @param options Port80Handler configuration options
|
|
7
|
-
* @returns A new Port80Handler instance
|
|
8
|
-
*/
|
|
9
|
-
export declare function buildPort80Handler(options: IAcmeOptions): Port80Handler;
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import * as fs from 'fs';
|
|
2
|
-
import * as path from 'path';
|
|
3
|
-
import { Port80Handler } from '../port80handler/classes.port80handler.js';
|
|
4
|
-
/**
|
|
5
|
-
* Factory to create a Port80Handler with common setup.
|
|
6
|
-
* Ensures the certificate store directory exists and instantiates the handler.
|
|
7
|
-
* @param options Port80Handler configuration options
|
|
8
|
-
* @returns A new Port80Handler instance
|
|
9
|
-
*/
|
|
10
|
-
export function buildPort80Handler(options) {
|
|
11
|
-
if (options.certificateStore) {
|
|
12
|
-
const certStorePath = path.resolve(options.certificateStore);
|
|
13
|
-
if (!fs.existsSync(certStorePath)) {
|
|
14
|
-
fs.mkdirSync(certStorePath, { recursive: true });
|
|
15
|
-
console.log(`Created certificate store directory: ${certStorePath}`);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
return new Port80Handler(options);
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNtZUZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9jb21tb24vYWNtZUZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFFN0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRTFFOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUNoQyxPQUFxQjtJQUVyQixJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzdCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUNsQyxFQUFFLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELE9BQU8sQ0FBQyxHQUFHLENBQUMsd0NBQXdDLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDdkUsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3BDLENBQUMifQ==
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { IForwardConfig as ILegacyForwardConfig, IDomainOptions } from './types.js';
|
|
2
|
-
import type { IForwardConfig } from '../forwarding/config/forwarding-types.js';
|
|
3
|
-
/**
|
|
4
|
-
* Converts a forwarding configuration target to the legacy format
|
|
5
|
-
* for Port80Handler
|
|
6
|
-
*/
|
|
7
|
-
export declare function convertToLegacyForwardConfig(forwardConfig: IForwardConfig): ILegacyForwardConfig;
|
|
8
|
-
/**
|
|
9
|
-
* Creates Port80Handler domain options from a domain name and forwarding config
|
|
10
|
-
*/
|
|
11
|
-
export declare function createPort80HandlerOptions(domain: string, forwardConfig: IForwardConfig): IDomainOptions;
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../plugins.js';
|
|
2
|
-
/**
|
|
3
|
-
* Converts a forwarding configuration target to the legacy format
|
|
4
|
-
* for Port80Handler
|
|
5
|
-
*/
|
|
6
|
-
export function convertToLegacyForwardConfig(forwardConfig) {
|
|
7
|
-
// Determine host from the target configuration
|
|
8
|
-
const host = Array.isArray(forwardConfig.target.host)
|
|
9
|
-
? forwardConfig.target.host[0] // Use the first host in the array
|
|
10
|
-
: forwardConfig.target.host;
|
|
11
|
-
// Extract port number, handling different port formats
|
|
12
|
-
let port;
|
|
13
|
-
if (typeof forwardConfig.target.port === 'function') {
|
|
14
|
-
// Use a default port for function-based ports in adapter context
|
|
15
|
-
port = 80;
|
|
16
|
-
}
|
|
17
|
-
else if (forwardConfig.target.port === 'preserve') {
|
|
18
|
-
// For 'preserve', use the default port 80 in this adapter context
|
|
19
|
-
port = 80;
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
port = forwardConfig.target.port;
|
|
23
|
-
}
|
|
24
|
-
return {
|
|
25
|
-
ip: host,
|
|
26
|
-
port: port
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Creates Port80Handler domain options from a domain name and forwarding config
|
|
31
|
-
*/
|
|
32
|
-
export function createPort80HandlerOptions(domain, forwardConfig) {
|
|
33
|
-
// Determine if we should redirect HTTP to HTTPS
|
|
34
|
-
let sslRedirect = false;
|
|
35
|
-
if (forwardConfig.http?.redirectToHttps) {
|
|
36
|
-
sslRedirect = true;
|
|
37
|
-
}
|
|
38
|
-
// Determine if ACME maintenance should be enabled
|
|
39
|
-
// Enable by default for termination types, unless explicitly disabled
|
|
40
|
-
const requiresTls = forwardConfig.type === 'https-terminate-to-http' ||
|
|
41
|
-
forwardConfig.type === 'https-terminate-to-https';
|
|
42
|
-
const acmeMaintenance = requiresTls &&
|
|
43
|
-
forwardConfig.acme?.enabled !== false;
|
|
44
|
-
// Set up forwarding configuration
|
|
45
|
-
const options = {
|
|
46
|
-
domainName: domain,
|
|
47
|
-
sslRedirect,
|
|
48
|
-
acmeMaintenance
|
|
49
|
-
};
|
|
50
|
-
// Add ACME challenge forwarding if configured
|
|
51
|
-
if (forwardConfig.acme?.forwardChallenges) {
|
|
52
|
-
options.acmeForward = {
|
|
53
|
-
ip: Array.isArray(forwardConfig.acme.forwardChallenges.host)
|
|
54
|
-
? forwardConfig.acme.forwardChallenges.host[0]
|
|
55
|
-
: forwardConfig.acme.forwardChallenges.host,
|
|
56
|
-
port: forwardConfig.acme.forwardChallenges.port
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
// Add HTTP forwarding if this is an HTTP-only config or if HTTP is enabled
|
|
60
|
-
const supportsHttp = forwardConfig.type === 'http-only' ||
|
|
61
|
-
(forwardConfig.http?.enabled !== false &&
|
|
62
|
-
(forwardConfig.type === 'https-terminate-to-http' ||
|
|
63
|
-
forwardConfig.type === 'https-terminate-to-https'));
|
|
64
|
-
if (supportsHttp) {
|
|
65
|
-
// Determine port value handling different formats
|
|
66
|
-
let port;
|
|
67
|
-
if (typeof forwardConfig.target.port === 'function') {
|
|
68
|
-
// Use a default port for function-based ports
|
|
69
|
-
port = 80;
|
|
70
|
-
}
|
|
71
|
-
else if (forwardConfig.target.port === 'preserve') {
|
|
72
|
-
// For 'preserve', use 80 in this adapter context
|
|
73
|
-
port = 80;
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
port = forwardConfig.target.port;
|
|
77
|
-
}
|
|
78
|
-
options.forward = {
|
|
79
|
-
ip: Array.isArray(forwardConfig.target.host)
|
|
80
|
-
? forwardConfig.target.host[0]
|
|
81
|
-
: forwardConfig.target.host,
|
|
82
|
-
port: port
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
return options;
|
|
86
|
-
}
|
|
87
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydDgwLWFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9jb21tb24vcG9ydDgwLWFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxlQUFlLENBQUM7QUFXekM7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLDRCQUE0QixDQUMxQyxhQUE2QjtJQUU3QiwrQ0FBK0M7SUFDL0MsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNuRCxDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUUsa0NBQWtDO1FBQ2xFLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztJQUU5Qix1REFBdUQ7SUFDdkQsSUFBSSxJQUFZLENBQUM7SUFDakIsSUFBSSxPQUFPLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ3BELGlFQUFpRTtRQUNqRSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ1osQ0FBQztTQUFNLElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDcEQsa0VBQWtFO1FBQ2xFLElBQUksR0FBRyxFQUFFLENBQUM7SUFDWixDQUFDO1NBQU0sQ0FBQztRQUNOLElBQUksR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNuQyxDQUFDO0lBRUQsT0FBTztRQUNMLEVBQUUsRUFBRSxJQUFJO1FBQ1IsSUFBSSxFQUFFLElBQUk7S0FDWCxDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLDBCQUEwQixDQUN4QyxNQUFjLEVBQ2QsYUFBNkI7SUFFN0IsZ0RBQWdEO0lBQ2hELElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztJQUN4QixJQUFJ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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../plugins.js';
|
|
2
|
-
import { createServer } from 'http';
|
|
3
|
-
import { Socket } from 'net';
|
|
4
|
-
import { DomainManager, DomainManagerEvents, createDomainConfig, helpers } from '../smartproxy/forwarding/index.js';
|
|
5
|
-
/**
|
|
6
|
-
* Example showing how to use the unified forwarding system
|
|
7
|
-
*/
|
|
8
|
-
async function main() {
|
|
9
|
-
console.log('Initializing forwarding example...');
|
|
10
|
-
// Create the domain manager
|
|
11
|
-
const domainManager = new DomainManager();
|
|
12
|
-
// Set up event listeners
|
|
13
|
-
domainManager.on(DomainManagerEvents.DOMAIN_ADDED, (data) => {
|
|
14
|
-
console.log(`Domain added: ${data.domains.join(', ')} (${data.forwardingType})`);
|
|
15
|
-
});
|
|
16
|
-
domainManager.on(DomainManagerEvents.DOMAIN_MATCHED, (data) => {
|
|
17
|
-
console.log(`Domain matched: ${data.domain} (${data.handlerType})`);
|
|
18
|
-
});
|
|
19
|
-
domainManager.on(DomainManagerEvents.DOMAIN_MATCH_FAILED, (data) => {
|
|
20
|
-
console.log(`Domain match failed: ${data.domain}`);
|
|
21
|
-
});
|
|
22
|
-
domainManager.on(DomainManagerEvents.ERROR, (data) => {
|
|
23
|
-
console.error(`Error:`, data);
|
|
24
|
-
});
|
|
25
|
-
// Add example domains with different forwarding types
|
|
26
|
-
// Example 1: HTTP-only forwarding
|
|
27
|
-
await domainManager.addDomainConfig(createDomainConfig('example.com', helpers.httpOnly({
|
|
28
|
-
target: { host: 'localhost', port: 3000 }
|
|
29
|
-
})));
|
|
30
|
-
// Example 2: HTTPS termination with HTTP backend
|
|
31
|
-
await domainManager.addDomainConfig(createDomainConfig('secure.example.com', helpers.tlsTerminateToHttp({
|
|
32
|
-
target: { host: 'localhost', port: 3000 }
|
|
33
|
-
})));
|
|
34
|
-
// Example 3: HTTPS termination with HTTPS backend
|
|
35
|
-
await domainManager.addDomainConfig(createDomainConfig('api.example.com', helpers.tlsTerminateToHttps({
|
|
36
|
-
target: { host: 'localhost', port: 8443 }
|
|
37
|
-
})));
|
|
38
|
-
// Example 4: SNI passthrough
|
|
39
|
-
await domainManager.addDomainConfig(createDomainConfig('passthrough.example.com', helpers.sniPassthrough({
|
|
40
|
-
target: { host: '10.0.0.5', port: 443 }
|
|
41
|
-
})));
|
|
42
|
-
// Example 5: Custom configuration for a more complex setup
|
|
43
|
-
await domainManager.addDomainConfig(createDomainConfig(['*.example.com', '*.example.org'], {
|
|
44
|
-
type: 'https-terminate-to-http',
|
|
45
|
-
target: {
|
|
46
|
-
host: ['10.0.0.10', '10.0.0.11'], // Round-robin load balancing
|
|
47
|
-
port: 8080
|
|
48
|
-
},
|
|
49
|
-
http: {
|
|
50
|
-
enabled: true,
|
|
51
|
-
redirectToHttps: false // Allow both HTTP and HTTPS
|
|
52
|
-
},
|
|
53
|
-
acme: {
|
|
54
|
-
enabled: true,
|
|
55
|
-
maintenance: true,
|
|
56
|
-
production: false, // Use staging for testing
|
|
57
|
-
forwardChallenges: {
|
|
58
|
-
host: '192.168.1.100',
|
|
59
|
-
port: 8080
|
|
60
|
-
}
|
|
61
|
-
},
|
|
62
|
-
security: {
|
|
63
|
-
allowedIps: ['10.0.0.*', '192.168.1.*'],
|
|
64
|
-
maxConnections: 100
|
|
65
|
-
},
|
|
66
|
-
advanced: {
|
|
67
|
-
headers: {
|
|
68
|
-
'X-Forwarded-For': '{clientIp}',
|
|
69
|
-
'X-Forwarded-Host': '{sni}'
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}));
|
|
73
|
-
// Create a simple HTTP server to demonstrate HTTP handler
|
|
74
|
-
const httpServer = createServer((req, res) => {
|
|
75
|
-
// Extract the domain from the Host header
|
|
76
|
-
const domain = req.headers.host?.split(':')[0] || 'unknown';
|
|
77
|
-
// Forward the request to the appropriate handler
|
|
78
|
-
if (!domainManager.handleHttpRequest(domain, req, res)) {
|
|
79
|
-
// No handler found, send a default response
|
|
80
|
-
res.statusCode = 404;
|
|
81
|
-
res.end(`No handler found for domain: ${domain}`);
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
// Listen on HTTP port
|
|
85
|
-
httpServer.listen(80, () => {
|
|
86
|
-
console.log('HTTP server listening on port 80');
|
|
87
|
-
});
|
|
88
|
-
// For HTTPS and SNI, we would need to set up a TLS server
|
|
89
|
-
// This is a simplified example that just shows how the domain manager works
|
|
90
|
-
console.log('Forwarding example initialized successfully');
|
|
91
|
-
}
|
|
92
|
-
// Run the example
|
|
93
|
-
main().catch(error => {
|
|
94
|
-
console.error('Error running example:', error);
|
|
95
|
-
});
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yd2FyZGluZy1leGFtcGxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvZXhhbXBsZXMvZm9yd2FyZGluZy1leGFtcGxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEtBQUssQ0FBQztBQUM3QixPQUFPLEVBQ0wsYUFBYSxFQUNiLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbEIsT0FBTyxFQUNSLE1BQU0sbUNBQW1DLENBQUM7QUFFM0M7O0dBRUc7QUFDSCxLQUFLLFVBQVUsSUFBSTtJQUNqQixPQUFPLENBQUMsR0FBRyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7SUFFbEQsNEJBQTRCO0lBQzVCLE1BQU0sYUFBYSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7SUFFMUMseUJBQXlCO0lBQ3pCLGFBQWEsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDMUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7SUFDbkYsQ0FBQyxDQUFDLENBQUM7SUFFSCxhQUFhLENBQUMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO1FBQzVELE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFDdEUsQ0FBQyxDQUFDLENBQUM7SUFFSCxhQUFhLENBQUMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixFQUFFLENBQUMsSUFB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
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { IForwardConfig } from './forwarding-types.js';
|
|
2
|
-
/**
|
|
3
|
-
* Domain configuration with unified forwarding configuration
|
|
4
|
-
*/
|
|
5
|
-
export interface IDomainConfig {
|
|
6
|
-
domains: string[];
|
|
7
|
-
forwarding: IForwardConfig;
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* Helper function to create a domain configuration
|
|
11
|
-
*/
|
|
12
|
-
export declare function createDomainConfig(domains: string | string[], forwarding: IForwardConfig): IDomainConfig;
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Helper function to create a domain configuration
|
|
3
|
-
*/
|
|
4
|
-
export function createDomainConfig(domains, forwarding) {
|
|
5
|
-
// Normalize domains to an array
|
|
6
|
-
const domainArray = Array.isArray(domains) ? domains : [domains];
|
|
7
|
-
return {
|
|
8
|
-
domains: domainArray,
|
|
9
|
-
forwarding
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tYWluLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2ZvcndhcmRpbmcvY29uZmlnL2RvbWFpbi1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBYUE7O0dBRUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLE9BQTBCLEVBQzFCLFVBQTBCO0lBRTFCLGdDQUFnQztJQUNoQyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFakUsT0FBTztRQUNMLE9BQU8sRUFBRSxXQUFXO1FBQ3BCLFVBQVU7S0FDWCxDQUFDO0FBQ0osQ0FBQyJ9
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../../plugins.js';
|
|
2
|
-
import type { IDomainConfig } from './domain-config.js';
|
|
3
|
-
import { ForwardingHandler } from '../handlers/base-handler.js';
|
|
4
|
-
/**
|
|
5
|
-
* Events emitted by the DomainManager
|
|
6
|
-
*/
|
|
7
|
-
export declare enum DomainManagerEvents {
|
|
8
|
-
DOMAIN_ADDED = "domain-added",
|
|
9
|
-
DOMAIN_REMOVED = "domain-removed",
|
|
10
|
-
DOMAIN_MATCHED = "domain-matched",
|
|
11
|
-
DOMAIN_MATCH_FAILED = "domain-match-failed",
|
|
12
|
-
CERTIFICATE_NEEDED = "certificate-needed",
|
|
13
|
-
CERTIFICATE_LOADED = "certificate-loaded",
|
|
14
|
-
ERROR = "error"
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Manages domains and their forwarding handlers
|
|
18
|
-
*/
|
|
19
|
-
export declare class DomainManager extends plugins.EventEmitter {
|
|
20
|
-
private domainConfigs;
|
|
21
|
-
private domainHandlers;
|
|
22
|
-
/**
|
|
23
|
-
* Create a new DomainManager
|
|
24
|
-
* @param initialDomains Optional initial domain configurations
|
|
25
|
-
*/
|
|
26
|
-
constructor(initialDomains?: IDomainConfig[]);
|
|
27
|
-
/**
|
|
28
|
-
* Set or replace all domain configurations
|
|
29
|
-
* @param configs Array of domain configurations
|
|
30
|
-
*/
|
|
31
|
-
setDomainConfigs(configs: IDomainConfig[]): Promise<void>;
|
|
32
|
-
/**
|
|
33
|
-
* Add a new domain configuration
|
|
34
|
-
* @param config The domain configuration to add
|
|
35
|
-
*/
|
|
36
|
-
addDomainConfig(config: IDomainConfig): Promise<void>;
|
|
37
|
-
/**
|
|
38
|
-
* Remove a domain configuration
|
|
39
|
-
* @param domain The domain to remove
|
|
40
|
-
* @returns True if the domain was found and removed
|
|
41
|
-
*/
|
|
42
|
-
removeDomainConfig(domain: string): boolean;
|
|
43
|
-
/**
|
|
44
|
-
* Find the handler for a domain
|
|
45
|
-
* @param domain The domain to find a handler for
|
|
46
|
-
* @returns The handler or undefined if no match
|
|
47
|
-
*/
|
|
48
|
-
findHandlerForDomain(domain: string): ForwardingHandler | undefined;
|
|
49
|
-
/**
|
|
50
|
-
* Handle a connection for a domain
|
|
51
|
-
* @param domain The domain
|
|
52
|
-
* @param socket The client socket
|
|
53
|
-
* @returns True if the connection was handled
|
|
54
|
-
*/
|
|
55
|
-
handleConnection(domain: string, socket: plugins.net.Socket): boolean;
|
|
56
|
-
/**
|
|
57
|
-
* Handle an HTTP request for a domain
|
|
58
|
-
* @param domain The domain
|
|
59
|
-
* @param req The HTTP request
|
|
60
|
-
* @param res The HTTP response
|
|
61
|
-
* @returns True if the request was handled
|
|
62
|
-
*/
|
|
63
|
-
handleHttpRequest(domain: string, req: plugins.http.IncomingMessage, res: plugins.http.ServerResponse): boolean;
|
|
64
|
-
/**
|
|
65
|
-
* Create handlers for a domain configuration
|
|
66
|
-
* @param config The domain configuration
|
|
67
|
-
*/
|
|
68
|
-
private createHandlersForDomain;
|
|
69
|
-
/**
|
|
70
|
-
* Set up event forwarding from a handler
|
|
71
|
-
* @param handler The handler
|
|
72
|
-
* @param config The domain configuration for this handler
|
|
73
|
-
*/
|
|
74
|
-
private setupHandlerEvents;
|
|
75
|
-
/**
|
|
76
|
-
* Find a handler for a domain using wildcard matching
|
|
77
|
-
* @param domain The domain to find a handler for
|
|
78
|
-
* @returns The handler or undefined if no match
|
|
79
|
-
*/
|
|
80
|
-
private findWildcardHandler;
|
|
81
|
-
/**
|
|
82
|
-
* Get all domain configurations
|
|
83
|
-
* @returns Array of domain configurations
|
|
84
|
-
*/
|
|
85
|
-
getDomainConfigs(): IDomainConfig[];
|
|
86
|
-
}
|
|
@@ -1,242 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../../plugins.js';
|
|
2
|
-
import { ForwardingHandler } from '../handlers/base-handler.js';
|
|
3
|
-
import { ForwardingHandlerEvents } from './forwarding-types.js';
|
|
4
|
-
import { ForwardingHandlerFactory } from '../factory/forwarding-factory.js';
|
|
5
|
-
/**
|
|
6
|
-
* Events emitted by the DomainManager
|
|
7
|
-
*/
|
|
8
|
-
export var DomainManagerEvents;
|
|
9
|
-
(function (DomainManagerEvents) {
|
|
10
|
-
DomainManagerEvents["DOMAIN_ADDED"] = "domain-added";
|
|
11
|
-
DomainManagerEvents["DOMAIN_REMOVED"] = "domain-removed";
|
|
12
|
-
DomainManagerEvents["DOMAIN_MATCHED"] = "domain-matched";
|
|
13
|
-
DomainManagerEvents["DOMAIN_MATCH_FAILED"] = "domain-match-failed";
|
|
14
|
-
DomainManagerEvents["CERTIFICATE_NEEDED"] = "certificate-needed";
|
|
15
|
-
DomainManagerEvents["CERTIFICATE_LOADED"] = "certificate-loaded";
|
|
16
|
-
DomainManagerEvents["ERROR"] = "error";
|
|
17
|
-
})(DomainManagerEvents || (DomainManagerEvents = {}));
|
|
18
|
-
/**
|
|
19
|
-
* Manages domains and their forwarding handlers
|
|
20
|
-
*/
|
|
21
|
-
export class DomainManager extends plugins.EventEmitter {
|
|
22
|
-
/**
|
|
23
|
-
* Create a new DomainManager
|
|
24
|
-
* @param initialDomains Optional initial domain configurations
|
|
25
|
-
*/
|
|
26
|
-
constructor(initialDomains) {
|
|
27
|
-
super();
|
|
28
|
-
this.domainConfigs = [];
|
|
29
|
-
this.domainHandlers = new Map();
|
|
30
|
-
if (initialDomains) {
|
|
31
|
-
this.setDomainConfigs(initialDomains);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Set or replace all domain configurations
|
|
36
|
-
* @param configs Array of domain configurations
|
|
37
|
-
*/
|
|
38
|
-
async setDomainConfigs(configs) {
|
|
39
|
-
// Clear existing handlers
|
|
40
|
-
this.domainHandlers.clear();
|
|
41
|
-
// Store new configurations
|
|
42
|
-
this.domainConfigs = [...configs];
|
|
43
|
-
// Initialize handlers for each domain
|
|
44
|
-
for (const config of this.domainConfigs) {
|
|
45
|
-
await this.createHandlersForDomain(config);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Add a new domain configuration
|
|
50
|
-
* @param config The domain configuration to add
|
|
51
|
-
*/
|
|
52
|
-
async addDomainConfig(config) {
|
|
53
|
-
// Check if any of these domains already exist
|
|
54
|
-
for (const domain of config.domains) {
|
|
55
|
-
if (this.domainHandlers.has(domain)) {
|
|
56
|
-
// Remove existing handler for this domain
|
|
57
|
-
this.domainHandlers.delete(domain);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
// Add the new configuration
|
|
61
|
-
this.domainConfigs.push(config);
|
|
62
|
-
// Create handlers for the new domain
|
|
63
|
-
await this.createHandlersForDomain(config);
|
|
64
|
-
this.emit(DomainManagerEvents.DOMAIN_ADDED, {
|
|
65
|
-
domains: config.domains,
|
|
66
|
-
forwardingType: config.forwarding.type
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Remove a domain configuration
|
|
71
|
-
* @param domain The domain to remove
|
|
72
|
-
* @returns True if the domain was found and removed
|
|
73
|
-
*/
|
|
74
|
-
removeDomainConfig(domain) {
|
|
75
|
-
// Find the config that includes this domain
|
|
76
|
-
const index = this.domainConfigs.findIndex(config => config.domains.includes(domain));
|
|
77
|
-
if (index === -1) {
|
|
78
|
-
return false;
|
|
79
|
-
}
|
|
80
|
-
// Get the config
|
|
81
|
-
const config = this.domainConfigs[index];
|
|
82
|
-
// Remove all handlers for this config
|
|
83
|
-
for (const domainName of config.domains) {
|
|
84
|
-
this.domainHandlers.delete(domainName);
|
|
85
|
-
}
|
|
86
|
-
// Remove the config
|
|
87
|
-
this.domainConfigs.splice(index, 1);
|
|
88
|
-
this.emit(DomainManagerEvents.DOMAIN_REMOVED, {
|
|
89
|
-
domains: config.domains
|
|
90
|
-
});
|
|
91
|
-
return true;
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Find the handler for a domain
|
|
95
|
-
* @param domain The domain to find a handler for
|
|
96
|
-
* @returns The handler or undefined if no match
|
|
97
|
-
*/
|
|
98
|
-
findHandlerForDomain(domain) {
|
|
99
|
-
// Try exact match
|
|
100
|
-
if (this.domainHandlers.has(domain)) {
|
|
101
|
-
return this.domainHandlers.get(domain);
|
|
102
|
-
}
|
|
103
|
-
// Try wildcard matches
|
|
104
|
-
const wildcardHandler = this.findWildcardHandler(domain);
|
|
105
|
-
if (wildcardHandler) {
|
|
106
|
-
return wildcardHandler;
|
|
107
|
-
}
|
|
108
|
-
// No match found
|
|
109
|
-
return undefined;
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Handle a connection for a domain
|
|
113
|
-
* @param domain The domain
|
|
114
|
-
* @param socket The client socket
|
|
115
|
-
* @returns True if the connection was handled
|
|
116
|
-
*/
|
|
117
|
-
handleConnection(domain, socket) {
|
|
118
|
-
const handler = this.findHandlerForDomain(domain);
|
|
119
|
-
if (!handler) {
|
|
120
|
-
this.emit(DomainManagerEvents.DOMAIN_MATCH_FAILED, {
|
|
121
|
-
domain,
|
|
122
|
-
remoteAddress: socket.remoteAddress
|
|
123
|
-
});
|
|
124
|
-
return false;
|
|
125
|
-
}
|
|
126
|
-
this.emit(DomainManagerEvents.DOMAIN_MATCHED, {
|
|
127
|
-
domain,
|
|
128
|
-
handlerType: handler.constructor.name,
|
|
129
|
-
remoteAddress: socket.remoteAddress
|
|
130
|
-
});
|
|
131
|
-
// Handle the connection
|
|
132
|
-
handler.handleConnection(socket);
|
|
133
|
-
return true;
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Handle an HTTP request for a domain
|
|
137
|
-
* @param domain The domain
|
|
138
|
-
* @param req The HTTP request
|
|
139
|
-
* @param res The HTTP response
|
|
140
|
-
* @returns True if the request was handled
|
|
141
|
-
*/
|
|
142
|
-
handleHttpRequest(domain, req, res) {
|
|
143
|
-
const handler = this.findHandlerForDomain(domain);
|
|
144
|
-
if (!handler) {
|
|
145
|
-
this.emit(DomainManagerEvents.DOMAIN_MATCH_FAILED, {
|
|
146
|
-
domain,
|
|
147
|
-
remoteAddress: req.socket.remoteAddress
|
|
148
|
-
});
|
|
149
|
-
return false;
|
|
150
|
-
}
|
|
151
|
-
this.emit(DomainManagerEvents.DOMAIN_MATCHED, {
|
|
152
|
-
domain,
|
|
153
|
-
handlerType: handler.constructor.name,
|
|
154
|
-
remoteAddress: req.socket.remoteAddress
|
|
155
|
-
});
|
|
156
|
-
// Handle the request
|
|
157
|
-
handler.handleHttpRequest(req, res);
|
|
158
|
-
return true;
|
|
159
|
-
}
|
|
160
|
-
/**
|
|
161
|
-
* Create handlers for a domain configuration
|
|
162
|
-
* @param config The domain configuration
|
|
163
|
-
*/
|
|
164
|
-
async createHandlersForDomain(config) {
|
|
165
|
-
try {
|
|
166
|
-
// Create a handler for this forwarding configuration
|
|
167
|
-
const handler = ForwardingHandlerFactory.createHandler(config.forwarding);
|
|
168
|
-
// Initialize the handler
|
|
169
|
-
await handler.initialize();
|
|
170
|
-
// Set up event forwarding
|
|
171
|
-
this.setupHandlerEvents(handler, config);
|
|
172
|
-
// Store the handler for each domain in the config
|
|
173
|
-
for (const domain of config.domains) {
|
|
174
|
-
this.domainHandlers.set(domain, handler);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
catch (error) {
|
|
178
|
-
this.emit(DomainManagerEvents.ERROR, {
|
|
179
|
-
domains: config.domains,
|
|
180
|
-
error: error instanceof Error ? error.message : String(error)
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* Set up event forwarding from a handler
|
|
186
|
-
* @param handler The handler
|
|
187
|
-
* @param config The domain configuration for this handler
|
|
188
|
-
*/
|
|
189
|
-
setupHandlerEvents(handler, config) {
|
|
190
|
-
// Forward relevant events
|
|
191
|
-
handler.on(ForwardingHandlerEvents.CERTIFICATE_NEEDED, (data) => {
|
|
192
|
-
this.emit(DomainManagerEvents.CERTIFICATE_NEEDED, {
|
|
193
|
-
...data,
|
|
194
|
-
domains: config.domains
|
|
195
|
-
});
|
|
196
|
-
});
|
|
197
|
-
handler.on(ForwardingHandlerEvents.CERTIFICATE_LOADED, (data) => {
|
|
198
|
-
this.emit(DomainManagerEvents.CERTIFICATE_LOADED, {
|
|
199
|
-
...data,
|
|
200
|
-
domains: config.domains
|
|
201
|
-
});
|
|
202
|
-
});
|
|
203
|
-
handler.on(ForwardingHandlerEvents.ERROR, (data) => {
|
|
204
|
-
this.emit(DomainManagerEvents.ERROR, {
|
|
205
|
-
...data,
|
|
206
|
-
domains: config.domains
|
|
207
|
-
});
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
/**
|
|
211
|
-
* Find a handler for a domain using wildcard matching
|
|
212
|
-
* @param domain The domain to find a handler for
|
|
213
|
-
* @returns The handler or undefined if no match
|
|
214
|
-
*/
|
|
215
|
-
findWildcardHandler(domain) {
|
|
216
|
-
// Exact match already checked in findHandlerForDomain
|
|
217
|
-
// Try subdomain wildcard (*.example.com)
|
|
218
|
-
if (domain.includes('.')) {
|
|
219
|
-
const parts = domain.split('.');
|
|
220
|
-
if (parts.length > 2) {
|
|
221
|
-
const wildcardDomain = `*.${parts.slice(1).join('.')}`;
|
|
222
|
-
if (this.domainHandlers.has(wildcardDomain)) {
|
|
223
|
-
return this.domainHandlers.get(wildcardDomain);
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
// Try full wildcard
|
|
228
|
-
if (this.domainHandlers.has('*')) {
|
|
229
|
-
return this.domainHandlers.get('*');
|
|
230
|
-
}
|
|
231
|
-
// No match found
|
|
232
|
-
return undefined;
|
|
233
|
-
}
|
|
234
|
-
/**
|
|
235
|
-
* Get all domain configurations
|
|
236
|
-
* @returns Array of domain configurations
|
|
237
|
-
*/
|
|
238
|
-
getDomainConfigs() {
|
|
239
|
-
return [...this.domainConfigs];
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tYWluLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9mb3J3YXJkaW5nL2NvbmZpZy9kb21haW4tbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBRTVDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRTVFOztHQUVHO0FBQ0gsTUFBTSxDQUFOLElBQVksbUJBUVg7QUFSRCxXQUFZLG1CQUFtQjtJQUM3QixvREFBNkIsQ0FBQTtJQUM3Qix3REFBaUMsQ0FBQTtJQUNqQyx3REFBaUMsQ0FBQTtJQUNqQyxrRUFBMkMsQ0FBQTtJQUMzQyxnRUFBeUMsQ0FBQTtJQUN6QyxnRUFBeUMsQ0FBQTtJQUN6QyxzQ0FBZSxDQUFBO0FBQ2pCLENBQUMsRUFSVyxtQkFBbUIsS0FBbkIsbUJBQW1CLFFBUTlCO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sYUFBYyxTQUFRLE9BQU8sQ0FBQyxZQUFZO0lBSXJEOzs7T0FHRztJQUNILFlBQVksY0FBZ0M7UUFDMUMsS0FBSyxFQUFFLENBQUM7UUFSRixrQkFBYSxHQUFvQixFQUFFLENBQUM7UUFDcEMsbUJBQWMsR0FBbUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQVNqRSxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN4QyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxPQUF3QjtRQUNwRCwwQkFBMEI7UUFDMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUU1QiwyQkFB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
|