@push.rocks/smartproxy 22.6.0 → 23.1.0

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.
Files changed (196) hide show
  1. package/changelog.md +18 -0
  2. package/dist_rust/{rustproxy → rustproxy_linux_amd64} +0 -0
  3. package/dist_rust/rustproxy_linux_arm64 +0 -0
  4. package/dist_ts/00_commitinfo_data.js +1 -1
  5. package/dist_ts/index.d.ts +0 -1
  6. package/dist_ts/index.js +1 -3
  7. package/dist_ts/plugins.d.ts +2 -1
  8. package/dist_ts/plugins.js +3 -2
  9. package/dist_ts/proxies/index.d.ts +0 -1
  10. package/dist_ts/proxies/index.js +1 -3
  11. package/dist_ts/proxies/smart-proxy/models/route-types.js +1 -1
  12. package/dist_ts/proxies/smart-proxy/rust-proxy-bridge.d.ts +9 -21
  13. package/dist_ts/proxies/smart-proxy/rust-proxy-bridge.js +83 -212
  14. package/dist_ts/proxies/smart-proxy/smart-proxy.js +2 -3
  15. package/npmextra.json +3 -0
  16. package/package.json +13 -11
  17. package/readme.md +35 -31
  18. package/ts/00_commitinfo_data.ts +1 -1
  19. package/ts/index.ts +0 -3
  20. package/ts/plugins.ts +2 -0
  21. package/ts/proxies/index.ts +0 -3
  22. package/ts/proxies/smart-proxy/models/route-types.ts +0 -2
  23. package/ts/proxies/smart-proxy/rust-proxy-bridge.ts +102 -233
  24. package/ts/proxies/smart-proxy/smart-proxy.ts +1 -2
  25. package/dist_ts/common/eventUtils.d.ts +0 -14
  26. package/dist_ts/common/eventUtils.js +0 -20
  27. package/dist_ts/common/types.d.ts +0 -82
  28. package/dist_ts/common/types.js +0 -15
  29. package/dist_ts/core/utils/event-system.d.ts +0 -200
  30. package/dist_ts/core/utils/event-system.js +0 -224
  31. package/dist_ts/core/utils/event-utils.d.ts +0 -15
  32. package/dist_ts/core/utils/event-utils.js +0 -11
  33. package/dist_ts/core/utils/route-manager.d.ts +0 -88
  34. package/dist_ts/core/utils/route-manager.js +0 -342
  35. package/dist_ts/core/utils/route-utils.d.ts +0 -28
  36. package/dist_ts/core/utils/route-utils.js +0 -67
  37. package/dist_ts/detection/detectors/http-detector-v2.d.ts +0 -33
  38. package/dist_ts/detection/detectors/http-detector-v2.js +0 -87
  39. package/dist_ts/detection/detectors/tls-detector-v2.d.ts +0 -33
  40. package/dist_ts/detection/detectors/tls-detector-v2.js +0 -80
  41. package/dist_ts/detection/protocol-detector-v2.d.ts +0 -46
  42. package/dist_ts/detection/protocol-detector-v2.js +0 -116
  43. package/dist_ts/forwarding/config/forwarding-types.d.ts +0 -42
  44. package/dist_ts/forwarding/config/forwarding-types.js +0 -18
  45. package/dist_ts/forwarding/config/index.d.ts +0 -9
  46. package/dist_ts/forwarding/config/index.js +0 -10
  47. package/dist_ts/forwarding/factory/forwarding-factory.d.ts +0 -25
  48. package/dist_ts/forwarding/factory/forwarding-factory.js +0 -172
  49. package/dist_ts/forwarding/factory/index.d.ts +0 -4
  50. package/dist_ts/forwarding/factory/index.js +0 -5
  51. package/dist_ts/forwarding/handlers/base-handler.d.ts +0 -62
  52. package/dist_ts/forwarding/handlers/base-handler.js +0 -121
  53. package/dist_ts/forwarding/handlers/http-handler.d.ts +0 -30
  54. package/dist_ts/forwarding/handlers/http-handler.js +0 -143
  55. package/dist_ts/forwarding/handlers/https-passthrough-handler.d.ts +0 -29
  56. package/dist_ts/forwarding/handlers/https-passthrough-handler.js +0 -156
  57. package/dist_ts/forwarding/handlers/https-terminate-to-http-handler.d.ts +0 -36
  58. package/dist_ts/forwarding/handlers/https-terminate-to-http-handler.js +0 -276
  59. package/dist_ts/forwarding/handlers/https-terminate-to-https-handler.d.ts +0 -35
  60. package/dist_ts/forwarding/handlers/https-terminate-to-https-handler.js +0 -261
  61. package/dist_ts/forwarding/handlers/index.d.ts +0 -8
  62. package/dist_ts/forwarding/handlers/index.js +0 -9
  63. package/dist_ts/forwarding/index.d.ts +0 -13
  64. package/dist_ts/forwarding/index.js +0 -16
  65. package/dist_ts/http/index.d.ts +0 -5
  66. package/dist_ts/http/index.js +0 -8
  67. package/dist_ts/http/models/http-types.d.ts +0 -6
  68. package/dist_ts/http/models/http-types.js +0 -7
  69. package/dist_ts/http/router/index.d.ts +0 -8
  70. package/dist_ts/http/router/index.js +0 -7
  71. package/dist_ts/http/router/proxy-router.d.ts +0 -115
  72. package/dist_ts/http/router/proxy-router.js +0 -325
  73. package/dist_ts/http/router/route-router.d.ts +0 -108
  74. package/dist_ts/http/router/route-router.js +0 -393
  75. package/dist_ts/protocols/tls/constants.d.ts +0 -122
  76. package/dist_ts/protocols/tls/constants.js +0 -135
  77. package/dist_ts/protocols/tls/parser.d.ts +0 -53
  78. package/dist_ts/protocols/tls/parser.js +0 -294
  79. package/dist_ts/protocols/tls/types.d.ts +0 -65
  80. package/dist_ts/protocols/tls/types.js +0 -5
  81. package/dist_ts/proxies/http-proxy/certificate-manager.d.ts +0 -95
  82. package/dist_ts/proxies/http-proxy/certificate-manager.js +0 -214
  83. package/dist_ts/proxies/http-proxy/connection-pool.d.ts +0 -47
  84. package/dist_ts/proxies/http-proxy/connection-pool.js +0 -195
  85. package/dist_ts/proxies/http-proxy/context-creator.d.ts +0 -34
  86. package/dist_ts/proxies/http-proxy/context-creator.js +0 -108
  87. package/dist_ts/proxies/http-proxy/default-certificates.d.ts +0 -54
  88. package/dist_ts/proxies/http-proxy/default-certificates.js +0 -127
  89. package/dist_ts/proxies/http-proxy/function-cache.d.ts +0 -95
  90. package/dist_ts/proxies/http-proxy/function-cache.js +0 -215
  91. package/dist_ts/proxies/http-proxy/handlers/index.d.ts +0 -4
  92. package/dist_ts/proxies/http-proxy/handlers/index.js +0 -6
  93. package/dist_ts/proxies/http-proxy/handlers/redirect-handler.d.ts +0 -18
  94. package/dist_ts/proxies/http-proxy/handlers/redirect-handler.js +0 -78
  95. package/dist_ts/proxies/http-proxy/handlers/static-handler.d.ts +0 -19
  96. package/dist_ts/proxies/http-proxy/handlers/static-handler.js +0 -211
  97. package/dist_ts/proxies/http-proxy/http-proxy.d.ts +0 -117
  98. package/dist_ts/proxies/http-proxy/http-proxy.js +0 -521
  99. package/dist_ts/proxies/http-proxy/http-request-handler.d.ts +0 -40
  100. package/dist_ts/proxies/http-proxy/http-request-handler.js +0 -257
  101. package/dist_ts/proxies/http-proxy/http2-request-handler.d.ts +0 -24
  102. package/dist_ts/proxies/http-proxy/http2-request-handler.js +0 -201
  103. package/dist_ts/proxies/http-proxy/index.d.ts +0 -14
  104. package/dist_ts/proxies/http-proxy/index.js +0 -16
  105. package/dist_ts/proxies/http-proxy/models/http-types.d.ts +0 -117
  106. package/dist_ts/proxies/http-proxy/models/http-types.js +0 -92
  107. package/dist_ts/proxies/http-proxy/models/index.d.ts +0 -5
  108. package/dist_ts/proxies/http-proxy/models/index.js +0 -6
  109. package/dist_ts/proxies/http-proxy/models/types.d.ts +0 -75
  110. package/dist_ts/proxies/http-proxy/models/types.js +0 -35
  111. package/dist_ts/proxies/http-proxy/request-handler.d.ts +0 -97
  112. package/dist_ts/proxies/http-proxy/request-handler.js +0 -737
  113. package/dist_ts/proxies/http-proxy/security-manager.d.ts +0 -98
  114. package/dist_ts/proxies/http-proxy/security-manager.js +0 -341
  115. package/dist_ts/proxies/http-proxy/websocket-handler.d.ts +0 -50
  116. package/dist_ts/proxies/http-proxy/websocket-handler.js +0 -505
  117. package/dist_ts/proxies/nftables-proxy/index.d.ts +0 -6
  118. package/dist_ts/proxies/nftables-proxy/index.js +0 -7
  119. package/dist_ts/proxies/nftables-proxy/models/errors.d.ts +0 -15
  120. package/dist_ts/proxies/nftables-proxy/models/errors.js +0 -28
  121. package/dist_ts/proxies/nftables-proxy/models/index.d.ts +0 -5
  122. package/dist_ts/proxies/nftables-proxy/models/index.js +0 -6
  123. package/dist_ts/proxies/nftables-proxy/models/interfaces.d.ts +0 -75
  124. package/dist_ts/proxies/nftables-proxy/models/interfaces.js +0 -5
  125. package/dist_ts/proxies/nftables-proxy/nftables-proxy.d.ts +0 -124
  126. package/dist_ts/proxies/nftables-proxy/nftables-proxy.js +0 -1374
  127. package/dist_ts/proxies/nftables-proxy/utils/index.d.ts +0 -9
  128. package/dist_ts/proxies/nftables-proxy/utils/index.js +0 -12
  129. package/dist_ts/proxies/nftables-proxy/utils/nft-command-executor.d.ts +0 -66
  130. package/dist_ts/proxies/nftables-proxy/utils/nft-command-executor.js +0 -131
  131. package/dist_ts/proxies/nftables-proxy/utils/nft-port-spec-normalizer.d.ts +0 -39
  132. package/dist_ts/proxies/nftables-proxy/utils/nft-port-spec-normalizer.js +0 -112
  133. package/dist_ts/proxies/nftables-proxy/utils/nft-rule-validator.d.ts +0 -59
  134. package/dist_ts/proxies/nftables-proxy/utils/nft-rule-validator.js +0 -130
  135. package/dist_ts/proxies/smart-proxy/acme-state-manager.d.ts +0 -42
  136. package/dist_ts/proxies/smart-proxy/acme-state-manager.js +0 -101
  137. package/dist_ts/proxies/smart-proxy/cert-store.d.ts +0 -10
  138. package/dist_ts/proxies/smart-proxy/cert-store.js +0 -72
  139. package/dist_ts/proxies/smart-proxy/certificate-manager.d.ts +0 -164
  140. package/dist_ts/proxies/smart-proxy/certificate-manager.js +0 -745
  141. package/dist_ts/proxies/smart-proxy/connection-manager.d.ts +0 -128
  142. package/dist_ts/proxies/smart-proxy/connection-manager.js +0 -689
  143. package/dist_ts/proxies/smart-proxy/http-proxy-bridge.d.ts +0 -43
  144. package/dist_ts/proxies/smart-proxy/http-proxy-bridge.js +0 -180
  145. package/dist_ts/proxies/smart-proxy/metrics-collector.d.ts +0 -98
  146. package/dist_ts/proxies/smart-proxy/metrics-collector.js +0 -355
  147. package/dist_ts/proxies/smart-proxy/nftables-manager.d.ts +0 -82
  148. package/dist_ts/proxies/smart-proxy/nftables-manager.js +0 -237
  149. package/dist_ts/proxies/smart-proxy/port-manager.d.ts +0 -117
  150. package/dist_ts/proxies/smart-proxy/port-manager.js +0 -318
  151. package/dist_ts/proxies/smart-proxy/route-connection-handler.d.ts +0 -60
  152. package/dist_ts/proxies/smart-proxy/route-connection-handler.js +0 -1407
  153. package/dist_ts/proxies/smart-proxy/route-manager.d.ts +0 -112
  154. package/dist_ts/proxies/smart-proxy/route-manager.js +0 -453
  155. package/dist_ts/proxies/smart-proxy/route-orchestrator.d.ts +0 -56
  156. package/dist_ts/proxies/smart-proxy/route-orchestrator.js +0 -204
  157. package/dist_ts/proxies/smart-proxy/rust-binary-locator.d.ts +0 -23
  158. package/dist_ts/proxies/smart-proxy/rust-binary-locator.js +0 -104
  159. package/dist_ts/proxies/smart-proxy/security-manager.d.ts +0 -74
  160. package/dist_ts/proxies/smart-proxy/security-manager.js +0 -227
  161. package/dist_ts/proxies/smart-proxy/throughput-tracker.d.ts +0 -36
  162. package/dist_ts/proxies/smart-proxy/throughput-tracker.js +0 -115
  163. package/dist_ts/proxies/smart-proxy/timeout-manager.d.ts +0 -48
  164. package/dist_ts/proxies/smart-proxy/timeout-manager.js +0 -158
  165. package/dist_ts/proxies/smart-proxy/tls-manager.d.ts +0 -50
  166. package/dist_ts/proxies/smart-proxy/tls-manager.js +0 -110
  167. package/dist_ts/proxies/smart-proxy/utils/route-patterns.d.ts +0 -161
  168. package/dist_ts/proxies/smart-proxy/utils/route-patterns.js +0 -282
  169. package/dist_ts/proxies/smart-proxy/utils/route-validators.d.ts +0 -73
  170. package/dist_ts/proxies/smart-proxy/utils/route-validators.js +0 -259
  171. package/dist_ts/routing/router/proxy-router.d.ts +0 -115
  172. package/dist_ts/routing/router/proxy-router.js +0 -325
  173. package/dist_ts/routing/router/route-router.d.ts +0 -108
  174. package/dist_ts/routing/router/route-router.js +0 -393
  175. package/dist_ts/tls/alerts/index.d.ts +0 -4
  176. package/dist_ts/tls/alerts/index.js +0 -5
  177. package/dist_ts/tls/alerts/tls-alert.d.ts +0 -150
  178. package/dist_ts/tls/alerts/tls-alert.js +0 -226
  179. package/dist_ts/tls/sni/client-hello-parser.d.ts +0 -100
  180. package/dist_ts/tls/sni/client-hello-parser.js +0 -464
  181. package/dist_ts/tls/sni/sni-extraction.d.ts +0 -58
  182. package/dist_ts/tls/sni/sni-extraction.js +0 -275
  183. package/dist_ts/tls/utils/index.d.ts +0 -4
  184. package/dist_ts/tls/utils/index.js +0 -5
  185. package/dist_ts/tls/utils/tls-utils.d.ts +0 -49
  186. package/dist_ts/tls/utils/tls-utils.js +0 -75
  187. package/ts/proxies/nftables-proxy/index.ts +0 -6
  188. package/ts/proxies/nftables-proxy/models/errors.ts +0 -30
  189. package/ts/proxies/nftables-proxy/models/index.ts +0 -5
  190. package/ts/proxies/nftables-proxy/models/interfaces.ts +0 -94
  191. package/ts/proxies/nftables-proxy/nftables-proxy.ts +0 -1754
  192. package/ts/proxies/nftables-proxy/utils/index.ts +0 -38
  193. package/ts/proxies/nftables-proxy/utils/nft-command-executor.ts +0 -162
  194. package/ts/proxies/nftables-proxy/utils/nft-port-spec-normalizer.ts +0 -125
  195. package/ts/proxies/nftables-proxy/utils/nft-rule-validator.ts +0 -156
  196. package/ts/proxies/smart-proxy/rust-binary-locator.ts +0 -112
