@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,387 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../plugins.js';
|
|
2
|
-
import { createLogger } from './classes.np.types.js';
|
|
3
|
-
import { CertificateManager } from './classes.np.certificatemanager.js';
|
|
4
|
-
import { ConnectionPool } from './classes.np.connectionpool.js';
|
|
5
|
-
import { RequestHandler } from './classes.np.requesthandler.js';
|
|
6
|
-
import { WebSocketHandler } from './classes.np.websockethandler.js';
|
|
7
|
-
import { ProxyRouter } from '../classes.router.js';
|
|
8
|
-
import { Port80Handler } from '../port80handler/classes.port80handler.js';
|
|
9
|
-
/**
|
|
10
|
-
* NetworkProxy provides a reverse proxy with TLS termination, WebSocket support,
|
|
11
|
-
* automatic certificate management, and high-performance connection pooling.
|
|
12
|
-
*/
|
|
13
|
-
export class NetworkProxy {
|
|
14
|
-
// Provide a minimal JSON representation to avoid circular references during deep equality checks
|
|
15
|
-
toJSON() {
|
|
16
|
-
return {};
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Creates a new NetworkProxy instance
|
|
20
|
-
*/
|
|
21
|
-
constructor(optionsArg) {
|
|
22
|
-
this.proxyConfigs = [];
|
|
23
|
-
this.router = new ProxyRouter();
|
|
24
|
-
// State tracking
|
|
25
|
-
this.socketMap = new plugins.lik.ObjectMap();
|
|
26
|
-
this.activeContexts = new Set();
|
|
27
|
-
this.connectedClients = 0;
|
|
28
|
-
this.startTime = 0;
|
|
29
|
-
this.requestsServed = 0;
|
|
30
|
-
this.failedRequests = 0;
|
|
31
|
-
// Tracking for PortProxy integration
|
|
32
|
-
this.portProxyConnections = 0;
|
|
33
|
-
this.tlsTerminatedConnections = 0;
|
|
34
|
-
// Set default options
|
|
35
|
-
this.options = {
|
|
36
|
-
port: optionsArg.port,
|
|
37
|
-
maxConnections: optionsArg.maxConnections || 10000,
|
|
38
|
-
keepAliveTimeout: optionsArg.keepAliveTimeout || 120000, // 2 minutes
|
|
39
|
-
headersTimeout: optionsArg.headersTimeout || 60000, // 1 minute
|
|
40
|
-
logLevel: optionsArg.logLevel || 'info',
|
|
41
|
-
cors: optionsArg.cors || {
|
|
42
|
-
allowOrigin: '*',
|
|
43
|
-
allowMethods: 'GET, POST, PUT, DELETE, OPTIONS',
|
|
44
|
-
allowHeaders: 'Content-Type, Authorization',
|
|
45
|
-
maxAge: 86400
|
|
46
|
-
},
|
|
47
|
-
// Defaults for PortProxy integration
|
|
48
|
-
connectionPoolSize: optionsArg.connectionPoolSize || 50,
|
|
49
|
-
portProxyIntegration: optionsArg.portProxyIntegration || false,
|
|
50
|
-
useExternalPort80Handler: optionsArg.useExternalPort80Handler || false,
|
|
51
|
-
// Backend protocol (http1 or http2)
|
|
52
|
-
backendProtocol: optionsArg.backendProtocol || 'http1',
|
|
53
|
-
// Default ACME options
|
|
54
|
-
acme: {
|
|
55
|
-
enabled: optionsArg.acme?.enabled || false,
|
|
56
|
-
port: optionsArg.acme?.port || 80,
|
|
57
|
-
accountEmail: optionsArg.acme?.accountEmail || 'admin@example.com',
|
|
58
|
-
useProduction: optionsArg.acme?.useProduction || false, // Default to staging for safety
|
|
59
|
-
renewThresholdDays: optionsArg.acme?.renewThresholdDays || 30,
|
|
60
|
-
autoRenew: optionsArg.acme?.autoRenew !== false, // Default to true
|
|
61
|
-
certificateStore: optionsArg.acme?.certificateStore || './certs',
|
|
62
|
-
skipConfiguredCerts: optionsArg.acme?.skipConfiguredCerts || false
|
|
63
|
-
}
|
|
64
|
-
};
|
|
65
|
-
// Initialize logger
|
|
66
|
-
this.logger = createLogger(this.options.logLevel);
|
|
67
|
-
// Initialize components
|
|
68
|
-
this.certificateManager = new CertificateManager(this.options);
|
|
69
|
-
this.connectionPool = new ConnectionPool(this.options);
|
|
70
|
-
this.requestHandler = new RequestHandler(this.options, this.connectionPool, this.router);
|
|
71
|
-
this.webSocketHandler = new WebSocketHandler(this.options, this.connectionPool, this.router);
|
|
72
|
-
// Connect request handler to this metrics tracker
|
|
73
|
-
this.requestHandler.setMetricsTracker(this);
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Implements IMetricsTracker interface to increment request counters
|
|
77
|
-
*/
|
|
78
|
-
incrementRequestsServed() {
|
|
79
|
-
this.requestsServed++;
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Implements IMetricsTracker interface to increment failed request counters
|
|
83
|
-
*/
|
|
84
|
-
incrementFailedRequests() {
|
|
85
|
-
this.failedRequests++;
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Returns the port number this NetworkProxy is listening on
|
|
89
|
-
* Useful for PortProxy to determine where to forward connections
|
|
90
|
-
*/
|
|
91
|
-
getListeningPort() {
|
|
92
|
-
return this.options.port;
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Updates the server capacity settings
|
|
96
|
-
* @param maxConnections Maximum number of simultaneous connections
|
|
97
|
-
* @param keepAliveTimeout Keep-alive timeout in milliseconds
|
|
98
|
-
* @param connectionPoolSize Size of the connection pool per backend
|
|
99
|
-
*/
|
|
100
|
-
updateCapacity(maxConnections, keepAliveTimeout, connectionPoolSize) {
|
|
101
|
-
if (maxConnections !== undefined) {
|
|
102
|
-
this.options.maxConnections = maxConnections;
|
|
103
|
-
this.logger.info(`Updated max connections to ${maxConnections}`);
|
|
104
|
-
}
|
|
105
|
-
if (keepAliveTimeout !== undefined) {
|
|
106
|
-
this.options.keepAliveTimeout = keepAliveTimeout;
|
|
107
|
-
if (this.httpsServer) {
|
|
108
|
-
this.httpsServer.keepAliveTimeout = keepAliveTimeout;
|
|
109
|
-
this.logger.info(`Updated keep-alive timeout to ${keepAliveTimeout}ms`);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
if (connectionPoolSize !== undefined) {
|
|
113
|
-
this.options.connectionPoolSize = connectionPoolSize;
|
|
114
|
-
this.logger.info(`Updated connection pool size to ${connectionPoolSize}`);
|
|
115
|
-
// Clean up excess connections in the pool
|
|
116
|
-
this.connectionPool.cleanupConnectionPool();
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Returns current server metrics
|
|
121
|
-
* Useful for PortProxy to determine which NetworkProxy to use for load balancing
|
|
122
|
-
*/
|
|
123
|
-
getMetrics() {
|
|
124
|
-
return {
|
|
125
|
-
activeConnections: this.connectedClients,
|
|
126
|
-
totalRequests: this.requestsServed,
|
|
127
|
-
failedRequests: this.failedRequests,
|
|
128
|
-
portProxyConnections: this.portProxyConnections,
|
|
129
|
-
tlsTerminatedConnections: this.tlsTerminatedConnections,
|
|
130
|
-
connectionPoolSize: this.connectionPool.getPoolStatus(),
|
|
131
|
-
uptime: Math.floor((Date.now() - this.startTime) / 1000),
|
|
132
|
-
memoryUsage: process.memoryUsage(),
|
|
133
|
-
activeWebSockets: this.webSocketHandler.getConnectionInfo().activeConnections
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
|
-
/**
|
|
137
|
-
* Sets an external Port80Handler for certificate management
|
|
138
|
-
* This allows the NetworkProxy to use a centrally managed Port80Handler
|
|
139
|
-
* instead of creating its own
|
|
140
|
-
*
|
|
141
|
-
* @param handler The Port80Handler instance to use
|
|
142
|
-
*/
|
|
143
|
-
setExternalPort80Handler(handler) {
|
|
144
|
-
// Connect it to the certificate manager
|
|
145
|
-
this.certificateManager.setExternalPort80Handler(handler);
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* Starts the proxy server
|
|
149
|
-
*/
|
|
150
|
-
async start() {
|
|
151
|
-
this.startTime = Date.now();
|
|
152
|
-
// Initialize Port80Handler if enabled and not using external handler
|
|
153
|
-
if (this.options.acme?.enabled && !this.options.useExternalPort80Handler) {
|
|
154
|
-
await this.certificateManager.initializePort80Handler();
|
|
155
|
-
}
|
|
156
|
-
// Create HTTP/2 server with HTTP/1 fallback
|
|
157
|
-
this.httpsServer = plugins.http2.createSecureServer({
|
|
158
|
-
key: this.certificateManager.getDefaultCertificates().key,
|
|
159
|
-
cert: this.certificateManager.getDefaultCertificates().cert,
|
|
160
|
-
allowHTTP1: true,
|
|
161
|
-
ALPNProtocols: ['h2', 'http/1.1']
|
|
162
|
-
});
|
|
163
|
-
// Track raw TCP connections for metrics and limits
|
|
164
|
-
this.setupConnectionTracking();
|
|
165
|
-
// Handle incoming HTTP/2 streams
|
|
166
|
-
this.httpsServer.on('stream', (stream, headers) => {
|
|
167
|
-
this.requestHandler.handleHttp2(stream, headers);
|
|
168
|
-
});
|
|
169
|
-
// Handle HTTP/1.x fallback requests
|
|
170
|
-
this.httpsServer.on('request', (req, res) => {
|
|
171
|
-
this.requestHandler.handleRequest(req, res);
|
|
172
|
-
});
|
|
173
|
-
// Share server with certificate manager for dynamic contexts
|
|
174
|
-
this.certificateManager.setHttpsServer(this.httpsServer);
|
|
175
|
-
// Setup WebSocket support on HTTP/1 fallback
|
|
176
|
-
this.webSocketHandler.initialize(this.httpsServer);
|
|
177
|
-
// Start metrics logging
|
|
178
|
-
this.setupMetricsCollection();
|
|
179
|
-
// Start periodic connection pool cleanup
|
|
180
|
-
this.connectionPoolCleanupInterval = this.connectionPool.setupPeriodicCleanup();
|
|
181
|
-
// Start the server
|
|
182
|
-
return new Promise((resolve) => {
|
|
183
|
-
this.httpsServer.listen(this.options.port, () => {
|
|
184
|
-
this.logger.info(`NetworkProxy started on port ${this.options.port}`);
|
|
185
|
-
resolve();
|
|
186
|
-
});
|
|
187
|
-
});
|
|
188
|
-
}
|
|
189
|
-
/**
|
|
190
|
-
* Sets up tracking of TCP connections
|
|
191
|
-
*/
|
|
192
|
-
setupConnectionTracking() {
|
|
193
|
-
this.httpsServer.on('connection', (connection) => {
|
|
194
|
-
// Check if max connections reached
|
|
195
|
-
if (this.socketMap.getArray().length >= this.options.maxConnections) {
|
|
196
|
-
this.logger.warn(`Max connections (${this.options.maxConnections}) reached, rejecting new connection`);
|
|
197
|
-
connection.destroy();
|
|
198
|
-
return;
|
|
199
|
-
}
|
|
200
|
-
// Add connection to tracking
|
|
201
|
-
this.socketMap.add(connection);
|
|
202
|
-
this.connectedClients = this.socketMap.getArray().length;
|
|
203
|
-
// Check for connection from PortProxy by inspecting the source port
|
|
204
|
-
const localPort = connection.localPort || 0;
|
|
205
|
-
const remotePort = connection.remotePort || 0;
|
|
206
|
-
// If this connection is from a PortProxy (usually indicated by it coming from localhost)
|
|
207
|
-
if (this.options.portProxyIntegration && connection.remoteAddress?.includes('127.0.0.1')) {
|
|
208
|
-
this.portProxyConnections++;
|
|
209
|
-
this.logger.debug(`New connection from PortProxy (local: ${localPort}, remote: ${remotePort})`);
|
|
210
|
-
}
|
|
211
|
-
else {
|
|
212
|
-
this.logger.debug(`New direct connection (local: ${localPort}, remote: ${remotePort})`);
|
|
213
|
-
}
|
|
214
|
-
// Setup connection cleanup handlers
|
|
215
|
-
const cleanupConnection = () => {
|
|
216
|
-
if (this.socketMap.checkForObject(connection)) {
|
|
217
|
-
this.socketMap.remove(connection);
|
|
218
|
-
this.connectedClients = this.socketMap.getArray().length;
|
|
219
|
-
// If this was a PortProxy connection, decrement the counter
|
|
220
|
-
if (this.options.portProxyIntegration && connection.remoteAddress?.includes('127.0.0.1')) {
|
|
221
|
-
this.portProxyConnections--;
|
|
222
|
-
}
|
|
223
|
-
this.logger.debug(`Connection closed. ${this.connectedClients} connections remaining`);
|
|
224
|
-
}
|
|
225
|
-
};
|
|
226
|
-
connection.on('close', cleanupConnection);
|
|
227
|
-
connection.on('error', (err) => {
|
|
228
|
-
this.logger.debug('Connection error', err);
|
|
229
|
-
cleanupConnection();
|
|
230
|
-
});
|
|
231
|
-
connection.on('end', cleanupConnection);
|
|
232
|
-
});
|
|
233
|
-
// Track TLS handshake completions
|
|
234
|
-
this.httpsServer.on('secureConnection', (tlsSocket) => {
|
|
235
|
-
this.tlsTerminatedConnections++;
|
|
236
|
-
this.logger.debug('TLS handshake completed, connection secured');
|
|
237
|
-
});
|
|
238
|
-
}
|
|
239
|
-
/**
|
|
240
|
-
* Sets up metrics collection
|
|
241
|
-
*/
|
|
242
|
-
setupMetricsCollection() {
|
|
243
|
-
this.metricsInterval = setInterval(() => {
|
|
244
|
-
const uptime = Math.floor((Date.now() - this.startTime) / 1000);
|
|
245
|
-
const metrics = {
|
|
246
|
-
uptime,
|
|
247
|
-
activeConnections: this.connectedClients,
|
|
248
|
-
totalRequests: this.requestsServed,
|
|
249
|
-
failedRequests: this.failedRequests,
|
|
250
|
-
portProxyConnections: this.portProxyConnections,
|
|
251
|
-
tlsTerminatedConnections: this.tlsTerminatedConnections,
|
|
252
|
-
activeWebSockets: this.webSocketHandler.getConnectionInfo().activeConnections,
|
|
253
|
-
memoryUsage: process.memoryUsage(),
|
|
254
|
-
activeContexts: Array.from(this.activeContexts),
|
|
255
|
-
connectionPool: this.connectionPool.getPoolStatus()
|
|
256
|
-
};
|
|
257
|
-
this.logger.debug('Proxy metrics', metrics);
|
|
258
|
-
}, 60000); // Log metrics every minute
|
|
259
|
-
// Don't keep process alive just for metrics
|
|
260
|
-
if (this.metricsInterval.unref) {
|
|
261
|
-
this.metricsInterval.unref();
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
/**
|
|
265
|
-
* Updates proxy configurations
|
|
266
|
-
*/
|
|
267
|
-
async updateProxyConfigs(proxyConfigsArg) {
|
|
268
|
-
this.logger.info(`Updating proxy configurations (${proxyConfigsArg.length} configs)`);
|
|
269
|
-
// Update internal configs
|
|
270
|
-
this.proxyConfigs = proxyConfigsArg;
|
|
271
|
-
this.router.setNewProxyConfigs(proxyConfigsArg);
|
|
272
|
-
// Collect all hostnames for cleanup later
|
|
273
|
-
const currentHostNames = new Set();
|
|
274
|
-
// Add/update SSL contexts for each host
|
|
275
|
-
for (const config of proxyConfigsArg) {
|
|
276
|
-
currentHostNames.add(config.hostName);
|
|
277
|
-
try {
|
|
278
|
-
// Update certificate in cache
|
|
279
|
-
this.certificateManager.updateCertificateCache(config.hostName, config.publicKey, config.privateKey);
|
|
280
|
-
this.activeContexts.add(config.hostName);
|
|
281
|
-
}
|
|
282
|
-
catch (error) {
|
|
283
|
-
this.logger.error(`Failed to add SSL context for ${config.hostName}`, error);
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
// Clean up removed contexts
|
|
287
|
-
for (const hostname of this.activeContexts) {
|
|
288
|
-
if (!currentHostNames.has(hostname)) {
|
|
289
|
-
this.logger.info(`Hostname ${hostname} removed from configuration`);
|
|
290
|
-
this.activeContexts.delete(hostname);
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
// Register domains with Port80Handler if available
|
|
294
|
-
const domainsForACME = Array.from(currentHostNames)
|
|
295
|
-
.filter(domain => !domain.includes('*')); // Skip wildcard domains
|
|
296
|
-
this.certificateManager.registerDomainsWithPort80Handler(domainsForACME);
|
|
297
|
-
}
|
|
298
|
-
/**
|
|
299
|
-
* Converts PortProxy domain configurations to NetworkProxy configs
|
|
300
|
-
* @param domainConfigs PortProxy domain configs
|
|
301
|
-
* @param sslKeyPair Default SSL key pair to use if not specified
|
|
302
|
-
* @returns Array of NetworkProxy configs
|
|
303
|
-
*/
|
|
304
|
-
convertPortProxyConfigs(domainConfigs, sslKeyPair) {
|
|
305
|
-
const proxyConfigs = [];
|
|
306
|
-
// Use default certificates if not provided
|
|
307
|
-
const defaultCerts = this.certificateManager.getDefaultCertificates();
|
|
308
|
-
const sslKey = sslKeyPair?.key || defaultCerts.key;
|
|
309
|
-
const sslCert = sslKeyPair?.cert || defaultCerts.cert;
|
|
310
|
-
for (const domainConfig of domainConfigs) {
|
|
311
|
-
// Each domain in the domains array gets its own config
|
|
312
|
-
for (const domain of domainConfig.domains) {
|
|
313
|
-
// Skip non-hostname patterns (like IP addresses)
|
|
314
|
-
if (domain.match(/^\d+\.\d+\.\d+\.\d+$/) || domain === '*' || domain === 'localhost') {
|
|
315
|
-
continue;
|
|
316
|
-
}
|
|
317
|
-
proxyConfigs.push({
|
|
318
|
-
hostName: domain,
|
|
319
|
-
destinationIps: domainConfig.targetIPs || ['localhost'],
|
|
320
|
-
destinationPorts: [this.options.port], // Use the NetworkProxy port
|
|
321
|
-
privateKey: sslKey,
|
|
322
|
-
publicKey: sslCert
|
|
323
|
-
});
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
this.logger.info(`Converted ${domainConfigs.length} PortProxy configs to ${proxyConfigs.length} NetworkProxy configs`);
|
|
327
|
-
return proxyConfigs;
|
|
328
|
-
}
|
|
329
|
-
/**
|
|
330
|
-
* Adds default headers to be included in all responses
|
|
331
|
-
*/
|
|
332
|
-
async addDefaultHeaders(headersArg) {
|
|
333
|
-
this.logger.info('Adding default headers', headersArg);
|
|
334
|
-
this.requestHandler.setDefaultHeaders(headersArg);
|
|
335
|
-
}
|
|
336
|
-
/**
|
|
337
|
-
* Stops the proxy server
|
|
338
|
-
*/
|
|
339
|
-
async stop() {
|
|
340
|
-
this.logger.info('Stopping NetworkProxy server');
|
|
341
|
-
// Clear intervals
|
|
342
|
-
if (this.metricsInterval) {
|
|
343
|
-
clearInterval(this.metricsInterval);
|
|
344
|
-
}
|
|
345
|
-
if (this.connectionPoolCleanupInterval) {
|
|
346
|
-
clearInterval(this.connectionPoolCleanupInterval);
|
|
347
|
-
}
|
|
348
|
-
// Stop WebSocket handler
|
|
349
|
-
this.webSocketHandler.shutdown();
|
|
350
|
-
// Close all tracked sockets
|
|
351
|
-
for (const socket of this.socketMap.getArray()) {
|
|
352
|
-
try {
|
|
353
|
-
socket.destroy();
|
|
354
|
-
}
|
|
355
|
-
catch (error) {
|
|
356
|
-
this.logger.error('Error destroying socket', error);
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
// Close all connection pool connections
|
|
360
|
-
this.connectionPool.closeAllConnections();
|
|
361
|
-
// Stop Port80Handler if internally managed
|
|
362
|
-
await this.certificateManager.stopPort80Handler();
|
|
363
|
-
// Close the HTTPS server
|
|
364
|
-
return new Promise((resolve) => {
|
|
365
|
-
this.httpsServer.close(() => {
|
|
366
|
-
this.logger.info('NetworkProxy server stopped successfully');
|
|
367
|
-
resolve();
|
|
368
|
-
});
|
|
369
|
-
});
|
|
370
|
-
}
|
|
371
|
-
/**
|
|
372
|
-
* Requests a new certificate for a domain
|
|
373
|
-
* This can be used to manually trigger certificate issuance
|
|
374
|
-
* @param domain The domain to request a certificate for
|
|
375
|
-
* @returns A promise that resolves when the request is submitted (not when the certificate is issued)
|
|
376
|
-
*/
|
|
377
|
-
async requestCertificate(domain) {
|
|
378
|
-
return this.certificateManager.requestCertificate(domain);
|
|
379
|
-
}
|
|
380
|
-
/**
|
|
381
|
-
* Gets all proxy configurations currently in use
|
|
382
|
-
*/
|
|
383
|
-
getProxyConfigs() {
|
|
384
|
-
return [...this.proxyConfigs];
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5ucC5uZXR3b3JrcHJveHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9uZXR3b3JrcHJveHkvY2xhc3Nlcy5ucC5uZXR3b3JrcHJveHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUEyQyxZQUFZLEVBQTRCLE1BQU0sdUJBQXVCLENBQUM7QUFDeEgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQXdCLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUUxRTs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQUN2QixpR0FBaUc7SUFDMUYsTUFBTTtRQUNYLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQWtDRDs7T0FFRztJQUNILFlBQVksVUFBZ0M7UUFsQ3JDLGlCQUFZLEdBQTBCLEVBQUUsQ0FBQztRQVV4QyxXQUFNLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUVuQyxpQkFBaUI7UUFDVixjQUFTLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBc0IsQ0FBQztRQUM1RCxtQkFBYyxHQUFnQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3hDLHFCQUFnQixHQUFXLENBQUMsQ0FBQztRQUM3QixjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBQ3RCLG1CQUFjLEdBQVcsQ0FBQyxDQUFDO1FBQzNCLG1CQUFjLEdBQVcsQ0FBQyxDQUFDO1FBRWxDLHFDQUFx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
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../plugins.js';
|
|
2
|
-
import { type INetworkProxyOptions } from './classes.np.types.js';
|
|
3
|
-
import { ConnectionPool } from './classes.np.connectionpool.js';
|
|
4
|
-
import { ProxyRouter } from '../classes.router.js';
|
|
5
|
-
/**
|
|
6
|
-
* Interface for tracking metrics
|
|
7
|
-
*/
|
|
8
|
-
export interface IMetricsTracker {
|
|
9
|
-
incrementRequestsServed(): void;
|
|
10
|
-
incrementFailedRequests(): void;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Handles HTTP request processing and proxying
|
|
14
|
-
*/
|
|
15
|
-
export declare class RequestHandler {
|
|
16
|
-
private options;
|
|
17
|
-
private connectionPool;
|
|
18
|
-
private router;
|
|
19
|
-
private defaultHeaders;
|
|
20
|
-
private logger;
|
|
21
|
-
private metricsTracker;
|
|
22
|
-
private h2Sessions;
|
|
23
|
-
constructor(options: INetworkProxyOptions, connectionPool: ConnectionPool, router: ProxyRouter);
|
|
24
|
-
/**
|
|
25
|
-
* Set the metrics tracker instance
|
|
26
|
-
*/
|
|
27
|
-
setMetricsTracker(tracker: IMetricsTracker): void;
|
|
28
|
-
/**
|
|
29
|
-
* Set default headers to be included in all responses
|
|
30
|
-
*/
|
|
31
|
-
setDefaultHeaders(headers: {
|
|
32
|
-
[key: string]: string;
|
|
33
|
-
}): void;
|
|
34
|
-
/**
|
|
35
|
-
* Get all default headers
|
|
36
|
-
*/
|
|
37
|
-
getDefaultHeaders(): {
|
|
38
|
-
[key: string]: string;
|
|
39
|
-
};
|
|
40
|
-
/**
|
|
41
|
-
* Apply CORS headers to response if configured
|
|
42
|
-
*/
|
|
43
|
-
private applyCorsHeaders;
|
|
44
|
-
/**
|
|
45
|
-
* Apply default headers to response
|
|
46
|
-
*/
|
|
47
|
-
private applyDefaultHeaders;
|
|
48
|
-
/**
|
|
49
|
-
* Handle an HTTP request
|
|
50
|
-
*/
|
|
51
|
-
handleRequest(req: plugins.http.IncomingMessage, res: plugins.http.ServerResponse): Promise<void>;
|
|
52
|
-
/**
|
|
53
|
-
* Handle HTTP/2 stream requests by proxying to HTTP/1 backends
|
|
54
|
-
*/
|
|
55
|
-
handleHttp2(stream: any, headers: any): Promise<void>;
|
|
56
|
-
}
|