@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,80 +0,0 @@
1
- /**
2
- * TLS Protocol Detector V2
3
- *
4
- * Simplified TLS detection using the new architecture
5
- */
6
- import { QuickProtocolDetector } from './quick-detector.js';
7
- import { RoutingExtractor } from './routing-extractor.js';
8
- import { DetectionFragmentManager } from '../utils/fragment-manager.js';
9
- /**
10
- * Simplified TLS detector
11
- */
12
- export class TlsDetectorV2 {
13
- constructor(fragmentManager) {
14
- this.quickDetector = new QuickProtocolDetector();
15
- this.fragmentManager = fragmentManager;
16
- }
17
- /**
18
- * Check if buffer can be handled by this detector
19
- */
20
- canHandle(buffer) {
21
- const result = this.quickDetector.quickDetect(buffer);
22
- return result.protocol === 'tls' && result.confidence > 50;
23
- }
24
- /**
25
- * Get minimum bytes needed for detection
26
- */
27
- getMinimumBytes() {
28
- return 5; // TLS record header
29
- }
30
- /**
31
- * Detect TLS protocol from buffer
32
- */
33
- detect(buffer, options) {
34
- // Quick detection first
35
- const quickResult = this.quickDetector.quickDetect(buffer);
36
- if (quickResult.protocol !== 'tls' || quickResult.confidence < 50) {
37
- return null;
38
- }
39
- // If we don't need domain extraction, we can return early
40
- if (quickResult.confidence >= 95 && !options?.extractFullHeaders) {
41
- return {
42
- protocol: 'tls',
43
- connectionInfo: { protocol: 'tls' },
44
- isComplete: true
45
- };
46
- }
47
- // Extract routing information if needed
48
- const routing = RoutingExtractor.extract(buffer, 'tls');
49
- return {
50
- protocol: 'tls',
51
- connectionInfo: {
52
- protocol: 'tls',
53
- domain: routing?.domain,
54
- sni: routing?.domain
55
- },
56
- isComplete: !quickResult.requiresMoreData,
57
- bytesNeeded: quickResult.requiresMoreData ? buffer.length + 100 : undefined
58
- };
59
- }
60
- /**
61
- * Handle fragmented detection
62
- */
63
- detectWithContext(buffer, context, options) {
64
- const handler = this.fragmentManager.getHandler('tls');
65
- const connectionId = DetectionFragmentManager.createConnectionId(context);
66
- // Add fragment
67
- const result = handler.addFragment(connectionId, buffer);
68
- if (result.error) {
69
- handler.complete(connectionId);
70
- return null;
71
- }
72
- // Try detection on accumulated buffer
73
- const detectResult = this.detect(result.buffer, options);
74
- if (detectResult && detectResult.isComplete) {
75
- handler.complete(connectionId);
76
- }
77
- return detectResult;
78
- }
79
- }
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxzLWRldGVjdG9yLXYyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvZGV0ZWN0aW9uL2RldGVjdG9ycy90bHMtZGV0ZWN0b3ItdjIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUtILE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRXhFOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGFBQWE7SUFJeEIsWUFBWSxlQUF5QztRQUg3QyxrQkFBYSxHQUFHLElBQUkscUJBQXFCLEVBQUUsQ0FBQztRQUlsRCxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxTQUFTLENBQUMsTUFBYztRQUN0QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RCxPQUFPLE1BQU0sQ0FBQyxRQUFRLEtBQUssS0FBSyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQzdELENBQUM7SUFFRDs7T0FFRztJQUNILGVBQWU7UUFDYixPQUFPLENBQUMsQ0FBQyxDQUFDLG9CQUFvQjtJQUNoQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsTUFBYyxFQUFFLE9BQTJCO1FBQ2hELHdCQUF3QjtRQUN4QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUzRCxJQUFJLFdBQVcsQ0FBQyxRQUFRLEtBQUssS0FBSyxJQUFJLFdBQVcsQ0FBQyxVQUFVLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDbEUsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsMERBQTBEO1FBQzFELElBQUksV0FBVyxDQUFDLFVBQVUsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztZQUNqRSxPQUFPO2dCQUNMLFFBQVEsRUFBRSxLQUFLO2dCQUNmLGNBQWMsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUU7Z0JBQ25DLFVBQVUsRUFBRSxJQUFJO2FBQ2pCLENBQUM7UUFDSixDQUFDO1FBRUQsd0NBQXdDO1FBQ3hDLE1BQU0sT0FBTyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEQsT0FBTztZQUNMLFFBQVEsRUFBRSxLQUFLO1lBQ2YsY0FBYyxFQUFFO2dCQUNkLFFBQVEsRUFBRSxLQUFLO2dCQUNmLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTTtnQkFDdkIsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNO2FBQ3JCO1lBQ0QsVUFBVSxFQUFFLENBQUMsV0FBVyxDQUFDLGdCQUFnQjtZQUN6QyxXQUFXLEVBQUUsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUM1RSxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsaUJBQWlCLENBQ2YsTUFBYyxFQUNkLE9BQTJCLEVBQzNCLE9BQTJCO1FBRTNCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sWUFBWSxHQUFHLHdCQUF3QixDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTFFLGVBQWU7UUFDZixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUV6RCxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNqQixPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQy9CLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELHNDQUFzQztRQUN0QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFMUQsSUFBSSxZQUFZLElBQUksWUFBWSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzVDLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUVELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7Q0FDRiJ9
@@ -1,46 +0,0 @@
1
- /**
2
- * Protocol Detector V2
3
- *
4
- * Simplified protocol detection using the new architecture
5
- */
6
- import type { IDetectionResult, IDetectionOptions } from './models/detection-types.js';
7
- import type { IConnectionContext } from '../protocols/common/types.js';
8
- /**
9
- * Main protocol detector class - V2
10
- */
11
- export declare class ProtocolDetectorV2 {
12
- private fragmentManager;
13
- private tlsDetector;
14
- private httpDetector;
15
- constructor();
16
- /**
17
- * Detect protocol from buffer data
18
- */
19
- detect(buffer: Buffer, options?: IDetectionOptions): Promise<IDetectionResult>;
20
- /**
21
- * Detect protocol with connection context for fragmented data
22
- */
23
- detectWithContext(buffer: Buffer, context: IConnectionContext, options?: IDetectionOptions): Promise<IDetectionResult>;
24
- /**
25
- * Clean up resources
26
- */
27
- cleanup(): void;
28
- /**
29
- * Destroy detector instance
30
- */
31
- destroy(): void;
32
- /**
33
- * Extract domain from connection info
34
- */
35
- static extractDomain(connectionInfo: any): string | undefined;
36
- /**
37
- * Create a connection context from parameters
38
- */
39
- static createConnectionContext(params: {
40
- sourceIp?: string;
41
- sourcePort?: number;
42
- destIp?: string;
43
- destPort?: number;
44
- socketId?: string;
45
- }): IConnectionContext;
46
- }
@@ -1,116 +0,0 @@
1
- /**
2
- * Protocol Detector V2
3
- *
4
- * Simplified protocol detection using the new architecture
5
- */
6
- import { TlsDetectorV2 } from './detectors/tls-detector-v2.js';
7
- import { HttpDetectorV2 } from './detectors/http-detector-v2.js';
8
- import { DetectionFragmentManager } from './utils/fragment-manager.js';
9
- /**
10
- * Main protocol detector class - V2
11
- */
12
- export class ProtocolDetectorV2 {
13
- constructor() {
14
- this.fragmentManager = new DetectionFragmentManager();
15
- this.tlsDetector = new TlsDetectorV2(this.fragmentManager);
16
- this.httpDetector = new HttpDetectorV2(this.fragmentManager);
17
- }
18
- /**
19
- * Detect protocol from buffer data
20
- */
21
- async detect(buffer, options) {
22
- // Quick sanity check
23
- if (!buffer || buffer.length === 0) {
24
- return {
25
- protocol: 'unknown',
26
- connectionInfo: { protocol: 'unknown' },
27
- isComplete: true
28
- };
29
- }
30
- // Try TLS detection first (more specific)
31
- if (this.tlsDetector.canHandle(buffer)) {
32
- const tlsResult = this.tlsDetector.detect(buffer, options);
33
- if (tlsResult) {
34
- return tlsResult;
35
- }
36
- }
37
- // Try HTTP detection
38
- if (this.httpDetector.canHandle(buffer)) {
39
- const httpResult = this.httpDetector.detect(buffer, options);
40
- if (httpResult) {
41
- return httpResult;
42
- }
43
- }
44
- // Neither TLS nor HTTP
45
- return {
46
- protocol: 'unknown',
47
- connectionInfo: { protocol: 'unknown' },
48
- isComplete: true
49
- };
50
- }
51
- /**
52
- * Detect protocol with connection context for fragmented data
53
- */
54
- async detectWithContext(buffer, context, options) {
55
- // Quick sanity check
56
- if (!buffer || buffer.length === 0) {
57
- return {
58
- protocol: 'unknown',
59
- connectionInfo: { protocol: 'unknown' },
60
- isComplete: true
61
- };
62
- }
63
- // First peek to determine protocol type
64
- if (this.tlsDetector.canHandle(buffer)) {
65
- const result = this.tlsDetector.detectWithContext(buffer, context, options);
66
- if (result) {
67
- return result;
68
- }
69
- }
70
- if (this.httpDetector.canHandle(buffer)) {
71
- const result = this.httpDetector.detectWithContext(buffer, context, options);
72
- if (result) {
73
- return result;
74
- }
75
- }
76
- // Can't determine protocol
77
- return {
78
- protocol: 'unknown',
79
- connectionInfo: { protocol: 'unknown' },
80
- isComplete: false,
81
- bytesNeeded: Math.max(this.tlsDetector.getMinimumBytes(), this.httpDetector.getMinimumBytes())
82
- };
83
- }
84
- /**
85
- * Clean up resources
86
- */
87
- cleanup() {
88
- this.fragmentManager.cleanup();
89
- }
90
- /**
91
- * Destroy detector instance
92
- */
93
- destroy() {
94
- this.fragmentManager.destroy();
95
- }
96
- /**
97
- * Extract domain from connection info
98
- */
99
- static extractDomain(connectionInfo) {
100
- return connectionInfo.domain || connectionInfo.sni || connectionInfo.host;
101
- }
102
- /**
103
- * Create a connection context from parameters
104
- */
105
- static createConnectionContext(params) {
106
- return {
107
- id: params.socketId,
108
- sourceIp: params.sourceIp || 'unknown',
109
- sourcePort: params.sourcePort || 0,
110
- destIp: params.destIp || 'unknown',
111
- destPort: params.destPort || 0,
112
- timestamp: Date.now()
113
- };
114
- }
115
- }
116
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdG9jb2wtZGV0ZWN0b3ItdjIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9kZXRlY3Rpb24vcHJvdG9jb2wtZGV0ZWN0b3ItdjIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUlILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDakUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFdkU7O0dBRUc7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBSzdCO1FBQ0UsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLHdCQUF3QixFQUFFLENBQUM7UUFDdEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFjLEVBQUUsT0FBMkI7UUFDdEQscUJBQXFCO1FBQ3JCLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNuQyxPQUFPO2dCQUNMLFFBQVEsRUFBRSxTQUFTO2dCQUNuQixjQUFjLEVBQUUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFO2dCQUN2QyxVQUFVLEVBQUUsSUFBSTthQUNqQixDQUFDO1FBQ0osQ0FBQztRQUVELDBDQUEwQztRQUMxQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDdkMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FB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
@@ -1,42 +0,0 @@
1
- import type * as plugins from '../../plugins.js';
2
- /**
3
- * The primary forwarding types supported by SmartProxy
4
- * Used for configuration compatibility
5
- */
6
- export type TForwardingType = 'http-only' | 'https-passthrough' | 'https-terminate-to-http' | 'https-terminate-to-https';
7
- /**
8
- * Event types emitted by forwarding handlers
9
- */
10
- export declare enum ForwardingHandlerEvents {
11
- CONNECTED = "connected",
12
- DISCONNECTED = "disconnected",
13
- ERROR = "error",
14
- DATA_FORWARDED = "data-forwarded",
15
- HTTP_REQUEST = "http-request",
16
- HTTP_RESPONSE = "http-response",
17
- CERTIFICATE_NEEDED = "certificate-needed",
18
- CERTIFICATE_LOADED = "certificate-loaded"
19
- }
20
- /**
21
- * Base interface for forwarding handlers
22
- */
23
- export interface IForwardingHandler extends plugins.EventEmitter {
24
- initialize(): Promise<void>;
25
- handleConnection(socket: plugins.net.Socket): void;
26
- handleHttpRequest(req: plugins.http.IncomingMessage, res: plugins.http.ServerResponse): void;
27
- }
28
- import { createHttpRoute, createHttpsTerminateRoute, createHttpsPassthroughRoute, createHttpToHttpsRedirect, createCompleteHttpsServer, createLoadBalancerRoute } from '../../proxies/smart-proxy/utils/route-patterns.js';
29
- export { createHttpRoute, createHttpsTerminateRoute, createHttpsPassthroughRoute, createHttpToHttpsRedirect, createCompleteHttpsServer, createLoadBalancerRoute };
30
- export interface IForwardConfig {
31
- type: TForwardingType;
32
- target: {
33
- host: string | string[];
34
- port: number | 'preserve' | ((ctx: any) => number);
35
- };
36
- http?: any;
37
- https?: any;
38
- acme?: any;
39
- security?: any;
40
- advanced?: any;
41
- [key: string]: any;
42
- }
@@ -1,18 +0,0 @@
1
- /**
2
- * Event types emitted by forwarding handlers
3
- */
4
- export var ForwardingHandlerEvents;
5
- (function (ForwardingHandlerEvents) {
6
- ForwardingHandlerEvents["CONNECTED"] = "connected";
7
- ForwardingHandlerEvents["DISCONNECTED"] = "disconnected";
8
- ForwardingHandlerEvents["ERROR"] = "error";
9
- ForwardingHandlerEvents["DATA_FORWARDED"] = "data-forwarded";
10
- ForwardingHandlerEvents["HTTP_REQUEST"] = "http-request";
11
- ForwardingHandlerEvents["HTTP_RESPONSE"] = "http-response";
12
- ForwardingHandlerEvents["CERTIFICATE_NEEDED"] = "certificate-needed";
13
- ForwardingHandlerEvents["CERTIFICATE_LOADED"] = "certificate-loaded";
14
- })(ForwardingHandlerEvents || (ForwardingHandlerEvents = {}));
15
- // Route-based helpers are now available directly from route-patterns.ts
16
- import { createHttpRoute, createHttpsTerminateRoute, createHttpsPassthroughRoute, createHttpToHttpsRedirect, createCompleteHttpsServer, createLoadBalancerRoute } from '../../proxies/smart-proxy/utils/route-patterns.js';
17
- export { createHttpRoute, createHttpsTerminateRoute, createHttpsPassthroughRoute, createHttpToHttpsRedirect, createCompleteHttpsServer, createLoadBalancerRoute };
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yd2FyZGluZy10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2ZvcndhcmRpbmcvY29uZmlnL2ZvcndhcmRpbmctdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBWUE7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSx1QkFTWDtBQVRELFdBQVksdUJBQXVCO0lBQ2pDLGtEQUF1QixDQUFBO0lBQ3ZCLHdEQUE2QixDQUFBO0lBQzdCLDBDQUFlLENBQUE7SUFDZiw0REFBaUMsQ0FBQTtJQUNqQyx3REFBNkIsQ0FBQTtJQUM3QiwwREFBK0IsQ0FBQTtJQUMvQixvRUFBeUMsQ0FBQTtJQUN6QyxvRUFBeUMsQ0FBQTtBQUMzQyxDQUFDLEVBVFcsdUJBQXVCLEtBQXZCLHVCQUF1QixRQVNsQztBQVdELHdFQUF3RTtBQUN4RSxPQUFPLEVBQ0wsZUFBZSxFQUNmLHlCQUF5QixFQUN6QiwyQkFBMkIsRUFDM0IseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6Qix1QkFBdUIsRUFDeEIsTUFBTSxtREFBbUQsQ0FBQztBQUUzRCxPQUFPLEVBQ0wsZUFBZSxFQUNmLHlCQUF5QixFQUN6QiwyQkFBMkIsRUFDM0IseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6Qix1QkFBdUIsRUFDeEIsQ0FBQyJ9
@@ -1,9 +0,0 @@
1
- /**
2
- * Forwarding configuration exports
3
- *
4
- * Note: The legacy domain-based configuration has been replaced by route-based configuration.
5
- * See /ts/proxies/smart-proxy/models/route-types.ts for the new route-based configuration.
6
- */
7
- export type { TForwardingType, IForwardConfig, IForwardingHandler } from './forwarding-types.js';
8
- export { ForwardingHandlerEvents } from './forwarding-types.js';
9
- export { createHttpRoute, createHttpsTerminateRoute, createHttpsPassthroughRoute, createHttpToHttpsRedirect, createCompleteHttpsServer, createLoadBalancerRoute } from '../../proxies/smart-proxy/utils/route-patterns.js';
@@ -1,10 +0,0 @@
1
- /**
2
- * Forwarding configuration exports
3
- *
4
- * Note: The legacy domain-based configuration has been replaced by route-based configuration.
5
- * See /ts/proxies/smart-proxy/models/route-types.ts for the new route-based configuration.
6
- */
7
- export { ForwardingHandlerEvents } from './forwarding-types.js';
8
- // Import route helpers from route-patterns instead of deleted route-helpers
9
- export { createHttpRoute, createHttpsTerminateRoute, createHttpsPassthroughRoute, createHttpToHttpsRedirect, createCompleteHttpsServer, createLoadBalancerRoute } from '../../proxies/smart-proxy/utils/route-patterns.js';
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9mb3J3YXJkaW5nL2NvbmZpZy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQVFILE9BQU8sRUFDTCx1QkFBdUIsRUFDeEIsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQiw0RUFBNEU7QUFDNUUsT0FBTyxFQUNMLGVBQWUsRUFDZix5QkFBeUIsRUFDekIsMkJBQTJCLEVBQzNCLHlCQUF5QixFQUN6Qix5QkFBeUIsRUFDekIsdUJBQXVCLEVBQ3hCLE1BQU0sbURBQW1ELENBQUMifQ==
@@ -1,25 +0,0 @@
1
- import type { IForwardConfig } from '../config/forwarding-types.js';
2
- import { ForwardingHandler } from '../handlers/base-handler.js';
3
- /**
4
- * Factory for creating forwarding handlers based on the configuration type
5
- */
6
- export declare class ForwardingHandlerFactory {
7
- /**
8
- * Create a forwarding handler based on the configuration
9
- * @param config The forwarding configuration
10
- * @returns The appropriate forwarding handler
11
- */
12
- static createHandler(config: IForwardConfig): ForwardingHandler;
13
- /**
14
- * Apply default values to a forwarding configuration based on its type
15
- * @param config The original forwarding configuration
16
- * @returns A configuration with defaults applied
17
- */
18
- static applyDefaults(config: IForwardConfig): IForwardConfig;
19
- /**
20
- * Validate a forwarding configuration
21
- * @param config The configuration to validate
22
- * @throws Error if the configuration is invalid
23
- */
24
- static validateConfig(config: IForwardConfig): void;
25
- }
@@ -1,172 +0,0 @@
1
- import { ForwardingHandler } from '../handlers/base-handler.js';
2
- import { HttpForwardingHandler } from '../handlers/http-handler.js';
3
- import { HttpsPassthroughHandler } from '../handlers/https-passthrough-handler.js';
4
- import { HttpsTerminateToHttpHandler } from '../handlers/https-terminate-to-http-handler.js';
5
- import { HttpsTerminateToHttpsHandler } from '../handlers/https-terminate-to-https-handler.js';
6
- /**
7
- * Factory for creating forwarding handlers based on the configuration type
8
- */
9
- export class ForwardingHandlerFactory {
10
- /**
11
- * Create a forwarding handler based on the configuration
12
- * @param config The forwarding configuration
13
- * @returns The appropriate forwarding handler
14
- */
15
- static createHandler(config) {
16
- // Create the appropriate handler based on the forwarding type
17
- switch (config.type) {
18
- case 'http-only':
19
- return new HttpForwardingHandler(config);
20
- case 'https-passthrough':
21
- return new HttpsPassthroughHandler(config);
22
- case 'https-terminate-to-http':
23
- return new HttpsTerminateToHttpHandler(config);
24
- case 'https-terminate-to-https':
25
- return new HttpsTerminateToHttpsHandler(config);
26
- default:
27
- // Type system should prevent this, but just in case:
28
- throw new Error(`Unknown forwarding type: ${config.type}`);
29
- }
30
- }
31
- /**
32
- * Apply default values to a forwarding configuration based on its type
33
- * @param config The original forwarding configuration
34
- * @returns A configuration with defaults applied
35
- */
36
- static applyDefaults(config) {
37
- // Create a deep copy of the configuration
38
- const result = JSON.parse(JSON.stringify(config));
39
- // Apply defaults based on forwarding type
40
- switch (config.type) {
41
- case 'http-only':
42
- // Set defaults for HTTP-only mode
43
- result.http = {
44
- enabled: true,
45
- ...config.http
46
- };
47
- // Set default port and socket if not provided
48
- if (!result.port) {
49
- result.port = 80;
50
- }
51
- if (!result.socket) {
52
- result.socket = `/tmp/forwarding-${config.type}-${result.port}.sock`;
53
- }
54
- break;
55
- case 'https-passthrough':
56
- // Set defaults for HTTPS passthrough
57
- result.https = {
58
- forwardSni: true,
59
- ...config.https
60
- };
61
- // SNI forwarding doesn't do HTTP
62
- result.http = {
63
- enabled: false,
64
- ...config.http
65
- };
66
- // Set default port and socket if not provided
67
- if (!result.port) {
68
- result.port = 443;
69
- }
70
- if (!result.socket) {
71
- result.socket = `/tmp/forwarding-${config.type}-${result.port}.sock`;
72
- }
73
- break;
74
- case 'https-terminate-to-http':
75
- // Set defaults for HTTPS termination to HTTP
76
- result.https = {
77
- ...config.https
78
- };
79
- // Support HTTP access by default in this mode
80
- result.http = {
81
- enabled: true,
82
- redirectToHttps: true,
83
- ...config.http
84
- };
85
- // Enable ACME by default
86
- result.acme = {
87
- enabled: true,
88
- maintenance: true,
89
- ...config.acme
90
- };
91
- // Set default port and socket if not provided
92
- if (!result.port) {
93
- result.port = 443;
94
- }
95
- if (!result.socket) {
96
- result.socket = `/tmp/forwarding-${config.type}-${result.port}.sock`;
97
- }
98
- break;
99
- case 'https-terminate-to-https':
100
- // Similar to terminate-to-http but with different target handling
101
- result.https = {
102
- ...config.https
103
- };
104
- result.http = {
105
- enabled: true,
106
- redirectToHttps: true,
107
- ...config.http
108
- };
109
- result.acme = {
110
- enabled: true,
111
- maintenance: true,
112
- ...config.acme
113
- };
114
- // Set default port and socket if not provided
115
- if (!result.port) {
116
- result.port = 443;
117
- }
118
- if (!result.socket) {
119
- result.socket = `/tmp/forwarding-${config.type}-${result.port}.sock`;
120
- }
121
- break;
122
- }
123
- return result;
124
- }
125
- /**
126
- * Validate a forwarding configuration
127
- * @param config The configuration to validate
128
- * @throws Error if the configuration is invalid
129
- */
130
- static validateConfig(config) {
131
- // Validate common properties
132
- if (!config.target) {
133
- throw new Error('Forwarding configuration must include a target');
134
- }
135
- if (!config.target.host || (Array.isArray(config.target.host) && config.target.host.length === 0)) {
136
- throw new Error('Target must include a host or array of hosts');
137
- }
138
- // Validate port if it's a number
139
- if (typeof config.target.port === 'number') {
140
- if (config.target.port <= 0 || config.target.port > 65535) {
141
- throw new Error('Target must include a valid port (1-65535)');
142
- }
143
- }
144
- else if (config.target.port !== 'preserve' && typeof config.target.port !== 'function') {
145
- throw new Error('Target port must be a number, "preserve", or a function');
146
- }
147
- // Type-specific validation
148
- switch (config.type) {
149
- case 'http-only':
150
- // HTTP-only needs http.enabled to be true
151
- if (config.http?.enabled === false) {
152
- throw new Error('HTTP-only forwarding must have HTTP enabled');
153
- }
154
- break;
155
- case 'https-passthrough':
156
- // HTTPS passthrough doesn't support HTTP
157
- if (config.http?.enabled === true) {
158
- throw new Error('HTTPS passthrough does not support HTTP');
159
- }
160
- // HTTPS passthrough doesn't work with ACME
161
- if (config.acme?.enabled === true) {
162
- throw new Error('HTTPS passthrough does not support ACME');
163
- }
164
- break;
165
- case 'https-terminate-to-http':
166
- case 'https-terminate-to-https':
167
- // These modes support all options, nothing specific to validate
168
- break;
169
- }
170
- }
171
- }
172
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yd2FyZGluZy1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvZm9yd2FyZGluZy9mYWN0b3J5L2ZvcndhcmRpbmctZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNuRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUM3RixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUUvRjs7R0FFRztBQUNILE1BQU0sT0FBTyx3QkFBd0I7SUFDbkM7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBc0I7UUFDaEQsOERBQThEO1FBQzlELFFBQVEsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3BCLEtBQUssV0FBVztnQkFDZCxPQUFPLElBQUkscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFM0MsS0FBSyxtQkFBbUI7Z0JBQ3RCLE9BQU8sSUFBSSx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUU3QyxLQUFLLHlCQUF5QjtnQkFDNUIsT0FBTyxJQUFJLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRWpELEtBQUssMEJBQTBCO2dCQUM3QixPQUFPLElBQUksNEJBQTRCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFbEQ7Z0JBQ0UscURBQXFEO2dCQUNyRCxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE2QixNQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN4RSxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQXNCO1FBQ2hELDBDQUEwQztRQUMxQyxNQUFNLE1BQU0sR0FBbUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFFbEUsMENBQTBDO1FBQzFDLFFBQVEsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3BCLEtBQUssV0FBVztnQkFDZCxrQ0FBa0M7Z0JBQ2xDLE1BQU0sQ0FBQyxJQUFJLEdBQUc7b0JBQ1osT0FBTyxFQUFFLElBQUk7b0JBQ2IsR0FBRyxNQUFNLENBQUMsSUFBSTtpQkFDZixDQUFDO2dCQUNGLDhDQUE4QztnQkFDOUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDakIsTUFBTSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ25CLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDbkIsTUFBTSxDQUFDLE1BQU0sR0FBRyxtQkFBbUIsTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUM7Z0JBQ3ZFLENBQUM7Z0JBQ0QsTUFBTTtZQUVSLEtBQUssbUJBQW1CO2dCQUN0QixxQ0FBcUM7Z0JBQ3JDLE1BQU0sQ0FBQyxLQUFLLEdBQUc7b0JBQ2IsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLEdBQUcsTUFBTSxDQUFDLEtBQUs7aUJBQ2hCLENBQUM7Z0JBQ0YsaUNBQWlDO2dCQUNqQyxNQUFNLENBQUMsSUFBSSxHQUFHO29CQUNaLE9BQU8sRUFBRSxLQUFLO29CQUNkLEdBQUcsTUFBTSxDQUFDLElBQUk7aUJBQ2YsQ0FBQztnQkFDRiw4Q0FBOEM7Z0JBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ2pCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO2dCQUNwQixDQUFDO2dCQUNELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ25CLE1BQU0sQ0FBQyxNQUFNLEdBQUcsbUJBQW1CLE1BQU0sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDO2dCQUN2RSxDQUFDO2dCQUNELE1BQU07WUFFUixLQUFLLHlCQUF5QjtnQkFDNUIsNkNBQTZDO2dCQUM3QyxNQUFNLENBQUMsS0FBSyxHQUFHO29CQUNiLEdBQUcsTUFBTSxDQUFDLEtBQUs7aUJBQ2hCLENBQUM7Z0JBQ0YsOENBQThDO2dCQUM5QyxNQUFNLENBQUMsSUFBSSxHQUFHO29CQUNaLE9BQU8sRUFBRSxJQUFJO29CQUNiLGVBQWUsRUFBRSxJQUFJO29CQUNyQixHQUFHLE1BQU0sQ0FBQyxJQUFJO2lCQUNmLENBQUM7Z0JBQ0YseUJBQXlCO2dCQUN6QixNQUFNLENBQUMsSUFBSSxHQUFHO29CQUNaLE9BQU8sRUFBRSxJQUFJO29CQUNiLFdBQVcsRUFBRSxJQUFJO29CQUNqQixHQUFHLE1BQU0sQ0FBQyxJQUFJO2lCQUNmLENBQUM7Z0JBQ0YsOENBQThDO2dCQUM5QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNqQixNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztnQkFDcEIsQ0FBQztnQkFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNuQixNQUFNLENBQUMsTUFBTSxHQUFHLG1CQUFtQixNQUFNLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQztnQkFDdkUsQ0FBQztnQkFDRCxNQUFNO1lBRVIsS0FBSywwQkFBMEI7Z0JBQzdCLGtFQUFrRTtnQkFDbEUsTUFBTSxDQUFDLEtBQUssR0FBRztvQkFDYixHQUFHLE1BQU0sQ0FBQyxLQUFLO2lCQUNoQixDQUFDO2dCQUNGLE1BQU0sQ0FBQyxJQUFJLEdBQUc7b0JBQ1osT0FBTyxFQUFFLElBQUk7b0JBQ2IsZUFBZSxFQUFFLElBQUk7b0JBQ3JCLEdBQUcsTUFBTSxDQUFDLElBQUk7aUJBQ2YsQ0FBQztnQkFDRixNQUFNLENBQUMsSUFBSSxHQUFHO29CQUNaLE9BQU8sRUFBRSxJQUFJO29CQUNiLFdBQVcsRUFBRSxJQUFJO29CQUNqQixHQUFHLE1BQU0sQ0FBQyxJQUFJO2lCQUNmLENBQUM7Z0JBQ0YsOENBQThDO2dCQUM5QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNqQixNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztnQkFDcEIsQ0FBQztnQkFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNuQixNQUFNLENBQUMsTUFBTSxHQUFHLG1CQUFtQixNQUFNLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQztnQkFDdkUsQ0FBQztnQkFDRCxNQUFNO1FBQ1YsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFzQjtRQUNqRCw2QkFBNkI7UUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsRyxNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7UUFDbEUsQ0FBQztRQUVELGlDQUFpQztRQUNqQyxJQUFJLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDM0MsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUM7Z0JBQzFELE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztZQUNoRSxDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssVUFBVSxJQUFJLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDekYsTUFBTSxJQUFJLEtBQUssQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO1FBQzdFLENBQUM7UUFFRCwyQkFBMkI7UUFDM0IsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDcEIsS0FBSyxXQUFXO2dCQUNkLDBDQUEwQztnQkFDMUMsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sS0FBSyxLQUFLLEVBQUUsQ0FBQztvQkFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO2dCQUNqRSxDQUFDO2dCQUNELE1BQU07WUFFUixLQUFLLG1CQUFtQjtnQkFDdEIseUNBQXlDO2dCQUN6QyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxLQUFLLElBQUksRUFBRSxDQUFDO29CQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7Z0JBQzdELENBQUM7Z0JBRUQsMkNBQTJDO2dCQUMzQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxLQUFLLElBQUksRUFBRSxDQUFDO29CQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7Z0JBQzdELENBQUM7Z0JBQ0QsTUFBTTtZQUVSLEtBQUsseUJBQXlCLENBQUM7WUFDL0IsS0FBSywwQkFBMEI7Z0JBQzdCLGdFQUFnRTtnQkFDaEUsTUFBTTtRQUNWLENBQUM7SUFDSCxDQUFDO0NBQ0YifQ==
@@ -1,4 +0,0 @@
1
- /**
2
- * Forwarding factory implementations
3
- */
4
- export { ForwardingHandlerFactory } from './forwarding-factory.js';
@@ -1,5 +0,0 @@
1
- /**
2
- * Forwarding factory implementations
3
- */
4
- export { ForwardingHandlerFactory } from './forwarding-factory.js';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9mb3J3YXJkaW5nL2ZhY3RvcnkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQyJ9
@@ -1,62 +0,0 @@
1
- import * as plugins from '../../plugins.js';
2
- import type { IForwardConfig, IForwardingHandler } from '../config/forwarding-types.js';
3
- /**
4
- * Base class for all forwarding handlers
5
- */
6
- export declare abstract class ForwardingHandler extends plugins.EventEmitter implements IForwardingHandler {
7
- protected config: IForwardConfig;
8
- /**
9
- * Create a new ForwardingHandler
10
- * @param config The forwarding configuration
11
- */
12
- constructor(config: IForwardConfig);
13
- /**
14
- * Initialize the handler
15
- * Base implementation does nothing, subclasses should override as needed
16
- */
17
- initialize(): Promise<void>;
18
- /**
19
- * Handle a new socket connection
20
- * @param socket The incoming socket connection
21
- */
22
- abstract handleConnection(socket: plugins.net.Socket): void;
23
- /**
24
- * Handle an HTTP request
25
- * @param req The HTTP request
26
- * @param res The HTTP response
27
- */
28
- abstract handleHttpRequest(req: plugins.http.IncomingMessage, res: plugins.http.ServerResponse): void;
29
- /**
30
- * Get a target from the configuration, supporting round-robin selection
31
- * @param incomingPort Optional incoming port for 'preserve' mode
32
- * @returns A resolved target object with host and port
33
- */
34
- protected getTargetFromConfig(incomingPort?: number): {
35
- host: string;
36
- port: number;
37
- };
38
- /**
39
- * Resolves a port value, handling 'preserve' and function ports
40
- * @param port The port value to resolve
41
- * @param incomingPort Optional incoming port to use for 'preserve' mode
42
- */
43
- protected resolvePort(port: number | 'preserve' | ((ctx: any) => number), incomingPort?: number): number;
44
- /**
45
- * Redirect an HTTP request to HTTPS
46
- * @param req The HTTP request
47
- * @param res The HTTP response
48
- */
49
- protected redirectToHttps(req: plugins.http.IncomingMessage, res: plugins.http.ServerResponse): void;
50
- /**
51
- * Apply custom headers from configuration
52
- * @param headers The original headers
53
- * @param variables Variables to replace in the headers
54
- * @returns The headers with custom values applied
55
- */
56
- protected applyCustomHeaders(headers: Record<string, string | string[] | undefined>, variables: Record<string, string>): Record<string, string | string[] | undefined>;
57
- /**
58
- * Get the timeout for this connection from configuration
59
- * @returns Timeout in milliseconds
60
- */
61
- protected getTimeout(): number;
62
- }