@push.rocks/smartproxy 25.17.9 → 26.0.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 (179) hide show
  1. package/changelog.md +16 -0
  2. package/dist_rust/rustproxy_linux_amd64 +0 -0
  3. package/dist_rust/rustproxy_linux_arm64 +0 -0
  4. package/dist_ts/00_commitinfo_data.js +2 -2
  5. package/dist_ts/core/index.d.ts +0 -1
  6. package/dist_ts/core/index.js +1 -2
  7. package/dist_ts/core/models/index.d.ts +0 -1
  8. package/dist_ts/core/models/index.js +1 -2
  9. package/dist_ts/core/utils/index.d.ts +0 -12
  10. package/dist_ts/core/utils/index.js +1 -13
  11. package/dist_ts/index.d.ts +0 -3
  12. package/dist_ts/index.js +2 -7
  13. package/dist_ts/protocols/http/index.d.ts +0 -1
  14. package/dist_ts/protocols/http/index.js +1 -2
  15. package/dist_ts/protocols/index.d.ts +0 -7
  16. package/dist_ts/protocols/index.js +1 -8
  17. package/dist_ts/proxies/smart-proxy/socket-handler-server.js +6 -1
  18. package/dist_ts/proxies/smart-proxy/utils/route-helpers/socket-handlers.d.ts +0 -7
  19. package/dist_ts/proxies/smart-proxy/utils/route-helpers/socket-handlers.js +50 -51
  20. package/dist_ts/routing/index.d.ts +0 -1
  21. package/dist_ts/routing/index.js +1 -3
  22. package/package.json +1 -1
  23. package/ts/00_commitinfo_data.ts +1 -1
  24. package/ts/core/index.ts +0 -1
  25. package/ts/core/models/index.ts +0 -1
  26. package/ts/core/utils/index.ts +0 -12
  27. package/ts/index.ts +1 -7
  28. package/ts/protocols/http/index.ts +1 -2
  29. package/ts/protocols/index.ts +0 -7
  30. package/ts/proxies/smart-proxy/socket-handler-server.ts +6 -0
  31. package/ts/proxies/smart-proxy/utils/route-helpers/socket-handlers.ts +60 -59
  32. package/ts/routing/index.ts +0 -3
  33. package/dist_ts/core/events/index.d.ts +0 -4
  34. package/dist_ts/core/events/index.js +0 -5
  35. package/dist_ts/core/models/socket-augmentation.d.ts +0 -15
  36. package/dist_ts/core/models/socket-augmentation.js +0 -18
  37. package/dist_ts/core/utils/async-utils.d.ts +0 -81
  38. package/dist_ts/core/utils/async-utils.js +0 -216
  39. package/dist_ts/core/utils/binary-heap.d.ts +0 -73
  40. package/dist_ts/core/utils/binary-heap.js +0 -193
  41. package/dist_ts/core/utils/enhanced-connection-pool.d.ts +0 -110
  42. package/dist_ts/core/utils/enhanced-connection-pool.js +0 -325
  43. package/dist_ts/core/utils/fs-utils.d.ts +0 -144
  44. package/dist_ts/core/utils/fs-utils.js +0 -252
  45. package/dist_ts/core/utils/ip-utils.d.ts +0 -69
  46. package/dist_ts/core/utils/ip-utils.js +0 -270
  47. package/dist_ts/core/utils/lifecycle-component.d.ts +0 -59
  48. package/dist_ts/core/utils/lifecycle-component.js +0 -211
  49. package/dist_ts/core/utils/log-deduplicator.d.ts +0 -39
  50. package/dist_ts/core/utils/log-deduplicator.js +0 -305
  51. package/dist_ts/core/utils/security-utils.d.ts +0 -111
  52. package/dist_ts/core/utils/security-utils.js +0 -212
  53. package/dist_ts/core/utils/shared-security-manager.d.ts +0 -128
  54. package/dist_ts/core/utils/shared-security-manager.js +0 -362
  55. package/dist_ts/core/utils/socket-utils.d.ts +0 -63
  56. package/dist_ts/core/utils/socket-utils.js +0 -249
  57. package/dist_ts/core/utils/template-utils.d.ts +0 -37
  58. package/dist_ts/core/utils/template-utils.js +0 -104
  59. package/dist_ts/core/utils/validation-utils.d.ts +0 -61
  60. package/dist_ts/core/utils/validation-utils.js +0 -149
  61. package/dist_ts/core/utils/websocket-utils.d.ts +0 -22
  62. package/dist_ts/core/utils/websocket-utils.js +0 -30
  63. package/dist_ts/detection/detectors/http-detector.d.ts +0 -33
  64. package/dist_ts/detection/detectors/http-detector.js +0 -101
  65. package/dist_ts/detection/detectors/quick-detector.d.ts +0 -28
  66. package/dist_ts/detection/detectors/quick-detector.js +0 -131
  67. package/dist_ts/detection/detectors/routing-extractor.d.ts +0 -28
  68. package/dist_ts/detection/detectors/routing-extractor.js +0 -122
  69. package/dist_ts/detection/detectors/tls-detector.d.ts +0 -47
  70. package/dist_ts/detection/detectors/tls-detector.js +0 -183
  71. package/dist_ts/detection/index.d.ts +0 -17
  72. package/dist_ts/detection/index.js +0 -22
  73. package/dist_ts/detection/models/detection-types.d.ts +0 -87
  74. package/dist_ts/detection/models/detection-types.js +0 -5
  75. package/dist_ts/detection/models/interfaces.d.ts +0 -97
  76. package/dist_ts/detection/models/interfaces.js +0 -5
  77. package/dist_ts/detection/protocol-detector.d.ts +0 -79
  78. package/dist_ts/detection/protocol-detector.js +0 -253
  79. package/dist_ts/detection/utils/buffer-utils.d.ts +0 -61
  80. package/dist_ts/detection/utils/buffer-utils.js +0 -127
  81. package/dist_ts/detection/utils/fragment-manager.d.ts +0 -31
  82. package/dist_ts/detection/utils/fragment-manager.js +0 -53
  83. package/dist_ts/detection/utils/parser-utils.d.ts +0 -42
  84. package/dist_ts/detection/utils/parser-utils.js +0 -63
  85. package/dist_ts/protocols/common/fragment-handler.d.ts +0 -73
  86. package/dist_ts/protocols/common/fragment-handler.js +0 -121
  87. package/dist_ts/protocols/common/index.d.ts +0 -7
  88. package/dist_ts/protocols/common/index.js +0 -8
  89. package/dist_ts/protocols/common/types.d.ts +0 -68
  90. package/dist_ts/protocols/common/types.js +0 -7
  91. package/dist_ts/protocols/http/parser.d.ts +0 -58
  92. package/dist_ts/protocols/http/parser.js +0 -184
  93. package/dist_ts/protocols/proxy/index.d.ts +0 -5
  94. package/dist_ts/protocols/proxy/index.js +0 -6
  95. package/dist_ts/protocols/proxy/types.d.ts +0 -47
  96. package/dist_ts/protocols/proxy/types.js +0 -6
  97. package/dist_ts/protocols/tls/alerts/index.d.ts +0 -4
  98. package/dist_ts/protocols/tls/alerts/index.js +0 -5
  99. package/dist_ts/protocols/tls/alerts/tls-alert.d.ts +0 -150
  100. package/dist_ts/protocols/tls/alerts/tls-alert.js +0 -226
  101. package/dist_ts/protocols/tls/index.d.ts +0 -12
  102. package/dist_ts/protocols/tls/index.js +0 -27
  103. package/dist_ts/protocols/tls/sni/client-hello-parser.d.ts +0 -100
  104. package/dist_ts/protocols/tls/sni/client-hello-parser.js +0 -463
  105. package/dist_ts/protocols/tls/sni/index.d.ts +0 -5
  106. package/dist_ts/protocols/tls/sni/index.js +0 -6
  107. package/dist_ts/protocols/tls/sni/sni-extraction.d.ts +0 -58
  108. package/dist_ts/protocols/tls/sni/sni-extraction.js +0 -275
  109. package/dist_ts/protocols/tls/utils/index.d.ts +0 -4
  110. package/dist_ts/protocols/tls/utils/index.js +0 -5
  111. package/dist_ts/protocols/tls/utils/tls-utils.d.ts +0 -158
  112. package/dist_ts/protocols/tls/utils/tls-utils.js +0 -187
  113. package/dist_ts/protocols/websocket/constants.d.ts +0 -55
  114. package/dist_ts/protocols/websocket/constants.js +0 -58
  115. package/dist_ts/protocols/websocket/index.d.ts +0 -7
  116. package/dist_ts/protocols/websocket/index.js +0 -8
  117. package/dist_ts/protocols/websocket/types.d.ts +0 -47
  118. package/dist_ts/protocols/websocket/types.js +0 -5
  119. package/dist_ts/protocols/websocket/utils.d.ts +0 -25
  120. package/dist_ts/protocols/websocket/utils.js +0 -103
  121. package/dist_ts/routing/router/http-router.d.ts +0 -89
  122. package/dist_ts/routing/router/http-router.js +0 -205
  123. package/dist_ts/routing/router/index.d.ts +0 -5
  124. package/dist_ts/routing/router/index.js +0 -6
  125. package/dist_ts/tls/index.d.ts +0 -16
  126. package/dist_ts/tls/index.js +0 -24
  127. package/dist_ts/tls/sni/index.d.ts +0 -4
  128. package/dist_ts/tls/sni/index.js +0 -5
  129. package/dist_ts/tls/sni/sni-handler.d.ts +0 -154
  130. package/dist_ts/tls/sni/sni-handler.js +0 -191
  131. package/ts/core/events/index.ts +0 -3
  132. package/ts/core/models/socket-augmentation.ts +0 -38
  133. package/ts/core/utils/async-utils.ts +0 -275
  134. package/ts/core/utils/binary-heap.ts +0 -225
  135. package/ts/core/utils/enhanced-connection-pool.ts +0 -425
  136. package/ts/core/utils/fs-utils.ts +0 -270
  137. package/ts/core/utils/ip-utils.ts +0 -303
  138. package/ts/core/utils/lifecycle-component.ts +0 -251
  139. package/ts/core/utils/log-deduplicator.ts +0 -370
  140. package/ts/core/utils/security-utils.ts +0 -305
  141. package/ts/core/utils/shared-security-manager.ts +0 -470
  142. package/ts/core/utils/socket-utils.ts +0 -322
  143. package/ts/core/utils/template-utils.ts +0 -124
  144. package/ts/core/utils/validation-utils.ts +0 -177
  145. package/ts/core/utils/websocket-utils.ts +0 -33
  146. package/ts/detection/detectors/http-detector.ts +0 -127
  147. package/ts/detection/detectors/quick-detector.ts +0 -148
  148. package/ts/detection/detectors/routing-extractor.ts +0 -147
  149. package/ts/detection/detectors/tls-detector.ts +0 -223
  150. package/ts/detection/index.ts +0 -25
  151. package/ts/detection/models/detection-types.ts +0 -102
  152. package/ts/detection/models/interfaces.ts +0 -115
  153. package/ts/detection/protocol-detector.ts +0 -319
  154. package/ts/detection/utils/buffer-utils.ts +0 -141
  155. package/ts/detection/utils/fragment-manager.ts +0 -64
  156. package/ts/detection/utils/parser-utils.ts +0 -77
  157. package/ts/protocols/common/fragment-handler.ts +0 -167
  158. package/ts/protocols/common/index.ts +0 -8
  159. package/ts/protocols/common/types.ts +0 -76
  160. package/ts/protocols/http/parser.ts +0 -219
  161. package/ts/protocols/proxy/index.ts +0 -6
  162. package/ts/protocols/proxy/types.ts +0 -53
  163. package/ts/protocols/tls/alerts/index.ts +0 -3
  164. package/ts/protocols/tls/alerts/tls-alert.ts +0 -259
  165. package/ts/protocols/tls/index.ts +0 -37
  166. package/ts/protocols/tls/sni/client-hello-parser.ts +0 -629
  167. package/ts/protocols/tls/sni/index.ts +0 -6
  168. package/ts/protocols/tls/sni/sni-extraction.ts +0 -353
  169. package/ts/protocols/tls/utils/index.ts +0 -3
  170. package/ts/protocols/tls/utils/tls-utils.ts +0 -201
  171. package/ts/protocols/websocket/constants.ts +0 -60
  172. package/ts/protocols/websocket/index.ts +0 -8
  173. package/ts/protocols/websocket/types.ts +0 -53
  174. package/ts/protocols/websocket/utils.ts +0 -98
  175. package/ts/routing/router/http-router.ts +0 -266
  176. package/ts/routing/router/index.ts +0 -7
  177. package/ts/tls/index.ts +0 -29
  178. package/ts/tls/sni/index.ts +0 -3
  179. package/ts/tls/sni/sni-handler.ts +0 -264
