bunqueue 1.9.8 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. package/dist/application/backgroundTasks.d.ts +10 -0
  2. package/dist/application/backgroundTasks.d.ts.map +1 -1
  3. package/dist/application/backgroundTasks.js +64 -13
  4. package/dist/application/backgroundTasks.js.map +1 -1
  5. package/dist/application/cleanupTasks.js +5 -1
  6. package/dist/application/cleanupTasks.js.map +1 -1
  7. package/dist/application/clientTracking.d.ts.map +1 -1
  8. package/dist/application/clientTracking.js +25 -16
  9. package/dist/application/clientTracking.js.map +1 -1
  10. package/dist/application/contextFactory.d.ts.map +1 -1
  11. package/dist/application/contextFactory.js +1 -0
  12. package/dist/application/contextFactory.js.map +1 -1
  13. package/dist/application/dependencyProcessor.d.ts.map +1 -1
  14. package/dist/application/dependencyProcessor.js +14 -13
  15. package/dist/application/dependencyProcessor.js.map +1 -1
  16. package/dist/application/eventsManager.d.ts.map +1 -1
  17. package/dist/application/eventsManager.js +16 -4
  18. package/dist/application/eventsManager.js.map +1 -1
  19. package/dist/application/jobLogsManager.d.ts +2 -2
  20. package/dist/application/jobLogsManager.d.ts.map +1 -1
  21. package/dist/application/jobLogsManager.js +13 -3
  22. package/dist/application/jobLogsManager.js.map +1 -1
  23. package/dist/application/lockManager.d.ts +1 -0
  24. package/dist/application/lockManager.d.ts.map +1 -1
  25. package/dist/application/lockManager.js +54 -36
  26. package/dist/application/lockManager.js.map +1 -1
  27. package/dist/application/operations/ack.d.ts +3 -1
  28. package/dist/application/operations/ack.d.ts.map +1 -1
  29. package/dist/application/operations/ack.js +25 -1
  30. package/dist/application/operations/ack.js.map +1 -1
  31. package/dist/application/operations/ackHelpers.d.ts +1 -0
  32. package/dist/application/operations/ackHelpers.d.ts.map +1 -1
  33. package/dist/application/operations/ackHelpers.js +12 -1
  34. package/dist/application/operations/ackHelpers.js.map +1 -1
  35. package/dist/application/operations/jobManagement.d.ts +1 -1
  36. package/dist/application/operations/jobManagement.d.ts.map +1 -1
  37. package/dist/application/operations/jobManagement.js +23 -3
  38. package/dist/application/operations/jobManagement.js.map +1 -1
  39. package/dist/application/operations/push.d.ts +1 -1
  40. package/dist/application/operations/push.d.ts.map +1 -1
  41. package/dist/application/operations/push.js +25 -9
  42. package/dist/application/operations/push.js.map +1 -1
  43. package/dist/application/operations/queryOperations.d.ts +3 -0
  44. package/dist/application/operations/queryOperations.d.ts.map +1 -1
  45. package/dist/application/operations/queryOperations.js +29 -0
  46. package/dist/application/operations/queryOperations.js.map +1 -1
  47. package/dist/application/queueManager.d.ts +15 -1
  48. package/dist/application/queueManager.d.ts.map +1 -1
  49. package/dist/application/queueManager.js +77 -3
  50. package/dist/application/queueManager.js.map +1 -1
  51. package/dist/application/stallDetection.js +27 -22
  52. package/dist/application/stallDetection.js.map +1 -1
  53. package/dist/application/types.js +1 -1
  54. package/dist/application/types.js.map +1 -1
  55. package/dist/application/webhookManager.d.ts.map +1 -1
  56. package/dist/application/webhookManager.js +18 -2
  57. package/dist/application/webhookManager.js.map +1 -1
  58. package/dist/application/workerManager.d.ts.map +1 -1
  59. package/dist/application/workerManager.js +4 -2
  60. package/dist/application/workerManager.js.map +1 -1
  61. package/dist/cli/client.d.ts +3 -5
  62. package/dist/cli/client.d.ts.map +1 -1
  63. package/dist/cli/client.js +31 -27
  64. package/dist/cli/client.js.map +1 -1
  65. package/dist/cli/commands/core.js +3 -3
  66. package/dist/cli/commands/core.js.map +1 -1
  67. package/dist/cli/commands/job.js +14 -14
  68. package/dist/cli/commands/job.js.map +1 -1
  69. package/dist/cli/commands/server.d.ts.map +1 -1
  70. package/dist/cli/commands/server.js +5 -29
  71. package/dist/cli/commands/server.js.map +1 -1
  72. package/dist/cli/index.d.ts.map +1 -1
  73. package/dist/cli/index.js +1 -9
  74. package/dist/cli/index.js.map +1 -1
  75. package/dist/client/events.d.ts +29 -1
  76. package/dist/client/events.d.ts.map +1 -1
  77. package/dist/client/events.js +96 -28
  78. package/dist/client/events.js.map +1 -1
  79. package/dist/client/flow.d.ts +144 -3
  80. package/dist/client/flow.d.ts.map +1 -1
  81. package/dist/client/flow.js +538 -68
  82. package/dist/client/flow.js.map +1 -1
  83. package/dist/client/index.d.ts +2 -2
  84. package/dist/client/index.d.ts.map +1 -1
  85. package/dist/client/queue/queue.d.ts +260 -1
  86. package/dist/client/queue/queue.d.ts.map +1 -1
  87. package/dist/client/queue/queue.js +1346 -17
  88. package/dist/client/queue/queue.js.map +1 -1
  89. package/dist/client/sandboxed/types.d.ts +1 -0
  90. package/dist/client/sandboxed/types.d.ts.map +1 -1
  91. package/dist/client/sandboxed/worker.d.ts +1 -0
  92. package/dist/client/sandboxed/worker.d.ts.map +1 -1
  93. package/dist/client/sandboxed/worker.js +31 -8
  94. package/dist/client/sandboxed/worker.js.map +1 -1
  95. package/dist/client/sandboxed/wrapper.d.ts.map +1 -1
  96. package/dist/client/sandboxed/wrapper.js +10 -1
  97. package/dist/client/sandboxed/wrapper.js.map +1 -1
  98. package/dist/client/tcp/client.d.ts +4 -1
  99. package/dist/client/tcp/client.d.ts.map +1 -1
  100. package/dist/client/tcp/client.js +26 -8
  101. package/dist/client/tcp/client.js.map +1 -1
  102. package/dist/client/tcp/connection.d.ts +6 -8
  103. package/dist/client/tcp/connection.d.ts.map +1 -1
  104. package/dist/client/tcp/connection.js +24 -22
  105. package/dist/client/tcp/connection.js.map +1 -1
  106. package/dist/client/tcp/index.d.ts +0 -1
  107. package/dist/client/tcp/index.d.ts.map +1 -1
  108. package/dist/client/tcp/index.js +0 -1
  109. package/dist/client/tcp/index.js.map +1 -1
  110. package/dist/client/tcp/types.d.ts +8 -13
  111. package/dist/client/tcp/types.d.ts.map +1 -1
  112. package/dist/client/tcp/types.js +0 -1
  113. package/dist/client/tcp/types.js.map +1 -1
  114. package/dist/client/tcpPool.d.ts.map +1 -1
  115. package/dist/client/tcpPool.js +19 -14
  116. package/dist/client/tcpPool.js.map +1 -1
  117. package/dist/client/types.d.ts +430 -13
  118. package/dist/client/types.d.ts.map +1 -1
  119. package/dist/client/types.js +346 -5
  120. package/dist/client/types.js.map +1 -1
  121. package/dist/client/worker/ackBatcher.d.ts +2 -1
  122. package/dist/client/worker/ackBatcher.d.ts.map +1 -1
  123. package/dist/client/worker/ackBatcher.js +29 -18
  124. package/dist/client/worker/ackBatcher.js.map +1 -1
  125. package/dist/client/worker/jobParser.d.ts.map +1 -1
  126. package/dist/client/worker/jobParser.js +8 -7
  127. package/dist/client/worker/jobParser.js.map +1 -1
  128. package/dist/client/worker/processor.d.ts.map +1 -1
  129. package/dist/client/worker/processor.js +15 -6
  130. package/dist/client/worker/processor.js.map +1 -1
  131. package/dist/client/worker/worker.d.ts +117 -0
  132. package/dist/client/worker/worker.d.ts.map +1 -1
  133. package/dist/client/worker/worker.js +375 -3
  134. package/dist/client/worker/worker.js.map +1 -1
  135. package/dist/domain/queue/dlqShard.d.ts +2 -0
  136. package/dist/domain/queue/dlqShard.d.ts.map +1 -1
  137. package/dist/domain/queue/dlqShard.js +12 -2
  138. package/dist/domain/queue/dlqShard.js.map +1 -1
  139. package/dist/domain/queue/priorityQueue.d.ts.map +1 -1
  140. package/dist/domain/queue/priorityQueue.js +24 -18
  141. package/dist/domain/queue/priorityQueue.js.map +1 -1
  142. package/dist/domain/queue/shard.d.ts +8 -2
  143. package/dist/domain/queue/shard.d.ts.map +1 -1
  144. package/dist/domain/queue/shard.js +27 -9
  145. package/dist/domain/queue/shard.js.map +1 -1
  146. package/dist/domain/queue/temporalManager.d.ts +1 -0
  147. package/dist/domain/queue/temporalManager.d.ts.map +1 -1
  148. package/dist/domain/queue/temporalManager.js +2 -1
  149. package/dist/domain/queue/temporalManager.js.map +1 -1
  150. package/dist/domain/queue/uniqueKeyManager.d.ts +2 -2
  151. package/dist/domain/queue/uniqueKeyManager.d.ts.map +1 -1
  152. package/dist/domain/queue/uniqueKeyManager.js +3 -3
  153. package/dist/domain/queue/uniqueKeyManager.js.map +1 -1
  154. package/dist/domain/types/command.d.ts +6 -0
  155. package/dist/domain/types/command.d.ts.map +1 -1
  156. package/dist/domain/types/job.d.ts +89 -2
  157. package/dist/domain/types/job.d.ts.map +1 -1
  158. package/dist/domain/types/job.js +94 -26
  159. package/dist/domain/types/job.js.map +1 -1
  160. package/dist/domain/types/queue.d.ts +11 -1
  161. package/dist/domain/types/queue.d.ts.map +1 -1
  162. package/dist/infrastructure/persistence/sqlite.d.ts +2 -0
  163. package/dist/infrastructure/persistence/sqlite.d.ts.map +1 -1
  164. package/dist/infrastructure/persistence/sqlite.js +5 -1
  165. package/dist/infrastructure/persistence/sqlite.js.map +1 -1
  166. package/dist/infrastructure/persistence/sqliteBatch.d.ts +9 -4
  167. package/dist/infrastructure/persistence/sqliteBatch.d.ts.map +1 -1
  168. package/dist/infrastructure/persistence/sqliteBatch.js +38 -21
  169. package/dist/infrastructure/persistence/sqliteBatch.js.map +1 -1
  170. package/dist/infrastructure/persistence/sqliteSerializer.d.ts.map +1 -1
  171. package/dist/infrastructure/persistence/sqliteSerializer.js +14 -0
  172. package/dist/infrastructure/persistence/sqliteSerializer.js.map +1 -1
  173. package/dist/infrastructure/persistence/statements.d.ts +1 -1
  174. package/dist/infrastructure/persistence/statements.d.ts.map +1 -1
  175. package/dist/infrastructure/persistence/statements.js +3 -2
  176. package/dist/infrastructure/persistence/statements.js.map +1 -1
  177. package/dist/infrastructure/scheduler/cronScheduler.d.ts +7 -0
  178. package/dist/infrastructure/scheduler/cronScheduler.d.ts.map +1 -1
  179. package/dist/infrastructure/scheduler/cronScheduler.js +46 -12
  180. package/dist/infrastructure/scheduler/cronScheduler.js.map +1 -1
  181. package/dist/infrastructure/server/handlers/core.d.ts.map +1 -1
  182. package/dist/infrastructure/server/handlers/core.js +26 -19
  183. package/dist/infrastructure/server/handlers/core.js.map +1 -1
  184. package/dist/infrastructure/server/handlers/query.d.ts.map +1 -1
  185. package/dist/infrastructure/server/handlers/query.js +1 -16
  186. package/dist/infrastructure/server/handlers/query.js.map +1 -1
  187. package/dist/infrastructure/server/http.d.ts.map +1 -1
  188. package/dist/infrastructure/server/http.js +27 -2
  189. package/dist/infrastructure/server/http.js.map +1 -1
  190. package/dist/infrastructure/server/protocol.d.ts +15 -1
  191. package/dist/infrastructure/server/protocol.d.ts.map +1 -1
  192. package/dist/infrastructure/server/protocol.js +37 -3
  193. package/dist/infrastructure/server/protocol.js.map +1 -1
  194. package/dist/infrastructure/server/rateLimiter.d.ts.map +1 -1
  195. package/dist/infrastructure/server/rateLimiter.js +5 -3
  196. package/dist/infrastructure/server/rateLimiter.js.map +1 -1
  197. package/dist/infrastructure/server/tcp.d.ts +8 -10
  198. package/dist/infrastructure/server/tcp.d.ts.map +1 -1
  199. package/dist/infrastructure/server/tcp.js +87 -46
  200. package/dist/infrastructure/server/tcp.js.map +1 -1
  201. package/dist/main.js +7 -6
  202. package/dist/main.js.map +1 -1
  203. package/dist/shared/lock.d.ts +1 -1
  204. package/dist/shared/lock.d.ts.map +1 -1
  205. package/dist/shared/lock.js +6 -4
  206. package/dist/shared/lock.js.map +1 -1
  207. package/dist/shared/lru.d.ts +51 -0
  208. package/dist/shared/lru.d.ts.map +1 -1
  209. package/dist/shared/lru.js +89 -3
  210. package/dist/shared/lru.js.map +1 -1
  211. package/dist/shared/skipList.d.ts +10 -2
  212. package/dist/shared/skipList.d.ts.map +1 -1
  213. package/dist/shared/skipList.js +22 -1
  214. package/dist/shared/skipList.js.map +1 -1
  215. package/package.json +1 -1
  216. package/dist/client/tcp/lineBuffer.d.ts +0 -17
  217. package/dist/client/tcp/lineBuffer.d.ts.map +0 -1
  218. package/dist/client/tcp/lineBuffer.js +0 -32
  219. package/dist/client/tcp/lineBuffer.js.map +0 -1
