@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,149 +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 authorized using forwarding security rules
|
|
58
|
-
*
|
|
59
|
-
* This method is used to determine if an IP is allowed to connect, based on security
|
|
60
|
-
* rules configured in the forwarding configuration. The allowed and blocked IPs are
|
|
61
|
-
* typically derived from domain.forwarding.security.allowedIps and blockedIps through
|
|
62
|
-
* DomainConfigManager.getEffectiveIPRules().
|
|
63
|
-
*
|
|
64
|
-
* @param ip - The IP address to check
|
|
65
|
-
* @param allowedIPs - Array of allowed IP patterns from forwarding.security.allowedIps
|
|
66
|
-
* @param blockedIPs - Array of blocked IP patterns from forwarding.security.blockedIps
|
|
67
|
-
* @returns true if IP is authorized, false if blocked
|
|
68
|
-
*/
|
|
69
|
-
isIPAuthorized(ip, allowedIPs, blockedIPs = []) {
|
|
70
|
-
// Skip IP validation if allowedIPs is empty
|
|
71
|
-
if (!ip || (allowedIPs.length === 0 && blockedIPs.length === 0)) {
|
|
72
|
-
return true;
|
|
73
|
-
}
|
|
74
|
-
// First check if IP is blocked - blocked IPs take precedence
|
|
75
|
-
if (blockedIPs.length > 0 && this.isGlobIPMatch(ip, blockedIPs)) {
|
|
76
|
-
return false;
|
|
77
|
-
}
|
|
78
|
-
// Then check if IP is allowed
|
|
79
|
-
return this.isGlobIPMatch(ip, allowedIPs);
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Check if the IP matches any of the glob patterns from security configuration
|
|
83
|
-
*
|
|
84
|
-
* This method checks IP addresses against glob patterns and handles IPv4/IPv6 normalization.
|
|
85
|
-
* It's used to implement IP filtering based on the forwarding.security configuration.
|
|
86
|
-
*
|
|
87
|
-
* @param ip - The IP address to check
|
|
88
|
-
* @param patterns - Array of glob patterns from forwarding.security.allowedIps or blockedIps
|
|
89
|
-
* @returns true if IP matches any pattern, false otherwise
|
|
90
|
-
*/
|
|
91
|
-
isGlobIPMatch(ip, patterns) {
|
|
92
|
-
if (!ip || !patterns || patterns.length === 0)
|
|
93
|
-
return false;
|
|
94
|
-
// Handle IPv4/IPv6 normalization for proper matching
|
|
95
|
-
const normalizeIP = (ip) => {
|
|
96
|
-
if (!ip)
|
|
97
|
-
return [];
|
|
98
|
-
// Handle IPv4-mapped IPv6 addresses (::ffff:127.0.0.1)
|
|
99
|
-
if (ip.startsWith('::ffff:')) {
|
|
100
|
-
const ipv4 = ip.slice(7);
|
|
101
|
-
return [ip, ipv4];
|
|
102
|
-
}
|
|
103
|
-
// Handle IPv4 addresses by also checking IPv4-mapped form
|
|
104
|
-
if (/^\d{1,3}(\.\d{1,3}){3}$/.test(ip)) {
|
|
105
|
-
return [ip, `::ffff:${ip}`];
|
|
106
|
-
}
|
|
107
|
-
return [ip];
|
|
108
|
-
};
|
|
109
|
-
// Normalize the IP being checked
|
|
110
|
-
const normalizedIPVariants = normalizeIP(ip);
|
|
111
|
-
if (normalizedIPVariants.length === 0)
|
|
112
|
-
return false;
|
|
113
|
-
// Normalize the pattern IPs for consistent comparison
|
|
114
|
-
const expandedPatterns = patterns.flatMap(normalizeIP);
|
|
115
|
-
// Check for any match between normalized IP variants and patterns
|
|
116
|
-
return normalizedIPVariants.some((ipVariant) => expandedPatterns.some((pattern) => plugins.minimatch(ipVariant, pattern)));
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Check if IP should be allowed considering connection rate and max connections
|
|
120
|
-
* @returns Object with result and reason
|
|
121
|
-
*/
|
|
122
|
-
validateIP(ip) {
|
|
123
|
-
// Check connection count limit
|
|
124
|
-
if (this.settings.maxConnectionsPerIP &&
|
|
125
|
-
this.getConnectionCountByIP(ip) >= this.settings.maxConnectionsPerIP) {
|
|
126
|
-
return {
|
|
127
|
-
allowed: false,
|
|
128
|
-
reason: `Maximum connections per IP (${this.settings.maxConnectionsPerIP}) exceeded`
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
// Check connection rate limit
|
|
132
|
-
if (this.settings.connectionRateLimitPerMinute &&
|
|
133
|
-
!this.checkConnectionRate(ip)) {
|
|
134
|
-
return {
|
|
135
|
-
allowed: false,
|
|
136
|
-
reason: `Connection rate limit (${this.settings.connectionRateLimitPerMinute}/min) exceeded`
|
|
137
|
-
};
|
|
138
|
-
}
|
|
139
|
-
return { allowed: true };
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Clears all IP tracking data (for shutdown)
|
|
143
|
-
*/
|
|
144
|
-
clearIPTracking() {
|
|
145
|
-
this.connectionsByIP.clear();
|
|
146
|
-
this.connectionRateByIP.clear();
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5wcC5zZWN1cml0eW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9zbWFydHByb3h5L2NsYXNzZXMucHAuc2VjdXJpdHltYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBR3pDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFJMUIsWUFBb0IsUUFBNEI7UUFBNUIsYUFBUSxHQUFSLFFBQVEsQ0FBb0I7UUFIeEMsb0JBQWUsR0FBNkIsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN0RCx1QkFBa0IsR0FBMEIsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUVYLENBQUM7SUFFcEQ7O09BRUc7SUFDSSxzQkFBc0IsQ0FBQyxFQUFVO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksbUJBQW1CLENBQUMsRUFBVTtRQUNuQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkIsTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztRQUV6QixJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN2QyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCw0REFBNEQ7UUFDNUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLEdB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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
|
-
}
|