@@ -1,249 +0,0 @@
1
- import * as plugins from '../../plugins.js';
2
- /**
3
- * Safely cleanup a socket by removing all listeners and destroying it
4
- * @param socket The socket to cleanup
5
- * @param socketName Optional name for logging
6
- * @param options Cleanup options
7
- */
8
- export function cleanupSocket(socket, socketName, options = {}) {
9
- if (!socket || socket.destroyed)
10
- return Promise.resolve();
11
- return new Promise((resolve) => {
12
- const cleanup = () => {
13
- try {
14
- // Remove all event listeners
15
- socket.removeAllListeners();
16
- // Destroy if not already destroyed
17
- if (!socket.destroyed) {
18
- socket.destroy();
19
- }
20
- }
21
- catch (err) {
22
- console.error(`Error cleaning up socket${socketName ? ` (${socketName})` : ''}: ${err}`);
23
- }
24
- resolve();
25
- };
26
- if (options.immediate) {
27
- // Immediate cleanup (old behavior)
28
- socket.unpipe();
29
- cleanup();
30
- }
31
- else if (options.allowDrain && socket.writable) {
32
- // Allow pending writes to complete
33
- socket.end(() => cleanup());
34
- // Force cleanup after grace period
35
- if (options.gracePeriod) {
36
- setTimeout(() => {
37
- if (!socket.destroyed) {
38
- cleanup();
39
- }
40
- }, options.gracePeriod);
41
- }
42
- }
43
- else {
44
- // Default: immediate cleanup
45
- socket.unpipe();
46
- cleanup();
47
- }
48
- });
49
- }
50
- /**
51
- * Create independent cleanup handlers for paired sockets that support half-open connections
52
- * @param clientSocket The client socket
53
- * @param serverSocket The server socket
54
- * @param onBothClosed Callback when both sockets are closed
55
- * @returns Independent cleanup functions for each socket
56
- */
57
- export function createIndependentSocketHandlers(clientSocket, serverSocket, onBothClosed, options = {}) {
58
- let clientClosed = false;
59
- let serverClosed = false;
60
- let clientReason = '';
61
- let serverReason = '';
62
- const checkBothClosed = () => {
63
- if (clientClosed && serverClosed) {
64
- onBothClosed(`client: ${clientReason}, server: ${serverReason}`);
65
- }
66
- };
67
- const cleanupClient = async (reason) => {
68
- if (clientClosed)
69
- return;
70
- clientClosed = true;
71
- clientReason = reason;
72
- // Default behavior: close both sockets when one closes (required for proxy chains)
73
- if (!serverClosed && !options.enableHalfOpen) {
74
- serverSocket.destroy();
75
- }
76
- // Half-open support (opt-in only)
77
- if (!serverClosed && serverSocket.writable && options.enableHalfOpen) {
78
- // Half-close: stop reading from client, let server finish
79
- clientSocket.pause();
80
- clientSocket.unpipe(serverSocket);
81
- await cleanupSocket(clientSocket, 'client', { allowDrain: true, gracePeriod: 5000 });
82
- }
83
- else {
84
- await cleanupSocket(clientSocket, 'client', { immediate: true });
85
- }
86
- checkBothClosed();
87
- };
88
- const cleanupServer = async (reason) => {
89
- if (serverClosed)
90
- return;
91
- serverClosed = true;
92
- serverReason = reason;
93
- // Default behavior: close both sockets when one closes (required for proxy chains)
94
- if (!clientClosed && !options.enableHalfOpen) {
95
- clientSocket.destroy();
96
- }
97
- // Half-open support (opt-in only)
98
- if (!clientClosed && clientSocket.writable && options.enableHalfOpen) {
99
- // Half-close: stop reading from server, let client finish
100
- serverSocket.pause();
101
- serverSocket.unpipe(clientSocket);
102
- await cleanupSocket(serverSocket, 'server', { allowDrain: true, gracePeriod: 5000 });
103
- }
104
- else {
105
- await cleanupSocket(serverSocket, 'server', { immediate: true });
106
- }
107
- checkBothClosed();
108
- };
109
- return { cleanupClient, cleanupServer };
110
- }
111
- /**
112
- * Setup socket error and close handlers with proper cleanup
113
- * @param socket The socket to setup handlers for
114
- * @param handleClose The cleanup function to call
115
- * @param handleTimeout Optional custom timeout handler
116
- * @param errorPrefix Optional prefix for error messages
117
- */
118
- export function setupSocketHandlers(socket, handleClose, handleTimeout, errorPrefix) {
119
- socket.on('error', (error) => {
120
- const prefix = errorPrefix || 'Socket';
121
- handleClose(`${prefix}_error: ${error.message}`);
122
- });
123
- socket.on('close', () => {
124
- const prefix = errorPrefix || 'socket';
125
- handleClose(`${prefix}_closed`);
126
- });
127
- socket.on('timeout', () => {
128
- if (handleTimeout) {
129
- handleTimeout(socket); // Custom timeout handling
130
- }
131
- else {
132
- // Default: just log, don't close
133
- console.warn(`Socket timeout: ${errorPrefix || 'socket'}`);
134
- }
135
- });
136
- }
137
- /**
138
- * Setup bidirectional data forwarding between two sockets with proper cleanup
139
- * @param clientSocket The client/incoming socket
140
- * @param serverSocket The server/outgoing socket
141
- * @param handlers Object containing optional handlers for data and cleanup
142
- * @returns Cleanup functions for both sockets
143
- */
144
- export function setupBidirectionalForwarding(clientSocket, serverSocket, handlers) {
145
- // Set up cleanup handlers
146
- const { cleanupClient, cleanupServer } = createIndependentSocketHandlers(clientSocket, serverSocket, handlers.onCleanup, { enableHalfOpen: handlers.enableHalfOpen });
147
- // Set up error and close handlers
148
- setupSocketHandlers(clientSocket, cleanupClient, undefined, 'client');
149
- setupSocketHandlers(serverSocket, cleanupServer, undefined, 'server');
150
- // Set up data forwarding with backpressure handling
151
- clientSocket.on('data', (chunk) => {
152
- if (handlers.onClientData) {
153
- handlers.onClientData(chunk);
154
- }
155
- if (serverSocket.writable) {
156
- const flushed = serverSocket.write(chunk);
157
- // Handle backpressure
158
- if (!flushed) {
159
- clientSocket.pause();
160
- serverSocket.once('drain', () => {
161
- if (!clientSocket.destroyed) {
162
- clientSocket.resume();
163
- }
164
- });
165
- }
166
- }
167
- });
168
- serverSocket.on('data', (chunk) => {
169
- if (handlers.onServerData) {
170
- handlers.onServerData(chunk);
171
- }
172
- if (clientSocket.writable) {
173
- const flushed = clientSocket.write(chunk);
174
- // Handle backpressure
175
- if (!flushed) {
176
- serverSocket.pause();
177
- clientSocket.once('drain', () => {
178
- if (!serverSocket.destroyed) {
179
- serverSocket.resume();
180
- }
181
- });
182
- }
183
- }
184
- });
185
- return { cleanupClient, cleanupServer };
186
- }
187
- /**
188
- * Create a socket with immediate error handling to prevent crashes
189
- * @param options Socket creation options
190
- * @returns The created socket
191
- */
192
- export function createSocketWithErrorHandler(options) {
193
- const { port, host, onError, onConnect, timeout } = options;
194
- // Create socket with immediate error handler attachment
195
- const socket = new plugins.net.Socket();
196
- // Track if connected
197
- let connected = false;
198
- let connectionTimeout = null;
199
- // Attach error handler BEFORE connecting to catch immediate errors
200
- socket.on('error', (error) => {
201
- console.error(`Socket connection error to ${host}:${port}: ${error.message}`);
202
- // Clear the connection timeout if it exists
203
- if (connectionTimeout) {
204
- clearTimeout(connectionTimeout);
205
- connectionTimeout = null;
206
- }
207
- if (onError) {
208
- onError(error);
209
- }
210
- });
211
- // Attach connect handler
212
- const handleConnect = () => {
213
- connected = true;
214
- // Clear the connection timeout
215
- if (connectionTimeout) {
216
- clearTimeout(connectionTimeout);
217
- connectionTimeout = null;
218
- }
219
- // Set inactivity timeout if provided (after connection is established)
220
- if (timeout) {
221
- socket.setTimeout(timeout);
222
- }
223
- if (onConnect) {
224
- onConnect();
225
- }
226
- };
227
- socket.on('connect', handleConnect);
228
- // Implement connection establishment timeout
229
- if (timeout) {
230
- connectionTimeout = setTimeout(() => {
231
- if (!connected && !socket.destroyed) {
232
- // Connection timed out - destroy the socket
233
- const error = new Error(`Connection timeout after ${timeout}ms to ${host}:${port}`);
234
- error.code = 'ETIMEDOUT';
235
- console.error(`Socket connection timeout to ${host}:${port} after ${timeout}ms`);
236
- // Destroy the socket
237
- socket.destroy();
238
- // Call error handler
239
- if (onError) {
240
- onError(error);
241
- }
242
- }
243
- }, timeout);
244
- }
245
- // Now attempt to connect - any immediate errors will be caught
246
- socket.connect(port, host);
247
- return socket;
248
- }
249
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ja2V0LXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvY29yZS91dGlscy9zb2NrZXQtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQWdCNUM7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUMzQixNQUF5RCxFQUN6RCxVQUFtQixFQUNuQixVQUEwQixFQUFFO0lBRTVCLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLFNBQVM7UUFBRSxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUUxRCxPQUFPLElBQUksT0FBTyxDQUFPLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDbkMsTUFBTSxPQUFPLEdBQUcsR0FBRyxFQUFFO1lBQ25CLElBQUksQ0FBQztnQkFDSCw2QkFBNkI7Z0JBQzdCLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUU1QixtQ0FBbUM7Z0JBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQ3RCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDbkIsQ0FBQztZQUNILENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkJBQTJCLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDM0YsQ0FBQztZQUNELE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQyxDQUFDO1FBRUYsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdEIsbUNBQW1DO1lBQ25DLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7YUFBTSxJQUFJLE9BQU8sQ0FBQyxVQUFVLElBQUksTUFBTSxD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
@@ -1,37 +0,0 @@
1
- import type { IRouteContext } from '../models/route-context.js';
2
- /**
3
- * Utility class for resolving template variables in strings
4
- */
5
- export declare class TemplateUtils {
6
- /**
7
- * Resolve template variables in a string using the route context
8
- * Supports variables like {domain}, {path}, {clientIp}, etc.
9
- *
10
- * @param template The template string with {variables}
11
- * @param context The route context with values
12
- * @returns The resolved string
13
- */
14
- static resolveTemplateVariables(template: string, context: IRouteContext): string;
15
- /**
16
- * Safely convert a value to a string
17
- *
18
- * @param value Any value to convert to string
19
- * @returns String representation or original match for complex objects
20
- */
21
- private static convertToString;
22
- /**
23
- * Resolve template variables in header values
24
- *
25
- * @param headers Header object with potential template variables
26
- * @param context Route context for variable resolution
27
- * @returns New header object with resolved values
28
- */
29
- static resolveHeaderTemplates(headers: Record<string, string>, context: IRouteContext): Record<string, string>;
30
- /**
31
- * Check if a string contains template variables
32
- *
33
- * @param str String to check for template variables
34
- * @returns True if string contains template variables
35
- */
36
- static containsTemplateVariables(str: string): boolean;
37
- }
@@ -1,104 +0,0 @@
1
- /**
2
- * Utility class for resolving template variables in strings
3
- */
4
- export class TemplateUtils {
5
- /**
6
- * Resolve template variables in a string using the route context
7
- * Supports variables like {domain}, {path}, {clientIp}, etc.
8
- *
9
- * @param template The template string with {variables}
10
- * @param context The route context with values
11
- * @returns The resolved string
12
- */
13
- static resolveTemplateVariables(template, context) {
14
- if (!template) {
15
- return template;
16
- }
17
- // Replace variables with values from context
18
- return template.replace(/\{([a-zA-Z0-9_\.]+)\}/g, (match, varName) => {
19
- // Handle nested properties with dot notation (e.g., {headers.host})
20
- if (varName.includes('.')) {
21
- const parts = varName.split('.');
22
- let current = context;
23
- // Traverse nested object structure
24
- for (const part of parts) {
25
- if (current === undefined || current === null) {
26
- return match; // Return original if path doesn't exist
27
- }
28
- current = current[part];
29
- }
30
- // Return the resolved value if it exists
31
- if (current !== undefined && current !== null) {
32
- return TemplateUtils.convertToString(current);
33
- }
34
- return match;
35
- }
36
- // Direct property access
37
- const value = context[varName];
38
- if (value === undefined) {
39
- return match; // Keep the original {variable} if not found
40
- }
41
- // Convert value to string
42
- return TemplateUtils.convertToString(value);
43
- });
44
- }
45
- /**
46
- * Safely convert a value to a string
47
- *
48
- * @param value Any value to convert to string
49
- * @returns String representation or original match for complex objects
50
- */
51
- static convertToString(value) {
52
- if (value === null || value === undefined) {
53
- return '';
54
- }
55
- if (typeof value === 'string') {
56
- return value;
57
- }
58
- if (typeof value === 'number' || typeof value === 'boolean') {
59
- return value.toString();
60
- }
61
- if (Array.isArray(value)) {
62
- return value.join(',');
63
- }
64
- if (typeof value === 'object') {
65
- try {
66
- return JSON.stringify(value);
67
- }
68
- catch (e) {
69
- return '[Object]';
70
- }
71
- }
72
- return String(value);
73
- }
74
- /**
75
- * Resolve template variables in header values
76
- *
77
- * @param headers Header object with potential template variables
78
- * @param context Route context for variable resolution
79
- * @returns New header object with resolved values
80
- */
81
- static resolveHeaderTemplates(headers, context) {
82
- const result = {};
83
- for (const [key, value] of Object.entries(headers)) {
84
- // Skip special directive headers (starting with !)
85
- if (value.startsWith('!')) {
86
- result[key] = value;
87
- continue;
88
- }
89
- // Resolve template variables in the header value
90
- result[key] = TemplateUtils.resolveTemplateVariables(value, context);
91
- }
92
- return result;
93
- }
94
- /**
95
- * Check if a string contains template variables
96
- *
97
- * @param str String to check for template variables
98
- * @returns True if string contains template variables
99
- */
100
- static containsTemplateVariables(str) {
101
- return !!str && /\{([a-zA-Z0-9_\.]+)\}/g.test(str);
102
- }
103
- }
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9jb3JlL3V0aWxzL3RlbXBsYXRlLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGFBQWE7SUFDeEI7Ozs7Ozs7T0FPRztJQUNJLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxRQUFnQixFQUFFLE9BQXNCO1FBQzdFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFFRCw2Q0FBNkM7UUFDN0MsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLHdCQUF3QixFQUFFLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ25FLG9FQUFvRTtZQUNwRSxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDakMsSUFBSSxPQUFPLEdBQVEsT0FBTyxDQUFDO2dCQUUzQixtQ0FBbUM7Z0JBQ25DLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7b0JBQ3pCLElBQUksT0FBTyxLQUFLLFNBQVMsSUFBSSxPQUFPLEtBQUssSUFBSSxFQUFFLENBQUM7d0JBQzlDLE9BQU8sS0FBSyxDQUFDLENBQUMsd0NBQXdDO29CQUN4RCxDQUFDO29CQUNELE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzFCLENBQUM7Z0JBRUQseUNBQXlDO2dCQUN6QyxJQUFJLE9BQU8sS0FBSyxTQUFTLElBQUksT0FBTyxLQUFLLElBQUksRUFBRSxDQUFDO29CQUM5QyxPQUFPLGFBQWEsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2hELENBQUM7Z0JBRUQsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBRUQseUJBQXlCO1lBQ3pCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUE4QixDQUFDLENBQUM7WUFDdEQsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3hCLE9BQU8sS0FBSyxDQUFDLENBQUMsNENBQTRDO1lBQzVELENBQUM7WUFFRCwwQkFBMEI7WUFDMUIsT0FBTyxhQUFhLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssTUFBTSxDQUFDLGVBQWUsQ0FBQyxLQUFVO1FBQ3ZDLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDMUMsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM5QixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM1RCxPQUFPLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMxQixDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekIsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLENBQUM7UUFFRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQztnQkFDSCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0IsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1gsT0FBTyxVQUFVLENBQUM7WUFDcEIsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLHNCQUFzQixDQUNsQyxPQUErQixFQUMvQixPQUFzQjtRQUV0QixNQUFNLE1BQU0sR0FBMkIsRUFBRSxDQUFDO1FBRTFDLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDbkQsbURBQW1EO1lBQ25ELElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMxQixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO2dCQUNwQixTQUFTO1lBQ1gsQ0FBQztZQUVELGlEQUFpRDtZQUNqRCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDLHdCQUF3QixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN2RSxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLHlCQUF5QixDQUFDLEdBQVc7UUFDakQsT0FBTyxDQUFDLENBQUMsR0FBRyxJQUFJLHdCQUF3QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyRCxDQUFDO0NBQ0YifQ==
@@ -1,61 +0,0 @@
1
- import type { IDomainOptions, IAcmeOptions } from '../models/common-types.js';
2
- /**
3
- * Collection of validation utilities for configuration and domain options
4
- */
5
- export declare class ValidationUtils {
6
- /**
7
- * Validates domain configuration options
8
- *
9
- * @param domainOptions The domain options to validate
10
- * @returns An object with validation result and error message if invalid
11
- */
12
- static validateDomainOptions(domainOptions: IDomainOptions): {
13
- isValid: boolean;
14
- error?: string;
15
- };
16
- /**
17
- * Validates ACME configuration options
18
- *
19
- * @param acmeOptions The ACME options to validate
20
- * @returns An object with validation result and error message if invalid
21
- */
22
- static validateAcmeOptions(acmeOptions: IAcmeOptions): {
23
- isValid: boolean;
24
- error?: string;
25
- };
26
- /**
27
- * Validates a port number
28
- *
29
- * @param port The port to validate
30
- * @returns true if the port is valid, false otherwise
31
- */
32
- static isValidPort(port: number): boolean;
33
- /**
34
- * Validates a domain name
35
- *
36
- * @param domain The domain name to validate
37
- * @returns true if the domain name is valid, false otherwise
38
- */
39
- static isValidDomainName(domain: string): boolean;
40
- /**
41
- * Validates an email address
42
- *
43
- * @param email The email to validate
44
- * @returns true if the email is valid, false otherwise
45
- */
46
- static isValidEmail(email: string): boolean;
47
- /**
48
- * Validates a certificate format (PEM)
49
- *
50
- * @param cert The certificate content to validate
51
- * @returns true if the certificate appears to be in PEM format, false otherwise
52
- */
53
- static isValidCertificate(cert: string): boolean;
54
- /**
55
- * Validates a private key format (PEM)
56
- *
57
- * @param key The private key content to validate
58
- * @returns true if the key appears to be in PEM format, false otherwise
59
- */
60
- static isValidPrivateKey(key: string): boolean;
61
- }
@@ -1,149 +0,0 @@
1
- import * as plugins from '../../plugins.js';
2
- /**
3
- * Collection of validation utilities for configuration and domain options
4
- */
5
- export class ValidationUtils {
6
- /**
7
- * Validates domain configuration options
8
- *
9
- * @param domainOptions The domain options to validate
10
- * @returns An object with validation result and error message if invalid
11
- */
12
- static validateDomainOptions(domainOptions) {
13
- if (!domainOptions) {
14
- return { isValid: false, error: 'Domain options cannot be null or undefined' };
15
- }
16
- if (!domainOptions.domainName) {
17
- return { isValid: false, error: 'Domain name is required' };
18
- }
19
- // Check domain pattern
20
- if (!this.isValidDomainName(domainOptions.domainName)) {
21
- return { isValid: false, error: `Invalid domain name: ${domainOptions.domainName}` };
22
- }
23
- // Validate forward config if provided
24
- if (domainOptions.forward) {
25
- if (!domainOptions.forward.ip) {
26
- return { isValid: false, error: 'Forward IP is required when forward is specified' };
27
- }
28
- if (!domainOptions.forward.port) {
29
- return { isValid: false, error: 'Forward port is required when forward is specified' };
30
- }
31
- if (!this.isValidPort(domainOptions.forward.port)) {
32
- return { isValid: false, error: `Invalid forward port: ${domainOptions.forward.port}` };
33
- }
34
- }
35
- // Validate ACME forward config if provided
36
- if (domainOptions.acmeForward) {
37
- if (!domainOptions.acmeForward.ip) {
38
- return { isValid: false, error: 'ACME forward IP is required when acmeForward is specified' };
39
- }
40
- if (!domainOptions.acmeForward.port) {
41
- return { isValid: false, error: 'ACME forward port is required when acmeForward is specified' };
42
- }
43
- if (!this.isValidPort(domainOptions.acmeForward.port)) {
44
- return { isValid: false, error: `Invalid ACME forward port: ${domainOptions.acmeForward.port}` };
45
- }
46
- }
47
- return { isValid: true };
48
- }
49
- /**
50
- * Validates ACME configuration options
51
- *
52
- * @param acmeOptions The ACME options to validate
53
- * @returns An object with validation result and error message if invalid
54
- */
55
- static validateAcmeOptions(acmeOptions) {
56
- if (!acmeOptions) {
57
- return { isValid: false, error: 'ACME options cannot be null or undefined' };
58
- }
59
- if (acmeOptions.enabled) {
60
- if (!acmeOptions.accountEmail) {
61
- return { isValid: false, error: 'Account email is required when ACME is enabled' };
62
- }
63
- if (!this.isValidEmail(acmeOptions.accountEmail)) {
64
- return { isValid: false, error: `Invalid email: ${acmeOptions.accountEmail}` };
65
- }
66
- if (acmeOptions.port && !this.isValidPort(acmeOptions.port)) {
67
- return { isValid: false, error: `Invalid ACME port: ${acmeOptions.port}` };
68
- }
69
- if (acmeOptions.httpsRedirectPort && !this.isValidPort(acmeOptions.httpsRedirectPort)) {
70
- return { isValid: false, error: `Invalid HTTPS redirect port: ${acmeOptions.httpsRedirectPort}` };
71
- }
72
- if (acmeOptions.renewThresholdDays && acmeOptions.renewThresholdDays < 1) {
73
- return { isValid: false, error: 'Renew threshold days must be greater than 0' };
74
- }
75
- if (acmeOptions.renewCheckIntervalHours && acmeOptions.renewCheckIntervalHours < 1) {
76
- return { isValid: false, error: 'Renew check interval hours must be greater than 0' };
77
- }
78
- }
79
- return { isValid: true };
80
- }
81
- /**
82
- * Validates a port number
83
- *
84
- * @param port The port to validate
85
- * @returns true if the port is valid, false otherwise
86
- */
87
- static isValidPort(port) {
88
- return typeof port === 'number' && port > 0 && port <= 65535 && Number.isInteger(port);
89
- }
90
- /**
91
- * Validates a domain name
92
- *
93
- * @param domain The domain name to validate
94
- * @returns true if the domain name is valid, false otherwise
95
- */
96
- static isValidDomainName(domain) {
97
- if (!domain || typeof domain !== 'string') {
98
- return false;
99
- }
100
- // Wildcard domain check (*.example.com)
101
- if (domain.startsWith('*.')) {
102
- domain = domain.substring(2);
103
- }
104
- // Simple domain validation pattern
105
- const domainPattern = /^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/;
106
- return domainPattern.test(domain);
107
- }
108
- /**
109
- * Validates an email address
110
- *
111
- * @param email The email to validate
112
- * @returns true if the email is valid, false otherwise
113
- */
114
- static isValidEmail(email) {
115
- if (!email || typeof email !== 'string') {
116
- return false;
117
- }
118
- // Basic email validation pattern
119
- const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
120
- return emailPattern.test(email);
121
- }
122
- /**
123
- * Validates a certificate format (PEM)
124
- *
125
- * @param cert The certificate content to validate
126
- * @returns true if the certificate appears to be in PEM format, false otherwise
127
- */
128
- static isValidCertificate(cert) {
129
- if (!cert || typeof cert !== 'string') {
130
- return false;
131
- }
132
- return cert.includes('-----BEGIN CERTIFICATE-----') &&
133
- cert.includes('-----END CERTIFICATE-----');
134
- }
135
- /**
136
- * Validates a private key format (PEM)
137
- *
138
- * @param key The private key content to validate
139
- * @returns true if the key appears to be in PEM format, false otherwise
140
- */
141
- static isValidPrivateKey(key) {
142
- if (!key || typeof key !== 'string') {
143
- return false;
144
- }
145
- return key.includes('-----BEGIN PRIVATE KEY-----') &&
146
- key.includes('-----END PRIVATE KEY-----');
147
- }
148
- }
149
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2NvcmUvdXRpbHMvdmFsaWRhdGlvbi11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBRzVDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFDMUI7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMscUJBQXFCLENBQUMsYUFBNkI7UUFDL0QsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25CLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSw0Q0FBNEMsRUFBRSxDQUFDO1FBQ2pGLENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzlCLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSx5QkFBeUIsRUFBRSxDQUFDO1FBQzlELENBQUM7UUFFRCx1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsd0JBQXdCLGFBQWEsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1FBQ3ZGLENBQUM7UUFFRCxzQ0FBc0M7UUFDdEMsSUFBSSxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQzlCLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxrREFBa0QsRUFBRSxDQUFDO1lBQ3ZGLENBQUM7WUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDaEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxL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
@@ -1,22 +0,0 @@
1
- /**
2
- * WebSocket utility functions
3
- *
4
- * This module provides smartproxy-specific WebSocket utilities
5
- * and re-exports protocol utilities from the protocols module
6
- */
7
- export type { RawData } from '../../protocols/websocket/index.js';
8
- /**
9
- * Get the length of a WebSocket message regardless of its type
10
- * (handles all possible WebSocket message data types)
11
- *
12
- * @param data - The data message from WebSocket (could be any RawData type)
13
- * @returns The length of the data in bytes
14
- */
15
- export declare function getMessageSize(data: import('../../protocols/websocket/index.js').RawData): number;
16
- /**
17
- * Convert any raw WebSocket data to Buffer for consistent handling
18
- *
19
- * @param data - The data message from WebSocket (could be any RawData type)
20
- * @returns A Buffer containing the data
21
- */
22
- export declare function toBuffer(data: import('../../protocols/websocket/index.js').RawData): Buffer;