@@ -6,61 +6,129 @@ import { getSharedManager } from './manager';
6
6
  /**
7
7
  * QueueEvents class for listening to queue events
8
8
  * Provides a way to listen to events without processing jobs
9
+ *
10
+ * BullMQ v5 compatible events:
11
+ * - waiting: job added to queue
12
+ * - active: job started processing
13
+ * - completed: job completed successfully
14
+ * - failed: job failed
15
+ * - progress: job progress updated
16
+ * - stalled: job stalled (no heartbeat)
17
+ * - removed: job removed from queue
18
+ * - delayed: job moved to delayed state
19
+ * - duplicated: duplicate job detected
20
+ * - retried: job retried
21
+ * - waiting-children: job waiting for children to complete
22
+ * - drained: queue has no more waiting jobs
23
+ * - error: error occurred
9
24
  */
10
25
  export class QueueEvents extends EventEmitter {
11
26
  name;
12
27
  running = false;
13
- pollTimer = null;
14
28
  unsubscribe = null;
29
+ ready = false;
15
30
  constructor(name) {
16
31
  super();
17
32
  this.name = name;
18
33
  this.start();
19
34
  }
20
35
  start() {
21
- if (this.running)
36
+ // Guard against double subscription (race condition prevention)
37
+ if (this.running || this.unsubscribe)
22
38
  return;
23
39
  this.running = true;
24
40
  // Subscribe to events from QueueManager
25
41
  const manager = getSharedManager();
26
42
  const handler = (event) => {
27
- if (event.queue !== this.name)
28
- return;
29
- switch (event.eventType) {
30
- case "pushed" /* EventType.Pushed */:
31
- this.emit('waiting', { jobId: event.jobId });
32
- break;
33
- case "pulled" /* EventType.Pulled */:
34
- this.emit('active', { jobId: event.jobId });
35
- break;
36
- case "completed" /* EventType.Completed */:
37
- this.emit('completed', { jobId: event.jobId, returnvalue: event.data });
38
- break;
39
- case "failed" /* EventType.Failed */:
40
- this.emit('failed', { jobId: event.jobId, failedReason: event.data });
41
- break;
42
- case "progress" /* EventType.Progress */:
43
- this.emit('progress', { jobId: event.jobId, data: event.data });
44
- break;
45
- case "stalled" /* EventType.Stalled */:
46
- this.emit('stalled', { jobId: event.jobId });
47
- break;
43
+ try {
44
+ if (event.queue !== this.name)
45
+ return;
46
+ switch (event.eventType) {
47
+ case "pushed" /* EventType.Pushed */:
48
+ this.emit('waiting', { jobId: event.jobId });
49
+ break;
50
+ case "pulled" /* EventType.Pulled */:
51
+ this.emit('active', { jobId: event.jobId });
52
+ break;
53
+ case "completed" /* EventType.Completed */:
54
+ this.emit('completed', { jobId: event.jobId, returnvalue: event.data });
55
+ break;
56
+ case "failed" /* EventType.Failed */:
57
+ this.emit('failed', { jobId: event.jobId, failedReason: event.data });
58
+ // Also emit error event for failed jobs (BullMQ compatibility)
59
+ if (event.error) {
60
+ this.emit('error', new Error(event.error));
61
+ }
62
+ break;
63
+ case "progress" /* EventType.Progress */:
64
+ this.emit('progress', { jobId: event.jobId, data: event.data });
65
+ break;
66
+ case "stalled" /* EventType.Stalled */:
67
+ this.emit('stalled', { jobId: event.jobId });
68
+ break;
69
+ // BullMQ v5 additional events
70
+ case "removed" /* EventType.Removed */:
71
+ this.emit('removed', { jobId: event.jobId, prev: event.prev ?? 'unknown' });
72
+ break;
73
+ case "delayed" /* EventType.Delayed */:
74
+ this.emit('delayed', { jobId: event.jobId, delay: event.delay ?? 0 });
75
+ break;
76
+ case "duplicated" /* EventType.Duplicated */:
77
+ this.emit('duplicated', { jobId: event.jobId });
78
+ break;
79
+ case "retried" /* EventType.Retried */:
80
+ this.emit('retried', { jobId: event.jobId, prev: event.prev ?? 'failed' });
81
+ break;
82
+ case "waiting-children" /* EventType.WaitingChildren */:
83
+ this.emit('waiting-children', { jobId: event.jobId });
84
+ break;
85
+ case "drained" /* EventType.Drained */:
86
+ this.emit('drained', { id: event.jobId });
87
+ break;
88
+ }
89
+ }
90
+ catch (err) {
91
+ // Emit error event for any handler errors
92
+ this.emit('error', err instanceof Error ? err : new Error(String(err)));
48
93
  }
49
94
  };
50
95
  this.unsubscribe = manager.subscribe(handler);
96
+ this.ready = true;
97
+ }
98
+ /** Emit an error event (can be called externally) */
99
+ emitError(error) {
100
+ this.emit('error', error);
101
+ }
102
+ /**
103
+ * Wait until the QueueEvents is ready to receive events.
104
+ * In embedded mode, this resolves immediately.
105
+ * BullMQ v5 compatible.
106
+ */
107
+ async waitUntilReady() {
108
+ // In embedded mode, we're always ready after construction
109
+ if (this.ready)
110
+ return;
111
+ // Wait a tick for the subscription to complete
112
+ await new Promise((resolve) => setImmediate(resolve));
113
+ }
114
+ /**
115
+ * Disconnect from the event stream.
116
+ * Alias for close() for BullMQ v5 compatibility.
117
+ */
118
+ disconnect() {
119
+ this.close();
120
+ return Promise.resolve();
51
121
  }
52
122
  /** Close the event listener */
53
123
  close() {
54
124
  this.running = false;
55
- if (this.pollTimer) {
56
- clearTimeout(this.pollTimer);
57
- this.pollTimer = null;
58
- }
125
+ this.ready = false;
59
126
  if (this.unsubscribe) {
60
127
  this.unsubscribe();
61
128
  this.unsubscribe = null;
62
129
  }
63
- this.removeAllListeners();
130
+ // Note: User-attached listeners are NOT removed here.
131
+ // Users should manage their own listeners via removeListener() or removeAllListeners().
64
132
  }
65
133
  }
66
134
  //# sourceMappingURL=events.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/client/events.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAG7C;;;GAGG;AACH,MAAM,OAAO,WAAY,SAAQ,YAAY;IAClC,IAAI,CAAS;IACd,OAAO,GAAG,KAAK,CAAC;IAChB,SAAS,GAAyC,IAAI,CAAC;IACvD,WAAW,GAAwB,IAAI,CAAC;IAEhD,YAAY,IAAY;QACtB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAEO,KAAK;QACX,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QAEpB,wCAAwC;QACxC,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,CAAC,KAAe,EAAE,EAAE;YAClC,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI;gBAAE,OAAO;YAEtC,QAAQ,KAAK,CAAC,SAAS,EAAE,CAAC;gBACxB;oBACE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;oBAC7C,MAAM;gBACR;oBACE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;oBAC5C,MAAM;gBACR;oBACE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;oBACxE,MAAM;gBACR;oBACE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;oBACtE,MAAM;gBACR;oBACE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;oBAChE,MAAM;gBACR;oBACE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;oBAC7C,MAAM;YACV,CAAC;QACH,CAAC,CAAC;QAEF,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,+BAA+B;IAC/B,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC;QACD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;CACF"}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/client/events.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,16 @@
1
1
  /**
2
2
  * FlowProducer - Job chaining and pipelines
3
+ * BullMQ v5 compatible
3
4
  */
4
- import type { JobOptions } from './types';
5
- /** Step definition in a flow */
5
+ import type { JobOptions, ConnectionOptions, Job } from './types';
6
+ /** FlowProducer options */
7
+ export interface FlowProducerOptions {
8
+ /** Use embedded mode (no server) */
9
+ embedded?: boolean;
10
+ /** TCP connection options */
11
+ connection?: ConnectionOptions;
12
+ }
13
+ /** Step definition in a flow (legacy bunqueue API) */
6
14
  export interface FlowStep<T = unknown> {
7
15
  /** Job name */
8
16
  name: string;
@@ -15,11 +23,50 @@ export interface FlowStep<T = unknown> {
15
23
  /** Child steps (for tree structures) */
16
24
  children?: FlowStep[];
17
25
  }
18
- /** Result of adding a flow */
26
+ /** Result of adding a flow (legacy bunqueue API) */
19
27
  export interface FlowResult {
20
28
  /** Job IDs in order */
21
29
  jobIds: string[];
22
30
  }
31
+ /**
32
+ * FlowJob - BullMQ v5 compatible flow job definition.
33
+ * Children are processed BEFORE the parent.
34
+ */
35
+ export interface FlowJob<T = unknown> {
36
+ /** Job name */
37
+ name: string;
38
+ /** Queue name */
39
+ queueName: string;
40
+ /** Job data */
41
+ data?: T;
42
+ /** Job options */
43
+ opts?: JobOptions;
44
+ /** Child jobs (processed BEFORE this job) */
45
+ children?: FlowJob[];
46
+ }
47
+ /**
48
+ * JobNode - BullMQ v5 compatible result from adding a flow.
49
+ * Contains the job and its children nodes.
50
+ */
51
+ export interface JobNode<T = unknown> {
52
+ /** The job instance */
53
+ job: Job<T>;
54
+ /** Child nodes (if any) */
55
+ children?: JobNode[];
56
+ }
57
+ /**
58
+ * Options for getFlow method (BullMQ v5 compatible).
59
+ */
60
+ export interface GetFlowOpts {
61
+ /** Job ID to get the flow for */
62
+ id: string;
63
+ /** Queue name where the job is located */
64
+ queueName: string;
65
+ /** Maximum depth to traverse (default: unlimited) */
66
+ depth?: number;
67
+ /** Maximum number of children to fetch per level (default: unlimited) */
68
+ maxChildren?: number;
69
+ }
23
70
  /**
24
71
  * FlowProducer creates job flows with automatic dependencies.
25
72
  *
@@ -45,6 +92,93 @@ export interface FlowResult {
45
92
  * ```
46
93
  */
47
94
  export declare class FlowProducer {
95
+ private readonly embedded;
96
+ private readonly tcp;
97
+ private readonly useSharedPool;
98
+ constructor(opts?: FlowProducerOptions);
99
+ /** Close the connection pool (only if using dedicated pool) */
100
+ close(): void;
101
+ /**
102
+ * Disconnect from the server (BullMQ v5 compatible).
103
+ * Alias for close().
104
+ */
105
+ disconnect(): Promise<void>;
106
+ /**
107
+ * Wait until the FlowProducer is ready (BullMQ v5 compatible).
108
+ * In embedded mode, resolves immediately. In TCP mode, ensures connection.
109
+ */
110
+ waitUntilReady(): Promise<void>;
111
+ /**
112
+ * Add a flow (BullMQ v5 compatible).
113
+ *
114
+ * Children are processed BEFORE their parent. When all children complete,
115
+ * the parent becomes processable and can access children results via
116
+ * `job.getChildrenValues()`.
117
+ *
118
+ * @example
119
+ * ```typescript
120
+ * const flow = new FlowProducer();
121
+ *
122
+ * // Children execute first, then parent
123
+ * const { job, children } = await flow.add({
124
+ * name: 'parent',
125
+ * queueName: 'main',
126
+ * data: { type: 'aggregate' },
127
+ * children: [
128
+ * { name: 'child1', queueName: 'main', data: { id: 1 } },
129
+ * { name: 'child2', queueName: 'main', data: { id: 2 } },
130
+ * ],
131
+ * });
132
+ * ```
133
+ */
134
+ add<T = unknown>(flow: FlowJob<T>): Promise<JobNode<T>>;
135
+ /**
136
+ * Add multiple flows (BullMQ v5 compatible).
137
+ */
138
+ addBulk<T = unknown>(flows: FlowJob<T>[]): Promise<JobNode<T>[]>;
139
+ /**
140
+ * Get a flow tree starting from a job (BullMQ v5 compatible).
141
+ *
142
+ * Retrieves the job and all its children recursively, building a JobNode tree.
143
+ *
144
+ * @example
145
+ * ```typescript
146
+ * const flow = new FlowProducer();
147
+ *
148
+ * // Get a previously created flow
149
+ * const node = await flow.getFlow({
150
+ * id: 'job-id',
151
+ * queueName: 'my-queue',
152
+ * });
153
+ *
154
+ * if (node) {
155
+ * console.log('Parent:', node.job.name);
156
+ * console.log('Children:', node.children?.length ?? 0);
157
+ * }
158
+ * ```
159
+ */
160
+ getFlow<T = unknown>(opts: GetFlowOpts): Promise<JobNode<T> | null>;
161
+ /** Get flow in embedded mode */
162
+ private getFlowEmbedded;
163
+ /** Get flow in TCP mode */
164
+ private getFlowTcp;
165
+ /** Build JobNode recursively from internal job */
166
+ private buildJobNode;
167
+ /** Build JobNode from TCP response */
168
+ private buildJobNodeFromTcp;
169
+ /** Extract user data (remove internal fields) */
170
+ private extractUserDataFromInternal;
171
+ /**
172
+ * Internal: Recursively add a flow node and its children.
173
+ * Children are created first with parent reference, then parent is created.
174
+ */
175
+ private addFlowNode;
176
+ /** Push a job with parent/children tracking */
177
+ private pushJobWithParent;
178
+ /** Create a simple Job object */
179
+ private createJobObject;
180
+ /** Push a job via embedded manager or TCP */
181
+ private pushJob;
48
182
  /**
49
183
  * Add a chain of jobs where each depends on the previous.
50
184
  * Jobs execute sequentially: step[0] → step[1] → step[2] → ...
@@ -71,13 +205,20 @@ export declare class FlowProducer {
71
205
  */
72
206
  addTree(root: FlowStep): Promise<FlowResult>;
73
207
  private addTreeNode;
208
+ /**
209
+ * Cleanup jobs that were created before a failure occurred.
210
+ * Cancels each job to prevent orphaned jobs in the queue.
211
+ */
212
+ private cleanupJobs;
74
213
  /**
75
214
  * Get the result of a completed parent job.
76
215
  * Call this from within a worker to access the previous step's result.
216
+ * Note: Only works in embedded mode.
77
217
  */
78
218
  getParentResult(parentId: string): unknown;
79
219
  /**
80
220
  * Get results from multiple parent jobs (for merge scenarios).
221
+ * Note: Only works in embedded mode.
81
222
  */
82
223
  getParentResults(parentIds: string[]): Map<string, unknown>;
83
224
  }
@@ -1 +1 @@
1
- {"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../src/client/flow.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,gCAAgC;AAChC,MAAM,WAAW,QAAQ,CAAC,CAAC,GAAG,OAAO;IACnC,eAAe;IACf,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe;IACf,IAAI,EAAE,CAAC,CAAC;IACR,kBAAkB;IAClB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED,8BAA8B;AAC9B,MAAM,WAAW,UAAU;IACzB,uBAAuB;IACvB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,YAAY;IACvB;;;OAGG;IACG,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;IAiCtD;;;;;;;;;;OAUG;IACG,WAAW,CACf,QAAQ,EAAE,QAAQ,EAAE,EACpB,KAAK,EAAE,QAAQ,GACd,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IA0CtD;;;OAGG;IACG,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;YAMpC,WAAW;IAkCzB;;;OAGG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAK1C;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;CAa5D"}
1
+ {"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../src/client/flow.ts"],"names":[],"mappings":"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"}