@push.rocks/smartproxy 25.17.10 → 26.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 (184) hide show
  1. package/changelog.md +15 -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/models/metrics-types.d.ts +20 -0
  18. package/dist_ts/proxies/smart-proxy/rust-metrics-adapter.d.ts +2 -1
  19. package/dist_ts/proxies/smart-proxy/rust-metrics-adapter.js +4 -1
  20. package/dist_ts/proxies/smart-proxy/socket-handler-server.js +6 -1
  21. package/dist_ts/proxies/smart-proxy/utils/route-helpers/socket-handlers.d.ts +0 -7
  22. package/dist_ts/proxies/smart-proxy/utils/route-helpers/socket-handlers.js +50 -51
  23. package/dist_ts/routing/index.d.ts +0 -1
  24. package/dist_ts/routing/index.js +1 -3
  25. package/package.json +1 -1
  26. package/ts/00_commitinfo_data.ts +1 -1
  27. package/ts/core/index.ts +0 -1
  28. package/ts/core/models/index.ts +0 -1
  29. package/ts/core/utils/index.ts +0 -12
  30. package/ts/index.ts +1 -7
  31. package/ts/protocols/http/index.ts +1 -2
  32. package/ts/protocols/index.ts +0 -7
  33. package/ts/proxies/smart-proxy/models/metrics-types.ts +21 -0
  34. package/ts/proxies/smart-proxy/rust-metrics-adapter.ts +4 -1
  35. package/ts/proxies/smart-proxy/socket-handler-server.ts +6 -0
  36. package/ts/proxies/smart-proxy/utils/route-helpers/socket-handlers.ts +60 -59
  37. package/ts/routing/index.ts +0 -3
  38. package/dist_ts/core/events/index.d.ts +0 -4
  39. package/dist_ts/core/events/index.js +0 -5
  40. package/dist_ts/core/models/socket-augmentation.d.ts +0 -15
  41. package/dist_ts/core/models/socket-augmentation.js +0 -18
  42. package/dist_ts/core/utils/async-utils.d.ts +0 -81
  43. package/dist_ts/core/utils/async-utils.js +0 -216
  44. package/dist_ts/core/utils/binary-heap.d.ts +0 -73
  45. package/dist_ts/core/utils/binary-heap.js +0 -193
  46. package/dist_ts/core/utils/enhanced-connection-pool.d.ts +0 -110
  47. package/dist_ts/core/utils/enhanced-connection-pool.js +0 -325
  48. package/dist_ts/core/utils/fs-utils.d.ts +0 -144
  49. package/dist_ts/core/utils/fs-utils.js +0 -252
  50. package/dist_ts/core/utils/ip-utils.d.ts +0 -69
  51. package/dist_ts/core/utils/ip-utils.js +0 -270
  52. package/dist_ts/core/utils/lifecycle-component.d.ts +0 -59
  53. package/dist_ts/core/utils/lifecycle-component.js +0 -211
  54. package/dist_ts/core/utils/log-deduplicator.d.ts +0 -39
  55. package/dist_ts/core/utils/log-deduplicator.js +0 -305
  56. package/dist_ts/core/utils/security-utils.d.ts +0 -111
  57. package/dist_ts/core/utils/security-utils.js +0 -212
  58. package/dist_ts/core/utils/shared-security-manager.d.ts +0 -128
  59. package/dist_ts/core/utils/shared-security-manager.js +0 -362
  60. package/dist_ts/core/utils/socket-utils.d.ts +0 -63
  61. package/dist_ts/core/utils/socket-utils.js +0 -249
  62. package/dist_ts/core/utils/template-utils.d.ts +0 -37
  63. package/dist_ts/core/utils/template-utils.js +0 -104
  64. package/dist_ts/core/utils/validation-utils.d.ts +0 -61
  65. package/dist_ts/core/utils/validation-utils.js +0 -149
  66. package/dist_ts/core/utils/websocket-utils.d.ts +0 -22
  67. package/dist_ts/core/utils/websocket-utils.js +0 -30
  68. package/dist_ts/detection/detectors/http-detector.d.ts +0 -33
  69. package/dist_ts/detection/detectors/http-detector.js +0 -101
  70. package/dist_ts/detection/detectors/quick-detector.d.ts +0 -28
  71. package/dist_ts/detection/detectors/quick-detector.js +0 -131
  72. package/dist_ts/detection/detectors/routing-extractor.d.ts +0 -28
  73. package/dist_ts/detection/detectors/routing-extractor.js +0 -122
  74. package/dist_ts/detection/detectors/tls-detector.d.ts +0 -47
  75. package/dist_ts/detection/detectors/tls-detector.js +0 -183
  76. package/dist_ts/detection/index.d.ts +0 -17
  77. package/dist_ts/detection/index.js +0 -22
  78. package/dist_ts/detection/models/detection-types.d.ts +0 -87
  79. package/dist_ts/detection/models/detection-types.js +0 -5
  80. package/dist_ts/detection/models/interfaces.d.ts +0 -97
  81. package/dist_ts/detection/models/interfaces.js +0 -5
  82. package/dist_ts/detection/protocol-detector.d.ts +0 -79
  83. package/dist_ts/detection/protocol-detector.js +0 -253
  84. package/dist_ts/detection/utils/buffer-utils.d.ts +0 -61
  85. package/dist_ts/detection/utils/buffer-utils.js +0 -127
  86. package/dist_ts/detection/utils/fragment-manager.d.ts +0 -31
  87. package/dist_ts/detection/utils/fragment-manager.js +0 -53
  88. package/dist_ts/detection/utils/parser-utils.d.ts +0 -42
  89. package/dist_ts/detection/utils/parser-utils.js +0 -63
  90. package/dist_ts/protocols/common/fragment-handler.d.ts +0 -73
  91. package/dist_ts/protocols/common/fragment-handler.js +0 -121
  92. package/dist_ts/protocols/common/index.d.ts +0 -7
  93. package/dist_ts/protocols/common/index.js +0 -8
  94. package/dist_ts/protocols/common/types.d.ts +0 -68
  95. package/dist_ts/protocols/common/types.js +0 -7
  96. package/dist_ts/protocols/http/parser.d.ts +0 -58
  97. package/dist_ts/protocols/http/parser.js +0 -184
  98. package/dist_ts/protocols/proxy/index.d.ts +0 -5
  99. package/dist_ts/protocols/proxy/index.js +0 -6
  100. package/dist_ts/protocols/proxy/types.d.ts +0 -47
  101. package/dist_ts/protocols/proxy/types.js +0 -6
  102. package/dist_ts/protocols/tls/alerts/index.d.ts +0 -4
  103. package/dist_ts/protocols/tls/alerts/index.js +0 -5
  104. package/dist_ts/protocols/tls/alerts/tls-alert.d.ts +0 -150
  105. package/dist_ts/protocols/tls/alerts/tls-alert.js +0 -226
  106. package/dist_ts/protocols/tls/index.d.ts +0 -12
  107. package/dist_ts/protocols/tls/index.js +0 -27
  108. package/dist_ts/protocols/tls/sni/client-hello-parser.d.ts +0 -100
  109. package/dist_ts/protocols/tls/sni/client-hello-parser.js +0 -463
  110. package/dist_ts/protocols/tls/sni/index.d.ts +0 -5
  111. package/dist_ts/protocols/tls/sni/index.js +0 -6
  112. package/dist_ts/protocols/tls/sni/sni-extraction.d.ts +0 -58
  113. package/dist_ts/protocols/tls/sni/sni-extraction.js +0 -275
  114. package/dist_ts/protocols/tls/utils/index.d.ts +0 -4
  115. package/dist_ts/protocols/tls/utils/index.js +0 -5
  116. package/dist_ts/protocols/tls/utils/tls-utils.d.ts +0 -158
  117. package/dist_ts/protocols/tls/utils/tls-utils.js +0 -187
  118. package/dist_ts/protocols/websocket/constants.d.ts +0 -55
  119. package/dist_ts/protocols/websocket/constants.js +0 -58
  120. package/dist_ts/protocols/websocket/index.d.ts +0 -7
  121. package/dist_ts/protocols/websocket/index.js +0 -8
  122. package/dist_ts/protocols/websocket/types.d.ts +0 -47
  123. package/dist_ts/protocols/websocket/types.js +0 -5
  124. package/dist_ts/protocols/websocket/utils.d.ts +0 -25
  125. package/dist_ts/protocols/websocket/utils.js +0 -103
  126. package/dist_ts/routing/router/http-router.d.ts +0 -89
  127. package/dist_ts/routing/router/http-router.js +0 -205
  128. package/dist_ts/routing/router/index.d.ts +0 -5
  129. package/dist_ts/routing/router/index.js +0 -6
  130. package/dist_ts/tls/index.d.ts +0 -16
  131. package/dist_ts/tls/index.js +0 -24
  132. package/dist_ts/tls/sni/index.d.ts +0 -4
  133. package/dist_ts/tls/sni/index.js +0 -5
  134. package/dist_ts/tls/sni/sni-handler.d.ts +0 -154
  135. package/dist_ts/tls/sni/sni-handler.js +0 -191
  136. package/ts/core/events/index.ts +0 -3
  137. package/ts/core/models/socket-augmentation.ts +0 -38
  138. package/ts/core/utils/async-utils.ts +0 -275
  139. package/ts/core/utils/binary-heap.ts +0 -225
  140. package/ts/core/utils/enhanced-connection-pool.ts +0 -425
  141. package/ts/core/utils/fs-utils.ts +0 -270
  142. package/ts/core/utils/ip-utils.ts +0 -303
  143. package/ts/core/utils/lifecycle-component.ts +0 -251
  144. package/ts/core/utils/log-deduplicator.ts +0 -370
  145. package/ts/core/utils/security-utils.ts +0 -305
  146. package/ts/core/utils/shared-security-manager.ts +0 -470
  147. package/ts/core/utils/socket-utils.ts +0 -322
  148. package/ts/core/utils/template-utils.ts +0 -124
  149. package/ts/core/utils/validation-utils.ts +0 -177
  150. package/ts/core/utils/websocket-utils.ts +0 -33
  151. package/ts/detection/detectors/http-detector.ts +0 -127
  152. package/ts/detection/detectors/quick-detector.ts +0 -148
  153. package/ts/detection/detectors/routing-extractor.ts +0 -147
  154. package/ts/detection/detectors/tls-detector.ts +0 -223
  155. package/ts/detection/index.ts +0 -25
  156. package/ts/detection/models/detection-types.ts +0 -102
  157. package/ts/detection/models/interfaces.ts +0 -115
  158. package/ts/detection/protocol-detector.ts +0 -319
  159. package/ts/detection/utils/buffer-utils.ts +0 -141
  160. package/ts/detection/utils/fragment-manager.ts +0 -64
  161. package/ts/detection/utils/parser-utils.ts +0 -77
  162. package/ts/protocols/common/fragment-handler.ts +0 -167
  163. package/ts/protocols/common/index.ts +0 -8
  164. package/ts/protocols/common/types.ts +0 -76
  165. package/ts/protocols/http/parser.ts +0 -219
  166. package/ts/protocols/proxy/index.ts +0 -6
  167. package/ts/protocols/proxy/types.ts +0 -53
  168. package/ts/protocols/tls/alerts/index.ts +0 -3
  169. package/ts/protocols/tls/alerts/tls-alert.ts +0 -259
  170. package/ts/protocols/tls/index.ts +0 -37
  171. package/ts/protocols/tls/sni/client-hello-parser.ts +0 -629
  172. package/ts/protocols/tls/sni/index.ts +0 -6
  173. package/ts/protocols/tls/sni/sni-extraction.ts +0 -353
  174. package/ts/protocols/tls/utils/index.ts +0 -3
  175. package/ts/protocols/tls/utils/tls-utils.ts +0 -201
  176. package/ts/protocols/websocket/constants.ts +0 -60
  177. package/ts/protocols/websocket/index.ts +0 -8
  178. package/ts/protocols/websocket/types.ts +0 -53
  179. package/ts/protocols/websocket/utils.ts +0 -98
  180. package/ts/routing/router/http-router.ts +0 -266
  181. package/ts/routing/router/index.ts +0 -7
  182. package/ts/tls/index.ts +0 -29
  183. package/ts/tls/sni/index.ts +0 -3
  184. package/ts/tls/sni/sni-handler.ts +0 -264
