bunqueue 1.9.1 → 1.9.3

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 (165) hide show
  1. package/dist/application/operations/queueControl.d.ts.map +1 -1
  2. package/dist/application/operations/queueControl.js +6 -1
  3. package/dist/application/operations/queueControl.js.map +1 -1
  4. package/dist/application/queueManager.d.ts +115 -9
  5. package/dist/application/queueManager.d.ts.map +1 -1
  6. package/dist/application/queueManager.js +535 -26
  7. package/dist/application/queueManager.js.map +1 -1
  8. package/dist/cli/client.d.ts +6 -0
  9. package/dist/cli/client.d.ts.map +1 -1
  10. package/dist/cli/client.js +60 -48
  11. package/dist/cli/client.js.map +1 -1
  12. package/dist/cli/commands/server.d.ts.map +1 -1
  13. package/dist/cli/commands/server.js +30 -14
  14. package/dist/cli/commands/server.js.map +1 -1
  15. package/dist/cli/help.d.ts.map +1 -1
  16. package/dist/cli/help.js +10 -6
  17. package/dist/cli/help.js.map +1 -1
  18. package/dist/cli/index.d.ts.map +1 -1
  19. package/dist/cli/index.js +15 -2
  20. package/dist/cli/index.js.map +1 -1
  21. package/dist/client/queue/dlqOps.d.ts +24 -0
  22. package/dist/client/queue/dlqOps.d.ts.map +1 -0
  23. package/dist/client/queue/dlqOps.js +73 -0
  24. package/dist/client/queue/dlqOps.js.map +1 -0
  25. package/dist/client/queue/helpers.d.ts +20 -0
  26. package/dist/client/queue/helpers.d.ts.map +1 -0
  27. package/dist/client/queue/helpers.js +34 -0
  28. package/dist/client/queue/helpers.js.map +1 -0
  29. package/dist/client/queue/index.d.ts +8 -0
  30. package/dist/client/queue/index.d.ts.map +1 -0
  31. package/dist/client/queue/index.js +8 -0
  32. package/dist/client/queue/index.js.map +1 -0
  33. package/dist/client/queue/queue.d.ts +60 -0
  34. package/dist/client/queue/queue.d.ts.map +1 -0
  35. package/dist/client/queue/queue.js +322 -0
  36. package/dist/client/queue/queue.js.map +1 -0
  37. package/dist/client/queue.d.ts +3 -78
  38. package/dist/client/queue.d.ts.map +1 -1
  39. package/dist/client/queue.js +3 -463
  40. package/dist/client/queue.js.map +1 -1
  41. package/dist/client/sandboxed/index.d.ts +8 -0
  42. package/dist/client/sandboxed/index.d.ts.map +1 -0
  43. package/dist/client/sandboxed/index.js +7 -0
  44. package/dist/client/sandboxed/index.js.map +1 -0
  45. package/dist/client/sandboxed/types.d.ts +62 -0
  46. package/dist/client/sandboxed/types.d.ts.map +1 -0
  47. package/dist/client/sandboxed/types.js +6 -0
  48. package/dist/client/sandboxed/types.js.map +1 -0
  49. package/dist/client/sandboxed/worker.d.ts +38 -0
  50. package/dist/client/sandboxed/worker.d.ts.map +1 -0
  51. package/dist/client/sandboxed/worker.js +176 -0
  52. package/dist/client/sandboxed/worker.js.map +1 -0
  53. package/dist/client/sandboxed/wrapper.d.ts +13 -0
  54. package/dist/client/sandboxed/wrapper.d.ts.map +1 -0
  55. package/dist/client/sandboxed/wrapper.js +65 -0
  56. package/dist/client/sandboxed/wrapper.js.map +1 -0
  57. package/dist/client/sandboxedWorker.d.ts +4 -87
  58. package/dist/client/sandboxedWorker.d.ts.map +1 -1
  59. package/dist/client/sandboxedWorker.js +3 -296
  60. package/dist/client/sandboxedWorker.js.map +1 -1
  61. package/dist/client/tcp/client.d.ts +40 -0
  62. package/dist/client/tcp/client.d.ts.map +1 -0
  63. package/dist/client/tcp/client.js +289 -0
  64. package/dist/client/tcp/client.js.map +1 -0
  65. package/dist/client/tcp/connection.d.ts +57 -0
  66. package/dist/client/tcp/connection.d.ts.map +1 -0
  67. package/dist/client/tcp/connection.js +162 -0
  68. package/dist/client/tcp/connection.js.map +1 -0
  69. package/dist/client/tcp/health.d.ts +47 -0
  70. package/dist/client/tcp/health.d.ts.map +1 -0
  71. package/dist/client/tcp/health.js +95 -0
  72. package/dist/client/tcp/health.js.map +1 -0
  73. package/dist/client/tcp/index.d.ts +13 -0
  74. package/dist/client/tcp/index.d.ts.map +1 -0
  75. package/dist/client/tcp/index.js +12 -0
  76. package/dist/client/tcp/index.js.map +1 -0
  77. package/dist/client/tcp/lineBuffer.d.ts +17 -0
  78. package/dist/client/tcp/lineBuffer.d.ts.map +1 -0
  79. package/dist/client/tcp/lineBuffer.js +32 -0
  80. package/dist/client/tcp/lineBuffer.js.map +1 -0
  81. package/dist/client/tcp/reconnect.d.ts +38 -0
  82. package/dist/client/tcp/reconnect.d.ts.map +1 -0
  83. package/dist/client/tcp/reconnect.js +70 -0
  84. package/dist/client/tcp/reconnect.js.map +1 -0
  85. package/dist/client/tcp/shared.d.ts +11 -0
  86. package/dist/client/tcp/shared.d.ts.map +1 -0
  87. package/dist/client/tcp/shared.js +20 -0
  88. package/dist/client/tcp/shared.js.map +1 -0
  89. package/dist/client/tcp/types.d.ts +76 -0
  90. package/dist/client/tcp/types.d.ts.map +1 -0
  91. package/dist/client/tcp/types.js +20 -0
  92. package/dist/client/tcp/types.js.map +1 -0
  93. package/dist/client/tcpClient.d.ts +4 -110
  94. package/dist/client/tcpClient.d.ts.map +1 -1
  95. package/dist/client/tcpClient.js +3 -523
  96. package/dist/client/tcpClient.js.map +1 -1
  97. package/dist/client/tcpPool.d.ts +3 -0
  98. package/dist/client/tcpPool.d.ts.map +1 -1
  99. package/dist/client/tcpPool.js +21 -2
  100. package/dist/client/tcpPool.js.map +1 -1
  101. package/dist/client/types.d.ts +11 -2
  102. package/dist/client/types.d.ts.map +1 -1
  103. package/dist/client/types.js.map +1 -1
  104. package/dist/client/worker/ackBatcher.d.ts +40 -0
  105. package/dist/client/worker/ackBatcher.d.ts.map +1 -0
  106. package/dist/client/worker/ackBatcher.js +137 -0
  107. package/dist/client/worker/ackBatcher.js.map +1 -0
  108. package/dist/client/worker/index.d.ts +11 -0
  109. package/dist/client/worker/index.d.ts.map +1 -0
  110. package/dist/client/worker/index.js +10 -0
  111. package/dist/client/worker/index.js.map +1 -0
  112. package/dist/client/worker/jobParser.d.ts +10 -0
  113. package/dist/client/worker/jobParser.d.ts.map +1 -0
  114. package/dist/client/worker/jobParser.js +43 -0
  115. package/dist/client/worker/jobParser.js.map +1 -0
  116. package/dist/client/worker/processor.d.ts +24 -0
  117. package/dist/client/worker/processor.d.ts.map +1 -0
  118. package/dist/client/worker/processor.js +86 -0
  119. package/dist/client/worker/processor.js.map +1 -0
  120. package/dist/client/worker/types.d.ts +38 -0
  121. package/dist/client/worker/types.d.ts.map +1 -0
  122. package/dist/client/worker/types.js +14 -0
  123. package/dist/client/worker/types.js.map +1 -0
  124. package/dist/client/worker/worker.d.ts +53 -0
  125. package/dist/client/worker/worker.d.ts.map +1 -0
  126. package/dist/client/worker/worker.js +367 -0
  127. package/dist/client/worker/worker.js.map +1 -0
  128. package/dist/client/worker.d.ts +3 -69
  129. package/dist/client/worker.d.ts.map +1 -1
  130. package/dist/client/worker.js +3 -472
  131. package/dist/client/worker.js.map +1 -1
  132. package/dist/domain/queue/shard.d.ts +19 -2
  133. package/dist/domain/queue/shard.d.ts.map +1 -1
  134. package/dist/domain/queue/shard.js +36 -4
  135. package/dist/domain/queue/shard.js.map +1 -1
  136. package/dist/domain/types/command.d.ts +9 -0
  137. package/dist/domain/types/command.d.ts.map +1 -1
  138. package/dist/domain/types/job.d.ts +27 -0
  139. package/dist/domain/types/job.d.ts.map +1 -1
  140. package/dist/domain/types/job.js +34 -0
  141. package/dist/domain/types/job.js.map +1 -1
  142. package/dist/domain/types/response.d.ts +15 -1
  143. package/dist/domain/types/response.d.ts.map +1 -1
  144. package/dist/domain/types/response.js +16 -0
  145. package/dist/domain/types/response.js.map +1 -1
  146. package/dist/infrastructure/server/handlers/core.d.ts +1 -1
  147. package/dist/infrastructure/server/handlers/core.d.ts.map +1 -1
  148. package/dist/infrastructure/server/handlers/core.js +74 -15
  149. package/dist/infrastructure/server/handlers/core.js.map +1 -1
  150. package/dist/infrastructure/server/handlers/monitoring.d.ts.map +1 -1
  151. package/dist/infrastructure/server/handlers/monitoring.js +6 -4
  152. package/dist/infrastructure/server/handlers/monitoring.js.map +1 -1
  153. package/dist/infrastructure/server/http.d.ts +10 -3
  154. package/dist/infrastructure/server/http.d.ts.map +1 -1
  155. package/dist/infrastructure/server/http.js +244 -163
  156. package/dist/infrastructure/server/http.js.map +1 -1
  157. package/dist/infrastructure/server/tcp.d.ts +8 -3
  158. package/dist/infrastructure/server/tcp.d.ts.map +1 -1
  159. package/dist/infrastructure/server/tcp.js +77 -57
  160. package/dist/infrastructure/server/tcp.js.map +1 -1
  161. package/dist/infrastructure/server/types.d.ts +2 -0
  162. package/dist/infrastructure/server/types.d.ts.map +1 -1
  163. package/dist/main.js +24 -4
  164. package/dist/main.js.map +1 -1
  165. package/package.json +1 -1
