@push.rocks/smartproxy 23.0.0 → 23.1.1

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 (161) hide show
  1. package/changelog.md +17 -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/plugins.d.ts +2 -1
  6. package/dist_ts/plugins.js +3 -2
  7. package/dist_ts/proxies/smart-proxy/rust-proxy-bridge.d.ts +9 -21
  8. package/dist_ts/proxies/smart-proxy/rust-proxy-bridge.js +84 -212
  9. package/dist_ts/proxies/smart-proxy/smart-proxy.js +2 -3
  10. package/npmextra.json +3 -0
  11. package/package.json +13 -11
  12. package/readme.md +41 -11
  13. package/ts/00_commitinfo_data.ts +1 -1
  14. package/ts/plugins.ts +2 -0
  15. package/ts/proxies/smart-proxy/rust-proxy-bridge.ts +103 -233
  16. package/ts/proxies/smart-proxy/smart-proxy.ts +1 -2
  17. package/dist_ts/common/eventUtils.d.ts +0 -14
  18. package/dist_ts/common/eventUtils.js +0 -20
  19. package/dist_ts/common/types.d.ts +0 -82
  20. package/dist_ts/common/types.js +0 -15
  21. package/dist_ts/core/utils/event-system.d.ts +0 -200
  22. package/dist_ts/core/utils/event-system.js +0 -224
  23. package/dist_ts/core/utils/event-utils.d.ts +0 -15
  24. package/dist_ts/core/utils/event-utils.js +0 -11
  25. package/dist_ts/core/utils/route-manager.d.ts +0 -88
  26. package/dist_ts/core/utils/route-manager.js +0 -342
  27. package/dist_ts/core/utils/route-utils.d.ts +0 -28
  28. package/dist_ts/core/utils/route-utils.js +0 -67
  29. package/dist_ts/detection/detectors/http-detector-v2.d.ts +0 -33
  30. package/dist_ts/detection/detectors/http-detector-v2.js +0 -87
  31. package/dist_ts/detection/detectors/tls-detector-v2.d.ts +0 -33
  32. package/dist_ts/detection/detectors/tls-detector-v2.js +0 -80
  33. package/dist_ts/detection/protocol-detector-v2.d.ts +0 -46
  34. package/dist_ts/detection/protocol-detector-v2.js +0 -116
  35. package/dist_ts/forwarding/config/forwarding-types.d.ts +0 -42
  36. package/dist_ts/forwarding/config/forwarding-types.js +0 -18
  37. package/dist_ts/forwarding/config/index.d.ts +0 -9
  38. package/dist_ts/forwarding/config/index.js +0 -10
  39. package/dist_ts/forwarding/factory/forwarding-factory.d.ts +0 -25
  40. package/dist_ts/forwarding/factory/forwarding-factory.js +0 -172
  41. package/dist_ts/forwarding/factory/index.d.ts +0 -4
  42. package/dist_ts/forwarding/factory/index.js +0 -5
  43. package/dist_ts/forwarding/handlers/base-handler.d.ts +0 -62
  44. package/dist_ts/forwarding/handlers/base-handler.js +0 -121
  45. package/dist_ts/forwarding/handlers/http-handler.d.ts +0 -30
  46. package/dist_ts/forwarding/handlers/http-handler.js +0 -143
  47. package/dist_ts/forwarding/handlers/https-passthrough-handler.d.ts +0 -29
  48. package/dist_ts/forwarding/handlers/https-passthrough-handler.js +0 -156
  49. package/dist_ts/forwarding/handlers/https-terminate-to-http-handler.d.ts +0 -36
  50. package/dist_ts/forwarding/handlers/https-terminate-to-http-handler.js +0 -276
  51. package/dist_ts/forwarding/handlers/https-terminate-to-https-handler.d.ts +0 -35
  52. package/dist_ts/forwarding/handlers/https-terminate-to-https-handler.js +0 -261
  53. package/dist_ts/forwarding/handlers/index.d.ts +0 -8
  54. package/dist_ts/forwarding/handlers/index.js +0 -9
  55. package/dist_ts/forwarding/index.d.ts +0 -13
  56. package/dist_ts/forwarding/index.js +0 -16
  57. package/dist_ts/http/index.d.ts +0 -5
  58. package/dist_ts/http/index.js +0 -8
  59. package/dist_ts/http/models/http-types.d.ts +0 -6
  60. package/dist_ts/http/models/http-types.js +0 -7
  61. package/dist_ts/http/router/index.d.ts +0 -8
  62. package/dist_ts/http/router/index.js +0 -7
  63. package/dist_ts/http/router/proxy-router.d.ts +0 -115
  64. package/dist_ts/http/router/proxy-router.js +0 -325
  65. package/dist_ts/http/router/route-router.d.ts +0 -108
  66. package/dist_ts/http/router/route-router.js +0 -393
  67. package/dist_ts/protocols/tls/constants.d.ts +0 -122
  68. package/dist_ts/protocols/tls/constants.js +0 -135
  69. package/dist_ts/protocols/tls/parser.d.ts +0 -53
  70. package/dist_ts/protocols/tls/parser.js +0 -294
  71. package/dist_ts/protocols/tls/types.d.ts +0 -65
  72. package/dist_ts/protocols/tls/types.js +0 -5
  73. package/dist_ts/proxies/http-proxy/certificate-manager.d.ts +0 -95
  74. package/dist_ts/proxies/http-proxy/certificate-manager.js +0 -214
  75. package/dist_ts/proxies/http-proxy/connection-pool.d.ts +0 -47
  76. package/dist_ts/proxies/http-proxy/connection-pool.js +0 -195
  77. package/dist_ts/proxies/http-proxy/context-creator.d.ts +0 -34
  78. package/dist_ts/proxies/http-proxy/context-creator.js +0 -108
  79. package/dist_ts/proxies/http-proxy/default-certificates.d.ts +0 -54
  80. package/dist_ts/proxies/http-proxy/default-certificates.js +0 -127
  81. package/dist_ts/proxies/http-proxy/function-cache.d.ts +0 -95
  82. package/dist_ts/proxies/http-proxy/function-cache.js +0 -215
  83. package/dist_ts/proxies/http-proxy/handlers/index.d.ts +0 -4
  84. package/dist_ts/proxies/http-proxy/handlers/index.js +0 -6
  85. package/dist_ts/proxies/http-proxy/handlers/redirect-handler.d.ts +0 -18
  86. package/dist_ts/proxies/http-proxy/handlers/redirect-handler.js +0 -78
  87. package/dist_ts/proxies/http-proxy/handlers/static-handler.d.ts +0 -19
  88. package/dist_ts/proxies/http-proxy/handlers/static-handler.js +0 -211
  89. package/dist_ts/proxies/http-proxy/http-proxy.d.ts +0 -117
  90. package/dist_ts/proxies/http-proxy/http-proxy.js +0 -521
  91. package/dist_ts/proxies/http-proxy/http-request-handler.d.ts +0 -40
  92. package/dist_ts/proxies/http-proxy/http-request-handler.js +0 -257
  93. package/dist_ts/proxies/http-proxy/http2-request-handler.d.ts +0 -24
  94. package/dist_ts/proxies/http-proxy/http2-request-handler.js +0 -201
  95. package/dist_ts/proxies/http-proxy/index.d.ts +0 -14
  96. package/dist_ts/proxies/http-proxy/index.js +0 -16
  97. package/dist_ts/proxies/http-proxy/models/http-types.d.ts +0 -117
  98. package/dist_ts/proxies/http-proxy/models/http-types.js +0 -92
  99. package/dist_ts/proxies/http-proxy/models/index.d.ts +0 -5
  100. package/dist_ts/proxies/http-proxy/models/index.js +0 -6
  101. package/dist_ts/proxies/http-proxy/models/types.d.ts +0 -75
  102. package/dist_ts/proxies/http-proxy/models/types.js +0 -35
  103. package/dist_ts/proxies/http-proxy/request-handler.d.ts +0 -97
  104. package/dist_ts/proxies/http-proxy/request-handler.js +0 -737
  105. package/dist_ts/proxies/http-proxy/security-manager.d.ts +0 -98
  106. package/dist_ts/proxies/http-proxy/security-manager.js +0 -341
  107. package/dist_ts/proxies/http-proxy/websocket-handler.d.ts +0 -50
  108. package/dist_ts/proxies/http-proxy/websocket-handler.js +0 -505
  109. package/dist_ts/proxies/smart-proxy/acme-state-manager.d.ts +0 -42
  110. package/dist_ts/proxies/smart-proxy/acme-state-manager.js +0 -101
  111. package/dist_ts/proxies/smart-proxy/cert-store.d.ts +0 -10
  112. package/dist_ts/proxies/smart-proxy/cert-store.js +0 -72
  113. package/dist_ts/proxies/smart-proxy/certificate-manager.d.ts +0 -164
  114. package/dist_ts/proxies/smart-proxy/certificate-manager.js +0 -745
  115. package/dist_ts/proxies/smart-proxy/connection-manager.d.ts +0 -128
  116. package/dist_ts/proxies/smart-proxy/connection-manager.js +0 -689
  117. package/dist_ts/proxies/smart-proxy/http-proxy-bridge.d.ts +0 -43
  118. package/dist_ts/proxies/smart-proxy/http-proxy-bridge.js +0 -180
  119. package/dist_ts/proxies/smart-proxy/metrics-collector.d.ts +0 -98
  120. package/dist_ts/proxies/smart-proxy/metrics-collector.js +0 -355
  121. package/dist_ts/proxies/smart-proxy/nftables-manager.d.ts +0 -82
  122. package/dist_ts/proxies/smart-proxy/nftables-manager.js +0 -237
  123. package/dist_ts/proxies/smart-proxy/port-manager.d.ts +0 -117
  124. package/dist_ts/proxies/smart-proxy/port-manager.js +0 -318
  125. package/dist_ts/proxies/smart-proxy/route-connection-handler.d.ts +0 -60
  126. package/dist_ts/proxies/smart-proxy/route-connection-handler.js +0 -1407
  127. package/dist_ts/proxies/smart-proxy/route-manager.d.ts +0 -112
  128. package/dist_ts/proxies/smart-proxy/route-manager.js +0 -453
  129. package/dist_ts/proxies/smart-proxy/route-orchestrator.d.ts +0 -56
  130. package/dist_ts/proxies/smart-proxy/route-orchestrator.js +0 -204
  131. package/dist_ts/proxies/smart-proxy/rust-binary-locator.d.ts +0 -23
  132. package/dist_ts/proxies/smart-proxy/rust-binary-locator.js +0 -104
  133. package/dist_ts/proxies/smart-proxy/security-manager.d.ts +0 -74
  134. package/dist_ts/proxies/smart-proxy/security-manager.js +0 -227
  135. package/dist_ts/proxies/smart-proxy/throughput-tracker.d.ts +0 -36
  136. package/dist_ts/proxies/smart-proxy/throughput-tracker.js +0 -115
  137. package/dist_ts/proxies/smart-proxy/timeout-manager.d.ts +0 -48
  138. package/dist_ts/proxies/smart-proxy/timeout-manager.js +0 -158
  139. package/dist_ts/proxies/smart-proxy/tls-manager.d.ts +0 -50
  140. package/dist_ts/proxies/smart-proxy/tls-manager.js +0 -110
  141. package/dist_ts/proxies/smart-proxy/utils/route-patterns.d.ts +0 -161
  142. package/dist_ts/proxies/smart-proxy/utils/route-patterns.js +0 -282
  143. package/dist_ts/proxies/smart-proxy/utils/route-validators.d.ts +0 -73
  144. package/dist_ts/proxies/smart-proxy/utils/route-validators.js +0 -259
  145. package/dist_ts/routing/router/proxy-router.d.ts +0 -115
  146. package/dist_ts/routing/router/proxy-router.js +0 -325
  147. package/dist_ts/routing/router/route-router.d.ts +0 -108
  148. package/dist_ts/routing/router/route-router.js +0 -393
  149. package/dist_ts/tls/alerts/index.d.ts +0 -4
  150. package/dist_ts/tls/alerts/index.js +0 -5
  151. package/dist_ts/tls/alerts/tls-alert.d.ts +0 -150
  152. package/dist_ts/tls/alerts/tls-alert.js +0 -226
  153. package/dist_ts/tls/sni/client-hello-parser.d.ts +0 -100
  154. package/dist_ts/tls/sni/client-hello-parser.js +0 -464
  155. package/dist_ts/tls/sni/sni-extraction.d.ts +0 -58
  156. package/dist_ts/tls/sni/sni-extraction.js +0 -275
  157. package/dist_ts/tls/utils/index.d.ts +0 -4
  158. package/dist_ts/tls/utils/index.js +0 -5
  159. package/dist_ts/tls/utils/tls-utils.d.ts +0 -49
  160. package/dist_ts/tls/utils/tls-utils.js +0 -75
  161. 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yd2FyZGluZy1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvZm9yd2FyZGluZy9mYWN0b3J5L2ZvcndhcmRpbmctZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNuRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUM3RixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUUvRjs7R0FFRztBQUNILE1BQU0sT0FBTyx3QkFBd0I7SUFDbkM7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBc0I7UUFDaEQsOERBQThEO1FBQzlELFFBQVEsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3BCLEtBQUssV0FBVztnQkFDZCxPQUFPLElBQUkscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFM0MsS0FBSyxtQkFBbUI7Z0JBQ3RCLE9BQU8sSUFBSSx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUU3QyxLQUFLLHlCQUF5QjtnQkFDNUIsT0FBTyxJQUFJLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRWpELEtBQUssMEJBQTBCO2dCQUM3QixPQUFPLElBQUksNEJBQTRCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFbEQ7Z0JBQ0UscURBQXFEO2dCQUNyRCxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE2QixNQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN4RSxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQXNCO1FBQ2hE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
@@ -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
- }