@@ -1,276 +0,0 @@
1
- import * as plugins from '../../plugins.js';
2
- import { ForwardingHandler } from './base-handler.js';
3
- import { ForwardingHandlerEvents } from '../config/forwarding-types.js';
4
- import { setupSocketHandlers, createSocketWithErrorHandler, setupBidirectionalForwarding } from '../../core/utils/socket-utils.js';
5
- /**
6
- * Handler for HTTPS termination with HTTP backend
7
- */
8
- export class HttpsTerminateToHttpHandler extends ForwardingHandler {
9
- /**
10
- * Create a new HTTPS termination with HTTP backend handler
11
- * @param config The forwarding configuration
12
- */
13
- constructor(config) {
14
- super(config);
15
- this.tlsServer = null;
16
- this.secureContext = null;
17
- // Validate that this is an HTTPS terminate to HTTP configuration
18
- if (config.type !== 'https-terminate-to-http') {
19
- throw new Error(`Invalid configuration type for HttpsTerminateToHttpHandler: ${config.type}`);
20
- }
21
- }
22
- /**
23
- * Initialize the handler, setting up TLS context
24
- */
25
- async initialize() {
26
- // We need to load or create TLS certificates
27
- if (this.config.https?.customCert) {
28
- // Use custom certificate from configuration
29
- this.secureContext = plugins.tls.createSecureContext({
30
- key: this.config.https.customCert.key,
31
- cert: this.config.https.customCert.cert
32
- });
33
- this.emit(ForwardingHandlerEvents.CERTIFICATE_LOADED, {
34
- source: 'config',
35
- domain: this.config.target.host
36
- });
37
- }
38
- else if (this.config.acme?.enabled) {
39
- // Request certificate through ACME if needed
40
- this.emit(ForwardingHandlerEvents.CERTIFICATE_NEEDED, {
41
- domain: Array.isArray(this.config.target.host)
42
- ? this.config.target.host[0]
43
- : this.config.target.host,
44
- useProduction: this.config.acme.production || false
45
- });
46
- // In a real implementation, we would wait for the certificate to be issued
47
- // For now, we'll use a dummy context
48
- this.secureContext = plugins.tls.createSecureContext({
49
- key: '-----BEGIN PRIVATE KEY-----\nDummy key\n-----END PRIVATE KEY-----',
50
- cert: '-----BEGIN CERTIFICATE-----\nDummy cert\n-----END CERTIFICATE-----'
51
- });
52
- }
53
- else {
54
- throw new Error('HTTPS termination requires either a custom certificate or ACME enabled');
55
- }
56
- }
57
- /**
58
- * Set the secure context for TLS termination
59
- * Called when a certificate is available
60
- * @param context The secure context
61
- */
62
- setSecureContext(context) {
63
- this.secureContext = context;
64
- }
65
- /**
66
- * Handle a TLS/SSL socket connection by terminating TLS and forwarding to HTTP backend
67
- * @param clientSocket The incoming socket from the client
68
- */
69
- handleConnection(clientSocket) {
70
- // Make sure we have a secure context
71
- if (!this.secureContext) {
72
- clientSocket.destroy(new Error('TLS secure context not initialized'));
73
- return;
74
- }
75
- const remoteAddress = clientSocket.remoteAddress || 'unknown';
76
- const remotePort = clientSocket.remotePort || 0;
77
- // Create a TLS socket using our secure context
78
- const tlsSocket = new plugins.tls.TLSSocket(clientSocket, {
79
- secureContext: this.secureContext,
80
- isServer: true,
81
- server: this.tlsServer || undefined
82
- });
83
- this.emit(ForwardingHandlerEvents.CONNECTED, {
84
- remoteAddress,
85
- remotePort,
86
- tls: true
87
- });
88
- // Variables to track connections
89
- let backendSocket = null;
90
- let dataBuffer = Buffer.alloc(0);
91
- let connectionEstablished = false;
92
- let forwardingSetup = false;
93
- // Set up initial error handling for TLS socket
94
- const tlsCleanupHandler = (reason) => {
95
- if (!forwardingSetup) {
96
- // If forwarding not set up yet, emit disconnected and cleanup
97
- this.emit(ForwardingHandlerEvents.DISCONNECTED, {
98
- remoteAddress,
99
- reason
100
- });
101
- dataBuffer = Buffer.alloc(0);
102
- connectionEstablished = false;
103
- if (!tlsSocket.destroyed) {
104
- tlsSocket.destroy();
105
- }
106
- if (backendSocket && !backendSocket.destroyed) {
107
- backendSocket.destroy();
108
- }
109
- }
110
- // If forwarding is setup, setupBidirectionalForwarding will handle cleanup
111
- };
112
- setupSocketHandlers(tlsSocket, tlsCleanupHandler, undefined, 'tls');
113
- // Set timeout
114
- const timeout = this.getTimeout();
115
- tlsSocket.setTimeout(timeout);
116
- tlsSocket.on('timeout', () => {
117
- this.emit(ForwardingHandlerEvents.ERROR, {
118
- remoteAddress,
119
- error: 'TLS connection timeout'
120
- });
121
- tlsCleanupHandler('timeout');
122
- });
123
- // Handle TLS data
124
- tlsSocket.on('data', (data) => {
125
- // If backend connection already established, just forward the data
126
- if (connectionEstablished && backendSocket && !backendSocket.destroyed) {
127
- backendSocket.write(data);
128
- return;
129
- }
130
- // Append to buffer
131
- dataBuffer = Buffer.concat([dataBuffer, data]);
132
- // Very basic HTTP parsing - in a real implementation, use http-parser
133
- if (dataBuffer.includes(Buffer.from('\r\n\r\n')) && !connectionEstablished) {
134
- const target = this.getTargetFromConfig();
135
- // Create backend connection with immediate error handling
136
- backendSocket = createSocketWithErrorHandler({
137
- port: target.port,
138
- host: target.host,
139
- onError: (error) => {
140
- this.emit(ForwardingHandlerEvents.ERROR, {
141
- error: error.message,
142
- code: error.code || 'UNKNOWN',
143
- remoteAddress,
144
- target: `${target.host}:${target.port}`
145
- });
146
- // Clean up the TLS socket since we can't forward
147
- if (!tlsSocket.destroyed) {
148
- tlsSocket.destroy();
149
- }
150
- this.emit(ForwardingHandlerEvents.DISCONNECTED, {
151
- remoteAddress,
152
- reason: `backend_connection_failed: ${error.message}`
153
- });
154
- },
155
- onConnect: () => {
156
- connectionEstablished = true;
157
- // Send buffered data
158
- if (dataBuffer.length > 0) {
159
- backendSocket.write(dataBuffer);
160
- dataBuffer = Buffer.alloc(0);
161
- }
162
- // Now set up bidirectional forwarding with proper cleanup
163
- forwardingSetup = true;
164
- setupBidirectionalForwarding(tlsSocket, backendSocket, {
165
- onCleanup: (reason) => {
166
- this.emit(ForwardingHandlerEvents.DISCONNECTED, {
167
- remoteAddress,
168
- reason
169
- });
170
- dataBuffer = Buffer.alloc(0);
171
- connectionEstablished = false;
172
- forwardingSetup = false;
173
- },
174
- enableHalfOpen: false // Close both when one closes
175
- });
176
- }
177
- });
178
- // Additional error logging for backend socket
179
- backendSocket.on('error', (error) => {
180
- if (!connectionEstablished) {
181
- // Connection failed during setup
182
- this.emit(ForwardingHandlerEvents.ERROR, {
183
- remoteAddress,
184
- error: `Target connection error: ${error.message}`
185
- });
186
- }
187
- // If connected, setupBidirectionalForwarding handles cleanup
188
- });
189
- }
190
- });
191
- }
192
- /**
193
- * Handle an HTTP request by forwarding to the HTTP backend
194
- * @param req The HTTP request
195
- * @param res The HTTP response
196
- */
197
- handleHttpRequest(req, res) {
198
- // Check if we should redirect to HTTPS
199
- if (this.config.http?.redirectToHttps) {
200
- this.redirectToHttps(req, res);
201
- return;
202
- }
203
- // Get the target from configuration
204
- const target = this.getTargetFromConfig();
205
- // Create custom headers with variable substitution
206
- const variables = {
207
- clientIp: req.socket.remoteAddress || 'unknown'
208
- };
209
- // Prepare headers, merging with any custom headers from config
210
- const headers = this.applyCustomHeaders(req.headers, variables);
211
- // Create the proxy request options
212
- const options = {
213
- hostname: target.host,
214
- port: target.port,
215
- path: req.url,
216
- method: req.method,
217
- headers
218
- };
219
- // Create the proxy request
220
- const proxyReq = plugins.http.request(options, (proxyRes) => {
221
- // Copy status code and headers from the proxied response
222
- res.writeHead(proxyRes.statusCode || 500, proxyRes.headers);
223
- // Pipe the proxy response to the client response
224
- proxyRes.pipe(res);
225
- // Track response size for logging
226
- let responseSize = 0;
227
- proxyRes.on('data', (chunk) => {
228
- responseSize += chunk.length;
229
- });
230
- proxyRes.on('end', () => {
231
- this.emit(ForwardingHandlerEvents.HTTP_RESPONSE, {
232
- statusCode: proxyRes.statusCode,
233
- headers: proxyRes.headers,
234
- size: responseSize
235
- });
236
- });
237
- });
238
- // Handle errors in the proxy request
239
- proxyReq.on('error', (error) => {
240
- this.emit(ForwardingHandlerEvents.ERROR, {
241
- remoteAddress: req.socket.remoteAddress,
242
- error: `Proxy request error: ${error.message}`
243
- });
244
- // Send an error response if headers haven't been sent yet
245
- if (!res.headersSent) {
246
- res.writeHead(502, { 'Content-Type': 'text/plain' });
247
- res.end(`Error forwarding request: ${error.message}`);
248
- }
249
- else {
250
- // Just end the response if headers have already been sent
251
- res.end();
252
- }
253
- });
254
- // Track request details for logging
255
- let requestSize = 0;
256
- req.on('data', (chunk) => {
257
- requestSize += chunk.length;
258
- });
259
- // Log the request
260
- this.emit(ForwardingHandlerEvents.HTTP_REQUEST, {
261
- method: req.method,
262
- url: req.url,
263
- headers: req.headers,
264
- remoteAddress: req.socket.remoteAddress,
265
- target: `${target.host}:${target.port}`
266
- });
267
- // Pipe the client request to the proxy request
268
- if (req.readable) {
269
- req.pipe(proxyReq);
270
- }
271
- else {
272
- proxyReq.end();
273
- }
274
- }
275
- }
276
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cHMtdGVybWluYXRlLXRvLWh0dHAtaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2ZvcndhcmRpbmcvaGFuZGxlcnMvaHR0cHMtdGVybWluYXRlLXRvLWh0dHAtaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXRELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSw0QkFBNEIsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRW5JOztHQUVHO0FBQ0gsTUFBTSxPQUFPLDJCQUE0QixTQUFRLGlCQUFpQjtJQUloRTs7O09BR0c7SUFDSCxZQUFZLE1BQXNCO1FBQ2hDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQVJSLGNBQVMsR0FBOEIsSUFBSSxDQUFDO1FBQzVDLGtCQUFhLEdBQXFDLElBQUksQ0FBQztRQVM3RCxpRUFBaUU7UUFDakUsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLHlCQUF5QixFQUFFLENBQUM7WUFDOUMsTUFBTSxJQUFJLEtBQUssQ0FBQywrREFBK0QsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDaEcsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxVQUFVO1FBQ3JCLDZDQUE2QztRQUM3QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDO1lBQ2xDLDRDQUE0QztZQUM1QyxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUM7Z0JBQ25ELEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFV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
@@ -1,35 +0,0 @@
1
- import * as plugins from '../../plugins.js';
2
- import { ForwardingHandler } from './base-handler.js';
3
- import type { IForwardConfig } from '../config/forwarding-types.js';
4
- /**
5
- * Handler for HTTPS termination with HTTPS backend
6
- */
7
- export declare class HttpsTerminateToHttpsHandler extends ForwardingHandler {
8
- private secureContext;
9
- /**
10
- * Create a new HTTPS termination with HTTPS backend handler
11
- * @param config The forwarding configuration
12
- */
13
- constructor(config: IForwardConfig);
14
- /**
15
- * Initialize the handler, setting up TLS context
16
- */
17
- initialize(): Promise<void>;
18
- /**
19
- * Set the secure context for TLS termination
20
- * Called when a certificate is available
21
- * @param context The secure context
22
- */
23
- setSecureContext(context: plugins.tls.SecureContext): void;
24
- /**
25
- * Handle a TLS/SSL socket connection by terminating TLS and creating a new TLS connection to backend
26
- * @param clientSocket The incoming socket from the client
27
- */
28
- handleConnection(clientSocket: plugins.net.Socket): void;
29
- /**
30
- * Handle an HTTP request by forwarding to the HTTPS backend
31
- * @param req The HTTP request
32
- * @param res The HTTP response
33
- */
34
- handleHttpRequest(req: plugins.http.IncomingMessage, res: plugins.http.ServerResponse): void;
35
- }
@@ -1,261 +0,0 @@
1
- import * as plugins from '../../plugins.js';
2
- import { ForwardingHandler } from './base-handler.js';
3
- import { ForwardingHandlerEvents } from '../config/forwarding-types.js';
4
- import { setupSocketHandlers, createSocketWithErrorHandler, setupBidirectionalForwarding } from '../../core/utils/socket-utils.js';
5
- /**
6
- * Handler for HTTPS termination with HTTPS backend
7
- */
8
- export class HttpsTerminateToHttpsHandler extends ForwardingHandler {
9
- /**
10
- * Create a new HTTPS termination with HTTPS backend handler
11
- * @param config The forwarding configuration
12
- */
13
- constructor(config) {
14
- super(config);
15
- this.secureContext = null;
16
- // Validate that this is an HTTPS terminate to HTTPS configuration
17
- if (config.type !== 'https-terminate-to-https') {
18
- throw new Error(`Invalid configuration type for HttpsTerminateToHttpsHandler: ${config.type}`);
19
- }
20
- }
21
- /**
22
- * Initialize the handler, setting up TLS context
23
- */
24
- async initialize() {
25
- // We need to load or create TLS certificates for termination
26
- if (this.config.https?.customCert) {
27
- // Use custom certificate from configuration
28
- this.secureContext = plugins.tls.createSecureContext({
29
- key: this.config.https.customCert.key,
30
- cert: this.config.https.customCert.cert
31
- });
32
- this.emit(ForwardingHandlerEvents.CERTIFICATE_LOADED, {
33
- source: 'config',
34
- domain: this.config.target.host
35
- });
36
- }
37
- else if (this.config.acme?.enabled) {
38
- // Request certificate through ACME if needed
39
- this.emit(ForwardingHandlerEvents.CERTIFICATE_NEEDED, {
40
- domain: Array.isArray(this.config.target.host)
41
- ? this.config.target.host[0]
42
- : this.config.target.host,
43
- useProduction: this.config.acme.production || false
44
- });
45
- // In a real implementation, we would wait for the certificate to be issued
46
- // For now, we'll use a dummy context
47
- this.secureContext = plugins.tls.createSecureContext({
48
- key: '-----BEGIN PRIVATE KEY-----\nDummy key\n-----END PRIVATE KEY-----',
49
- cert: '-----BEGIN CERTIFICATE-----\nDummy cert\n-----END CERTIFICATE-----'
50
- });
51
- }
52
- else {
53
- throw new Error('HTTPS termination requires either a custom certificate or ACME enabled');
54
- }
55
- }
56
- /**
57
- * Set the secure context for TLS termination
58
- * Called when a certificate is available
59
- * @param context The secure context
60
- */
61
- setSecureContext(context) {
62
- this.secureContext = context;
63
- }
64
- /**
65
- * Handle a TLS/SSL socket connection by terminating TLS and creating a new TLS connection to backend
66
- * @param clientSocket The incoming socket from the client
67
- */
68
- handleConnection(clientSocket) {
69
- // Make sure we have a secure context
70
- if (!this.secureContext) {
71
- clientSocket.destroy(new Error('TLS secure context not initialized'));
72
- return;
73
- }
74
- const remoteAddress = clientSocket.remoteAddress || 'unknown';
75
- const remotePort = clientSocket.remotePort || 0;
76
- // Create a TLS socket using our secure context
77
- const tlsSocket = new plugins.tls.TLSSocket(clientSocket, {
78
- secureContext: this.secureContext,
79
- isServer: true
80
- });
81
- this.emit(ForwardingHandlerEvents.CONNECTED, {
82
- remoteAddress,
83
- remotePort,
84
- tls: true
85
- });
86
- // Variable to track backend socket
87
- let backendSocket = null;
88
- let isConnectedToBackend = false;
89
- // Set up initial error handling for TLS socket
90
- const tlsCleanupHandler = (reason) => {
91
- if (!isConnectedToBackend) {
92
- // If backend not connected yet, just emit disconnected event
93
- this.emit(ForwardingHandlerEvents.DISCONNECTED, {
94
- remoteAddress,
95
- reason
96
- });
97
- // Cleanup TLS socket if needed
98
- if (!tlsSocket.destroyed) {
99
- tlsSocket.destroy();
100
- }
101
- }
102
- // If connected to backend, setupBidirectionalForwarding will handle cleanup
103
- };
104
- setupSocketHandlers(tlsSocket, tlsCleanupHandler, undefined, 'tls');
105
- // Set timeout
106
- const timeout = this.getTimeout();
107
- tlsSocket.setTimeout(timeout);
108
- tlsSocket.on('timeout', () => {
109
- this.emit(ForwardingHandlerEvents.ERROR, {
110
- remoteAddress,
111
- error: 'TLS connection timeout'
112
- });
113
- tlsCleanupHandler('timeout');
114
- });
115
- // Get the target from configuration
116
- const target = this.getTargetFromConfig();
117
- // Set up the connection to the HTTPS backend
118
- const connectToBackend = () => {
119
- backendSocket = plugins.tls.connect({
120
- host: target.host,
121
- port: target.port,
122
- // In a real implementation, we would configure TLS options
123
- rejectUnauthorized: false // For testing only, never use in production
124
- }, () => {
125
- isConnectedToBackend = true;
126
- this.emit(ForwardingHandlerEvents.DATA_FORWARDED, {
127
- direction: 'outbound',
128
- target: `${target.host}:${target.port}`,
129
- tls: true
130
- });
131
- // Set up bidirectional forwarding with proper cleanup
132
- setupBidirectionalForwarding(tlsSocket, backendSocket, {
133
- onCleanup: (reason) => {
134
- this.emit(ForwardingHandlerEvents.DISCONNECTED, {
135
- remoteAddress,
136
- reason
137
- });
138
- },
139
- enableHalfOpen: false // Close both when one closes
140
- });
141
- // Set timeout for backend socket
142
- backendSocket.setTimeout(timeout);
143
- backendSocket.on('timeout', () => {
144
- this.emit(ForwardingHandlerEvents.ERROR, {
145
- remoteAddress,
146
- error: 'Backend connection timeout'
147
- });
148
- // Let setupBidirectionalForwarding handle the cleanup
149
- });
150
- });
151
- // Handle backend connection errors
152
- backendSocket.on('error', (error) => {
153
- this.emit(ForwardingHandlerEvents.ERROR, {
154
- remoteAddress,
155
- error: `Backend connection error: ${error.message}`
156
- });
157
- if (!isConnectedToBackend) {
158
- // Connection failed, clean up TLS socket
159
- if (!tlsSocket.destroyed) {
160
- tlsSocket.destroy();
161
- }
162
- this.emit(ForwardingHandlerEvents.DISCONNECTED, {
163
- remoteAddress,
164
- reason: `backend_connection_failed: ${error.message}`
165
- });
166
- }
167
- // If connected, let setupBidirectionalForwarding handle cleanup
168
- });
169
- };
170
- // Wait for the TLS handshake to complete before connecting to backend
171
- tlsSocket.on('secure', () => {
172
- connectToBackend();
173
- });
174
- }
175
- /**
176
- * Handle an HTTP request by forwarding to the HTTPS backend
177
- * @param req The HTTP request
178
- * @param res The HTTP response
179
- */
180
- handleHttpRequest(req, res) {
181
- // Check if we should redirect to HTTPS
182
- if (this.config.http?.redirectToHttps) {
183
- this.redirectToHttps(req, res);
184
- return;
185
- }
186
- // Get the target from configuration
187
- const target = this.getTargetFromConfig();
188
- // Create custom headers with variable substitution
189
- const variables = {
190
- clientIp: req.socket.remoteAddress || 'unknown'
191
- };
192
- // Prepare headers, merging with any custom headers from config
193
- const headers = this.applyCustomHeaders(req.headers, variables);
194
- // Create the proxy request options
195
- const options = {
196
- hostname: target.host,
197
- port: target.port,
198
- path: req.url,
199
- method: req.method,
200
- headers,
201
- // In a real implementation, we would configure TLS options
202
- rejectUnauthorized: false // For testing only, never use in production
203
- };
204
- // Create the proxy request using HTTPS
205
- const proxyReq = plugins.https.request(options, (proxyRes) => {
206
- // Copy status code and headers from the proxied response
207
- res.writeHead(proxyRes.statusCode || 500, proxyRes.headers);
208
- // Pipe the proxy response to the client response
209
- proxyRes.pipe(res);
210
- // Track response size for logging
211
- let responseSize = 0;
212
- proxyRes.on('data', (chunk) => {
213
- responseSize += chunk.length;
214
- });
215
- proxyRes.on('end', () => {
216
- this.emit(ForwardingHandlerEvents.HTTP_RESPONSE, {
217
- statusCode: proxyRes.statusCode,
218
- headers: proxyRes.headers,
219
- size: responseSize
220
- });
221
- });
222
- });
223
- // Handle errors in the proxy request
224
- proxyReq.on('error', (error) => {
225
- this.emit(ForwardingHandlerEvents.ERROR, {
226
- remoteAddress: req.socket.remoteAddress,
227
- error: `Proxy request error: ${error.message}`
228
- });
229
- // Send an error response if headers haven't been sent yet
230
- if (!res.headersSent) {
231
- res.writeHead(502, { 'Content-Type': 'text/plain' });
232
- res.end(`Error forwarding request: ${error.message}`);
233
- }
234
- else {
235
- // Just end the response if headers have already been sent
236
- res.end();
237
- }
238
- });
239
- // Track request details for logging
240
- let requestSize = 0;
241
- req.on('data', (chunk) => {
242
- requestSize += chunk.length;
243
- });
244
- // Log the request
245
- this.emit(ForwardingHandlerEvents.HTTP_REQUEST, {
246
- method: req.method,
247
- url: req.url,
248
- headers: req.headers,
249
- remoteAddress: req.socket.remoteAddress,
250
- target: `${target.host}:${target.port}`
251
- });
252
- // Pipe the client request to the proxy request
253
- if (req.readable) {
254
- req.pipe(proxyReq);
255
- }
256
- else {
257
- proxyReq.end();
258
- }
259
- }
260
- }
261
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cHMtdGVybWluYXRlLXRvLWh0dHBzLWhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9mb3J3YXJkaW5nL2hhbmRsZXJzL2h0dHBzLXRlcm1pbmF0ZS10by1odHRwcy1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFdEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDeEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLDRCQUE0QixFQUFFLDRCQUE0QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFbkk7O0dBRUc7QUFDSCxNQUFNLE9BQU8sNEJBQTZCLFNBQVEsaUJBQWlCO0lBR2pFOzs7T0FHRztJQUNILFlBQVksTUFBc0I7UUFDaEMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBUFIsa0JBQWEsR0FBcUMsSUFBSSxDQUFDO1FBUzdELGtFQUFrRTtRQUNsRSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssMEJBQTBCLEVBQUUsQ0FBQztZQUMvQyxNQUFNLElBQUksS0FBSyxDQUFDLGdFQUFnRSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNqRyxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLFVBQVU7UUFDckIsNkRBQTZEO1FBQzdELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLENBQUM7WUFDbEMsNENBQTRDO1lBQzVDLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQztnQkFDbkQsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHO2dCQUNyQyxJQUFJLEVB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
@@ -1,8 +0,0 @@
1
- /**
2
- * Forwarding handler implementations
3
- */
4
- export { ForwardingHandler } from './base-handler.js';
5
- export { HttpForwardingHandler } from './http-handler.js';
6
- export { HttpsPassthroughHandler } from './https-passthrough-handler.js';
7
- export { HttpsTerminateToHttpHandler } from './https-terminate-to-http-handler.js';
8
- export { HttpsTerminateToHttpsHandler } from './https-terminate-to-https-handler.js';
@@ -1,9 +0,0 @@
1
- /**
2
- * Forwarding handler implementations
3
- */
4
- export { ForwardingHandler } from './base-handler.js';
5
- export { HttpForwardingHandler } from './http-handler.js';
6
- export { HttpsPassthroughHandler } from './https-passthrough-handler.js';
7
- export { HttpsTerminateToHttpHandler } from './https-terminate-to-http-handler.js';
8
- export { HttpsTerminateToHttpsHandler } from './https-terminate-to-https-handler.js';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9mb3J3YXJkaW5nL2hhbmRsZXJzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDMUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDekUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDbkYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sdUNBQXVDLENBQUMifQ==
@@ -1,13 +0,0 @@
1
- /**
2
- * Forwarding system module
3
- * Provides a flexible and type-safe way to configure and manage various forwarding strategies
4
- */
5
- export { ForwardingHandler } from './handlers/base-handler.js';
6
- export * from './handlers/http-handler.js';
7
- export * from './handlers/https-passthrough-handler.js';
8
- export * from './handlers/https-terminate-to-http-handler.js';
9
- export * from './handlers/https-terminate-to-https-handler.js';
10
- export * from './factory/forwarding-factory.js';
11
- export type { TForwardingType, IForwardConfig, IForwardingHandler } from './config/forwarding-types.js';
12
- export { ForwardingHandlerEvents } from './config/forwarding-types.js';
13
- export { createHttpRoute, createHttpsTerminateRoute, createHttpsPassthroughRoute, createHttpToHttpsRedirect, createCompleteHttpsServer, createLoadBalancerRoute } from '../proxies/smart-proxy/utils/route-patterns.js';
@@ -1,16 +0,0 @@
1
- /**
2
- * Forwarding system module
3
- * Provides a flexible and type-safe way to configure and manage various forwarding strategies
4
- */
5
- // Export handlers
6
- export { ForwardingHandler } from './handlers/base-handler.js';
7
- export * from './handlers/http-handler.js';
8
- export * from './handlers/https-passthrough-handler.js';
9
- export * from './handlers/https-terminate-to-http-handler.js';
10
- export * from './handlers/https-terminate-to-https-handler.js';
11
- // Export factory
12
- export * from './factory/forwarding-factory.js';
13
- export { ForwardingHandlerEvents } from './config/forwarding-types.js';
14
- // Export route helpers directly from route-patterns
15
- export { createHttpRoute, createHttpsTerminateRoute, createHttpsPassthroughRoute, createHttpToHttpsRedirect, createCompleteHttpsServer, createLoadBalancerRoute } from '../proxies/smart-proxy/utils/route-patterns.js';
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9mb3J3YXJkaW5nL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILGtCQUFrQjtBQUNsQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLGdEQUFnRCxDQUFDO0FBRS9ELGlCQUFpQjtBQUNqQixjQUFjLGlDQUFpQyxDQUFDO0FBU2hELE9BQU8sRUFDTCx1QkFBdUIsRUFDeEIsTUFBTSw4QkFBOEIsQ0FBQztBQUV0QyxvREFBb0Q7QUFDcEQsT0FBTyxFQUNMLGVBQWUsRUFDZix5QkFBeUIsRUFDekIsMkJBQTJCLEVBQzNCLHlCQUF5QixFQUN6Qix5QkFBeUIsRUFDekIsdUJBQXVCLEVBQ3hCLE1BQU0sZ0RBQWdELENBQUMifQ==