@@ -1,526 +1,6 @@
1
1
  /**
2
- * TCP Client for SDK - Production Ready
3
- * Connects to bunqueue server via TCP with auto-reconnection
2
+ * TCP Client - Re-exports from tcp module
3
+ * @deprecated Import from './tcp' instead
4
4
  */
5
- import { EventEmitter } from 'events';
6
- /** Default connection */
7
- export const DEFAULT_CONNECTION = {
8
- host: 'localhost',
9
- port: 6789,
10
- token: '',
11
- maxReconnectAttempts: Infinity,
12
- reconnectDelay: 100,
13
- maxReconnectDelay: 30000,
14
- connectTimeout: 5000,
15
- commandTimeout: 30000,
16
- autoReconnect: true,
17
- pingInterval: 30000, // 30s health check
18
- maxPingFailures: 3, // Force reconnect after 3 failed pings
19
- };
20
- /** Line buffer for efficient parsing */
21
- class LineBuffer {
22
- partial = '';
23
- /** Add data and return complete lines */
24
- addData(data) {
25
- const combined = this.partial + data;
26
- const lines = [];
27
- let start = 0;
28
- let idx;
29
- while ((idx = combined.indexOf('\n', start)) !== -1) {
30
- const line = combined.slice(start, idx);
31
- if (line.length > 0) {
32
- lines.push(line);
33
- }
34
- start = idx + 1;
35
- }
36
- this.partial = start < combined.length ? combined.slice(start) : '';
37
- return lines;
38
- }
39
- clear() {
40
- this.partial = '';
41
- }
42
- }
43
- /**
44
- * TCP Client - manages connection to bunqueue server
45
- * Production-ready with auto-reconnection and exponential backoff
46
- */
47
- export class TcpClient extends EventEmitter {
48
- socket = null;
49
- connected = false;
50
- connecting = false;
51
- closed = false;
52
- reconnectAttempts = 0;
53
- reconnectTimer = null;
54
- pingTimer = null;
55
- options;
56
- pendingCommands = new Map();
57
- pendingQueue = []; // FIFO queue of command IDs
58
- currentCommand = null;
59
- commandIdCounter = 0;
60
- // Health tracking
61
- consecutivePingFailures = 0;
62
- lastSuccessAt = null;
63
- lastErrorAt = null;
64
- connectedAt = null;
65
- totalCommands = 0;
66
- totalErrors = 0;
67
- latencyHistory = []; // Last 10 latencies
68
- static MAX_LATENCY_HISTORY = 10;
69
- constructor(options = {}) {
70
- super();
71
- this.options = { ...DEFAULT_CONNECTION, ...options };
72
- }
73
- /** Connect to server */
74
- async connect() {
75
- if (this.connected)
76
- return;
77
- if (this.connecting) {
78
- // Wait for current connection attempt
79
- return new Promise((resolve, reject) => {
80
- const onConnect = () => {
81
- this.off('error', onError);
82
- resolve();
83
- };
84
- const onError = (err) => {
85
- this.off('connected', onConnect);
86
- reject(err);
87
- };
88
- this.once('connected', onConnect);
89
- this.once('error', onError);
90
- });
91
- }
92
- this.connecting = true;
93
- this.closed = false;
94
- try {
95
- await this.doConnect();
96
- this.reconnectAttempts = 0;
97
- this.emit('connected');
98
- // Start health check ping
99
- this.startPing();
100
- // Process any pending commands
101
- this.processNextCommand();
102
- }
103
- catch (err) {
104
- this.connecting = false;
105
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- user can set to false
106
- if (this.options.autoReconnect && !this.closed) {
107
- this.scheduleReconnect();
108
- }
109
- throw err;
110
- }
111
- }
112
- async doConnect() {
113
- return new Promise((resolve, reject) => {
114
- const socketData = {
115
- write: () => { },
116
- end: () => { },
117
- lineBuffer: new LineBuffer(),
118
- };
119
- let connectionResolved = false;
120
- let timeoutId = null;
121
- const cleanup = () => {
122
- if (timeoutId) {
123
- clearTimeout(timeoutId);
124
- timeoutId = null;
125
- }
126
- };
127
- void Bun.connect({
128
- hostname: this.options.host,
129
- port: this.options.port,
130
- socket: {
131
- data: (_sock, data) => {
132
- const lines = socketData.lineBuffer.addData(data.toString());
133
- for (const line of lines) {
134
- if (this.currentCommand) {
135
- try {
136
- const response = JSON.parse(line);
137
- clearTimeout(this.currentCommand.timeout);
138
- this.currentCommand.resolve(response);
139
- this.currentCommand = null;
140
- this.processNextCommand();
141
- }
142
- catch {
143
- if (this.currentCommand) {
144
- clearTimeout(this.currentCommand.timeout);
145
- this.currentCommand.reject(new Error('Invalid response from server'));
146
- this.currentCommand = null;
147
- this.processNextCommand();
148
- }
149
- }
150
- }
151
- }
152
- },
153
- open: async (sock) => {
154
- cleanup();
155
- socketData.write = (data) => sock.write(data);
156
- socketData.end = () => sock.end();
157
- this.socket = socketData;
158
- this.connected = true;
159
- this.connecting = false;
160
- this.connectedAt = Date.now();
161
- this.consecutivePingFailures = 0;
162
- // Authenticate if token provided
163
- if (this.options.token) {
164
- try {
165
- const authResponse = await this.sendInternal({
166
- cmd: 'Auth',
167
- token: this.options.token,
168
- });
169
- if (!authResponse.ok) {
170
- connectionResolved = true;
171
- reject(new Error('Authentication failed'));
172
- return;
173
- }
174
- }
175
- catch (err) {
176
- connectionResolved = true;
177
- reject(err instanceof Error ? err : new Error(String(err)));
178
- return;
179
- }
180
- }
181
- connectionResolved = true;
182
- resolve();
183
- },
184
- close: () => {
185
- const wasConnected = this.connected;
186
- this.connected = false;
187
- this.connecting = false;
188
- this.socket = null;
189
- this.stopPing();
190
- // Reject current command
191
- if (this.currentCommand) {
192
- clearTimeout(this.currentCommand.timeout);
193
- this.currentCommand.reject(new Error('Connection closed'));
194
- this.currentCommand = null;
195
- }
196
- if (wasConnected) {
197
- this.emit('disconnected');
198
- if (this.options.autoReconnect && !this.closed) {
199
- this.scheduleReconnect();
200
- }
201
- }
202
- if (!connectionResolved) {
203
- connectionResolved = true;
204
- cleanup();
205
- reject(new Error('Connection closed'));
206
- }
207
- },
208
- error: (_sock, error) => {
209
- if (!connectionResolved) {
210
- connectionResolved = true;
211
- cleanup();
212
- reject(new Error(`Connection error: ${error.message}`));
213
- }
214
- this.emit('error', error);
215
- },
216
- connectError: (_sock, error) => {
217
- if (!connectionResolved) {
218
- connectionResolved = true;
219
- cleanup();
220
- reject(new Error(`Failed to connect to ${this.options.host}:${this.options.port}: ${error.message}`));
221
- }
222
- },
223
- },
224
- });
225
- // Connection timeout
226
- timeoutId = setTimeout(() => {
227
- if (!connectionResolved) {
228
- connectionResolved = true;
229
- reject(new Error(`Connection timeout to ${this.options.host}:${this.options.port}`));
230
- }
231
- }, this.options.connectTimeout);
232
- });
233
- }
234
- /** Start periodic health check ping */
235
- startPing() {
236
- if (this.options.pingInterval <= 0)
237
- return;
238
- this.stopPing();
239
- this.pingTimer = setInterval(() => {
240
- void this.ping();
241
- }, this.options.pingInterval);
242
- }
243
- /** Stop health check ping */
244
- stopPing() {
245
- if (this.pingTimer) {
246
- clearInterval(this.pingTimer);
247
- this.pingTimer = null;
248
- }
249
- }
250
- /** Send ping to check connection health */
251
- async ping() {
252
- if (!this.connected)
253
- return false;
254
- try {
255
- const start = Date.now();
256
- const response = await this.send({ cmd: 'Ping' });
257
- const success = response.pong === true;
258
- if (success) {
259
- this.consecutivePingFailures = 0;
260
- this.recordLatency(Date.now() - start);
261
- this.emit('health', { type: 'ping_success', latency: Date.now() - start });
262
- }
263
- else {
264
- this.handlePingFailure();
265
- }
266
- return success;
267
- }
268
- catch {
269
- this.handlePingFailure();
270
- return false;
271
- }
272
- }
273
- /** Handle ping failure - force reconnect if too many failures */
274
- handlePingFailure() {
275
- this.consecutivePingFailures++;
276
- this.lastErrorAt = Date.now();
277
- this.totalErrors++;
278
- this.emit('health', {
279
- type: 'ping_failed',
280
- consecutiveFailures: this.consecutivePingFailures,
281
- });
282
- // Force reconnect if too many consecutive failures
283
- if (this.consecutivePingFailures >= this.options.maxPingFailures) {
284
- this.emit('health', { type: 'unhealthy', reason: 'max_ping_failures' });
285
- this.forceReconnect();
286
- }
287
- }
288
- /** Force reconnection */
289
- forceReconnect() {
290
- if (this.closed)
291
- return;
292
- // Close current connection
293
- if (this.socket) {
294
- this.socket.end();
295
- this.socket = null;
296
- }
297
- this.connected = false;
298
- this.stopPing();
299
- // Trigger reconnect
300
- if (this.options.autoReconnect) {
301
- this.scheduleReconnect();
302
- }
303
- }
304
- /** Record command latency for health metrics */
305
- recordLatency(latencyMs) {
306
- this.latencyHistory.push(latencyMs);
307
- if (this.latencyHistory.length > TcpClient.MAX_LATENCY_HISTORY) {
308
- this.latencyHistory.shift();
309
- }
310
- }
311
- /** Get connection health metrics */
312
- getHealth() {
313
- const avgLatency = this.latencyHistory.length > 0
314
- ? this.latencyHistory.reduce((a, b) => a + b, 0) / this.latencyHistory.length
315
- : 0;
316
- return {
317
- healthy: this.connected && this.consecutivePingFailures < this.options.maxPingFailures,
318
- state: this.getState(),
319
- lastSuccessAt: this.lastSuccessAt,
320
- lastErrorAt: this.lastErrorAt,
321
- avgLatencyMs: Math.round(avgLatency * 100) / 100,
322
- consecutivePingFailures: this.consecutivePingFailures,
323
- totalCommands: this.totalCommands,
324
- totalErrors: this.totalErrors,
325
- uptimeMs: this.connectedAt ? Date.now() - this.connectedAt : 0,
326
- };
327
- }
328
- /** Schedule reconnection with exponential backoff */
329
- scheduleReconnect() {
330
- if (this.reconnectTimer || this.closed)
331
- return;
332
- this.reconnectAttempts++;
333
- if (this.reconnectAttempts > this.options.maxReconnectAttempts) {
334
- this.emit('maxReconnectAttemptsReached');
335
- // Reject all pending commands
336
- for (const cmd of this.pendingCommands.values()) {
337
- clearTimeout(cmd.timeout);
338
- cmd.reject(new Error('Max reconnection attempts reached'));
339
- }
340
- this.pendingCommands.clear();
341
- this.pendingQueue = [];
342
- return;
343
- }
344
- // Exponential backoff with jitter
345
- const baseDelay = Math.min(this.options.reconnectDelay * Math.pow(2, this.reconnectAttempts - 1), this.options.maxReconnectDelay);
346
- const jitter = Math.random() * 0.3 * baseDelay; // 0-30% jitter
347
- const delay = baseDelay + jitter;
348
- this.emit('reconnecting', { attempt: this.reconnectAttempts, delay });
349
- this.reconnectTimer = setTimeout(() => {
350
- this.reconnectTimer = null;
351
- this.connect()
352
- .then(() => {
353
- // Process queued commands after reconnection
354
- this.processNextCommand();
355
- })
356
- .catch(() => {
357
- // connect() will schedule another reconnect if needed
358
- });
359
- }, delay);
360
- }
361
- /** Internal send without auto-connect */
362
- async sendInternal(command) {
363
- if (!this.socket) {
364
- throw new Error('Not connected');
365
- }
366
- const startTime = Date.now();
367
- this.totalCommands++;
368
- return new Promise((resolve, reject) => {
369
- const timeout = setTimeout(() => {
370
- if (this.currentCommand?.command === command) {
371
- this.currentCommand = null;
372
- this.lastErrorAt = Date.now();
373
- this.totalErrors++;
374
- reject(new Error('Command timeout'));
375
- this.processNextCommand();
376
- }
377
- }, this.options.commandTimeout);
378
- const wrappedResolve = (result) => {
379
- this.lastSuccessAt = Date.now();
380
- this.recordLatency(Date.now() - startTime);
381
- resolve(result);
382
- };
383
- const wrappedReject = (err) => {
384
- this.lastErrorAt = Date.now();
385
- this.totalErrors++;
386
- reject(err);
387
- };
388
- this.currentCommand = {
389
- id: 0,
390
- command,
391
- resolve: wrappedResolve,
392
- reject: wrappedReject,
393
- timeout,
394
- };
395
- if (this.socket) {
396
- this.socket.write(JSON.stringify(command) + '\n');
397
- }
398
- });
399
- }
400
- /** Process next pending command */
401
- processNextCommand() {
402
- if (this.currentCommand || !this.connected || this.pendingQueue.length === 0) {
403
- return;
404
- }
405
- const nextId = this.pendingQueue.shift();
406
- if (nextId === undefined)
407
- return;
408
- const next = this.pendingCommands.get(nextId);
409
- if (!next || !this.socket) {
410
- this.pendingCommands.delete(nextId);
411
- return;
412
- }
413
- this.pendingCommands.delete(nextId);
414
- this.currentCommand = next;
415
- this.socket.write(JSON.stringify(next.command) + '\n');
416
- }
417
- /** Send command and wait for response */
418
- async send(command) {
419
- // If connected and no pending commands, send immediately
420
- if (this.connected && this.pendingCommands.size === 0 && !this.currentCommand) {
421
- return this.sendInternal(command);
422
- }
423
- // Otherwise queue the command
424
- const startTime = Date.now();
425
- this.totalCommands++;
426
- return new Promise((resolve, reject) => {
427
- const id = ++this.commandIdCounter;
428
- const timeout = setTimeout(() => {
429
- // O(1) lookup and delete with Map
430
- if (this.pendingCommands.has(id)) {
431
- this.pendingCommands.delete(id);
432
- // Remove from queue (still O(n) but timeout is rare)
433
- const queueIdx = this.pendingQueue.indexOf(id);
434
- if (queueIdx !== -1) {
435
- this.pendingQueue.splice(queueIdx, 1);
436
- }
437
- this.lastErrorAt = Date.now();
438
- this.totalErrors++;
439
- reject(new Error('Command timeout'));
440
- }
441
- }, this.options.commandTimeout);
442
- const wrappedResolve = (result) => {
443
- this.lastSuccessAt = Date.now();
444
- this.recordLatency(Date.now() - startTime);
445
- resolve(result);
446
- };
447
- const wrappedReject = (err) => {
448
- this.lastErrorAt = Date.now();
449
- this.totalErrors++;
450
- reject(err);
451
- };
452
- this.pendingCommands.set(id, {
453
- id,
454
- command,
455
- resolve: wrappedResolve,
456
- reject: wrappedReject,
457
- timeout,
458
- });
459
- this.pendingQueue.push(id);
460
- // Try to connect if not connected
461
- if (!this.connected && !this.connecting) {
462
- this.connect().catch(() => {
463
- // Error handled by reconnect logic
464
- });
465
- }
466
- else if (this.connected) {
467
- this.processNextCommand();
468
- }
469
- });
470
- }
471
- /** Close connection */
472
- close() {
473
- this.closed = true;
474
- this.stopPing();
475
- if (this.reconnectTimer) {
476
- clearTimeout(this.reconnectTimer);
477
- this.reconnectTimer = null;
478
- }
479
- // Reject all pending commands
480
- for (const cmd of this.pendingCommands.values()) {
481
- clearTimeout(cmd.timeout);
482
- cmd.reject(new Error('Client closed'));
483
- }
484
- this.pendingCommands.clear();
485
- this.pendingQueue = [];
486
- if (this.currentCommand) {
487
- clearTimeout(this.currentCommand.timeout);
488
- this.currentCommand.reject(new Error('Client closed'));
489
- this.currentCommand = null;
490
- }
491
- if (this.socket) {
492
- this.socket.end();
493
- this.socket = null;
494
- this.connected = false;
495
- }
496
- }
497
- /** Check if connected */
498
- isConnected() {
499
- return this.connected;
500
- }
501
- /** Get connection state */
502
- getState() {
503
- if (this.closed)
504
- return 'closed';
505
- if (this.connected)
506
- return 'connected';
507
- if (this.connecting)
508
- return 'connecting';
509
- return 'disconnected';
510
- }
511
- }
512
- /** Shared client instance */
513
- let sharedClient = null;
514
- /** Get shared TCP client */
515
- export function getSharedTcpClient(options) {
516
- sharedClient ??= new TcpClient(options);
517
- return sharedClient;
518
- }
519
- /** Close shared client */
520
- export function closeSharedTcpClient() {
521
- if (sharedClient) {
522
- sharedClient.close();
523
- sharedClient = null;
524
- }
525
- }
5
+ export { DEFAULT_CONNECTION, TcpClient, getSharedTcpClient, closeSharedTcpClient } from './tcp';
526
6
  //# sourceMappingURL=tcpClient.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tcpClient.js","sourceRoot":"","sources":["../../src/client/tcpClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tcpClient.js","sourceRoot":"","sources":["../../src/client/tcpClient.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC"}
