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,475 +1,6 @@
1
1
  /**
2
- * Worker - BullMQ-style API
3
- * Default: TCP connection to localhost:6789
4
- * Optional: embedded mode with { embedded: true }
5
- *
6
- * Performance optimizations:
7
- * - Batch pull: fetches multiple jobs per round-trip (batchSize option)
8
- * - Batch ACK with results: acknowledges multiple jobs per round-trip
9
- * - Connection pooling: optional pool for high-concurrency scenarios
10
- * - Long polling: reduces round-trips when queue is empty
11
- * - TCP heartbeats: keeps jobs alive for stall detection
2
+ * Worker - Re-exports from worker module
3
+ * @deprecated Import from './worker' instead
12
4
  */
13
- import { EventEmitter } from 'events';
14
- import { getSharedManager } from './manager';
15
- // TCP connection pool is always used in TCP mode
16
- import { TcpConnectionPool } from './tcpPool';
17
- import { createPublicJob } from './types';
18
- import { jobId } from '../domain/types/job';
19
- /** Check if embedded mode should be forced (for tests) */
20
- const FORCE_EMBEDDED = process.env.BUNQUEUE_EMBEDDED === '1';
21
- /**
22
- * Worker class for processing jobs
23
- * Default: connects to bunqueue server via TCP
24
- * Use { embedded: true } for in-process mode
25
- * Set BUNQUEUE_EMBEDDED=1 env var to force embedded mode
26
- */
27
- export class Worker extends EventEmitter {
28
- name;
29
- opts;
30
- processor;
31
- embedded;
32
- tcp;
33
- tcpPool;
34
- running = false;
35
- activeJobs = 0;
36
- pollTimer = null;
37
- activeJobIds = new Set(); // Track active job IDs for heartbeat
38
- cachedActiveJobIds = []; // Cached array for heartbeat (avoid Array.from on each heartbeat)
39
- activeJobIdsDirty = false; // Flag to rebuild cache
40
- heartbeatTimer = null;
41
- consecutiveErrors = 0;
42
- // O(1) queue for batch-pulled jobs (avoid shift() which is O(n))
43
- pendingJobs = [];
44
- pendingJobsHead = 0; // Index of next job to process
45
- // Batch ACK state
46
- pendingAcks = [];
47
- ackTimer = null;
48
- ackBatchSize;
49
- ackInterval;
50
- static MAX_BACKOFF_MS = 30_000;
51
- static BASE_BACKOFF_MS = 100;
52
- static MAX_POLL_TIMEOUT = 30_000;
53
- constructor(name, processor, opts = {}) {
54
- super();
55
- this.name = name;
56
- this.processor = processor;
57
- this.embedded = opts.embedded ?? FORCE_EMBEDDED;
58
- const concurrency = opts.concurrency ?? 1;
59
- this.opts = {
60
- concurrency,
61
- autorun: opts.autorun ?? true,
62
- heartbeatInterval: opts.heartbeatInterval ?? 10000,
63
- batchSize: Math.min(opts.batchSize ?? 10, 1000), // Default 10, max 1000
64
- pollTimeout: Math.min(opts.pollTimeout ?? 0, Worker.MAX_POLL_TIMEOUT), // Default 0, max 30s
65
- embedded: this.embedded,
66
- };
67
- // Batch ACK settings
68
- this.ackBatchSize = opts.batchSize ?? 10; // ACK when this many complete
69
- this.ackInterval = 50; // Or after 50ms, whichever comes first
70
- if (this.embedded) {
71
- this.tcp = null;
72
- this.tcpPool = null;
73
- }
74
- else {
75
- const connOpts = opts.connection ?? {};
76
- // Always use pool - default poolSize = min(concurrency, 8), user can override
77
- const poolSize = connOpts.poolSize ?? Math.min(concurrency, 8);
78
- // Use connection pool (always enabled for TCP mode)
79
- this.tcpPool = new TcpConnectionPool({
80
- host: connOpts.host ?? 'localhost',
81
- port: connOpts.port ?? 6789,
82
- token: connOpts.token,
83
- poolSize,
84
- });
85
- this.tcp = this.tcpPool;
86
- }
87
- if (this.opts.autorun) {
88
- this.run();
89
- }
90
- }
91
- /** Start processing */
92
- run() {
93
- if (this.running)
94
- return;
95
- this.running = true;
96
- this.emit('ready');
97
- // Start global heartbeat timer for TCP mode
98
- if (!this.embedded && this.opts.heartbeatInterval > 0) {
99
- this.startGlobalHeartbeat();
100
- }
101
- this.poll();
102
- }
103
- /** Pause processing */
104
- pause() {
105
- this.running = false;
106
- if (this.pollTimer) {
107
- clearTimeout(this.pollTimer);
108
- this.pollTimer = null;
109
- }
110
- }
111
- /** Resume processing */
112
- resume() {
113
- this.run();
114
- }
115
- /** Close worker gracefully */
116
- async close(force = false) {
117
- this.running = false;
118
- if (this.pollTimer) {
119
- clearTimeout(this.pollTimer);
120
- this.pollTimer = null;
121
- }
122
- // Stop global heartbeat timer
123
- if (this.heartbeatTimer) {
124
- clearInterval(this.heartbeatTimer);
125
- this.heartbeatTimer = null;
126
- }
127
- // Flush pending ACKs
128
- await this.flushAcks();
129
- // Stop ACK timer
130
- if (this.ackTimer) {
131
- clearTimeout(this.ackTimer);
132
- this.ackTimer = null;
133
- }
134
- if (!force) {
135
- while (this.activeJobs > 0) {
136
- await new Promise((r) => setTimeout(r, 50));
137
- }
138
- }
139
- // Close pool if using pooled connections (not shared)
140
- if (this.tcpPool) {
141
- this.tcpPool.close();
142
- }
143
- this.emit('closed');
144
- }
145
- /** Start global heartbeat timer for all active jobs (TCP mode) */
146
- startGlobalHeartbeat() {
147
- this.heartbeatTimer = setInterval(() => {
148
- void this.sendBatchHeartbeat();
149
- }, this.opts.heartbeatInterval);
150
- }
151
- /** Send batch heartbeat for all active jobs */
152
- async sendBatchHeartbeat() {
153
- if (this.activeJobIds.size === 0 || !this.tcp)
154
- return;
155
- try {
156
- // Rebuild cache only when dirty (avoids Array.from on every heartbeat)
157
- if (this.activeJobIdsDirty) {
158
- this.cachedActiveJobIds = Array.from(this.activeJobIds);
159
- this.activeJobIdsDirty = false;
160
- }
161
- const ids = this.cachedActiveJobIds;
162
- if (ids.length === 1) {
163
- await this.tcp.send({ cmd: 'JobHeartbeat', id: ids[0] });
164
- }
165
- else if (ids.length > 1) {
166
- await this.tcp.send({ cmd: 'JobHeartbeatB', ids });
167
- }
168
- }
169
- catch (err) {
170
- // Heartbeat errors are non-fatal, just emit for logging
171
- const error = err instanceof Error ? err : new Error(String(err));
172
- this.emit('error', Object.assign(error, { context: 'heartbeat' }));
173
- }
174
- }
175
- poll() {
176
- if (!this.running)
177
- return;
178
- if (this.activeJobs >= this.opts.concurrency) {
179
- this.pollTimer = setTimeout(() => {
180
- this.poll();
181
- }, 10);
182
- return;
183
- }
184
- void this.tryProcess();
185
- }
186
- async tryProcess() {
187
- if (!this.running)
188
- return;
189
- try {
190
- // Get job from pending buffer (O(1) with index) or fetch new batch
191
- let job = null;
192
- if (this.pendingJobsHead < this.pendingJobs.length) {
193
- job = this.pendingJobs[this.pendingJobsHead++];
194
- // Compact array when we've consumed half to prevent memory growth
195
- if (this.pendingJobsHead > 500 && this.pendingJobsHead >= this.pendingJobs.length / 2) {
196
- this.pendingJobs = this.pendingJobs.slice(this.pendingJobsHead);
197
- this.pendingJobsHead = 0;
198
- }
199
- }
200
- if (!job) {
201
- // Fetch new batch - calculate how many we can process
202
- const availableSlots = this.opts.concurrency - this.activeJobs;
203
- const batchSize = Math.min(this.opts.batchSize, availableSlots, 1000);
204
- if (batchSize > 0) {
205
- const jobs = this.embedded
206
- ? await this.pullBatchEmbedded(batchSize)
207
- : await this.pullBatchTcp(batchSize);
208
- // Take first job, buffer the rest (reset queue)
209
- if (jobs.length > 0) {
210
- job = jobs[0];
211
- this.pendingJobs = jobs;
212
- this.pendingJobsHead = 1;
213
- }
214
- }
215
- }
216
- if (job) {
217
- // Reset error count only when we successfully got a job
218
- this.consecutiveErrors = 0;
219
- this.activeJobs++;
220
- const jobIdStr = String(job.id);
221
- this.activeJobIds.add(jobIdStr);
222
- this.activeJobIdsDirty = true;
223
- void this.processJob(job).finally(() => {
224
- this.activeJobs--;
225
- this.activeJobIds.delete(jobIdStr);
226
- this.activeJobIdsDirty = true;
227
- if (this.running)
228
- this.poll();
229
- });
230
- // Process more jobs if we have capacity
231
- if (this.activeJobs < this.opts.concurrency) {
232
- setImmediate(() => {
233
- void this.tryProcess();
234
- });
235
- }
236
- }
237
- else {
238
- // No jobs available, wait before polling again
239
- // Use longer wait if long polling is enabled and server didn't block
240
- const waitTime = this.opts.pollTimeout > 0 ? 10 : 50;
241
- this.pollTimer = setTimeout(() => {
242
- this.poll();
243
- }, waitTime);
244
- }
245
- }
246
- catch (err) {
247
- this.consecutiveErrors++;
248
- // Emit error with context
249
- const error = err instanceof Error ? err : new Error(String(err));
250
- const wrappedError = Object.assign(error, {
251
- queue: this.name,
252
- consecutiveErrors: this.consecutiveErrors,
253
- context: 'pull',
254
- });
255
- this.emit('error', wrappedError);
256
- // Exponential backoff: 100ms, 200ms, 400ms, ... up to 30s
257
- const backoffMs = Math.min(Worker.BASE_BACKOFF_MS * Math.pow(2, this.consecutiveErrors - 1), Worker.MAX_BACKOFF_MS);
258
- this.pollTimer = setTimeout(() => {
259
- this.poll();
260
- }, backoffMs);
261
- }
262
- }
263
- /** Pull batch (embedded) */
264
- async pullBatchEmbedded(count) {
265
- const manager = getSharedManager();
266
- if (count === 1) {
267
- const job = await manager.pull(this.name, 0);
268
- return job ? [job] : [];
269
- }
270
- return manager.pullBatch(this.name, count, 0);
271
- }
272
- /** Pull batch of jobs via TCP with optional long polling */
273
- async pullBatchTcp(count) {
274
- if (!this.tcp)
275
- return [];
276
- const response = await this.tcp.send({
277
- cmd: count === 1 ? 'PULL' : 'PULLB',
278
- queue: this.name,
279
- timeout: this.opts.pollTimeout, // Long polling support
280
- count, // For PULLB
281
- });
282
- if (!response.ok)
283
- return [];
284
- // Handle single job response (PULL)
285
- if (count === 1 && response.job) {
286
- return [this.parseJob(response.job)];
287
- }
288
- // Handle batch response (PULLB)
289
- const jobs = response.jobs;
290
- if (!jobs || jobs.length === 0)
291
- return [];
292
- return jobs.map((j) => this.parseJob(j));
293
- }
294
- /** Parse job from TCP response */
295
- parseJob(jobData) {
296
- const priority = jobData.priority;
297
- const createdAt = jobData.createdAt;
298
- const runAt = jobData.runAt;
299
- const attempts = jobData.attempts;
300
- const maxAttempts = jobData.maxAttempts;
301
- const backoff = jobData.backoff;
302
- const ttl = jobData.ttl;
303
- const timeout = jobData.timeout;
304
- const uniqueKey = jobData.uniqueKey;
305
- const customId = jobData.customId;
306
- const progress = jobData.progress;
307
- const progressMessage = jobData.progressMessage;
308
- const removeOnComplete = jobData.removeOnComplete;
309
- return {
310
- id: jobId(jobData.id),
311
- queue: this.name,
312
- data: jobData.data,
313
- priority: priority ?? 0,
314
- createdAt: createdAt ?? Date.now(),
315
- runAt: runAt ?? Date.now(),
316
- startedAt: Date.now(),
317
- completedAt: null,
318
- attempts: attempts ?? 0,
319
- maxAttempts: maxAttempts ?? 3,
320
- backoff: backoff ?? 1000,
321
- ttl: ttl ?? null,
322
- timeout: timeout ?? null,
323
- uniqueKey: uniqueKey ?? null,
324
- customId: customId ?? null,
325
- progress: progress ?? 0,
326
- progressMessage: progressMessage ?? null,
327
- dependsOn: [],
328
- parentId: null,
329
- childrenIds: [],
330
- childrenCompleted: 0,
331
- tags: [],
332
- groupId: null,
333
- lifo: false,
334
- removeOnComplete: removeOnComplete ?? false,
335
- removeOnFail: false,
336
- stallCount: 0,
337
- stallTimeout: null,
338
- lastHeartbeat: Date.now(),
339
- repeat: null,
340
- };
341
- }
342
- /** Queue ACK for batch processing with result */
343
- queueAck(id, result) {
344
- this.pendingAcks.push({
345
- id,
346
- result,
347
- resolve: () => { },
348
- reject: () => { },
349
- });
350
- // Flush if batch is full
351
- if (this.pendingAcks.length >= this.ackBatchSize) {
352
- void this.flushAcks();
353
- }
354
- else {
355
- // Start timer for partial batch (if not already running)
356
- this.ackTimer ??= setTimeout(() => {
357
- this.ackTimer = null;
358
- void this.flushAcks();
359
- }, this.ackInterval);
360
- }
361
- }
362
- /** Flush pending ACKs in batch with results */
363
- async flushAcks() {
364
- if (this.pendingAcks.length === 0)
365
- return;
366
- const batch = this.pendingAcks.splice(0, this.pendingAcks.length);
367
- if (this.ackTimer) {
368
- clearTimeout(this.ackTimer);
369
- this.ackTimer = null;
370
- }
371
- try {
372
- if (this.embedded) {
373
- // Embedded: batch ack with results
374
- const manager = getSharedManager();
375
- const items = batch.map((a) => ({ id: jobId(a.id), result: a.result }));
376
- await manager.ackBatchWithResults(items);
377
- }
378
- else if (this.tcp) {
379
- // TCP: use ACKB command with results
380
- const response = await this.tcp.send({
381
- cmd: 'ACKB',
382
- ids: batch.map((a) => a.id),
383
- results: batch.map((a) => a.result), // Include results
384
- });
385
- if (!response.ok) {
386
- const errMsg = response.error;
387
- throw new Error(errMsg ?? 'Batch ACK failed');
388
- }
389
- }
390
- // Resolve all promises
391
- for (const ack of batch) {
392
- ack.resolve();
393
- }
394
- }
395
- catch (err) {
396
- // Reject all promises
397
- const error = err instanceof Error ? err : new Error(String(err));
398
- for (const ack of batch) {
399
- ack.reject(error);
400
- }
401
- }
402
- }
403
- async processJob(internalJob) {
404
- const jobData = internalJob.data;
405
- const name = jobData?.name ?? 'default';
406
- const jobIdStr = String(internalJob.id);
407
- // Create job with progress and log methods
408
- const job = createPublicJob(internalJob, name, async (id, progress, message) => {
409
- if (this.embedded) {
410
- const manager = getSharedManager();
411
- await manager.updateProgress(jobId(id), progress, message);
412
- }
413
- else if (this.tcp) {
414
- await this.tcp.send({
415
- cmd: 'Progress',
416
- id,
417
- progress,
418
- message,
419
- });
420
- }
421
- this.emit('progress', job, progress);
422
- }, async (id, message) => {
423
- if (this.embedded) {
424
- const manager = getSharedManager();
425
- manager.addLog(jobId(id), message);
426
- }
427
- else if (this.tcp) {
428
- await this.tcp.send({
429
- cmd: 'AddLog',
430
- id,
431
- message,
432
- });
433
- }
434
- });
435
- this.emit('active', job);
436
- try {
437
- const result = await this.processor(job);
438
- // Use batch ACK for both modes
439
- if (this.embedded) {
440
- const manager = getSharedManager();
441
- await manager.ack(internalJob.id, result);
442
- }
443
- else {
444
- // Queue for batch ACK with result
445
- this.queueAck(jobIdStr, result);
446
- }
447
- job.returnvalue = result;
448
- this.emit('completed', job, result);
449
- }
450
- catch (error) {
451
- const err = error instanceof Error ? error : new Error(String(error));
452
- // Try to fail the job (not batched - failures are less common)
453
- try {
454
- if (this.embedded) {
455
- const manager = getSharedManager();
456
- await manager.fail(internalJob.id, err.message);
457
- }
458
- else if (this.tcp) {
459
- await this.tcp.send({
460
- cmd: 'FAIL',
461
- id: internalJob.id,
462
- error: err.message,
463
- });
464
- }
465
- }
466
- catch (failError) {
467
- const wrappedError = failError instanceof Error ? failError : new Error(String(failError));
468
- this.emit('error', Object.assign(wrappedError, { context: 'fail', jobId: jobIdStr }));
469
- }
470
- job.failedReason = err.message;
471
- this.emit('failed', job, err);
472
- }
473
- }
474
- }
5
+ export { Worker } from './worker/worker';
475
6
  //# sourceMappingURL=worker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/client/worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/client/worker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC"}
