@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,188 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../plugins.js';
|
|
2
|
-
import { createLogger } from './classes.np.types.js';
|
|
3
|
-
import { ConnectionPool } from './classes.np.connectionpool.js';
|
|
4
|
-
import { ProxyRouter } from '../classes.router.js';
|
|
5
|
-
/**
|
|
6
|
-
* Handles WebSocket connections and proxying
|
|
7
|
-
*/
|
|
8
|
-
export class WebSocketHandler {
|
|
9
|
-
constructor(options, connectionPool, router) {
|
|
10
|
-
this.options = options;
|
|
11
|
-
this.connectionPool = connectionPool;
|
|
12
|
-
this.router = router;
|
|
13
|
-
this.heartbeatInterval = null;
|
|
14
|
-
this.wsServer = null;
|
|
15
|
-
this.logger = createLogger(options.logLevel || 'info');
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Initialize WebSocket server on an existing HTTPS server
|
|
19
|
-
*/
|
|
20
|
-
initialize(server) {
|
|
21
|
-
// Create WebSocket server
|
|
22
|
-
this.wsServer = new plugins.ws.WebSocketServer({
|
|
23
|
-
server: server,
|
|
24
|
-
clientTracking: true
|
|
25
|
-
});
|
|
26
|
-
// Handle WebSocket connections
|
|
27
|
-
this.wsServer.on('connection', (wsIncoming, req) => {
|
|
28
|
-
this.handleWebSocketConnection(wsIncoming, req);
|
|
29
|
-
});
|
|
30
|
-
// Start the heartbeat interval
|
|
31
|
-
this.startHeartbeat();
|
|
32
|
-
this.logger.info('WebSocket handler initialized');
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Start the heartbeat interval to check for inactive WebSocket connections
|
|
36
|
-
*/
|
|
37
|
-
startHeartbeat() {
|
|
38
|
-
// Clean up existing interval if any
|
|
39
|
-
if (this.heartbeatInterval) {
|
|
40
|
-
clearInterval(this.heartbeatInterval);
|
|
41
|
-
}
|
|
42
|
-
// Set up the heartbeat interval (check every 30 seconds)
|
|
43
|
-
this.heartbeatInterval = setInterval(() => {
|
|
44
|
-
if (!this.wsServer || this.wsServer.clients.size === 0) {
|
|
45
|
-
return; // Skip if no active connections
|
|
46
|
-
}
|
|
47
|
-
this.logger.debug(`WebSocket heartbeat check for ${this.wsServer.clients.size} clients`);
|
|
48
|
-
this.wsServer.clients.forEach((ws) => {
|
|
49
|
-
const wsWithHeartbeat = ws;
|
|
50
|
-
if (wsWithHeartbeat.isAlive === false) {
|
|
51
|
-
this.logger.debug('Terminating inactive WebSocket connection');
|
|
52
|
-
return wsWithHeartbeat.terminate();
|
|
53
|
-
}
|
|
54
|
-
wsWithHeartbeat.isAlive = false;
|
|
55
|
-
wsWithHeartbeat.ping();
|
|
56
|
-
});
|
|
57
|
-
}, 30000);
|
|
58
|
-
// Make sure the interval doesn't keep the process alive
|
|
59
|
-
if (this.heartbeatInterval.unref) {
|
|
60
|
-
this.heartbeatInterval.unref();
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Handle a new WebSocket connection
|
|
65
|
-
*/
|
|
66
|
-
handleWebSocketConnection(wsIncoming, req) {
|
|
67
|
-
try {
|
|
68
|
-
// Initialize heartbeat tracking
|
|
69
|
-
wsIncoming.isAlive = true;
|
|
70
|
-
wsIncoming.lastPong = Date.now();
|
|
71
|
-
// Handle pong messages to track liveness
|
|
72
|
-
wsIncoming.on('pong', () => {
|
|
73
|
-
wsIncoming.isAlive = true;
|
|
74
|
-
wsIncoming.lastPong = Date.now();
|
|
75
|
-
});
|
|
76
|
-
// Find target configuration based on request
|
|
77
|
-
const proxyConfig = this.router.routeReq(req);
|
|
78
|
-
if (!proxyConfig) {
|
|
79
|
-
this.logger.warn(`No proxy configuration for WebSocket host: ${req.headers.host}`);
|
|
80
|
-
wsIncoming.close(1008, 'No proxy configuration for this host');
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
// Get destination target using round-robin if multiple targets
|
|
84
|
-
const destination = this.connectionPool.getNextTarget(proxyConfig.destinationIps, proxyConfig.destinationPorts[0]);
|
|
85
|
-
// Build target URL
|
|
86
|
-
const protocol = req.socket.encrypted ? 'wss' : 'ws';
|
|
87
|
-
const targetUrl = `${protocol}://${destination.host}:${destination.port}${req.url}`;
|
|
88
|
-
this.logger.debug(`WebSocket connection from ${req.socket.remoteAddress} to ${targetUrl}`);
|
|
89
|
-
// Create headers for outgoing WebSocket connection
|
|
90
|
-
const headers = {};
|
|
91
|
-
// Copy relevant headers from incoming request
|
|
92
|
-
for (const [key, value] of Object.entries(req.headers)) {
|
|
93
|
-
if (value && typeof value === 'string' &&
|
|
94
|
-
key.toLowerCase() !== 'connection' &&
|
|
95
|
-
key.toLowerCase() !== 'upgrade' &&
|
|
96
|
-
key.toLowerCase() !== 'sec-websocket-key' &&
|
|
97
|
-
key.toLowerCase() !== 'sec-websocket-version') {
|
|
98
|
-
headers[key] = value;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
// Override host header if needed
|
|
102
|
-
if (proxyConfig.rewriteHostHeader) {
|
|
103
|
-
headers['host'] = `${destination.host}:${destination.port}`;
|
|
104
|
-
}
|
|
105
|
-
// Create outgoing WebSocket connection
|
|
106
|
-
const wsOutgoing = new plugins.wsDefault(targetUrl, {
|
|
107
|
-
headers: headers,
|
|
108
|
-
followRedirects: true
|
|
109
|
-
});
|
|
110
|
-
// Handle connection errors
|
|
111
|
-
wsOutgoing.on('error', (err) => {
|
|
112
|
-
this.logger.error(`WebSocket target connection error: ${err.message}`);
|
|
113
|
-
if (wsIncoming.readyState === wsIncoming.OPEN) {
|
|
114
|
-
wsIncoming.close(1011, 'Internal server error');
|
|
115
|
-
}
|
|
116
|
-
});
|
|
117
|
-
// Handle outgoing connection open
|
|
118
|
-
wsOutgoing.on('open', () => {
|
|
119
|
-
// Forward incoming messages to outgoing connection
|
|
120
|
-
wsIncoming.on('message', (data, isBinary) => {
|
|
121
|
-
if (wsOutgoing.readyState === wsOutgoing.OPEN) {
|
|
122
|
-
wsOutgoing.send(data, { binary: isBinary });
|
|
123
|
-
}
|
|
124
|
-
});
|
|
125
|
-
// Forward outgoing messages to incoming connection
|
|
126
|
-
wsOutgoing.on('message', (data, isBinary) => {
|
|
127
|
-
if (wsIncoming.readyState === wsIncoming.OPEN) {
|
|
128
|
-
wsIncoming.send(data, { binary: isBinary });
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
|
-
// Handle closing of connections
|
|
132
|
-
wsIncoming.on('close', (code, reason) => {
|
|
133
|
-
this.logger.debug(`WebSocket client connection closed: ${code} ${reason}`);
|
|
134
|
-
if (wsOutgoing.readyState === wsOutgoing.OPEN) {
|
|
135
|
-
wsOutgoing.close(code, reason);
|
|
136
|
-
}
|
|
137
|
-
});
|
|
138
|
-
wsOutgoing.on('close', (code, reason) => {
|
|
139
|
-
this.logger.debug(`WebSocket target connection closed: ${code} ${reason}`);
|
|
140
|
-
if (wsIncoming.readyState === wsIncoming.OPEN) {
|
|
141
|
-
wsIncoming.close(code, reason);
|
|
142
|
-
}
|
|
143
|
-
});
|
|
144
|
-
this.logger.debug(`WebSocket connection established: ${req.headers.host} -> ${destination.host}:${destination.port}`);
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
catch (error) {
|
|
148
|
-
this.logger.error(`Error handling WebSocket connection: ${error.message}`);
|
|
149
|
-
if (wsIncoming.readyState === wsIncoming.OPEN) {
|
|
150
|
-
wsIncoming.close(1011, 'Internal server error');
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Get information about active WebSocket connections
|
|
156
|
-
*/
|
|
157
|
-
getConnectionInfo() {
|
|
158
|
-
return {
|
|
159
|
-
activeConnections: this.wsServer ? this.wsServer.clients.size : 0
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* Shutdown the WebSocket handler
|
|
164
|
-
*/
|
|
165
|
-
shutdown() {
|
|
166
|
-
// Stop heartbeat interval
|
|
167
|
-
if (this.heartbeatInterval) {
|
|
168
|
-
clearInterval(this.heartbeatInterval);
|
|
169
|
-
this.heartbeatInterval = null;
|
|
170
|
-
}
|
|
171
|
-
// Close all WebSocket connections
|
|
172
|
-
if (this.wsServer) {
|
|
173
|
-
this.logger.info(`Closing ${this.wsServer.clients.size} WebSocket connections`);
|
|
174
|
-
for (const client of this.wsServer.clients) {
|
|
175
|
-
try {
|
|
176
|
-
client.terminate();
|
|
177
|
-
}
|
|
178
|
-
catch (error) {
|
|
179
|
-
this.logger.error('Error terminating WebSocket client', error);
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
// Close the server
|
|
183
|
-
this.wsServer.close();
|
|
184
|
-
this.wsServer = null;
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5ucC53ZWJzb2NrZXRoYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvbmV0d29ya3Byb3h5L2NsYXNzZXMubnAud2Vic29ja2V0aGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQXlFLFlBQVksRUFBNEIsTUFBTSx1QkFBdUIsQ0FBQztBQUN0SixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRW5EOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGdCQUFnQjtJQUszQixZQUNVLE9BQTZCLEVBQzdCLGNBQThCLEVBQzlCLE1BQW1CO1FBRm5CLFlBQU8sR0FBUCxPQUFPLENBQXNCO1FBQzdCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixXQUFNLEdBQU4sTUFBTSxDQUFhO1FBUHJCLHNCQUFpQixHQUEwQixJQUFJLENBQUM7UUFDaEQsYUFBUSxHQUFzQyxJQUFJLENBQUM7UUFRekQsSUFBSSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxVQUFVLENBQUMsTUFBNEI7UUFDNUMsMEJBQTBCO1FBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQztZQUM3QyxNQUFNLEVBQUUsTUFBTTtZQUNkLGNBQWMsRUFBRSxJQUFJO1NBQ3JCLENBQUMsQ0FBQztRQUVILCtCQUErQjtRQUMvQixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxVQUFtQyxFQUFFLEdBQWlDLEVBQUUsRUFBRTtZQUN4RyxJQUFJLENBQUMseUJBQXlCLENBQUMs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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from '../proxies/network-proxy/index.js';
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
// Re-export all components from the new location
|
|
2
|
-
// This file is for backward compatibility only
|
|
3
|
-
export * from '../proxies/network-proxy/index.js';
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9uZXR3b3JrcHJveHkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaURBQWlEO0FBQ2pELCtDQUErQztBQUMvQyxjQUFjLG1DQUFtQyxDQUFDIn0=
|
|
@@ -1,219 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Custom error classes for better error handling
|
|
3
|
-
*/
|
|
4
|
-
export declare class NftBaseError extends Error {
|
|
5
|
-
constructor(message: string);
|
|
6
|
-
}
|
|
7
|
-
export declare class NftValidationError extends NftBaseError {
|
|
8
|
-
constructor(message: string);
|
|
9
|
-
}
|
|
10
|
-
export declare class NftExecutionError extends NftBaseError {
|
|
11
|
-
constructor(message: string);
|
|
12
|
-
}
|
|
13
|
-
export declare class NftResourceError extends NftBaseError {
|
|
14
|
-
constructor(message: string);
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Represents a port range for forwarding
|
|
18
|
-
*/
|
|
19
|
-
export interface IPortRange {
|
|
20
|
-
from: number;
|
|
21
|
-
to: number;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Settings for NfTablesProxy.
|
|
25
|
-
*/
|
|
26
|
-
export interface INfTableProxySettings {
|
|
27
|
-
fromPort: number | IPortRange | Array<number | IPortRange>;
|
|
28
|
-
toPort: number | IPortRange | Array<number | IPortRange>;
|
|
29
|
-
toHost?: string;
|
|
30
|
-
preserveSourceIP?: boolean;
|
|
31
|
-
deleteOnExit?: boolean;
|
|
32
|
-
protocol?: 'tcp' | 'udp' | 'all';
|
|
33
|
-
enableLogging?: boolean;
|
|
34
|
-
ipv6Support?: boolean;
|
|
35
|
-
logFormat?: 'plain' | 'json';
|
|
36
|
-
allowedSourceIPs?: string[];
|
|
37
|
-
bannedSourceIPs?: string[];
|
|
38
|
-
useIPSets?: boolean;
|
|
39
|
-
forceCleanSlate?: boolean;
|
|
40
|
-
tableName?: string;
|
|
41
|
-
maxRetries?: number;
|
|
42
|
-
retryDelayMs?: number;
|
|
43
|
-
useAdvancedNAT?: boolean;
|
|
44
|
-
qos?: {
|
|
45
|
-
enabled: boolean;
|
|
46
|
-
maxRate?: string;
|
|
47
|
-
priority?: number;
|
|
48
|
-
markConnections?: boolean;
|
|
49
|
-
};
|
|
50
|
-
netProxyIntegration?: {
|
|
51
|
-
enabled: boolean;
|
|
52
|
-
redirectLocalhost?: boolean;
|
|
53
|
-
sslTerminationPort?: number;
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Interface for status reporting
|
|
58
|
-
*/
|
|
59
|
-
export interface INfTablesStatus {
|
|
60
|
-
active: boolean;
|
|
61
|
-
ruleCount: {
|
|
62
|
-
total: number;
|
|
63
|
-
added: number;
|
|
64
|
-
verified: number;
|
|
65
|
-
};
|
|
66
|
-
tablesConfigured: {
|
|
67
|
-
family: string;
|
|
68
|
-
tableName: string;
|
|
69
|
-
}[];
|
|
70
|
-
metrics: {
|
|
71
|
-
forwardedConnections?: number;
|
|
72
|
-
activeConnections?: number;
|
|
73
|
-
bytesForwarded?: {
|
|
74
|
-
sent: number;
|
|
75
|
-
received: number;
|
|
76
|
-
};
|
|
77
|
-
};
|
|
78
|
-
qosEnabled?: boolean;
|
|
79
|
-
ipSetsConfigured?: {
|
|
80
|
-
name: string;
|
|
81
|
-
elementCount: number;
|
|
82
|
-
type: string;
|
|
83
|
-
}[];
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* NfTablesProxy sets up nftables NAT rules to forward TCP traffic.
|
|
87
|
-
* Enhanced with multi-port support, IPv6, connection tracking, metrics,
|
|
88
|
-
* and more advanced features.
|
|
89
|
-
*/
|
|
90
|
-
export declare class NfTablesProxy {
|
|
91
|
-
settings: INfTableProxySettings;
|
|
92
|
-
private rules;
|
|
93
|
-
private ipSets;
|
|
94
|
-
private ruleTag;
|
|
95
|
-
private tableName;
|
|
96
|
-
private tempFilePath;
|
|
97
|
-
private static NFT_CMD;
|
|
98
|
-
constructor(settings: INfTableProxySettings);
|
|
99
|
-
/**
|
|
100
|
-
* Validates settings to prevent command injection and ensure valid values
|
|
101
|
-
*/
|
|
102
|
-
private validateSettings;
|
|
103
|
-
/**
|
|
104
|
-
* Normalizes port specifications into an array of port ranges
|
|
105
|
-
*/
|
|
106
|
-
private normalizePortSpec;
|
|
107
|
-
/**
|
|
108
|
-
* Execute a command with retry capability
|
|
109
|
-
*/
|
|
110
|
-
private executeWithRetry;
|
|
111
|
-
/**
|
|
112
|
-
* Execute system command synchronously with multiple attempts
|
|
113
|
-
*/
|
|
114
|
-
private executeWithRetrySync;
|
|
115
|
-
/**
|
|
116
|
-
* Checks if nftables is available and the required modules are loaded
|
|
117
|
-
*/
|
|
118
|
-
private checkNftablesAvailability;
|
|
119
|
-
/**
|
|
120
|
-
* Creates the necessary tables and chains
|
|
121
|
-
*/
|
|
122
|
-
private setupTablesAndChains;
|
|
123
|
-
/**
|
|
124
|
-
* Creates IP sets for efficient filtering of large IP lists
|
|
125
|
-
*/
|
|
126
|
-
private createIPSet;
|
|
127
|
-
/**
|
|
128
|
-
* Adds source IP filtering rules, potentially using IP sets for efficiency
|
|
129
|
-
*/
|
|
130
|
-
private addSourceIPFilters;
|
|
131
|
-
/**
|
|
132
|
-
* Gets a comma-separated list of all ports from a port specification
|
|
133
|
-
*/
|
|
134
|
-
private getAllPorts;
|
|
135
|
-
/**
|
|
136
|
-
* Configures advanced NAT with connection tracking
|
|
137
|
-
*/
|
|
138
|
-
private setupAdvancedNAT;
|
|
139
|
-
/**
|
|
140
|
-
* Adds port forwarding rules
|
|
141
|
-
*/
|
|
142
|
-
private addPortForwardingRules;
|
|
143
|
-
/**
|
|
144
|
-
* Adds port forwarding rules for the case where one toPortRange maps to multiple fromPortRanges
|
|
145
|
-
*/
|
|
146
|
-
private addPortMappings;
|
|
147
|
-
/**
|
|
148
|
-
* Adds port forwarding rules for pairs of fromPortRanges and toPortRanges
|
|
149
|
-
*/
|
|
150
|
-
private addPortPairMappings;
|
|
151
|
-
/**
|
|
152
|
-
* Setup quality of service rules
|
|
153
|
-
*/
|
|
154
|
-
private addTrafficShaping;
|
|
155
|
-
/**
|
|
156
|
-
* Setup NetworkProxy integration rules
|
|
157
|
-
*/
|
|
158
|
-
private setupNetworkProxyIntegration;
|
|
159
|
-
/**
|
|
160
|
-
* Verify that a rule was successfully applied
|
|
161
|
-
*/
|
|
162
|
-
private verifyRuleApplication;
|
|
163
|
-
/**
|
|
164
|
-
* Rolls back rules in case of error during setup
|
|
165
|
-
*/
|
|
166
|
-
private rollbackRules;
|
|
167
|
-
/**
|
|
168
|
-
* Checks if nftables table exists
|
|
169
|
-
*/
|
|
170
|
-
private tableExists;
|
|
171
|
-
/**
|
|
172
|
-
* Get system metrics like connection counts
|
|
173
|
-
*/
|
|
174
|
-
private getSystemMetrics;
|
|
175
|
-
/**
|
|
176
|
-
* Get status of IP sets
|
|
177
|
-
*/
|
|
178
|
-
private getIPSetStatus;
|
|
179
|
-
/**
|
|
180
|
-
* Get detailed status about the current state of the proxy
|
|
181
|
-
*/
|
|
182
|
-
getStatus(): Promise<INfTablesStatus>;
|
|
183
|
-
/**
|
|
184
|
-
* Performs a dry run to see what commands would be executed without actually applying them
|
|
185
|
-
*/
|
|
186
|
-
dryRun(): Promise<string[]>;
|
|
187
|
-
/**
|
|
188
|
-
* Starts the proxy by setting up all nftables rules
|
|
189
|
-
*/
|
|
190
|
-
start(): Promise<void>;
|
|
191
|
-
/**
|
|
192
|
-
* Stops the proxy by removing all added rules
|
|
193
|
-
*/
|
|
194
|
-
stop(): Promise<void>;
|
|
195
|
-
/**
|
|
196
|
-
* Synchronous version of stop, for use in exit handlers
|
|
197
|
-
*/
|
|
198
|
-
stopSync(): void;
|
|
199
|
-
/**
|
|
200
|
-
* Cleans up empty tables
|
|
201
|
-
*/
|
|
202
|
-
private cleanupEmptyTables;
|
|
203
|
-
/**
|
|
204
|
-
* Synchronous version of cleanupEmptyTables
|
|
205
|
-
*/
|
|
206
|
-
private cleanupEmptyTablesSync;
|
|
207
|
-
/**
|
|
208
|
-
* Removes all nftables rules created by this module
|
|
209
|
-
*/
|
|
210
|
-
static cleanSlate(): Promise<void>;
|
|
211
|
-
/**
|
|
212
|
-
* Synchronous version of cleanSlate
|
|
213
|
-
*/
|
|
214
|
-
static cleanSlateSync(): void;
|
|
215
|
-
/**
|
|
216
|
-
* Improved logging with structured output
|
|
217
|
-
*/
|
|
218
|
-
private log;
|
|
219
|
-
}
|