@@ -17,6 +17,7 @@ export declare class TcpConnectionPool {
17
17
  private currentIndex;
18
18
  private closed;
19
19
  private refCount;
20
+ private poolKey;
20
21
  constructor(options?: PoolOptions);
21
22
  /** Connect all clients in pool */
22
23
  connect(): Promise<void>;
@@ -36,6 +37,8 @@ export declare class TcpConnectionPool {
36
37
  addRef(): void;
37
38
  /** Decrement reference count and close if zero */
38
39
  release(): void;
40
+ /** Set pool key for shared pool cleanup */
41
+ setPoolKey(key: string): void;
39
42
  /** Close all connections */
40
43
  close(): void;
41
44
  /** Check if pool is closed */
@@ -1 +1 @@
1
- {"version":3,"file":"tcpPool.d.ts","sourceRoot":"","sources":["../../src/client/tcpPool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAa,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEvF,MAAM,WAAW,WAAY,SAAQ,OAAO,CAAC,iBAAiB,CAAC;IAC7D,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAK;gBAET,OAAO,GAAE,WAAgB;IAmCrC,kCAAkC;IAC5B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,gDAAgD;IAChD,OAAO,CAAC,aAAa;IAmBrB,mDAAmD;IAC7C,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAO9E,qDAAqD;IAC/C,YAAY,CAChB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAc1C,uCAAuC;IACvC,WAAW,IAAI,OAAO;IAItB,sCAAsC;IACtC,iBAAiB,IAAI,MAAM;IAI3B,oBAAoB;IACpB,WAAW,IAAI,MAAM;IAIrB,mDAAmD;IACnD,MAAM,IAAI,IAAI;IAId,kDAAkD;IAClD,OAAO,IAAI,IAAI;IAOf,4BAA4B;IAC5B,KAAK,IAAI,IAAI;IASb,8BAA8B;IAC9B,QAAQ,IAAI,OAAO;IAInB,iDAAiD;IACjD,SAAS,IAAI;QACX,OAAO,EAAE,OAAO,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,gBAAgB,EAAE,CAAC;QAC5B,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;KACrB;CAuBF;AAYD,2CAA2C;AAC3C,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,iBAAiB,CAStE;AAED,oCAAoC;AACpC,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAE/D;AAED,6BAA6B;AAC7B,wBAAgB,mBAAmB,IAAI,IAAI,CAK1C"}
1
+ {"version":3,"file":"tcpPool.d.ts","sourceRoot":"","sources":["../../src/client/tcpPool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAa,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEvF,MAAM,WAAW,WAAY,SAAQ,OAAO,CAAC,iBAAiB,CAAC;IAC7D,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAOD;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,OAAO,CAAuB;gBAE1B,OAAO,GAAE,WAAgB;IAsCrC,kCAAkC;IAC5B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,gDAAgD;IAChD,OAAO,CAAC,aAAa;IAmBrB,mDAAmD;IAC7C,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAO9E,qDAAqD;IAC/C,YAAY,CAChB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAc1C,uCAAuC;IACvC,WAAW,IAAI,OAAO;IAItB,sCAAsC;IACtC,iBAAiB,IAAI,MAAM;IAI3B,oBAAoB;IACpB,WAAW,IAAI,MAAM;IAIrB,mDAAmD;IACnD,MAAM,IAAI,IAAI;IAId,kDAAkD;IAClD,OAAO,IAAI,IAAI;IAOf,2CAA2C;IAC3C,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI7B,4BAA4B;IAC5B,KAAK,IAAI,IAAI;IAcb,8BAA8B;IAC9B,QAAQ,IAAI,OAAO;IAInB,iDAAiD;IACjD,SAAS,IAAI;QACX,OAAO,EAAE,OAAO,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,gBAAgB,EAAE,CAAC;QAC5B,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;KACrB;CAuBF;AAgBD,2CAA2C;AAC3C,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,iBAAiB,CAWtE;AAED,oCAAoC;AACpC,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAE/D;AAED,6BAA6B;AAC7B,wBAAgB,mBAAmB,IAAI,IAAI,CAK1C"}
@@ -13,12 +13,15 @@ export class TcpConnectionPool {
13
13
  currentIndex = 0;
14
14
  closed = false;
15
15
  refCount = 0; // Reference counting for shared pools
16
+ poolKey = null; // Track key for cleanup from sharedPools
16
17
  constructor(options = {}) {
18
+ const poolSize = Math.max(1, options.poolSize ?? 4); // Validate: at least 1
17
19
  this.options = {
18
20
  host: options.host ?? 'localhost',
19
21
  port: options.port ?? 6789,
22
+ socketPath: options.socketPath,
20
23
  token: options.token ?? '',
21
- poolSize: options.poolSize ?? 4,
24
+ poolSize,
22
25
  maxReconnectAttempts: options.maxReconnectAttempts ?? Infinity,
23
26
  reconnectDelay: options.reconnectDelay ?? 100,
24
27
  maxReconnectDelay: options.maxReconnectDelay ?? 30000,
@@ -31,6 +34,7 @@ export class TcpConnectionPool {
31
34
  // Create pool of connections
32
35
  for (let i = 0; i < this.options.poolSize; i++) {
33
36
  const client = new TcpClient({
37
+ socketPath: this.options.socketPath,
34
38
  host: this.options.host,
35
39
  port: this.options.port,
36
40
  token: this.options.token,
@@ -109,11 +113,20 @@ export class TcpConnectionPool {
109
113
  this.close();
110
114
  }
111
115
  }
116
+ /** Set pool key for shared pool cleanup */
117
+ setPoolKey(key) {
118
+ this.poolKey = key;
119
+ }
112
120
  /** Close all connections */
113
121
  close() {
114
122
  if (this.closed)
115
123
  return;
116
124
  this.closed = true;
125
+ // Remove from shared pools map if this was a shared pool
126
+ if (this.poolKey) {
127
+ sharedPools.delete(this.poolKey);
128
+ this.poolKey = null;
129
+ }
117
130
  for (const client of this.clients) {
118
131
  client.close();
119
132
  }
@@ -148,6 +161,10 @@ export class TcpConnectionPool {
148
161
  const sharedPools = new Map();
149
162
  /** Get pool key from options */
150
163
  function getPoolKey(options) {
164
+ // Unix socket takes priority
165
+ if (options?.socketPath) {
166
+ return `unix:${options.socketPath}`;
167
+ }
151
168
  const host = options?.host ?? 'localhost';
152
169
  const port = options?.port ?? 6789;
153
170
  return `${host}:${port}`;
@@ -156,8 +173,10 @@ function getPoolKey(options) {
156
173
  export function getSharedPool(options) {
157
174
  const key = getPoolKey(options);
158
175
  let pool = sharedPools.get(key);
159
- if (!pool) {
176
+ // Also check if existing pool is closed (defensive check)
177
+ if (!pool || pool.isClosed()) {
160
178
  pool = new TcpConnectionPool(options);
179
+ pool.setPoolKey(key); // Track key for cleanup on close
161
180
  sharedPools.set(key, pool);
162
181
  }
163
182
  pool.addRef();