@@ -161,6 +161,14 @@ export declare class Shard {
161
161
  getQueueNames(): string[];
162
162
  /** Get shard statistics - O(1) */
163
163
  getStats(): ShardStats;
164
+ /** Get internal structure sizes for memory debugging */
165
+ getInternalSizes(): {
166
+ delayedJobIds: number;
167
+ delayedHeap: number;
168
+ delayedRunAt: number;
169
+ temporalIndex: number;
170
+ waiters: number;
171
+ };
164
172
  /** Increment queued jobs counter and add to temporal index */
165
173
  incrementQueued(jobId: JobId, isDelayed: boolean, createdAt?: number, queue?: string, runAt?: number): void;
166
174
  /** Decrement queued jobs counter and remove from temporal index */
@@ -198,8 +206,17 @@ export declare class Shard {
198
206
  removeFromTemporalIndex(jobId: JobId): void;
199
207
  /** Clear temporal index for a queue */
200
208
  clearTemporalIndexForQueue(queue: string): void;
201
- /** Drain all waiting jobs from queue */
202
- drain(queue: string): number;
209
+ /**
210
+ * Clean orphaned temporal index entries.
211
+ * Removes entries for jobs that no longer exist in the queue.
212
+ * Call periodically to prevent memory leaks.
213
+ */
214
+ cleanOrphanedTemporalEntries(): number;
215
+ /** Drain all waiting jobs from queue, returns drained job IDs for cleanup */
216
+ drain(queue: string): {
217
+ count: number;
218
+ jobIds: JobId[];
219
+ };
203
220
  /** Obliterate queue completely */
204
221
  obliterate(queue: string): void;
205
222
  }
@@ -1 +1 @@
1
- {"version":3,"file":"shard.d.ts","sourceRoot":"","sources":["../../../src/domain/queue/shard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shard.d.ts","sourceRoot":"","sources":["../../../src/domain/queue/shard.ts"],"names":[],"mappings":"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"}
@@ -410,6 +410,16 @@ export class Shard {
410
410
  getStats() {
411
411
  return { ...this.stats };
412
412
  }
413
+ /** Get internal structure sizes for memory debugging */
414
+ getInternalSizes() {
415
+ return {
416
+ delayedJobIds: this.delayedJobIds.size,
417
+ delayedHeap: this.delayedHeap.size,
418
+ delayedRunAt: this.delayedRunAt.size,
419
+ temporalIndex: this.temporalIndex.size,
420
+ waiters: this.waiters.length,
421
+ };
422
+ }
413
423
  /** Increment queued jobs counter and add to temporal index */
414
424
  incrementQueued(jobId, isDelayed, createdAt, queue, runAt) {
415
425
  this.stats.queuedJobs++;
@@ -528,14 +538,36 @@ export class Shard {
528
538
  // Remove all entries for this queue
529
539
  this.temporalIndex.removeAll((e) => e.queue === queue);
530
540
  }
531
- /** Drain all waiting jobs from queue */
541
+ /**
542
+ * Clean orphaned temporal index entries.
543
+ * Removes entries for jobs that no longer exist in the queue.
544
+ * Call periodically to prevent memory leaks.
545
+ */
546
+ cleanOrphanedTemporalEntries() {
547
+ if (this.temporalIndex.size === 0)
548
+ return 0;
549
+ // Build a set of valid job IDs from all queues
550
+ const validJobIds = new Set();
551
+ for (const queue of this.queues.values()) {
552
+ for (const job of queue.values()) {
553
+ validJobIds.add(job.id);
554
+ }
555
+ }
556
+ // Remove entries that are not in any queue
557
+ const beforeSize = this.temporalIndex.size;
558
+ this.temporalIndex.removeAll((e) => !validJobIds.has(e.jobId));
559
+ return beforeSize - this.temporalIndex.size;
560
+ }
561
+ /** Drain all waiting jobs from queue, returns drained job IDs for cleanup */
532
562
  drain(queue) {
533
563
  const q = this.queues.get(queue);
534
564
  if (!q)
535
- return 0;
565
+ return { count: 0, jobIds: [] };
536
566
  const count = q.size;
537
- // Remove delayed job tracking for drained jobs
567
+ const jobIds = [];
568
+ // Collect job IDs and remove delayed job tracking
538
569
  for (const job of q.values()) {
570
+ jobIds.push(job.id);
539
571
  this.delayedJobIds.delete(job.id);
540
572
  }
541
573
  q.clear();
@@ -544,7 +576,7 @@ export class Shard {
544
576
  // Update counters
545
577
  this.stats.queuedJobs = Math.max(0, this.stats.queuedJobs - count);
546
578
  this.stats.delayedJobs = Math.max(0, this.stats.delayedJobs);
547
- return count;
579
+ return { count, jobIds };
548
580
  }
549
581
  /** Obliterate queue completely */
550
582
  obliterate(queue) {