@push.rocks/smartproxy 23.0.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 (161) hide show
  1. package/changelog.md +10 -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 +83 -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 +102 -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,121 +0,0 @@
1
- import * as plugins from '../../plugins.js';
2
- import { ForwardingHandlerEvents } from '../config/forwarding-types.js';
3
- /**
4
- * Base class for all forwarding handlers
5
- */
6
- export class ForwardingHandler extends plugins.EventEmitter {
7
- /**
8
- * Create a new ForwardingHandler
9
- * @param config The forwarding configuration
10
- */
11
- constructor(config) {
12
- super();
13
- this.config = config;
14
- }
15
- /**
16
- * Initialize the handler
17
- * Base implementation does nothing, subclasses should override as needed
18
- */
19
- async initialize() {
20
- // Base implementation - no initialization needed
21
- }
22
- /**
23
- * Get a target from the configuration, supporting round-robin selection
24
- * @param incomingPort Optional incoming port for 'preserve' mode
25
- * @returns A resolved target object with host and port
26
- */
27
- getTargetFromConfig(incomingPort = 80) {
28
- const { target } = this.config;
29
- // Handle round-robin host selection
30
- if (Array.isArray(target.host)) {
31
- if (target.host.length === 0) {
32
- throw new Error('No target hosts specified');
33
- }
34
- // Simple round-robin selection
35
- const randomIndex = Math.floor(Math.random() * target.host.length);
36
- return {
37
- host: target.host[randomIndex],
38
- port: this.resolvePort(target.port, incomingPort)
39
- };
40
- }
41
- // Single host
42
- return {
43
- host: target.host,
44
- port: this.resolvePort(target.port, incomingPort)
45
- };
46
- }
47
- /**
48
- * Resolves a port value, handling 'preserve' and function ports
49
- * @param port The port value to resolve
50
- * @param incomingPort Optional incoming port to use for 'preserve' mode
51
- */
52
- resolvePort(port, incomingPort = 80) {
53
- if (typeof port === 'function') {
54
- try {
55
- // Create a minimal context for the function that includes the incoming port
56
- const ctx = { port: incomingPort };
57
- return port(ctx);
58
- }
59
- catch (err) {
60
- console.error('Error resolving port function:', err);
61
- return incomingPort; // Fall back to incoming port
62
- }
63
- }
64
- else if (port === 'preserve') {
65
- return incomingPort; // Use the actual incoming port for 'preserve'
66
- }
67
- else {
68
- return port;
69
- }
70
- }
71
- /**
72
- * Redirect an HTTP request to HTTPS
73
- * @param req The HTTP request
74
- * @param res The HTTP response
75
- */
76
- redirectToHttps(req, res) {
77
- const host = req.headers.host || '';
78
- const path = req.url || '/';
79
- const redirectUrl = `https://${host}${path}`;
80
- res.writeHead(301, {
81
- 'Location': redirectUrl,
82
- 'Cache-Control': 'no-cache'
83
- });
84
- res.end(`Redirecting to ${redirectUrl}`);
85
- this.emit(ForwardingHandlerEvents.HTTP_RESPONSE, {
86
- statusCode: 301,
87
- headers: { 'Location': redirectUrl },
88
- size: 0
89
- });
90
- }
91
- /**
92
- * Apply custom headers from configuration
93
- * @param headers The original headers
94
- * @param variables Variables to replace in the headers
95
- * @returns The headers with custom values applied
96
- */
97
- applyCustomHeaders(headers, variables) {
98
- const customHeaders = this.config.advanced?.headers || {};
99
- const result = { ...headers };
100
- // Apply custom headers with variable substitution
101
- for (const [key, value] of Object.entries(customHeaders)) {
102
- if (typeof value !== 'string')
103
- continue;
104
- let processedValue = value;
105
- // Replace variables in the header value
106
- for (const [varName, varValue] of Object.entries(variables)) {
107
- processedValue = processedValue.replace(`{${varName}}`, varValue);
108
- }
109
- result[key] = processedValue;
110
- }
111
- return result;
112
- }
113
- /**
114
- * Get the timeout for this connection from configuration
115
- * @returns Timeout in milliseconds
116
- */
117
- getTimeout() {
118
- return this.config.advanced?.timeout || 60000; // Default: 60 seconds
119
- }
120
- }
121
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvZm9yd2FyZGluZy9oYW5kbGVycy9iYXNlLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUs1QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUV4RTs7R0FFRztBQUNILE1BQU0sT0FBZ0IsaUJBQWtCLFNBQVEsT0FBTyxDQUFDLFlBQVk7SUFDbEU7OztPQUdHO0lBQ0gsWUFBc0IsTUFBc0I7UUFDMUMsS0FBSyxFQUFFLENBQUM7UUFEWSxXQUFNLEdBQU4sTUFBTSxDQUFnQjtJQUU1QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLFVBQVU7UUFDckIsaURBQWlEO0lBQ25ELENBQUM7SUFlRDs7OztPQUlHO0lBQ08sbUJBQW1CLENBQUMsZUFBdUIsRUFBRTtRQUNyRCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUUvQixvQ0FBb0M7UUFDcEMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQy9CLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztZQUMvQyxDQUFDO1lBRUQsK0JBQStCO1lBQy9CLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbkUsT0FBTztnQkFDTCxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQzlCLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxD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
@@ -1,30 +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 HTTP-only forwarding
6
- */
7
- export declare class HttpForwardingHandler extends ForwardingHandler {
8
- /**
9
- * Create a new HTTP forwarding handler
10
- * @param config The forwarding configuration
11
- */
12
- constructor(config: IForwardConfig);
13
- /**
14
- * Initialize the handler
15
- * HTTP handler doesn't need special initialization
16
- */
17
- initialize(): Promise<void>;
18
- /**
19
- * Handle a raw socket connection
20
- * HTTP handler doesn't do much with raw sockets as it mainly processes
21
- * parsed HTTP requests
22
- */
23
- handleConnection(socket: plugins.net.Socket): void;
24
- /**
25
- * Handle an HTTP request
26
- * @param req The HTTP request
27
- * @param res The HTTP response
28
- */
29
- handleHttpRequest(req: plugins.http.IncomingMessage, res: plugins.http.ServerResponse): void;
30
- }
@@ -1,143 +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 } from '../../core/utils/socket-utils.js';
5
- /**
6
- * Handler for HTTP-only forwarding
7
- */
8
- export class HttpForwardingHandler extends ForwardingHandler {
9
- /**
10
- * Create a new HTTP forwarding handler
11
- * @param config The forwarding configuration
12
- */
13
- constructor(config) {
14
- super(config);
15
- // Validate that this is an HTTP-only configuration
16
- if (config.type !== 'http-only') {
17
- throw new Error(`Invalid configuration type for HttpForwardingHandler: ${config.type}`);
18
- }
19
- }
20
- /**
21
- * Initialize the handler
22
- * HTTP handler doesn't need special initialization
23
- */
24
- async initialize() {
25
- // Basic initialization from parent class
26
- await super.initialize();
27
- }
28
- /**
29
- * Handle a raw socket connection
30
- * HTTP handler doesn't do much with raw sockets as it mainly processes
31
- * parsed HTTP requests
32
- */
33
- handleConnection(socket) {
34
- // For HTTP, we mainly handle parsed requests, but we can still set up
35
- // some basic connection tracking
36
- const remoteAddress = socket.remoteAddress || 'unknown';
37
- const localPort = socket.localPort || 80;
38
- // Set up socket handlers with proper cleanup
39
- const handleClose = (reason) => {
40
- this.emit(ForwardingHandlerEvents.DISCONNECTED, {
41
- remoteAddress,
42
- reason
43
- });
44
- };
45
- // Use custom timeout handler that doesn't close the socket
46
- setupSocketHandlers(socket, handleClose, () => {
47
- // For HTTP, we can be more aggressive with timeouts since connections are shorter
48
- // But still don't close immediately - let the connection finish naturally
49
- console.warn(`HTTP socket timeout from ${remoteAddress}`);
50
- }, 'http');
51
- socket.on('error', (error) => {
52
- this.emit(ForwardingHandlerEvents.ERROR, {
53
- remoteAddress,
54
- error: error.message
55
- });
56
- });
57
- this.emit(ForwardingHandlerEvents.CONNECTED, {
58
- remoteAddress,
59
- localPort
60
- });
61
- }
62
- /**
63
- * Handle an HTTP request
64
- * @param req The HTTP request
65
- * @param res The HTTP response
66
- */
67
- handleHttpRequest(req, res) {
68
- // Get the local port from the request (for 'preserve' port handling)
69
- const localPort = req.socket.localPort || 80;
70
- // Get the target from configuration, passing the incoming port
71
- const target = this.getTargetFromConfig(localPort);
72
- // Create a custom headers object with variables for substitution
73
- const variables = {
74
- clientIp: req.socket.remoteAddress || 'unknown'
75
- };
76
- // Prepare headers, merging with any custom headers from config
77
- const headers = this.applyCustomHeaders(req.headers, variables);
78
- // Create the proxy request options
79
- const options = {
80
- hostname: target.host,
81
- port: target.port,
82
- path: req.url,
83
- method: req.method,
84
- headers
85
- };
86
- // Create the proxy request
87
- const proxyReq = plugins.http.request(options, (proxyRes) => {
88
- // Copy status code and headers from the proxied response
89
- res.writeHead(proxyRes.statusCode || 500, proxyRes.headers);
90
- // Pipe the proxy response to the client response
91
- proxyRes.pipe(res);
92
- // Track bytes for logging
93
- let responseSize = 0;
94
- proxyRes.on('data', (chunk) => {
95
- responseSize += chunk.length;
96
- });
97
- proxyRes.on('end', () => {
98
- this.emit(ForwardingHandlerEvents.HTTP_RESPONSE, {
99
- statusCode: proxyRes.statusCode,
100
- headers: proxyRes.headers,
101
- size: responseSize
102
- });
103
- });
104
- });
105
- // Handle errors in the proxy request
106
- proxyReq.on('error', (error) => {
107
- this.emit(ForwardingHandlerEvents.ERROR, {
108
- remoteAddress: req.socket.remoteAddress,
109
- error: `Proxy request error: ${error.message}`
110
- });
111
- // Send an error response if headers haven't been sent yet
112
- if (!res.headersSent) {
113
- res.writeHead(502, { 'Content-Type': 'text/plain' });
114
- res.end(`Error forwarding request: ${error.message}`);
115
- }
116
- else {
117
- // Just end the response if headers have already been sent
118
- res.end();
119
- }
120
- });
121
- // Track request details for logging
122
- let requestSize = 0;
123
- req.on('data', (chunk) => {
124
- requestSize += chunk.length;
125
- });
126
- // Log the request
127
- this.emit(ForwardingHandlerEvents.HTTP_REQUEST, {
128
- method: req.method,
129
- url: req.url,
130
- headers: req.headers,
131
- remoteAddress: req.socket.remoteAddress,
132
- target: `${target.host}:${target.port}`
133
- });
134
- // Pipe the client request to the proxy request
135
- if (req.readable) {
136
- req.pipe(proxyReq);
137
- }
138
- else {
139
- proxyReq.end();
140
- }
141
- }
142
- }
143
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvZm9yd2FyZGluZy9oYW5kbGVycy9odHRwLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUV2RTs7R0FFRztBQUNILE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxpQkFBaUI7SUFDMUQ7OztPQUdHO0lBQ0gsWUFBWSxNQUFzQjtRQUNoQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFZCxtREFBbUQ7UUFDbkQsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMseURBQXlELE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzFGLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLFVBQVU7UUFDckIseUNBQXlDO1FBQ3pDLE1BQU0sS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksZ0JBQWdCLENBQUMsTUFBMEI7UUFDaEQsc0VBQXNFO1FBQ3RFLGlDQUFpQztRQUNqQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxJQUFJLFNBQVMsQ0FBQztRQUN4RCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztRQUV6Qyw2Q0FBNkM7UUFDN0MsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFjLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1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
@@ -1,29 +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 passthrough (SNI forwarding without termination)
6
- */
7
- export declare class HttpsPassthroughHandler extends ForwardingHandler {
8
- /**
9
- * Create a new HTTPS passthrough handler
10
- * @param config The forwarding configuration
11
- */
12
- constructor(config: IForwardConfig);
13
- /**
14
- * Initialize the handler
15
- * HTTPS passthrough handler doesn't need special initialization
16
- */
17
- initialize(): Promise<void>;
18
- /**
19
- * Handle a TLS/SSL socket connection by forwarding it without termination
20
- * @param clientSocket The incoming socket from the client
21
- */
22
- handleConnection(clientSocket: plugins.net.Socket): void;
23
- /**
24
- * Handle an HTTP request - HTTPS passthrough doesn't support HTTP
25
- * @param req The HTTP request
26
- * @param res The HTTP response
27
- */
28
- handleHttpRequest(_req: plugins.http.IncomingMessage, res: plugins.http.ServerResponse): void;
29
- }
@@ -1,156 +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 { createIndependentSocketHandlers, setupSocketHandlers, createSocketWithErrorHandler } from '../../core/utils/socket-utils.js';
5
- /**
6
- * Handler for HTTPS passthrough (SNI forwarding without termination)
7
- */
8
- export class HttpsPassthroughHandler extends ForwardingHandler {
9
- /**
10
- * Create a new HTTPS passthrough handler
11
- * @param config The forwarding configuration
12
- */
13
- constructor(config) {
14
- super(config);
15
- // Validate that this is an HTTPS passthrough configuration
16
- if (config.type !== 'https-passthrough') {
17
- throw new Error(`Invalid configuration type for HttpsPassthroughHandler: ${config.type}`);
18
- }
19
- }
20
- /**
21
- * Initialize the handler
22
- * HTTPS passthrough handler doesn't need special initialization
23
- */
24
- async initialize() {
25
- // Basic initialization from parent class
26
- await super.initialize();
27
- }
28
- /**
29
- * Handle a TLS/SSL socket connection by forwarding it without termination
30
- * @param clientSocket The incoming socket from the client
31
- */
32
- handleConnection(clientSocket) {
33
- // Get the target from configuration
34
- const target = this.getTargetFromConfig();
35
- // Log the connection
36
- const remoteAddress = clientSocket.remoteAddress || 'unknown';
37
- const remotePort = clientSocket.remotePort || 0;
38
- this.emit(ForwardingHandlerEvents.CONNECTED, {
39
- remoteAddress,
40
- remotePort,
41
- target: `${target.host}:${target.port}`
42
- });
43
- // Track data transfer for logging
44
- let bytesSent = 0;
45
- let bytesReceived = 0;
46
- let serverSocket = null;
47
- let cleanupClient = null;
48
- let cleanupServer = null;
49
- // Create a connection to the target server with immediate error handling
50
- serverSocket = createSocketWithErrorHandler({
51
- port: target.port,
52
- host: target.host,
53
- onError: async (error) => {
54
- // Server connection failed - clean up client socket immediately
55
- this.emit(ForwardingHandlerEvents.ERROR, {
56
- error: error.message,
57
- code: error.code || 'UNKNOWN',
58
- remoteAddress,
59
- target: `${target.host}:${target.port}`
60
- });
61
- // Clean up the client socket since we can't forward
62
- if (!clientSocket.destroyed) {
63
- clientSocket.destroy();
64
- }
65
- this.emit(ForwardingHandlerEvents.DISCONNECTED, {
66
- remoteAddress,
67
- bytesSent: 0,
68
- bytesReceived: 0,
69
- reason: `server_connection_failed: ${error.message}`
70
- });
71
- },
72
- onConnect: () => {
73
- // Connection successful - set up forwarding handlers
74
- const handlers = createIndependentSocketHandlers(clientSocket, serverSocket, (reason) => {
75
- this.emit(ForwardingHandlerEvents.DISCONNECTED, {
76
- remoteAddress,
77
- bytesSent,
78
- bytesReceived,
79
- reason
80
- });
81
- });
82
- cleanupClient = handlers.cleanupClient;
83
- cleanupServer = handlers.cleanupServer;
84
- // Setup handlers with custom timeout handling that doesn't close connections
85
- const timeout = this.getTimeout();
86
- setupSocketHandlers(clientSocket, cleanupClient, (socket) => {
87
- // Just reset timeout, don't close
88
- socket.setTimeout(timeout);
89
- }, 'client');
90
- setupSocketHandlers(serverSocket, cleanupServer, (socket) => {
91
- // Just reset timeout, don't close
92
- socket.setTimeout(timeout);
93
- }, 'server');
94
- // Forward data from client to server
95
- clientSocket.on('data', (data) => {
96
- bytesSent += data.length;
97
- // Check if server socket is writable
98
- if (serverSocket && serverSocket.writable) {
99
- const flushed = serverSocket.write(data);
100
- // Handle backpressure
101
- if (!flushed) {
102
- clientSocket.pause();
103
- serverSocket.once('drain', () => {
104
- clientSocket.resume();
105
- });
106
- }
107
- }
108
- this.emit(ForwardingHandlerEvents.DATA_FORWARDED, {
109
- direction: 'outbound',
110
- bytes: data.length,
111
- total: bytesSent
112
- });
113
- });
114
- // Forward data from server to client
115
- serverSocket.on('data', (data) => {
116
- bytesReceived += data.length;
117
- // Check if client socket is writable
118
- if (clientSocket.writable) {
119
- const flushed = clientSocket.write(data);
120
- // Handle backpressure
121
- if (!flushed) {
122
- serverSocket.pause();
123
- clientSocket.once('drain', () => {
124
- serverSocket.resume();
125
- });
126
- }
127
- }
128
- this.emit(ForwardingHandlerEvents.DATA_FORWARDED, {
129
- direction: 'inbound',
130
- bytes: data.length,
131
- total: bytesReceived
132
- });
133
- });
134
- // Set initial timeouts - they will be reset on each timeout event
135
- clientSocket.setTimeout(timeout);
136
- serverSocket.setTimeout(timeout);
137
- }
138
- });
139
- }
140
- /**
141
- * Handle an HTTP request - HTTPS passthrough doesn't support HTTP
142
- * @param req The HTTP request
143
- * @param res The HTTP response
144
- */
145
- handleHttpRequest(_req, res) {
146
- // HTTPS passthrough doesn't support HTTP requests
147
- res.writeHead(404, { 'Content-Type': 'text/plain' });
148
- res.end('HTTP not supported for this domain');
149
- this.emit(ForwardingHandlerEvents.HTTP_RESPONSE, {
150
- statusCode: 404,
151
- headers: { 'Content-Type': 'text/plain' },
152
- size: 'HTTP not supported for this domain'.length
153
- });
154
- }
155
- }
156
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cHMtcGFzc3Rocm91Z2gtaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2ZvcndhcmRpbmcvaGFuZGxlcnMvaHR0cHMtcGFzc3Rocm91Z2gtaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXRELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxtQkFBbUIsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXRJOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHVCQUF3QixTQUFRLGlCQUFpQjtJQUM1RDs7O09BR0c7SUFDSCxZQUFZLE1BQXNCO1FBQ2hDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVkLDJEQUEyRDtRQUMzRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssbUJBQW1CLEVBQUUsQ0FBQztZQUN4QyxNQUFNLElBQUksS0FBSyxDQUFDLDJEQUEyRCxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM1RixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxVQUFVO1FBQ3JCLHlDQUF5QztRQUN6QyxNQUFNLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksZ0JBQWdCLENBQUMsWUFBZ0M7UUFDdEQsb0NBQW9DO1FBQ3BDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBRTFDLHFCQUFxQjtRQUNyQixNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsYUFBYSxJQUFJLFNBQVMsQ0FBQztRQUM5RCxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsVUFBVSxJ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
@@ -1,36 +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 HTTP backend
6
- */
7
- export declare class HttpsTerminateToHttpHandler extends ForwardingHandler {
8
- private tlsServer;
9
- private secureContext;
10
- /**
11
- * Create a new HTTPS termination with HTTP backend handler
12
- * @param config The forwarding configuration
13
- */
14
- constructor(config: IForwardConfig);
15
- /**
16
- * Initialize the handler, setting up TLS context
17
- */
18
- initialize(): Promise<void>;
19
- /**
20
- * Set the secure context for TLS termination
21
- * Called when a certificate is available
22
- * @param context The secure context
23
- */
24
- setSecureContext(context: plugins.tls.SecureContext): void;
25
- /**
26
- * Handle a TLS/SSL socket connection by terminating TLS and forwarding to HTTP backend
27
- * @param clientSocket The incoming socket from the client
28
- */
29
- handleConnection(clientSocket: plugins.net.Socket): void;
30
- /**
31
- * Handle an HTTP request by forwarding to the HTTP backend
32
- * @param req The HTTP request
33
- * @param res The HTTP response
34
- */
35
- handleHttpRequest(req: plugins.http.IncomingMessage, res: plugins.http.ServerResponse): void;
36
- }