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
@@ -0,0 +1,367 @@
1
+ /**
2
+ * Worker
3
+ * BullMQ-style worker for job processing
4
+ */
5
+ import { EventEmitter } from 'events';
6
+ import { getSharedManager } from '../manager';
7
+ import { TcpConnectionPool } from '../tcpPool';
8
+ import { FORCE_EMBEDDED, WORKER_CONSTANTS } from './types';
9
+ import { AckBatcher } from './ackBatcher';
10
+ import { parseJobFromResponse } from './jobParser';
11
+ import { processJob } from './processor';
12
+ /**
13
+ * Worker class for processing jobs
14
+ */
15
+ export class Worker extends EventEmitter {
16
+ name;
17
+ opts;
18
+ processor;
19
+ embedded;
20
+ tcp;
21
+ tcpPool;
22
+ ackBatcher;
23
+ running = false;
24
+ closing = false;
25
+ activeJobs = 0;
26
+ pollTimer = null;
27
+ consecutiveErrors = 0;
28
+ // Heartbeat tracking with lock tokens (BullMQ-style ownership)
29
+ // Track ALL pulled jobs (both active and buffered) for heartbeat
30
+ activeJobIds = new Set();
31
+ pulledJobIds = new Set(); // All pulled jobs (for heartbeat)
32
+ jobTokens = new Map(); // jobId -> lockToken
33
+ heartbeatTimer = null;
34
+ // Unique worker ID for lock ownership
35
+ workerId;
36
+ // Job buffer for batch pulls (with tokens)
37
+ pendingJobs = [];
38
+ pendingJobsHead = 0;
39
+ processingScheduled = false; // Prevent multiple setImmediate calls
40
+ constructor(name, processor, opts = {}) {
41
+ super();
42
+ this.name = name;
43
+ this.processor = processor;
44
+ this.embedded = opts.embedded ?? FORCE_EMBEDDED;
45
+ // Generate unique worker ID for lock ownership
46
+ this.workerId = `worker-${name}-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
47
+ const concurrency = opts.concurrency ?? 1;
48
+ this.opts = {
49
+ concurrency,
50
+ autorun: opts.autorun ?? true,
51
+ heartbeatInterval: opts.heartbeatInterval ?? 10000,
52
+ batchSize: Math.min(opts.batchSize ?? 10, 1000),
53
+ pollTimeout: Math.min(opts.pollTimeout ?? 0, WORKER_CONSTANTS.MAX_POLL_TIMEOUT),
54
+ embedded: this.embedded,
55
+ // Lock-based ownership: disable for high-throughput scenarios where stall detection is sufficient
56
+ useLocks: opts.useLocks ?? true,
57
+ };
58
+ this.ackBatcher = new AckBatcher({
59
+ batchSize: opts.batchSize ?? 10,
60
+ interval: WORKER_CONSTANTS.DEFAULT_ACK_INTERVAL,
61
+ embedded: this.embedded,
62
+ });
63
+ if (this.embedded) {
64
+ this.tcp = null;
65
+ this.tcpPool = null;
66
+ }
67
+ else {
68
+ const connOpts = opts.connection ?? {};
69
+ const poolSize = connOpts.poolSize ?? Math.min(concurrency, 8);
70
+ this.tcpPool = new TcpConnectionPool({
71
+ host: connOpts.host ?? 'localhost',
72
+ port: connOpts.port ?? 6789,
73
+ token: connOpts.token,
74
+ poolSize,
75
+ });
76
+ this.tcp = this.tcpPool;
77
+ this.ackBatcher.setTcp(this.tcp);
78
+ }
79
+ if (this.opts.autorun)
80
+ this.run();
81
+ }
82
+ /** Start processing */
83
+ run() {
84
+ if (this.running)
85
+ return;
86
+ this.running = true;
87
+ this.closing = false;
88
+ this.emit('ready');
89
+ if (!this.embedded && this.opts.heartbeatInterval > 0) {
90
+ this.startHeartbeat();
91
+ }
92
+ this.poll();
93
+ }
94
+ /** Pause processing */
95
+ pause() {
96
+ this.running = false;
97
+ if (this.pollTimer) {
98
+ clearTimeout(this.pollTimer);
99
+ this.pollTimer = null;
100
+ }
101
+ }
102
+ /** Resume processing */
103
+ resume() {
104
+ this.run();
105
+ }
106
+ /** Close worker gracefully */
107
+ async close(force = false) {
108
+ this.closing = true;
109
+ this.running = false;
110
+ if (this.pollTimer) {
111
+ clearTimeout(this.pollTimer);
112
+ this.pollTimer = null;
113
+ }
114
+ if (this.heartbeatTimer) {
115
+ clearInterval(this.heartbeatTimer);
116
+ this.heartbeatTimer = null;
117
+ }
118
+ if (!force) {
119
+ // Wait for buffered jobs to be processed and all active jobs to finish
120
+ const bufferSize = () => this.pendingJobs.length - this.pendingJobsHead;
121
+ while (this.activeJobs > 0 || bufferSize() > 0) {
122
+ await new Promise((r) => setTimeout(r, 50));
123
+ }
124
+ }
125
+ // Flush any remaining pending acks
126
+ await this.ackBatcher.flush();
127
+ // Wait for ALL in-flight flushes to complete (critical!)
128
+ await this.ackBatcher.waitForInFlight();
129
+ this.ackBatcher.stop();
130
+ // Small delay to ensure TCP responses are processed
131
+ await new Promise((r) => setTimeout(r, 100));
132
+ // Clear tracking sets
133
+ this.activeJobIds.clear();
134
+ this.pulledJobIds.clear();
135
+ this.jobTokens.clear();
136
+ this.pendingJobs = [];
137
+ this.pendingJobsHead = 0;
138
+ if (this.tcpPool)
139
+ this.tcpPool.close();
140
+ this.emit('closed');
141
+ }
142
+ startHeartbeat() {
143
+ this.heartbeatTimer = setInterval(() => void this.sendHeartbeat(), this.opts.heartbeatInterval);
144
+ }
145
+ async sendHeartbeat() {
146
+ // Send heartbeat for ALL pulled jobs (including buffered ones)
147
+ // This is critical: when locks are enabled, we need to renew them
148
+ // even for jobs sitting in the buffer waiting to be processed
149
+ if (this.pulledJobIds.size === 0 || !this.tcp)
150
+ return;
151
+ try {
152
+ // Always take a fresh snapshot - avoids race with job start/complete
153
+ const ids = Array.from(this.pulledJobIds);
154
+ if (ids.length === 0)
155
+ return;
156
+ if (this.opts.useLocks) {
157
+ // With locks: include tokens for lock renewal
158
+ const tokens = ids.map((id) => this.jobTokens.get(id) ?? '');
159
+ if (ids.length === 1) {
160
+ await this.tcp.send({ cmd: 'JobHeartbeat', id: ids[0], token: tokens[0] || undefined });
161
+ }
162
+ else {
163
+ await this.tcp.send({ cmd: 'JobHeartbeatB', ids, tokens });
164
+ }
165
+ }
166
+ else {
167
+ // Without locks: simple heartbeat for stall detection only
168
+ if (ids.length === 1) {
169
+ await this.tcp.send({ cmd: 'JobHeartbeat', id: ids[0] });
170
+ }
171
+ else {
172
+ await this.tcp.send({ cmd: 'JobHeartbeatB', ids });
173
+ }
174
+ }
175
+ }
176
+ catch (err) {
177
+ const error = err instanceof Error ? err : new Error(String(err));
178
+ this.emit('error', Object.assign(error, { context: 'heartbeat' }));
179
+ }
180
+ }
181
+ poll() {
182
+ if (!this.running || this.closing)
183
+ return;
184
+ if (this.activeJobs >= this.opts.concurrency) {
185
+ this.pollTimer = setTimeout(() => {
186
+ this.poll();
187
+ }, 10);
188
+ return;
189
+ }
190
+ void this.tryProcess();
191
+ }
192
+ async tryProcess() {
193
+ if (!this.running || this.closing)
194
+ return;
195
+ try {
196
+ let item = this.getBufferedJob();
197
+ if (!item) {
198
+ const items = await this.pullBatch();
199
+ // Re-check closing after async operation (can be modified during await)
200
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
201
+ if (this.closing)
202
+ return;
203
+ if (items.length > 0) {
204
+ // Register ALL pulled jobs for heartbeat tracking immediately
205
+ this.registerPulledJobs(items);
206
+ item = items[0];
207
+ this.pendingJobs = items;
208
+ this.pendingJobsHead = 1;
209
+ }
210
+ }
211
+ if (item) {
212
+ this.consecutiveErrors = 0;
213
+ this.startJob(item.job, item.token);
214
+ }
215
+ else {
216
+ const waitTime = this.opts.pollTimeout > 0 ? 10 : 50;
217
+ this.pollTimer = setTimeout(() => {
218
+ this.poll();
219
+ }, waitTime);
220
+ }
221
+ }
222
+ catch (err) {
223
+ // Re-check running state - could have changed during async pullBatch()
224
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
225
+ if (!this.running)
226
+ return;
227
+ this.handlePullError(err);
228
+ }
229
+ }
230
+ /** Register pulled jobs for heartbeat tracking */
231
+ registerPulledJobs(items) {
232
+ // When locks are enabled: jobs need heartbeats to renew locks
233
+ // Without locks: still track for stall detection heartbeats
234
+ for (const pulledItem of items) {
235
+ const jobIdStr = String(pulledItem.job.id);
236
+ this.pulledJobIds.add(jobIdStr);
237
+ if (this.opts.useLocks && pulledItem.token) {
238
+ this.jobTokens.set(jobIdStr, pulledItem.token);
239
+ }
240
+ }
241
+ }
242
+ getBufferedJob() {
243
+ if (this.pendingJobsHead >= this.pendingJobs.length)
244
+ return null;
245
+ const item = this.pendingJobs[this.pendingJobsHead++];
246
+ if (this.pendingJobsHead > 500 && this.pendingJobsHead >= this.pendingJobs.length / 2) {
247
+ this.pendingJobs = this.pendingJobs.slice(this.pendingJobsHead);
248
+ this.pendingJobsHead = 0;
249
+ }
250
+ return item;
251
+ }
252
+ async pullBatch() {
253
+ const slots = this.opts.concurrency - this.activeJobs;
254
+ const batchSize = Math.min(this.opts.batchSize, slots, 1000);
255
+ if (batchSize <= 0)
256
+ return [];
257
+ return this.embedded ? this.pullEmbedded(batchSize) : this.pullTcp(batchSize);
258
+ }
259
+ async pullEmbedded(count) {
260
+ const manager = getSharedManager();
261
+ // Use lock-based pull only when useLocks is enabled
262
+ if (this.opts.useLocks) {
263
+ if (count === 1) {
264
+ const { job, token } = await manager.pullWithLock(this.name, this.workerId, 0);
265
+ return job ? [{ job, token }] : [];
266
+ }
267
+ const { jobs, tokens } = await manager.pullBatchWithLock(this.name, count, this.workerId, 0);
268
+ return jobs.map((job, i) => ({ job, token: tokens[i] || null }));
269
+ }
270
+ // No locks - use regular pull
271
+ if (count === 1) {
272
+ const job = await manager.pull(this.name, 0);
273
+ return job ? [{ job, token: null }] : [];
274
+ }
275
+ const jobs = await manager.pullBatch(this.name, count, 0);
276
+ return jobs.map((job) => ({ job, token: null }));
277
+ }
278
+ async pullTcp(count) {
279
+ if (!this.tcp || this.closing)
280
+ return [];
281
+ // Build pull command - only request locks if useLocks is enabled
282
+ const cmd = {
283
+ cmd: count === 1 ? 'PULL' : 'PULLB',
284
+ queue: this.name,
285
+ timeout: this.opts.pollTimeout,
286
+ count,
287
+ };
288
+ // Only request lock ownership when useLocks is enabled
289
+ if (this.opts.useLocks) {
290
+ cmd.owner = this.workerId;
291
+ }
292
+ const response = await this.tcp.send(cmd);
293
+ if (!response.ok)
294
+ return [];
295
+ if (count === 1) {
296
+ const job = response.job;
297
+ // Only expect token if locks are enabled
298
+ const token = this.opts.useLocks
299
+ ? (response.token ?? null)
300
+ : null;
301
+ if (job) {
302
+ return [{ job: parseJobFromResponse(job, this.name), token }];
303
+ }
304
+ return [];
305
+ }
306
+ const jobs = response.jobs;
307
+ // Only expect tokens if locks are enabled
308
+ const tokens = this.opts.useLocks ? (response.tokens ?? []) : [];
309
+ return (jobs?.map((j, i) => ({
310
+ job: parseJobFromResponse(j, this.name),
311
+ token: tokens[i] || null,
312
+ })) ?? []);
313
+ }
314
+ startJob(job, token) {
315
+ this.activeJobs++;
316
+ const jobIdStr = String(job.id);
317
+ this.activeJobIds.add(jobIdStr);
318
+ // Token management only when locks are enabled
319
+ if (this.opts.useLocks && token && !this.jobTokens.has(jobIdStr)) {
320
+ this.jobTokens.set(jobIdStr, token);
321
+ }
322
+ // Ensure job is in pulledJobIds for heartbeat (should already be there from pullBatch)
323
+ this.pulledJobIds.add(jobIdStr);
324
+ // Only pass token if locks are enabled
325
+ const tokenForProcess = this.opts.useLocks ? token : undefined;
326
+ void processJob(job, {
327
+ name: this.name,
328
+ processor: this.processor,
329
+ embedded: this.embedded,
330
+ tcp: this.tcp,
331
+ ackBatcher: this.ackBatcher,
332
+ emitter: this,
333
+ token: tokenForProcess, // Pass token for ACK/FAIL verification (only when locks enabled)
334
+ }).finally(() => {
335
+ this.activeJobs--;
336
+ this.activeJobIds.delete(jobIdStr);
337
+ this.pulledJobIds.delete(jobIdStr); // Remove from heartbeat tracking
338
+ if (this.opts.useLocks) {
339
+ this.jobTokens.delete(jobIdStr); // Clean up token
340
+ }
341
+ if (this.running && !this.closing)
342
+ this.poll();
343
+ });
344
+ // Prevent multiple setImmediate calls (event loop starvation)
345
+ if (this.activeJobs < this.opts.concurrency && !this.closing && !this.processingScheduled) {
346
+ this.processingScheduled = true;
347
+ setImmediate(() => {
348
+ this.processingScheduled = false;
349
+ void this.tryProcess();
350
+ });
351
+ }
352
+ }
353
+ handlePullError(err) {
354
+ this.consecutiveErrors++;
355
+ const error = err instanceof Error ? err : new Error(String(err));
356
+ this.emit('error', Object.assign(error, {
357
+ queue: this.name,
358
+ consecutiveErrors: this.consecutiveErrors,
359
+ context: 'pull',
360
+ }));
361
+ const backoffMs = Math.min(WORKER_CONSTANTS.BASE_BACKOFF_MS * Math.pow(2, this.consecutiveErrors - 1), WORKER_CONSTANTS.MAX_BACKOFF_MS);
362
+ this.pollTimer = setTimeout(() => {
363
+ this.poll();
364
+ }, backoffMs);
365
+ }
366
+ }
367
+ //# sourceMappingURL=worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/client/worker/worker.ts"],"names":[],"mappings":"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"}
@@ -1,72 +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 type { WorkerOptions, Processor } from './types';
15
- /**
16
- * Worker class for processing jobs
17
- * Default: connects to bunqueue server via TCP
18
- * Use { embedded: true } for in-process mode
19
- * Set BUNQUEUE_EMBEDDED=1 env var to force embedded mode
20
- */
21
- export declare class Worker<T = unknown, R = unknown> extends EventEmitter {
22
- readonly name: string;
23
- private readonly opts;
24
- private readonly processor;
25
- private readonly embedded;
26
- private readonly tcp;
27
- private readonly tcpPool;
28
- private running;
29
- private activeJobs;
30
- private pollTimer;
31
- private readonly activeJobIds;
32
- private cachedActiveJobIds;
33
- private activeJobIdsDirty;
34
- private heartbeatTimer;
35
- private consecutiveErrors;
36
- private pendingJobs;
37
- private pendingJobsHead;
38
- private readonly pendingAcks;
39
- private ackTimer;
40
- private readonly ackBatchSize;
41
- private readonly ackInterval;
42
- private static readonly MAX_BACKOFF_MS;
43
- private static readonly BASE_BACKOFF_MS;
44
- private static readonly MAX_POLL_TIMEOUT;
45
- constructor(name: string, processor: Processor<T, R>, opts?: WorkerOptions);
46
- /** Start processing */
47
- run(): void;
48
- /** Pause processing */
49
- pause(): void;
50
- /** Resume processing */
51
- resume(): void;
52
- /** Close worker gracefully */
53
- close(force?: boolean): Promise<void>;
54
- /** Start global heartbeat timer for all active jobs (TCP mode) */
55
- private startGlobalHeartbeat;
56
- /** Send batch heartbeat for all active jobs */
57
- private sendBatchHeartbeat;
58
- private poll;
59
- private tryProcess;
60
- /** Pull batch (embedded) */
61
- private pullBatchEmbedded;
62
- /** Pull batch of jobs via TCP with optional long polling */
63
- private pullBatchTcp;
64
- /** Parse job from TCP response */
65
- private parseJob;
66
- /** Queue ACK for batch processing with result */
67
- private queueAck;
68
- /** Flush pending ACKs in batch with results */
69
- private flushAcks;
70
- private processJob;
71
- }
5
+ export { Worker } from './worker/worker';
72
6
  //# sourceMappingURL=worker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/client/worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAqB,MAAM,SAAS,CAAC;AA2B3E;;;;;GAKG;AACH,qBAAa,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,CAAE,SAAQ,YAAY;IAChE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAwB;IAC7C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAuB;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;IACnD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA0B;IACvD,OAAO,CAAC,kBAAkB,CAAgB;IAC1C,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,iBAAiB,CAAK;IAE9B,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,eAAe,CAAK;IAG5B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAChD,OAAO,CAAC,QAAQ,CAA8C;IAC9D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IAErC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAU;IAChD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAO;IAC9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAU;gBAEtC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,GAAE,aAAkB;IA0C9E,uBAAuB;IACvB,GAAG,IAAI,IAAI;IAaX,uBAAuB;IACvB,KAAK,IAAI,IAAI;IAQb,wBAAwB;IACxB,MAAM,IAAI,IAAI;IAId,8BAA8B;IACxB,KAAK,CAAC,KAAK,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAoCzC,kEAAkE;IAClE,OAAO,CAAC,oBAAoB;IAM5B,+CAA+C;YACjC,kBAAkB;IAuBhC,OAAO,CAAC,IAAI;YAaE,UAAU;IAuFxB,4BAA4B;YACd,iBAAiB;IAS/B,4DAA4D;YAC9C,YAAY;IAuB1B,kCAAkC;IAClC,OAAO,CAAC,QAAQ;IAiDhB,iDAAiD;IACjD,OAAO,CAAC,QAAQ;IAoBhB,+CAA+C;YACjC,SAAS;YA2CT,UAAU;CA6EzB"}
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/client/worker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC"}