@push.rocks/smartproxy 19.3.2 → 19.3.3
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 +12 -12
- package/readme.plan.md +152 -257
- 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,179 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Manages port ranges and port-based configuration
|
|
3
|
-
*/
|
|
4
|
-
export class PortRangeManager {
|
|
5
|
-
constructor(settings) {
|
|
6
|
-
this.settings = settings;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Get all ports that should be listened on
|
|
10
|
-
*/
|
|
11
|
-
getListeningPorts() {
|
|
12
|
-
const listeningPorts = new Set();
|
|
13
|
-
// Always include the main fromPort
|
|
14
|
-
listeningPorts.add(this.settings.fromPort);
|
|
15
|
-
// Add ports from global port ranges if defined
|
|
16
|
-
if (this.settings.globalPortRanges && this.settings.globalPortRanges.length > 0) {
|
|
17
|
-
for (const range of this.settings.globalPortRanges) {
|
|
18
|
-
for (let port = range.from; port <= range.to; port++) {
|
|
19
|
-
listeningPorts.add(port);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
return listeningPorts;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Check if a port should use NetworkProxy for forwarding
|
|
27
|
-
*/
|
|
28
|
-
shouldUseNetworkProxy(port) {
|
|
29
|
-
return !!this.settings.useNetworkProxy && this.settings.useNetworkProxy.includes(port);
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Check if port should use global forwarding
|
|
33
|
-
*/
|
|
34
|
-
shouldUseGlobalForwarding(port) {
|
|
35
|
-
return (!!this.settings.forwardAllGlobalRanges &&
|
|
36
|
-
this.isPortInGlobalRanges(port));
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Check if a port is in global ranges
|
|
40
|
-
*/
|
|
41
|
-
isPortInGlobalRanges(port) {
|
|
42
|
-
return (this.settings.globalPortRanges &&
|
|
43
|
-
this.isPortInRanges(port, this.settings.globalPortRanges));
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Check if a port falls within the specified ranges
|
|
47
|
-
*/
|
|
48
|
-
isPortInRanges(port, ranges) {
|
|
49
|
-
return ranges.some((range) => port >= range.from && port <= range.to);
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Get forwarding port for a specific listening port
|
|
53
|
-
* This determines what port to connect to on the target
|
|
54
|
-
*/
|
|
55
|
-
getForwardingPort(listeningPort) {
|
|
56
|
-
// If using global forwarding, forward to the original port
|
|
57
|
-
if (this.settings.forwardAllGlobalRanges && this.isPortInGlobalRanges(listeningPort)) {
|
|
58
|
-
return listeningPort;
|
|
59
|
-
}
|
|
60
|
-
// Otherwise use the configured toPort
|
|
61
|
-
return this.settings.toPort;
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Find domain-specific port ranges that include a given port
|
|
65
|
-
*/
|
|
66
|
-
findDomainPortRange(port) {
|
|
67
|
-
for (let i = 0; i < this.settings.domainConfigs.length; i++) {
|
|
68
|
-
const domain = this.settings.domainConfigs[i];
|
|
69
|
-
if (domain.portRanges) {
|
|
70
|
-
for (const range of domain.portRanges) {
|
|
71
|
-
if (port >= range.from && port <= range.to) {
|
|
72
|
-
return { domainIndex: i, range };
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
return undefined;
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Get a list of all configured ports
|
|
81
|
-
* This includes the fromPort, NetworkProxy ports, and ports from all ranges
|
|
82
|
-
*/
|
|
83
|
-
getAllConfiguredPorts() {
|
|
84
|
-
const ports = new Set();
|
|
85
|
-
// Add main listening port
|
|
86
|
-
ports.add(this.settings.fromPort);
|
|
87
|
-
// Add NetworkProxy port if configured
|
|
88
|
-
if (this.settings.networkProxyPort) {
|
|
89
|
-
ports.add(this.settings.networkProxyPort);
|
|
90
|
-
}
|
|
91
|
-
// Add NetworkProxy ports
|
|
92
|
-
if (this.settings.useNetworkProxy) {
|
|
93
|
-
for (const port of this.settings.useNetworkProxy) {
|
|
94
|
-
ports.add(port);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
// Add ACME HTTP challenge port if enabled
|
|
98
|
-
if (this.settings.acme?.enabled && this.settings.acme.port) {
|
|
99
|
-
ports.add(this.settings.acme.port);
|
|
100
|
-
}
|
|
101
|
-
// Add global port ranges
|
|
102
|
-
if (this.settings.globalPortRanges) {
|
|
103
|
-
for (const range of this.settings.globalPortRanges) {
|
|
104
|
-
for (let port = range.from; port <= range.to; port++) {
|
|
105
|
-
ports.add(port);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
// Add domain-specific port ranges
|
|
110
|
-
for (const domain of this.settings.domainConfigs) {
|
|
111
|
-
if (domain.portRanges) {
|
|
112
|
-
for (const range of domain.portRanges) {
|
|
113
|
-
for (let port = range.from; port <= range.to; port++) {
|
|
114
|
-
ports.add(port);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
// Add domain-specific NetworkProxy port if configured
|
|
119
|
-
if (domain.useNetworkProxy && domain.networkProxyPort) {
|
|
120
|
-
ports.add(domain.networkProxyPort);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
return Array.from(ports);
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Validate port configuration
|
|
127
|
-
* Returns array of warning messages
|
|
128
|
-
*/
|
|
129
|
-
validateConfiguration() {
|
|
130
|
-
const warnings = [];
|
|
131
|
-
// Check for overlapping port ranges
|
|
132
|
-
const portMappings = new Map();
|
|
133
|
-
// Track global port ranges
|
|
134
|
-
if (this.settings.globalPortRanges) {
|
|
135
|
-
for (const range of this.settings.globalPortRanges) {
|
|
136
|
-
for (let port = range.from; port <= range.to; port++) {
|
|
137
|
-
if (!portMappings.has(port)) {
|
|
138
|
-
portMappings.set(port, []);
|
|
139
|
-
}
|
|
140
|
-
portMappings.get(port).push('Global Port Range');
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
// Track domain-specific port ranges
|
|
145
|
-
for (const domain of this.settings.domainConfigs) {
|
|
146
|
-
if (domain.portRanges) {
|
|
147
|
-
for (const range of domain.portRanges) {
|
|
148
|
-
for (let port = range.from; port <= range.to; port++) {
|
|
149
|
-
if (!portMappings.has(port)) {
|
|
150
|
-
portMappings.set(port, []);
|
|
151
|
-
}
|
|
152
|
-
portMappings.get(port).push(`Domain: ${domain.domains.join(', ')}`);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
// Check for ports with multiple mappings
|
|
158
|
-
for (const [port, mappings] of portMappings.entries()) {
|
|
159
|
-
if (mappings.length > 1) {
|
|
160
|
-
warnings.push(`Port ${port} has multiple mappings: ${mappings.join(', ')}`);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
// Check if main ports are used elsewhere
|
|
164
|
-
if (portMappings.has(this.settings.fromPort) && portMappings.get(this.settings.fromPort).length > 0) {
|
|
165
|
-
warnings.push(`Main listening port ${this.settings.fromPort} is also used in port ranges`);
|
|
166
|
-
}
|
|
167
|
-
if (this.settings.networkProxyPort && portMappings.has(this.settings.networkProxyPort)) {
|
|
168
|
-
warnings.push(`NetworkProxy port ${this.settings.networkProxyPort} is also used in port ranges`);
|
|
169
|
-
}
|
|
170
|
-
// Check ACME port
|
|
171
|
-
if (this.settings.acme?.enabled && this.settings.acme.port) {
|
|
172
|
-
if (portMappings.has(this.settings.acme.port)) {
|
|
173
|
-
warnings.push(`ACME HTTP challenge port ${this.settings.acme.port} is also used in port ranges`);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
return warnings;
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5wcC5wb3J0cmFuZ2VtYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2xhc3Nlcy5wcC5wb3J0cmFuZ2VtYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQixZQUFvQixRQUE0QjtRQUE1QixhQUFRLEdBQVIsUUFBUSxDQUFvQjtJQUFHLENBQUM7SUFFcEQ7O09BRUc7SUFDSSxpQkFBaUI7UUFDdEIsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUV6QyxtQ0FBbUM7UUFDbkMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTNDLCtDQUErQztRQUMvQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEYsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQ25ELEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO29CQUNyRCxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMzQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxxQkFBcUIsQ0FBQyxJQUFZO1FBQ3ZDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBRUQ7O09BRUc7SUFDSSx5QkFBeUIsQ0FBQyxJQUFZO1FBQzNDLE9BQU8sQ0FDTCxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0I7WUFDdEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUNoQyxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0ksb0JBQW9CLENBQUMsSUFBWTtRQUN0QyxPQUFPLENBQ0wsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0I7WUFDOUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUMxRCxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0ksY0FBYyxDQUFDLElBQVksRUFBRSxNQUEyQztRQUM3RSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGlCQUFpQixDQUFDLGFBQXFCO1FBQzVDLDJEQUEyRDtRQUMzRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsc0JBQXNCLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDckYsT0FBTyxhQUFhLENBQUM7UUFDdkIsQ0FBQztRQUVELHNDQUFzQztRQUN0QyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7T0FFRztJQUNJLG1CQUFtQixDQUFDLElBQVk7UUFJckMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlDLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUN0QixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDdEMsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDO3dCQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztvQkFDbkMsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0kscUJBQXFCO1FBQzFCLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFFaEMsMEJBQTBCO1FBQzFCLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVsQyxzQ0FBc0M7UUFDdEMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDbkMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUVELHlCQUF5QjtRQUN6QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDbEMsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUNqRCxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xCLENBQUM7UUFDSCxDQUFDO1FBRUQsMENBQTBDO1FBQzFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzNELEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUVELHlCQUF5QjtRQUN6QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNuQyxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDbkQsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7b0JBQ3JELEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2xCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELGtDQUFrQztRQUNsQyxLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDakQsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3RCLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUN0QyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQzt3QkFDckQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDbEIsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztZQUVELHNEQUFzRDtZQUN0RCxJQUFJLE1BQU0sQ0FBQyxlQUFlLElBQUksTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3RELEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDckMsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7T0FHRztJQUNJLHFCQUFxQjtRQUMxQixNQUFNLFFBQVEsR0FBYSxFQUFFLENBQUM7UUFFOUIsb0NBQW9DO1FBQ3BDLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxFQUFvQixDQUFDO1FBRWpELDJCQUEyQjtRQUMzQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNuQyxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDbkQsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7b0JBQ3JELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7d0JBQzVCLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUM3QixDQUFDO29CQUNELFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBQ3BELENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELG9DQUFvQztRQUNwQyxLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDakQsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3RCLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUN0QyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQzt3QkFDckQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQzs0QkFDNUIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7d0JBQzdCLENBQUM7d0JBQ0QsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3ZFLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQseUNBQXlDO1FBQ3pDLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUN0RCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hCLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLDJCQUEyQixRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM5RSxDQUFDO1FBQ0gsQ0FBQztRQUVELHlDQUF5QztRQUN6QyxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3JHLFFBQVEsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSw4QkFBOEIsQ0FBQyxDQUFDO1FBQzdGLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztZQUN2RixRQUFRLENBQUMsSUFBSSxDQUFDLHFCQUFxQixJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQiw4QkFBOEIsQ0FBQyxDQUFDO1FBQ25HLENBQUM7UUFFRCxrQkFBa0I7UUFDbEIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDM0QsSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzlDLFFBQVEsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksOEJBQThCLENBQUMsQ0FBQztZQUNuRyxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7Q0FDRiJ9
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import type { IPortProxySettings } from './classes.pp.interfaces.js';
|
|
2
|
-
/**
|
|
3
|
-
* Handles security aspects like IP tracking, rate limiting, and authorization
|
|
4
|
-
*/
|
|
5
|
-
export declare class SecurityManager {
|
|
6
|
-
private settings;
|
|
7
|
-
private connectionsByIP;
|
|
8
|
-
private connectionRateByIP;
|
|
9
|
-
constructor(settings: IPortProxySettings);
|
|
10
|
-
/**
|
|
11
|
-
* Get connections count by IP
|
|
12
|
-
*/
|
|
13
|
-
getConnectionCountByIP(ip: string): number;
|
|
14
|
-
/**
|
|
15
|
-
* Check and update connection rate for an IP
|
|
16
|
-
* @returns true if within rate limit, false if exceeding limit
|
|
17
|
-
*/
|
|
18
|
-
checkConnectionRate(ip: string): boolean;
|
|
19
|
-
/**
|
|
20
|
-
* Track connection by IP
|
|
21
|
-
*/
|
|
22
|
-
trackConnectionByIP(ip: string, connectionId: string): void;
|
|
23
|
-
/**
|
|
24
|
-
* Remove connection tracking for an IP
|
|
25
|
-
*/
|
|
26
|
-
removeConnectionByIP(ip: string, connectionId: string): void;
|
|
27
|
-
/**
|
|
28
|
-
* Check if an IP is allowed using glob patterns
|
|
29
|
-
*/
|
|
30
|
-
isIPAuthorized(ip: string, allowedIPs: string[], blockedIPs?: string[]): boolean;
|
|
31
|
-
/**
|
|
32
|
-
* Check if the IP matches any of the glob patterns
|
|
33
|
-
*/
|
|
34
|
-
private isGlobIPMatch;
|
|
35
|
-
/**
|
|
36
|
-
* Check if IP should be allowed considering connection rate and max connections
|
|
37
|
-
* @returns Object with result and reason
|
|
38
|
-
*/
|
|
39
|
-
validateIP(ip: string): {
|
|
40
|
-
allowed: boolean;
|
|
41
|
-
reason?: string;
|
|
42
|
-
};
|
|
43
|
-
/**
|
|
44
|
-
* Clears all IP tracking data (for shutdown)
|
|
45
|
-
*/
|
|
46
|
-
clearIPTracking(): void;
|
|
47
|
-
}
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
import * as plugins from './plugins.js';
|
|
2
|
-
/**
|
|
3
|
-
* Handles security aspects like IP tracking, rate limiting, and authorization
|
|
4
|
-
*/
|
|
5
|
-
export class SecurityManager {
|
|
6
|
-
constructor(settings) {
|
|
7
|
-
this.settings = settings;
|
|
8
|
-
this.connectionsByIP = new Map();
|
|
9
|
-
this.connectionRateByIP = new Map();
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Get connections count by IP
|
|
13
|
-
*/
|
|
14
|
-
getConnectionCountByIP(ip) {
|
|
15
|
-
return this.connectionsByIP.get(ip)?.size || 0;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Check and update connection rate for an IP
|
|
19
|
-
* @returns true if within rate limit, false if exceeding limit
|
|
20
|
-
*/
|
|
21
|
-
checkConnectionRate(ip) {
|
|
22
|
-
const now = Date.now();
|
|
23
|
-
const minute = 60 * 1000;
|
|
24
|
-
if (!this.connectionRateByIP.has(ip)) {
|
|
25
|
-
this.connectionRateByIP.set(ip, [now]);
|
|
26
|
-
return true;
|
|
27
|
-
}
|
|
28
|
-
// Get timestamps and filter out entries older than 1 minute
|
|
29
|
-
const timestamps = this.connectionRateByIP.get(ip).filter((time) => now - time < minute);
|
|
30
|
-
timestamps.push(now);
|
|
31
|
-
this.connectionRateByIP.set(ip, timestamps);
|
|
32
|
-
// Check if rate exceeds limit
|
|
33
|
-
return timestamps.length <= this.settings.connectionRateLimitPerMinute;
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Track connection by IP
|
|
37
|
-
*/
|
|
38
|
-
trackConnectionByIP(ip, connectionId) {
|
|
39
|
-
if (!this.connectionsByIP.has(ip)) {
|
|
40
|
-
this.connectionsByIP.set(ip, new Set());
|
|
41
|
-
}
|
|
42
|
-
this.connectionsByIP.get(ip).add(connectionId);
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Remove connection tracking for an IP
|
|
46
|
-
*/
|
|
47
|
-
removeConnectionByIP(ip, connectionId) {
|
|
48
|
-
if (this.connectionsByIP.has(ip)) {
|
|
49
|
-
const connections = this.connectionsByIP.get(ip);
|
|
50
|
-
connections.delete(connectionId);
|
|
51
|
-
if (connections.size === 0) {
|
|
52
|
-
this.connectionsByIP.delete(ip);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Check if an IP is allowed using glob patterns
|
|
58
|
-
*/
|
|
59
|
-
isIPAuthorized(ip, allowedIPs, blockedIPs = []) {
|
|
60
|
-
// Skip IP validation if allowedIPs is empty
|
|
61
|
-
if (!ip || (allowedIPs.length === 0 && blockedIPs.length === 0)) {
|
|
62
|
-
return true;
|
|
63
|
-
}
|
|
64
|
-
// First check if IP is blocked
|
|
65
|
-
if (blockedIPs.length > 0 && this.isGlobIPMatch(ip, blockedIPs)) {
|
|
66
|
-
return false;
|
|
67
|
-
}
|
|
68
|
-
// Then check if IP is allowed
|
|
69
|
-
return this.isGlobIPMatch(ip, allowedIPs);
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Check if the IP matches any of the glob patterns
|
|
73
|
-
*/
|
|
74
|
-
isGlobIPMatch(ip, patterns) {
|
|
75
|
-
if (!ip || !patterns || patterns.length === 0)
|
|
76
|
-
return false;
|
|
77
|
-
const normalizeIP = (ip) => {
|
|
78
|
-
if (!ip)
|
|
79
|
-
return [];
|
|
80
|
-
if (ip.startsWith('::ffff:')) {
|
|
81
|
-
const ipv4 = ip.slice(7);
|
|
82
|
-
return [ip, ipv4];
|
|
83
|
-
}
|
|
84
|
-
if (/^\d{1,3}(\.\d{1,3}){3}$/.test(ip)) {
|
|
85
|
-
return [ip, `::ffff:${ip}`];
|
|
86
|
-
}
|
|
87
|
-
return [ip];
|
|
88
|
-
};
|
|
89
|
-
const normalizedIPVariants = normalizeIP(ip);
|
|
90
|
-
if (normalizedIPVariants.length === 0)
|
|
91
|
-
return false;
|
|
92
|
-
const expandedPatterns = patterns.flatMap(normalizeIP);
|
|
93
|
-
return normalizedIPVariants.some((ipVariant) => expandedPatterns.some((pattern) => plugins.minimatch(ipVariant, pattern)));
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Check if IP should be allowed considering connection rate and max connections
|
|
97
|
-
* @returns Object with result and reason
|
|
98
|
-
*/
|
|
99
|
-
validateIP(ip) {
|
|
100
|
-
// Check connection count limit
|
|
101
|
-
if (this.settings.maxConnectionsPerIP &&
|
|
102
|
-
this.getConnectionCountByIP(ip) >= this.settings.maxConnectionsPerIP) {
|
|
103
|
-
return {
|
|
104
|
-
allowed: false,
|
|
105
|
-
reason: `Maximum connections per IP (${this.settings.maxConnectionsPerIP}) exceeded`
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
// Check connection rate limit
|
|
109
|
-
if (this.settings.connectionRateLimitPerMinute &&
|
|
110
|
-
!this.checkConnectionRate(ip)) {
|
|
111
|
-
return {
|
|
112
|
-
allowed: false,
|
|
113
|
-
reason: `Connection rate limit (${this.settings.connectionRateLimitPerMinute}/min) exceeded`
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
return { allowed: true };
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Clears all IP tracking data (for shutdown)
|
|
120
|
-
*/
|
|
121
|
-
clearIPTracking() {
|
|
122
|
-
this.connectionsByIP.clear();
|
|
123
|
-
this.connectionRateByIP.clear();
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5wcC5zZWN1cml0eW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jbGFzc2VzLnBwLnNlY3VyaXR5bWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUd4Qzs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBSTFCLFlBQW9CLFFBQTRCO1FBQTVCLGFBQVEsR0FBUixRQUFRLENBQW9CO1FBSHhDLG9CQUFlLEdBQTZCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdEQsdUJBQWtCLEdBQTBCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFWCxDQUFDO0lBRXBEOztPQUVHO0lBQ0ksc0JBQXNCLENBQUMsRUFBVTtRQUN0QyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVEOzs7T0FHRztJQUNJLG1CQUFtQixDQUFDLEVBQVU7UUFDbkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFFekIsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdkMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsNERBQTREO1FBQzVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLE1BQU0sQ0FBQyxD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
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
import { Buffer } from 'buffer';
|
|
2
|
-
/**
|
|
3
|
-
* SNI (Server Name Indication) handler for TLS connections.
|
|
4
|
-
* Provides robust extraction of SNI values from TLS ClientHello messages
|
|
5
|
-
* with support for fragmented packets, TLS 1.3 resumption, Chrome-specific
|
|
6
|
-
* connection behaviors, and tab hibernation/reactivation scenarios.
|
|
7
|
-
*/
|
|
8
|
-
export declare class SniHandler {
|
|
9
|
-
private static readonly TLS_HANDSHAKE_RECORD_TYPE;
|
|
10
|
-
private static readonly TLS_APPLICATION_DATA_TYPE;
|
|
11
|
-
private static readonly TLS_CLIENT_HELLO_HANDSHAKE_TYPE;
|
|
12
|
-
private static readonly TLS_SNI_EXTENSION_TYPE;
|
|
13
|
-
private static readonly TLS_SESSION_TICKET_EXTENSION_TYPE;
|
|
14
|
-
private static readonly TLS_SNI_HOST_NAME_TYPE;
|
|
15
|
-
private static readonly TLS_PSK_EXTENSION_TYPE;
|
|
16
|
-
private static readonly TLS_PSK_KE_MODES_EXTENSION_TYPE;
|
|
17
|
-
private static readonly TLS_EARLY_DATA_EXTENSION_TYPE;
|
|
18
|
-
private static fragmentedBuffers;
|
|
19
|
-
private static fragmentTimeout;
|
|
20
|
-
/**
|
|
21
|
-
* Checks if a buffer contains a TLS handshake message (record type 22)
|
|
22
|
-
* @param buffer - The buffer to check
|
|
23
|
-
* @returns true if the buffer starts with a TLS handshake record type
|
|
24
|
-
*/
|
|
25
|
-
static isTlsHandshake(buffer: Buffer): boolean;
|
|
26
|
-
/**
|
|
27
|
-
* Checks if a buffer contains TLS application data (record type 23)
|
|
28
|
-
* @param buffer - The buffer to check
|
|
29
|
-
* @returns true if the buffer starts with a TLS application data record type
|
|
30
|
-
*/
|
|
31
|
-
static isTlsApplicationData(buffer: Buffer): boolean;
|
|
32
|
-
/**
|
|
33
|
-
* Creates a connection ID based on source/destination information
|
|
34
|
-
* Used to track fragmented ClientHello messages across multiple packets
|
|
35
|
-
*
|
|
36
|
-
* @param connectionInfo - Object containing connection identifiers (IP/port)
|
|
37
|
-
* @returns A string ID for the connection
|
|
38
|
-
*/
|
|
39
|
-
static createConnectionId(connectionInfo: {
|
|
40
|
-
sourceIp?: string;
|
|
41
|
-
sourcePort?: number;
|
|
42
|
-
destIp?: string;
|
|
43
|
-
destPort?: number;
|
|
44
|
-
}): string;
|
|
45
|
-
/**
|
|
46
|
-
* Handles potential fragmented ClientHello messages by buffering and reassembling
|
|
47
|
-
* TLS record fragments that might span multiple TCP packets.
|
|
48
|
-
*
|
|
49
|
-
* @param buffer - The current buffer fragment
|
|
50
|
-
* @param connectionId - Unique identifier for the connection
|
|
51
|
-
* @param enableLogging - Whether to enable logging
|
|
52
|
-
* @returns A complete buffer if reassembly is successful, or undefined if more fragments are needed
|
|
53
|
-
*/
|
|
54
|
-
static handleFragmentedClientHello(buffer: Buffer, connectionId: string, enableLogging?: boolean): Buffer | undefined;
|
|
55
|
-
/**
|
|
56
|
-
* Checks if a buffer contains a TLS ClientHello message
|
|
57
|
-
* @param buffer - The buffer to check
|
|
58
|
-
* @returns true if the buffer appears to be a ClientHello message
|
|
59
|
-
*/
|
|
60
|
-
static isClientHello(buffer: Buffer): boolean;
|
|
61
|
-
/**
|
|
62
|
-
* Checks if a ClientHello message contains session resumption indicators
|
|
63
|
-
* such as session tickets or PSK (Pre-Shared Key) extensions.
|
|
64
|
-
*
|
|
65
|
-
* @param buffer - The buffer containing a ClientHello message
|
|
66
|
-
* @param enableLogging - Whether to enable logging
|
|
67
|
-
* @returns Object containing details about session resumption and SNI presence
|
|
68
|
-
*/
|
|
69
|
-
static hasSessionResumption(buffer: Buffer, enableLogging?: boolean): {
|
|
70
|
-
isResumption: boolean;
|
|
71
|
-
hasSNI: boolean;
|
|
72
|
-
};
|
|
73
|
-
/**
|
|
74
|
-
* Detects characteristics of a tab reactivation TLS handshake
|
|
75
|
-
* These often have specific patterns in Chrome and other browsers
|
|
76
|
-
*
|
|
77
|
-
* @param buffer - The buffer containing a ClientHello message
|
|
78
|
-
* @param enableLogging - Whether to enable logging
|
|
79
|
-
* @returns true if this appears to be a tab reactivation handshake
|
|
80
|
-
*/
|
|
81
|
-
static isTabReactivationHandshake(buffer: Buffer, enableLogging?: boolean): boolean;
|
|
82
|
-
/**
|
|
83
|
-
* Extracts the SNI (Server Name Indication) from a TLS ClientHello message.
|
|
84
|
-
* Implements robust parsing with support for session resumption edge cases.
|
|
85
|
-
*
|
|
86
|
-
* @param buffer - The buffer containing the TLS ClientHello message
|
|
87
|
-
* @param enableLogging - Whether to enable detailed debug logging
|
|
88
|
-
* @returns The extracted server name or undefined if not found
|
|
89
|
-
*/
|
|
90
|
-
static extractSNI(buffer: Buffer, enableLogging?: boolean): string | undefined;
|
|
91
|
-
/**
|
|
92
|
-
* Attempts to extract SNI from the PSK extension in a TLS 1.3 ClientHello.
|
|
93
|
-
*
|
|
94
|
-
* In TLS 1.3, when a client attempts to resume a session, it may include
|
|
95
|
-
* the server name in the PSK identity hint rather than in the SNI extension.
|
|
96
|
-
*
|
|
97
|
-
* @param buffer - The buffer containing the TLS ClientHello message
|
|
98
|
-
* @param enableLogging - Whether to enable detailed debug logging
|
|
99
|
-
* @returns The extracted server name or undefined if not found
|
|
100
|
-
*/
|
|
101
|
-
static extractSNIFromPSKExtension(buffer: Buffer, enableLogging?: boolean): string | undefined;
|
|
102
|
-
/**
|
|
103
|
-
* Checks if the buffer contains TLS 1.3 early data (0-RTT)
|
|
104
|
-
* @param buffer - The buffer to check
|
|
105
|
-
* @param enableLogging - Whether to enable logging
|
|
106
|
-
* @returns true if early data is detected
|
|
107
|
-
*/
|
|
108
|
-
static hasEarlyData(buffer: Buffer, enableLogging?: boolean): boolean;
|
|
109
|
-
/**
|
|
110
|
-
* Attempts to extract SNI from an initial ClientHello packet and handles
|
|
111
|
-
* session resumption edge cases more robustly than the standard extraction.
|
|
112
|
-
*
|
|
113
|
-
* This method handles:
|
|
114
|
-
* 1. Standard SNI extraction
|
|
115
|
-
* 2. TLS 1.3 PSK-based resumption (Chrome, Firefox, etc.)
|
|
116
|
-
* 3. Session ticket-based resumption
|
|
117
|
-
* 4. Fragmented ClientHello messages
|
|
118
|
-
* 5. TLS 1.3 Early Data (0-RTT)
|
|
119
|
-
* 6. Chrome's connection racing behaviors
|
|
120
|
-
*
|
|
121
|
-
* @param buffer - The buffer containing the TLS ClientHello message
|
|
122
|
-
* @param connectionInfo - Optional connection information for fragment handling
|
|
123
|
-
* @param enableLogging - Whether to enable detailed debug logging
|
|
124
|
-
* @returns The extracted server name or undefined if not found
|
|
125
|
-
*/
|
|
126
|
-
static extractSNIWithResumptionSupport(buffer: Buffer, connectionInfo?: {
|
|
127
|
-
sourceIp?: string;
|
|
128
|
-
sourcePort?: number;
|
|
129
|
-
destIp?: string;
|
|
130
|
-
destPort?: number;
|
|
131
|
-
}, enableLogging?: boolean): string | undefined;
|
|
132
|
-
/**
|
|
133
|
-
* Main entry point for SNI extraction that handles all edge cases.
|
|
134
|
-
* This should be called for each TLS packet received from a client.
|
|
135
|
-
*
|
|
136
|
-
* The method uses connection tracking to handle fragmented ClientHello
|
|
137
|
-
* messages and various TLS 1.3 behaviors, including Chrome's connection
|
|
138
|
-
* racing patterns and tab reactivation behaviors.
|
|
139
|
-
*
|
|
140
|
-
* @param buffer - The buffer containing TLS data
|
|
141
|
-
* @param connectionInfo - Connection metadata (IPs and ports)
|
|
142
|
-
* @param enableLogging - Whether to enable detailed debug logging
|
|
143
|
-
* @param cachedSni - Optional cached SNI from previous connections (for racing detection)
|
|
144
|
-
* @returns The extracted server name or undefined if not found or more data needed
|
|
145
|
-
*/
|
|
146
|
-
static processTlsPacket(buffer: Buffer, connectionInfo: {
|
|
147
|
-
sourceIp: string;
|
|
148
|
-
sourcePort: number;
|
|
149
|
-
destIp: string;
|
|
150
|
-
destPort: number;
|
|
151
|
-
timestamp?: number;
|
|
152
|
-
}, enableLogging?: boolean, cachedSni?: string): string | undefined;
|
|
153
|
-
}
|