@@ -1,110 +0,0 @@
1
- import { LifecycleComponent } from './lifecycle-component.js';
2
- /**
3
- * Interface for pooled connection
4
- */
5
- export interface IPooledConnection<T> {
6
- id: string;
7
- connection: T;
8
- createdAt: number;
9
- lastUsedAt: number;
10
- useCount: number;
11
- inUse: boolean;
12
- metadata?: any;
13
- }
14
- /**
15
- * Configuration options for the connection pool
16
- */
17
- export interface IConnectionPoolOptions<T> {
18
- minSize?: number;
19
- maxSize?: number;
20
- acquireTimeout?: number;
21
- idleTimeout?: number;
22
- maxUseCount?: number;
23
- validateOnAcquire?: boolean;
24
- validateOnReturn?: boolean;
25
- queueTimeout?: number;
26
- connectionFactory: () => Promise<T>;
27
- connectionValidator?: (connection: T) => Promise<boolean>;
28
- connectionDestroyer?: (connection: T) => Promise<void>;
29
- onConnectionError?: (error: Error, connection?: T) => void;
30
- }
31
- /**
32
- * Enhanced connection pool with priority queue, backpressure, and lifecycle management
33
- */
34
- export declare class EnhancedConnectionPool<T> extends LifecycleComponent {
35
- private readonly options;
36
- private readonly availableConnections;
37
- private readonly activeConnections;
38
- private readonly waitQueue;
39
- private readonly mutex;
40
- private readonly eventEmitter;
41
- private connectionIdCounter;
42
- private requestIdCounter;
43
- private isClosing;
44
- private metrics;
45
- constructor(options: IConnectionPoolOptions<T>);
46
- /**
47
- * Initialize minimum number of connections
48
- */
49
- private initializeMinConnections;
50
- /**
51
- * Start maintenance timer for idle connection cleanup
52
- */
53
- private startMaintenance;
54
- /**
55
- * Perform maintenance tasks
56
- */
57
- private performMaintenance;
58
- /**
59
- * Acquire a connection from the pool
60
- */
61
- acquire(priority?: number, timeout?: number): Promise<IPooledConnection<T>>;
62
- /**
63
- * Try to acquire an available connection
64
- */
65
- private tryAcquireConnection;
66
- /**
67
- * Checkout a connection for use
68
- */
69
- private checkoutConnection;
70
- /**
71
- * Queue an acquire request
72
- */
73
- private queueAcquireRequest;
74
- /**
75
- * Release a connection back to the pool
76
- */
77
- release(connection: IPooledConnection<T>): Promise<void>;
78
- /**
79
- * Create a new connection
80
- */
81
- private createConnection;
82
- /**
83
- * Destroy a connection
84
- */
85
- private destroyConnection;
86
- /**
87
- * Get current pool statistics
88
- */
89
- getStats(): {
90
- connectionsCreated: number;
91
- connectionsDestroyed: number;
92
- connectionsAcquired: number;
93
- connectionsReleased: number;
94
- acquireTimeouts: number;
95
- validationFailures: number;
96
- queueHighWaterMark: number;
97
- available: number;
98
- active: number;
99
- waiting: number;
100
- total: number;
101
- };
102
- /**
103
- * Subscribe to pool events
104
- */
105
- on(event: string, listener: Function): void;
106
- /**
107
- * Close the pool and cleanup resources
108
- */
109
- protected onCleanup(): Promise<void>;
110
- }
@@ -1,325 +0,0 @@
1
- import { LifecycleComponent } from './lifecycle-component.js';
2
- import { BinaryHeap } from './binary-heap.js';
3
- import { AsyncMutex } from './async-utils.js';
4
- import { EventEmitter } from 'node:events';
5
- /**
6
- * Enhanced connection pool with priority queue, backpressure, and lifecycle management
7
- */
8
- export class EnhancedConnectionPool extends LifecycleComponent {
9
- constructor(options) {
10
- super();
11
- this.availableConnections = [];
12
- this.activeConnections = new Map();
13
- this.mutex = new AsyncMutex();
14
- this.eventEmitter = new EventEmitter();
15
- this.connectionIdCounter = 0;
16
- this.requestIdCounter = 0;
17
- this.isClosing = false;
18
- // Metrics
19
- this.metrics = {
20
- connectionsCreated: 0,
21
- connectionsDestroyed: 0,
22
- connectionsAcquired: 0,
23
- connectionsReleased: 0,
24
- acquireTimeouts: 0,
25
- validationFailures: 0,
26
- queueHighWaterMark: 0,
27
- };
28
- this.options = {
29
- minSize: 0,
30
- maxSize: 10,
31
- acquireTimeout: 30000,
32
- idleTimeout: 300000, // 5 minutes
33
- maxUseCount: Infinity,
34
- validateOnAcquire: true,
35
- validateOnReturn: false,
36
- queueTimeout: 60000,
37
- ...options,
38
- };
39
- // Initialize priority queue (higher priority = extracted first)
40
- this.waitQueue = new BinaryHeap((a, b) => b.priority - a.priority || a.timestamp - b.timestamp, (item) => item.id);
41
- // Start maintenance cycle
42
- this.startMaintenance();
43
- // Initialize minimum connections
44
- this.initializeMinConnections();
45
- }
46
- /**
47
- * Initialize minimum number of connections
48
- */
49
- async initializeMinConnections() {
50
- const promises = [];
51
- for (let i = 0; i < this.options.minSize; i++) {
52
- promises.push(this.createConnection()
53
- .then(conn => {
54
- this.availableConnections.push(conn);
55
- })
56
- .catch(err => {
57
- if (this.options.onConnectionError) {
58
- this.options.onConnectionError(err);
59
- }
60
- }));
61
- }
62
- await Promise.all(promises);
63
- }
64
- /**
65
- * Start maintenance timer for idle connection cleanup
66
- */
67
- startMaintenance() {
68
- this.setInterval(() => {
69
- this.performMaintenance();
70
- }, 30000); // Every 30 seconds
71
- }
72
- /**
73
- * Perform maintenance tasks
74
- */
75
- async performMaintenance() {
76
- await this.mutex.runExclusive(async () => {
77
- const now = Date.now();
78
- const toRemove = [];
79
- // Check for idle connections beyond minimum size
80
- for (let i = this.availableConnections.length - 1; i >= 0; i--) {
81
- const conn = this.availableConnections[i];
82
- // Keep minimum connections
83
- if (this.availableConnections.length <= this.options.minSize) {
84
- break;
85
- }
86
- // Remove idle connections
87
- if (now - conn.lastUsedAt > this.options.idleTimeout) {
88
- toRemove.push(conn);
89
- this.availableConnections.splice(i, 1);
90
- }
91
- }
92
- // Destroy idle connections
93
- for (const conn of toRemove) {
94
- await this.destroyConnection(conn);
95
- }
96
- });
97
- }
98
- /**
99
- * Acquire a connection from the pool
100
- */
101
- async acquire(priority = 0, timeout) {
102
- if (this.isClosing) {
103
- throw new Error('Connection pool is closing');
104
- }
105
- return this.mutex.runExclusive(async () => {
106
- // Try to get an available connection
107
- const connection = await this.tryAcquireConnection();
108
- if (connection) {
109
- return connection;
110
- }
111
- // Check if we can create a new connection
112
- const totalConnections = this.availableConnections.length + this.activeConnections.size;
113
- if (totalConnections < this.options.maxSize) {
114
- try {
115
- const newConnection = await this.createConnection();
116
- return this.checkoutConnection(newConnection);
117
- }
118
- catch (err) {
119
- // Fall through to queue if creation fails
120
- }
121
- }
122
- // Add to wait queue
123
- return this.queueAcquireRequest(priority, timeout);
124
- });
125
- }
126
- /**
127
- * Try to acquire an available connection
128
- */
129
- async tryAcquireConnection() {
130
- while (this.availableConnections.length > 0) {
131
- const connection = this.availableConnections.shift();
132
- // Check if connection exceeded max use count
133
- if (connection.useCount >= this.options.maxUseCount) {
134
- await this.destroyConnection(connection);
135
- continue;
136
- }
137
- // Validate connection if required
138
- if (this.options.validateOnAcquire && this.options.connectionValidator) {
139
- try {
140
- const isValid = await this.options.connectionValidator(connection.connection);
141
- if (!isValid) {
142
- this.metrics.validationFailures++;
143
- await this.destroyConnection(connection);
144
- continue;
145
- }
146
- }
147
- catch (err) {
148
- this.metrics.validationFailures++;
149
- await this.destroyConnection(connection);
150
- continue;
151
- }
152
- }
153
- return this.checkoutConnection(connection);
154
- }
155
- return null;
156
- }
157
- /**
158
- * Checkout a connection for use
159
- */
160
- checkoutConnection(connection) {
161
- connection.inUse = true;
162
- connection.lastUsedAt = Date.now();
163
- connection.useCount++;
164
- this.activeConnections.set(connection.id, connection);
165
- this.metrics.connectionsAcquired++;
166
- this.eventEmitter.emit('acquire', connection);
167
- return connection;
168
- }
169
- /**
170
- * Queue an acquire request
171
- */
172
- queueAcquireRequest(priority, timeout) {
173
- return new Promise((resolve, reject) => {
174
- const request = {
175
- id: `req-${this.requestIdCounter++}`,
176
- priority,
177
- timestamp: Date.now(),
178
- resolve,
179
- reject,
180
- };
181
- // Set timeout
182
- const timeoutMs = timeout || this.options.queueTimeout;
183
- request.timeoutHandle = this.setTimeout(() => {
184
- if (this.waitQueue.extractByKey(request.id)) {
185
- this.metrics.acquireTimeouts++;
186
- reject(new Error(`Connection acquire timeout after ${timeoutMs}ms`));
187
- }
188
- }, timeoutMs);
189
- this.waitQueue.insert(request);
190
- this.metrics.queueHighWaterMark = Math.max(this.metrics.queueHighWaterMark, this.waitQueue.size);
191
- this.eventEmitter.emit('enqueue', { queueSize: this.waitQueue.size });
192
- });
193
- }
194
- /**
195
- * Release a connection back to the pool
196
- */
197
- async release(connection) {
198
- return this.mutex.runExclusive(async () => {
199
- if (!connection.inUse || !this.activeConnections.has(connection.id)) {
200
- throw new Error('Connection is not active');
201
- }
202
- this.activeConnections.delete(connection.id);
203
- connection.inUse = false;
204
- connection.lastUsedAt = Date.now();
205
- this.metrics.connectionsReleased++;
206
- // Check if connection should be destroyed
207
- if (connection.useCount >= this.options.maxUseCount) {
208
- await this.destroyConnection(connection);
209
- return;
210
- }
211
- // Validate on return if required
212
- if (this.options.validateOnReturn && this.options.connectionValidator) {
213
- try {
214
- const isValid = await this.options.connectionValidator(connection.connection);
215
- if (!isValid) {
216
- await this.destroyConnection(connection);
217
- return;
218
- }
219
- }
220
- catch (err) {
221
- await this.destroyConnection(connection);
222
- return;
223
- }
224
- }
225
- // Check if there are waiting requests
226
- const request = this.waitQueue.extract();
227
- if (request) {
228
- this.clearTimeout(request.timeoutHandle);
229
- request.resolve(this.checkoutConnection(connection));
230
- this.eventEmitter.emit('dequeue', { queueSize: this.waitQueue.size });
231
- }
232
- else {
233
- // Return to available pool
234
- this.availableConnections.push(connection);
235
- this.eventEmitter.emit('release', connection);
236
- }
237
- });
238
- }
239
- /**
240
- * Create a new connection
241
- */
242
- async createConnection() {
243
- const rawConnection = await this.options.connectionFactory();
244
- const connection = {
245
- id: `conn-${this.connectionIdCounter++}`,
246
- connection: rawConnection,
247
- createdAt: Date.now(),
248
- lastUsedAt: Date.now(),
249
- useCount: 0,
250
- inUse: false,
251
- };
252
- this.metrics.connectionsCreated++;
253
- this.eventEmitter.emit('create', connection);
254
- return connection;
255
- }
256
- /**
257
- * Destroy a connection
258
- */
259
- async destroyConnection(connection) {
260
- try {
261
- if (this.options.connectionDestroyer) {
262
- await this.options.connectionDestroyer(connection.connection);
263
- }
264
- this.metrics.connectionsDestroyed++;
265
- this.eventEmitter.emit('destroy', connection);
266
- }
267
- catch (err) {
268
- if (this.options.onConnectionError) {
269
- this.options.onConnectionError(err, connection.connection);
270
- }
271
- }
272
- }
273
- /**
274
- * Get current pool statistics
275
- */
276
- getStats() {
277
- return {
278
- available: this.availableConnections.length,
279
- active: this.activeConnections.size,
280
- waiting: this.waitQueue.size,
281
- total: this.availableConnections.length + this.activeConnections.size,
282
- ...this.metrics,
283
- };
284
- }
285
- /**
286
- * Subscribe to pool events
287
- */
288
- on(event, listener) {
289
- this.addEventListener(this.eventEmitter, event, listener);
290
- }
291
- /**
292
- * Close the pool and cleanup resources
293
- */
294
- async onCleanup() {
295
- this.isClosing = true;
296
- // Clear the wait queue
297
- while (!this.waitQueue.isEmpty()) {
298
- const request = this.waitQueue.extract();
299
- if (request) {
300
- this.clearTimeout(request.timeoutHandle);
301
- request.reject(new Error('Connection pool is closing'));
302
- }
303
- }
304
- // Wait for active connections to be released (with timeout)
305
- const timeout = 30000;
306
- const startTime = Date.now();
307
- while (this.activeConnections.size > 0 && Date.now() - startTime < timeout) {
308
- await new Promise(resolve => {
309
- const timer = setTimeout(resolve, 100);
310
- if (typeof timer.unref === 'function') {
311
- timer.unref();
312
- }
313
- });
314
- }
315
- // Destroy all connections
316
- const allConnections = [
317
- ...this.availableConnections,
318
- ...this.activeConnections.values(),
319
- ];
320
- await Promise.all(allConnections.map(conn => this.destroyConnection(conn)));
321
- this.availableConnections.length = 0;
322
- this.activeConnections.clear();
323
- }
324
- }
325
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5oYW5jZWQtY29ubmVjdGlvbi1wb29sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvY29yZS91dGlscy9lbmhhbmNlZC1jb25uZWN0aW9uLXBvb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBNkMzQzs7R0FFRztBQUNILE1BQU0sT0FBTyxzQkFBMEIsU0FBUSxrQkFBa0I7SUF1Qi9ELFlBQVksT0FBa0M7UUFDNUMsS0FBSyxFQUFFLENBQUM7UUF0Qk8seUJBQW9CLEdBQTJCLEVBQUUsQ0FBQztRQUNsRCxzQkFBaUIsR0FBc0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUVqRSxVQUFLLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUN6QixpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFM0Msd0JBQW1CLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLHFCQUFnQixHQUFHLENBQUMsQ0FBQztRQUNyQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRTFCLFVBQVU7UUFDRixZQUFPLEdBQUc7WUFDaEIsa0JBQWtCLEVBQUUsQ0FBQztZQUNyQixvQkFBb0IsRUFBRSxDQUFDO1lBQ3ZCLG1CQUFtQixFQUFFLENBQUM7WUFDdEIsbUJBQW1CLEVBQUUsQ0FBQztZQUN0QixlQUFlLEVBQUUsQ0FBQztZQUNsQixrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCLGtCQUFrQixFQUFFLENBQUM7U0FDdEIsQ0FBQztRQUtBLElBQUksQ0FBQyxPQUFPLEdBQUc7WUFDYixPQUFPLEVBQUUsQ0FBQztZQUNWLE9BQU8sRUFBRSxFQUFFO1lBQ1gs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
@@ -1,144 +0,0 @@
1
- /**
2
- * Async filesystem utilities for SmartProxy
3
- * Provides non-blocking alternatives to synchronous filesystem operations
4
- */
5
- import * as plugins from '../../plugins.js';
6
- export declare class AsyncFileSystem {
7
- /**
8
- * Check if a file or directory exists
9
- * @param path - Path to check
10
- * @returns Promise resolving to true if exists, false otherwise
11
- */
12
- static exists(path: string): Promise<boolean>;
13
- /**
14
- * Ensure a directory exists, creating it if necessary
15
- * @param dirPath - Directory path to ensure
16
- * @returns Promise that resolves when directory is ensured
17
- */
18
- static ensureDir(dirPath: string): Promise<void>;
19
- /**
20
- * Read a file as string
21
- * @param filePath - Path to the file
22
- * @param encoding - File encoding (default: utf8)
23
- * @returns Promise resolving to file contents
24
- */
25
- static readFile(filePath: string, encoding?: BufferEncoding): Promise<string>;
26
- /**
27
- * Read a file as buffer
28
- * @param filePath - Path to the file
29
- * @returns Promise resolving to file buffer
30
- */
31
- static readFileBuffer(filePath: string): Promise<Buffer>;
32
- /**
33
- * Write string data to a file
34
- * @param filePath - Path to the file
35
- * @param data - String data to write
36
- * @param encoding - File encoding (default: utf8)
37
- * @returns Promise that resolves when file is written
38
- */
39
- static writeFile(filePath: string, data: string, encoding?: BufferEncoding): Promise<void>;
40
- /**
41
- * Write buffer data to a file
42
- * @param filePath - Path to the file
43
- * @param data - Buffer data to write
44
- * @returns Promise that resolves when file is written
45
- */
46
- static writeFileBuffer(filePath: string, data: Buffer): Promise<void>;
47
- /**
48
- * Remove a file
49
- * @param filePath - Path to the file
50
- * @returns Promise that resolves when file is removed
51
- */
52
- static remove(filePath: string): Promise<void>;
53
- /**
54
- * Remove a directory and all its contents
55
- * @param dirPath - Path to the directory
56
- * @returns Promise that resolves when directory is removed
57
- */
58
- static removeDir(dirPath: string): Promise<void>;
59
- /**
60
- * Read JSON from a file
61
- * @param filePath - Path to the JSON file
62
- * @returns Promise resolving to parsed JSON
63
- */
64
- static readJSON<T = any>(filePath: string): Promise<T>;
65
- /**
66
- * Write JSON to a file
67
- * @param filePath - Path to the file
68
- * @param data - Data to write as JSON
69
- * @param pretty - Whether to pretty-print JSON (default: true)
70
- * @returns Promise that resolves when file is written
71
- */
72
- static writeJSON(filePath: string, data: any, pretty?: boolean): Promise<void>;
73
- /**
74
- * Copy a file from source to destination
75
- * @param source - Source file path
76
- * @param destination - Destination file path
77
- * @returns Promise that resolves when file is copied
78
- */
79
- static copyFile(source: string, destination: string): Promise<void>;
80
- /**
81
- * Move/rename a file
82
- * @param source - Source file path
83
- * @param destination - Destination file path
84
- * @returns Promise that resolves when file is moved
85
- */
86
- static moveFile(source: string, destination: string): Promise<void>;
87
- /**
88
- * Get file stats
89
- * @param filePath - Path to the file
90
- * @returns Promise resolving to file stats or null if doesn't exist
91
- */
92
- static getStats(filePath: string): Promise<plugins.fs.Stats | null>;
93
- /**
94
- * List files in a directory
95
- * @param dirPath - Directory path
96
- * @returns Promise resolving to array of filenames
97
- */
98
- static listFiles(dirPath: string): Promise<string[]>;
99
- /**
100
- * List files in a directory with full paths
101
- * @param dirPath - Directory path
102
- * @returns Promise resolving to array of full file paths
103
- */
104
- static listFilesFullPath(dirPath: string): Promise<string[]>;
105
- /**
106
- * Recursively list all files in a directory
107
- * @param dirPath - Directory path
108
- * @param fileList - Accumulator for file list (used internally)
109
- * @returns Promise resolving to array of all file paths
110
- */
111
- static listFilesRecursive(dirPath: string, fileList?: string[]): Promise<string[]>;
112
- /**
113
- * Create a read stream for a file
114
- * @param filePath - Path to the file
115
- * @param options - Stream options
116
- * @returns Read stream
117
- */
118
- static createReadStream(filePath: string, options?: Parameters<typeof plugins.fs.createReadStream>[1]): plugins.fs.ReadStream;
119
- /**
120
- * Create a write stream for a file
121
- * @param filePath - Path to the file
122
- * @param options - Stream options
123
- * @returns Write stream
124
- */
125
- static createWriteStream(filePath: string, options?: Parameters<typeof plugins.fs.createWriteStream>[1]): plugins.fs.WriteStream;
126
- /**
127
- * Ensure a file exists, creating an empty file if necessary
128
- * @param filePath - Path to the file
129
- * @returns Promise that resolves when file is ensured
130
- */
131
- static ensureFile(filePath: string): Promise<void>;
132
- /**
133
- * Check if a path is a directory
134
- * @param path - Path to check
135
- * @returns Promise resolving to true if directory, false otherwise
136
- */
137
- static isDirectory(path: string): Promise<boolean>;
138
- /**
139
- * Check if a path is a file
140
- * @param path - Path to check
141
- * @returns Promise resolving to true if file, false otherwise
142
- */
143
- static isFile(path: string): Promise<boolean>;
144
- }