bunqueue 2.8.54 → 2.8.56

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 (714) hide show
  1. package/dist/application/background/dlq.d.ts +2 -0
  2. package/dist/application/background/dlq.js +26 -0
  3. package/dist/application/background/lifecycle.d.ts +4 -0
  4. package/dist/application/background/lifecycle.js +90 -0
  5. package/dist/application/background/recovery/active.d.ts +4 -0
  6. package/dist/application/background/recovery/active.js +69 -0
  7. package/dist/application/background/recovery/index.d.ts +2 -0
  8. package/dist/application/background/recovery/index.js +22 -0
  9. package/dist/application/background/recovery/pending.d.ts +3 -0
  10. package/dist/application/background/recovery/pending.js +69 -0
  11. package/dist/application/background/recovery/restore.d.ts +5 -0
  12. package/dist/application/background/recovery/restore.js +58 -0
  13. package/dist/application/background/recovery/shared.d.ts +6 -0
  14. package/dist/application/background/recovery/shared.js +15 -0
  15. package/dist/application/background/timeouts.d.ts +25 -0
  16. package/dist/application/background/timeouts.js +191 -0
  17. package/dist/application/backgroundTasks.d.ts +7 -31
  18. package/dist/application/backgroundTasks.js +6 -442
  19. package/dist/application/cleanupTasks.js +1 -0
  20. package/dist/application/clientTracking.js +2 -0
  21. package/dist/application/contextFactory.d.ts +13 -90
  22. package/dist/application/contextFactory.js +8 -0
  23. package/dist/application/dependencyResultTracker.d.ts +1 -0
  24. package/dist/application/dependencyResultTracker.js +3 -0
  25. package/dist/application/dlqManager.d.ts +2 -8
  26. package/dist/application/dlqManager.js +33 -162
  27. package/dist/application/dlqRetry.d.ts +12 -0
  28. package/dist/application/dlqRetry.js +97 -0
  29. package/dist/application/lockManager.js +21 -1
  30. package/dist/application/lockOperations.js +16 -3
  31. package/dist/application/operations/ack/batch.d.ts +8 -0
  32. package/dist/application/operations/ack/batch.js +64 -0
  33. package/dist/application/operations/ack/completion.d.ts +3 -0
  34. package/dist/application/operations/ack/completion.js +74 -0
  35. package/dist/application/operations/ack/failure.d.ts +3 -0
  36. package/dist/application/operations/ack/failure.js +160 -0
  37. package/dist/application/operations/ack.d.ts +5 -79
  38. package/dist/application/operations/ack.js +4 -319
  39. package/dist/application/operations/ackHelpers.d.ts +3 -52
  40. package/dist/application/operations/ackHelpers.js +10 -3
  41. package/dist/application/operations/customId.d.ts +18 -5
  42. package/dist/application/operations/customId.js +36 -25
  43. package/dist/application/operations/flowValidation.js +9 -4
  44. package/dist/application/operations/jobManagement.js +44 -7
  45. package/dist/application/operations/parentLink.d.ts +36 -0
  46. package/dist/application/operations/parentLink.js +153 -0
  47. package/dist/application/operations/parentLinkInput.d.ts +8 -0
  48. package/dist/application/operations/parentLinkInput.js +23 -0
  49. package/dist/application/operations/push.d.ts +5 -44
  50. package/dist/application/operations/push.js +62 -152
  51. package/dist/application/operations/pushAdmission.d.ts +32 -0
  52. package/dist/application/operations/pushAdmission.js +38 -0
  53. package/dist/application/operations/pushBatch.d.ts +4 -0
  54. package/dist/application/operations/pushBatch.js +136 -0
  55. package/dist/application/operations/pushContext.d.ts +39 -0
  56. package/dist/application/operations/pushContext.js +1 -0
  57. package/dist/application/operations/pushDeduplication.d.ts +42 -0
  58. package/dist/application/operations/pushDeduplication.js +131 -0
  59. package/dist/application/operations/pushInsert.d.ts +13 -1
  60. package/dist/application/operations/pushInsert.js +33 -17
  61. package/dist/application/operations/pushLocks.js +13 -9
  62. package/dist/application/operations/query/collect.d.ts +12 -0
  63. package/dist/application/operations/query/collect.js +118 -0
  64. package/dist/application/operations/query/jobLookup.d.ts +9 -0
  65. package/dist/application/operations/query/jobLookup.js +110 -0
  66. package/dist/application/operations/query/pagination.d.ts +8 -0
  67. package/dist/application/operations/query/pagination.js +90 -0
  68. package/dist/application/operations/query/state.d.ts +4 -0
  69. package/dist/application/operations/query/state.js +63 -0
  70. package/dist/application/operations/queryOperations.d.ts +5 -50
  71. package/dist/application/operations/queryOperations.js +4 -474
  72. package/dist/application/queue-manager/ack.d.ts +23 -0
  73. package/dist/application/queue-manager/ack.js +242 -0
  74. package/dist/application/queue-manager/configuration.d.ts +27 -0
  75. package/dist/application/queue-manager/configuration.js +84 -0
  76. package/dist/application/queue-manager/context.d.ts +5 -0
  77. package/dist/application/queue-manager/context.js +61 -0
  78. package/dist/application/queue-manager/control.d.ts +17 -0
  79. package/dist/application/queue-manager/control.js +133 -0
  80. package/dist/application/queue-manager/delivery.d.ts +32 -0
  81. package/dist/application/queue-manager/delivery.js +143 -0
  82. package/dist/application/queue-manager/dependencies.d.ts +8 -0
  83. package/dist/application/queue-manager/dependencies.js +127 -0
  84. package/dist/application/queue-manager/dependency-runtime.d.ts +8 -0
  85. package/dist/application/queue-manager/dependency-runtime.js +40 -0
  86. package/dist/application/queue-manager/flow-failures.d.ts +18 -0
  87. package/dist/application/queue-manager/flow-failures.js +107 -0
  88. package/dist/application/queue-manager/flow-options.d.ts +8 -0
  89. package/dist/application/queue-manager/flow-options.js +129 -0
  90. package/dist/application/queue-manager/job-management.d.ts +17 -0
  91. package/dist/application/queue-manager/job-management.js +100 -0
  92. package/dist/application/queue-manager/lifecycle.d.ts +4 -0
  93. package/dist/application/queue-manager/lifecycle.js +41 -0
  94. package/dist/application/queue-manager/limits.d.ts +41 -0
  95. package/dist/application/queue-manager/limits.js +108 -0
  96. package/dist/application/queue-manager/locks.d.ts +21 -0
  97. package/dist/application/queue-manager/locks.js +59 -0
  98. package/dist/application/queue-manager/observability.d.ts +16 -0
  99. package/dist/application/queue-manager/observability.js +44 -0
  100. package/dist/application/queue-manager/queries.d.ts +17 -0
  101. package/dist/application/queue-manager/queries.js +118 -0
  102. package/dist/application/queue-manager/repeat.d.ts +4 -0
  103. package/dist/application/queue-manager/repeat.js +26 -0
  104. package/dist/application/queue-manager/services.d.ts +19 -0
  105. package/dist/application/queue-manager/services.js +80 -0
  106. package/dist/application/queue-manager/state.d.ts +92 -0
  107. package/dist/application/queue-manager/state.js +144 -0
  108. package/dist/application/queue-manager/stats.d.ts +28 -0
  109. package/dist/application/queue-manager/stats.js +52 -0
  110. package/dist/application/queueManager.d.ts +4 -400
  111. package/dist/application/queueManager.js +3 -1922
  112. package/dist/application/queueTelemetryJournal.d.ts +20 -0
  113. package/dist/application/queueTelemetryJournal.js +133 -0
  114. package/dist/application/repeatJobs.d.ts +7 -0
  115. package/dist/application/repeatJobs.js +132 -0
  116. package/dist/application/stallDetection.js +6 -1
  117. package/dist/application/types/ack.d.ts +132 -0
  118. package/dist/application/types/ack.js +1 -0
  119. package/dist/application/types/background.d.ts +18 -0
  120. package/dist/application/types/background.js +1 -0
  121. package/dist/application/types/config.d.ts +37 -0
  122. package/dist/application/types/config.js +15 -0
  123. package/dist/application/types/contextFactory.d.ts +83 -0
  124. package/dist/application/types/contextFactory.js +1 -0
  125. package/dist/application/types/contexts.d.ts +110 -0
  126. package/dist/application/types/contexts.js +1 -0
  127. package/dist/application/types/index.d.ts +7 -0
  128. package/dist/application/types/index.js +1 -0
  129. package/dist/application/types/query.d.ts +23 -0
  130. package/dist/application/types/query.js +1 -0
  131. package/dist/application/types/queueManager.d.ts +94 -0
  132. package/dist/application/types/queueManager.js +1 -0
  133. package/dist/cli/commandRouter.d.ts +1 -1
  134. package/dist/cli/commands/core.js +1 -0
  135. package/dist/cli/output/collections.d.ts +8 -0
  136. package/dist/cli/output/collections.js +131 -0
  137. package/dist/cli/output/jobs.d.ts +2 -0
  138. package/dist/cli/output/jobs.js +61 -0
  139. package/dist/cli/output/style.d.ts +14 -0
  140. package/dist/cli/output/style.js +28 -0
  141. package/dist/cli/output/success.d.ts +1 -0
  142. package/dist/cli/output/success.js +108 -0
  143. package/dist/cli/output.d.ts +1 -6
  144. package/dist/cli/output.js +7 -395
  145. package/dist/client/bunqueue/dlqRateLimit.d.ts +8 -0
  146. package/dist/client/bunqueue/dlqRateLimit.js +24 -0
  147. package/dist/client/bunqueue/runtime.d.ts +35 -0
  148. package/dist/client/bunqueue/runtime.js +138 -0
  149. package/dist/client/bunqueue.d.ts +19 -34
  150. package/dist/client/bunqueue.js +45 -166
  151. package/dist/client/dlqConversion.d.ts +5 -0
  152. package/dist/client/dlqConversion.js +28 -0
  153. package/dist/client/events.d.ts +7 -56
  154. package/dist/client/events.js +38 -15
  155. package/dist/client/flow.d.ts +6 -12
  156. package/dist/client/flow.js +16 -34
  157. package/dist/client/flowJobFactory.d.ts +9 -1
  158. package/dist/client/flowJobFactory.js +25 -9
  159. package/dist/client/flowJobMoveMethods.d.ts +5 -5
  160. package/dist/client/flowJobMoveMethods.js +31 -16
  161. package/dist/client/flowLegacyPlan.js +22 -8
  162. package/dist/client/flowOptions.d.ts +1 -1
  163. package/dist/client/flowOptions.js +2 -1
  164. package/dist/client/flowPlan.js +2 -3
  165. package/dist/client/flowPush.d.ts +1 -0
  166. package/dist/client/flowPush.js +5 -1
  167. package/dist/client/flowReader.js +5 -5
  168. package/dist/client/flowResults.d.ts +11 -0
  169. package/dist/client/flowResults.js +42 -0
  170. package/dist/client/index.d.ts +3 -1
  171. package/dist/client/jobConversion.d.ts +0 -4
  172. package/dist/client/jobConversion.js +32 -33
  173. package/dist/client/jobConversionHelpers.d.ts +18 -2
  174. package/dist/client/jobConversionHelpers.js +17 -10
  175. package/dist/client/jobConversionTypes.d.ts +5 -1
  176. package/dist/client/jobHelpers.d.ts +7 -2
  177. package/dist/client/jobHelpers.js +16 -8
  178. package/dist/client/queue/dlq.js +12 -14
  179. package/dist/client/queue/dlqJobMethods.js +11 -10
  180. package/dist/client/queue/dlqOps.js +2 -8
  181. package/dist/client/queue/dlqStats.d.ts +3 -0
  182. package/dist/client/queue/dlqStats.js +21 -0
  183. package/dist/client/queue/job-proxy/dependencies.d.ts +9 -0
  184. package/dist/client/queue/job-proxy/dependencies.js +67 -0
  185. package/dist/client/queue/job-proxy/reflection.d.ts +2 -0
  186. package/dist/client/queue/job-proxy/reflection.js +18 -0
  187. package/dist/client/queue/job-proxy/simple.d.ts +3 -0
  188. package/dist/client/queue/job-proxy/simple.js +316 -0
  189. package/dist/client/queue/job-proxy/tcp.d.ts +4 -0
  190. package/dist/client/queue/job-proxy/tcp.js +191 -0
  191. package/dist/client/queue/jobMetadata.d.ts +10 -0
  192. package/dist/client/queue/jobMetadata.js +24 -0
  193. package/dist/client/queue/jobMove.d.ts +4 -4
  194. package/dist/client/queue/jobMove.js +82 -24
  195. package/dist/client/queue/jobProxy.d.ts +4 -50
  196. package/dist/client/queue/jobProxy.js +3 -516
  197. package/dist/client/queue/operations/add/bulk.d.ts +7 -0
  198. package/dist/client/queue/operations/add/bulk.js +129 -0
  199. package/dist/client/queue/operations/add/payload.d.ts +24 -0
  200. package/dist/client/queue/operations/add/payload.js +85 -0
  201. package/dist/client/queue/operations/add/single.d.ts +3 -0
  202. package/dist/client/queue/operations/add/single.js +107 -0
  203. package/dist/client/queue/operations/add.d.ts +2 -47
  204. package/dist/client/queue/operations/add.js +2 -364
  205. package/dist/client/queue/operations/management.js +2 -1
  206. package/dist/client/queue/operations/query.js +20 -63
  207. package/dist/client/queue/queue.d.ts +6 -192
  208. package/dist/client/queue/queue.js +6 -559
  209. package/dist/client/queue/runtime/compatibility.d.ts +13 -0
  210. package/dist/client/queue/runtime/compatibility.js +38 -0
  211. package/dist/client/queue/runtime/configuration.d.ts +42 -0
  212. package/dist/client/queue/runtime/configuration.js +109 -0
  213. package/dist/client/queue/runtime/connection.d.ts +6 -0
  214. package/dist/client/queue/runtime/connection.js +16 -0
  215. package/dist/client/queue/runtime/control.d.ts +41 -0
  216. package/dist/client/queue/runtime/control.js +87 -0
  217. package/dist/client/queue/runtime/queries.d.ts +48 -0
  218. package/dist/client/queue/runtime/queries.js +95 -0
  219. package/dist/client/queue/runtime/scheduling.d.ts +33 -0
  220. package/dist/client/queue/runtime/scheduling.js +56 -0
  221. package/dist/client/queue/runtime/state.d.ts +96 -0
  222. package/dist/client/queue/runtime/state.js +149 -0
  223. package/dist/client/queue/scheduler.d.ts +2 -5
  224. package/dist/client/queue/scheduler.js +25 -23
  225. package/dist/client/queue/schedulerPagination.d.ts +7 -0
  226. package/dist/client/queue/schedulerPagination.js +10 -0
  227. package/dist/client/queue/types/add.d.ts +40 -0
  228. package/dist/client/queue/types/add.js +1 -0
  229. package/dist/client/queue/types/contexts.d.ts +33 -0
  230. package/dist/client/queue/types/contexts.js +5 -0
  231. package/dist/client/queue/types/index.d.ts +3 -0
  232. package/dist/client/queue/types/index.js +1 -0
  233. package/dist/client/queue/types/job.d.ts +50 -0
  234. package/dist/client/queue/types/job.js +1 -0
  235. package/dist/client/queue/types/runtime.d.ts +35 -0
  236. package/dist/client/queue/types/runtime.js +1 -0
  237. package/dist/client/queue/workers.d.ts +4 -8
  238. package/dist/client/queue/workers.js +22 -14
  239. package/dist/client/queue-events/tcpSubscription.d.ts +23 -0
  240. package/dist/client/queue-events/tcpSubscription.js +99 -0
  241. package/dist/client/sandboxed/queueOps.d.ts +2 -2
  242. package/dist/client/sandboxed/queueOps.js +32 -5
  243. package/dist/client/sandboxed/runtime/dispatch.d.ts +13 -0
  244. package/dist/client/sandboxed/runtime/dispatch.js +186 -0
  245. package/dist/client/sandboxed/runtime/lifecycle.d.ts +20 -0
  246. package/dist/client/sandboxed/runtime/lifecycle.js +95 -0
  247. package/dist/client/sandboxed/runtime/log.d.ts +1 -0
  248. package/dist/client/sandboxed/runtime/log.js +15 -0
  249. package/dist/client/sandboxed/runtime/pool.d.ts +11 -0
  250. package/dist/client/sandboxed/runtime/pool.js +121 -0
  251. package/dist/client/sandboxed/runtime/recovery.d.ts +11 -0
  252. package/dist/client/sandboxed/runtime/recovery.js +122 -0
  253. package/dist/client/sandboxed/runtime/state.d.ts +39 -0
  254. package/dist/client/sandboxed/runtime/state.js +59 -0
  255. package/dist/client/sandboxed/types/index.d.ts +2 -0
  256. package/dist/client/sandboxed/types/index.js +1 -0
  257. package/dist/client/sandboxed/types/options.d.ts +27 -0
  258. package/dist/client/sandboxed/types/options.js +1 -0
  259. package/dist/client/sandboxed/types/process.d.ts +30 -0
  260. package/dist/client/sandboxed/types/process.js +1 -0
  261. package/dist/client/sandboxed/worker.d.ts +3 -85
  262. package/dist/client/sandboxed/worker.js +3 -557
  263. package/dist/client/sandboxed/wrapper.js +1 -0
  264. package/dist/client/tcp/client.d.ts +5 -112
  265. package/dist/client/tcp/client.js +5 -481
  266. package/dist/client/tcp/commandQueue.d.ts +23 -0
  267. package/dist/client/tcp/commandQueue.js +89 -0
  268. package/dist/client/tcp/connection.d.ts +4 -85
  269. package/dist/client/tcp/connection.js +3 -315
  270. package/dist/client/tcp/errors.d.ts +6 -0
  271. package/dist/client/tcp/errors.js +18 -0
  272. package/dist/client/tcp/runtime/commands.d.ts +9 -0
  273. package/dist/client/tcp/runtime/commands.js +124 -0
  274. package/dist/client/tcp/runtime/connectivity.d.ts +13 -0
  275. package/dist/client/tcp/runtime/connectivity.js +77 -0
  276. package/dist/client/tcp/runtime/health.d.ts +14 -0
  277. package/dist/client/tcp/runtime/health.js +127 -0
  278. package/dist/client/tcp/runtime/lifecycle.d.ts +8 -0
  279. package/dist/client/tcp/runtime/lifecycle.js +32 -0
  280. package/dist/client/tcp/runtime/state.d.ts +50 -0
  281. package/dist/client/tcp/runtime/state.js +45 -0
  282. package/dist/client/tcp/transport.d.ts +18 -0
  283. package/dist/client/tcp/transport.js +158 -0
  284. package/dist/client/tcp/types/command.d.ts +9 -0
  285. package/dist/client/tcp/types/command.js +1 -0
  286. package/dist/client/tcp/types/connection.d.ts +31 -0
  287. package/dist/client/tcp/types/connection.js +17 -0
  288. package/dist/client/tcp/types/index.d.ts +5 -0
  289. package/dist/client/tcp/types/index.js +1 -0
  290. package/dist/client/tcp/types/socket.d.ts +8 -0
  291. package/dist/client/tcp/types/socket.js +1 -0
  292. package/dist/client/tcp/types/tls.d.ts +4 -0
  293. package/dist/client/tcp/types/tls.js +1 -0
  294. package/dist/client/tcp/types.d.ts +2 -106
  295. package/dist/client/tcp/types.js +2 -22
  296. package/dist/client/types/connection.d.ts +29 -0
  297. package/dist/client/types/connection.js +1 -0
  298. package/dist/client/types/dlq.d.ts +45 -0
  299. package/dist/client/types/dlq.js +1 -0
  300. package/dist/client/types/events.d.ts +54 -0
  301. package/dist/client/types/events.js +1 -0
  302. package/dist/client/types/flow.d.ts +10 -0
  303. package/dist/client/types/flow.js +1 -0
  304. package/dist/client/types/index.d.ts +10 -0
  305. package/dist/client/types/index.js +1 -0
  306. package/dist/client/types/job.d.ts +127 -0
  307. package/dist/client/types/job.js +1 -0
  308. package/dist/client/types/metrics.d.ts +1 -0
  309. package/dist/client/types/metrics.js +1 -0
  310. package/dist/client/types/options.d.ts +62 -0
  311. package/dist/client/types/options.js +1 -0
  312. package/dist/client/types/worker.d.ts +38 -0
  313. package/dist/client/types/worker.js +1 -0
  314. package/dist/client/types.d.ts +2 -583
  315. package/dist/client/types.js +2 -6
  316. package/dist/client/worker/ackBatcher.d.ts +1 -1
  317. package/dist/client/worker/ackBatcher.js +17 -5
  318. package/dist/client/worker/ackOutcome.d.ts +8 -0
  319. package/dist/client/worker/ackOutcome.js +58 -0
  320. package/dist/client/worker/constants.d.ts +7 -0
  321. package/dist/client/worker/constants.js +7 -0
  322. package/dist/client/worker/groupConcurrency.js +3 -0
  323. package/dist/client/worker/handlers/completion.d.ts +28 -0
  324. package/dist/client/worker/handlers/completion.js +68 -0
  325. package/dist/client/worker/handlers/dependencies.d.ts +11 -0
  326. package/dist/client/worker/handlers/dependencies.js +107 -0
  327. package/dist/client/worker/handlers/mutations.d.ts +23 -0
  328. package/dist/client/worker/handlers/mutations.js +211 -0
  329. package/dist/client/worker/handlers/queries.d.ts +15 -0
  330. package/dist/client/worker/handlers/queries.js +100 -0
  331. package/dist/client/worker/index.d.ts +2 -2
  332. package/dist/client/worker/index.js +1 -1
  333. package/dist/client/worker/jobParser.js +4 -2
  334. package/dist/client/worker/processor.d.ts +2 -15
  335. package/dist/client/worker/processor.js +67 -124
  336. package/dist/client/worker/processorHandlers.d.ts +4 -61
  337. package/dist/client/worker/processorHandlers.js +4 -398
  338. package/dist/client/worker/processorOutcome.d.ts +14 -0
  339. package/dist/client/worker/processorOutcome.js +125 -0
  340. package/dist/client/worker/runtime/buffer.d.ts +8 -0
  341. package/dist/client/worker/runtime/buffer.js +50 -0
  342. package/dist/client/worker/runtime/control.d.ts +26 -0
  343. package/dist/client/worker/runtime/control.js +175 -0
  344. package/dist/client/worker/runtime/execution.d.ts +11 -0
  345. package/dist/client/worker/runtime/execution.js +123 -0
  346. package/dist/client/worker/runtime/lifecycle.d.ts +7 -0
  347. package/dist/client/worker/runtime/lifecycle.js +114 -0
  348. package/dist/client/worker/runtime/manual.d.ts +10 -0
  349. package/dist/client/worker/runtime/manual.js +137 -0
  350. package/dist/client/worker/runtime/options.d.ts +5 -0
  351. package/dist/client/worker/runtime/options.js +39 -0
  352. package/dist/client/worker/runtime/polling.d.ts +12 -0
  353. package/dist/client/worker/runtime/polling.js +123 -0
  354. package/dist/client/worker/runtime/state.d.ts +110 -0
  355. package/dist/client/worker/runtime/state.js +156 -0
  356. package/dist/client/worker/types/index.d.ts +5 -0
  357. package/dist/client/worker/types/index.js +1 -0
  358. package/dist/client/worker/types/manual.d.ts +7 -0
  359. package/dist/client/worker/types/manual.js +1 -0
  360. package/dist/client/worker/types/options.d.ts +24 -0
  361. package/dist/client/worker/types/options.js +1 -0
  362. package/dist/client/worker/types/outcome.d.ts +23 -0
  363. package/dist/client/worker/types/outcome.js +1 -0
  364. package/dist/client/worker/types/processor.d.ts +22 -0
  365. package/dist/client/worker/types/processor.js +1 -0
  366. package/dist/client/worker/types/transport.d.ts +11 -0
  367. package/dist/client/worker/types/transport.js +1 -0
  368. package/dist/client/worker/worker.d.ts +3 -160
  369. package/dist/client/worker/worker.js +3 -928
  370. package/dist/client/worker/workerRateLimiter.d.ts +5 -1
  371. package/dist/client/worker/workerRateLimiter.js +40 -20
  372. package/dist/client/worker.d.ts +1 -0
  373. package/dist/client/workflow/compensationChild.d.ts +2 -1
  374. package/dist/client/workflow/compensationChild.js +1 -1
  375. package/dist/client/workflow/compensationClaim.d.ts +11 -0
  376. package/dist/client/workflow/compensationClaim.js +30 -0
  377. package/dist/client/workflow/compensator.d.ts +7 -2
  378. package/dist/client/workflow/compensator.js +5 -11
  379. package/dist/client/workflow/recovery.js +25 -2
  380. package/dist/client/workflow/rollbackControl.js +1 -1
  381. package/dist/domain/job/constants.d.ts +12 -0
  382. package/dist/domain/job/constants.js +12 -0
  383. package/dist/domain/job/create.d.ts +2 -0
  384. package/dist/domain/job/create.js +103 -0
  385. package/dist/domain/job/ids.d.ts +5 -0
  386. package/dist/domain/job/ids.js +12 -0
  387. package/dist/domain/job/locks.d.ts +4 -0
  388. package/dist/domain/job/locks.js +23 -0
  389. package/dist/domain/job/payload.d.ts +18 -0
  390. package/dist/domain/job/payload.js +43 -0
  391. package/dist/domain/job/state.d.ts +8 -0
  392. package/dist/domain/job/state.js +51 -0
  393. package/dist/domain/job/terminal.d.ts +3 -0
  394. package/dist/domain/job/terminal.js +9 -0
  395. package/dist/domain/queue/dlqShard.d.ts +2 -0
  396. package/dist/domain/queue/dlqShard.js +34 -9
  397. package/dist/domain/queue/priorityQueue.js +3 -39
  398. package/dist/domain/queue/priorityQueueOrder.d.ts +3 -0
  399. package/dist/domain/queue/priorityQueueOrder.js +21 -0
  400. package/dist/domain/queue/shard/dependencies.d.ts +11 -0
  401. package/dist/domain/queue/shard/dependencies.js +22 -0
  402. package/dist/domain/queue/shard/dlq.d.ts +25 -0
  403. package/dist/domain/queue/shard/dlq.js +71 -0
  404. package/dist/domain/queue/shard/keys.d.ts +18 -0
  405. package/dist/domain/queue/shard/keys.js +45 -0
  406. package/dist/domain/queue/shard/lifecycle.d.ts +10 -0
  407. package/dist/domain/queue/shard/lifecycle.js +43 -0
  408. package/dist/domain/queue/shard/limits.d.ts +24 -0
  409. package/dist/domain/queue/shard/limits.js +57 -0
  410. package/dist/domain/queue/shard/metrics.d.ts +32 -0
  411. package/dist/domain/queue/shard/metrics.js +72 -0
  412. package/dist/domain/queue/shard/state.d.ts +34 -0
  413. package/dist/domain/queue/shard/state.js +80 -0
  414. package/dist/domain/queue/shard.d.ts +5 -145
  415. package/dist/domain/queue/shard.js +4 -409
  416. package/dist/domain/response/builders.d.ts +15 -0
  417. package/dist/domain/response/builders.js +39 -0
  418. package/dist/domain/types/command.d.ts +2 -555
  419. package/dist/domain/types/command.js +2 -5
  420. package/dist/domain/types/commands/base.d.ts +5 -0
  421. package/dist/domain/types/commands/base.js +1 -0
  422. package/dist/domain/types/commands/core.d.ts +106 -0
  423. package/dist/domain/types/commands/core.js +1 -0
  424. package/dist/domain/types/commands/cron.d.ts +36 -0
  425. package/dist/domain/types/commands/cron.js +1 -0
  426. package/dist/domain/types/commands/dashboard.d.ts +13 -0
  427. package/dist/domain/types/commands/dashboard.js +1 -0
  428. package/dist/domain/types/commands/dlq.d.ts +39 -0
  429. package/dist/domain/types/commands/dlq.js +1 -0
  430. package/dist/domain/types/commands/extended.d.ts +63 -0
  431. package/dist/domain/types/commands/extended.js +1 -0
  432. package/dist/domain/types/commands/index.d.ts +12 -0
  433. package/dist/domain/types/commands/index.js +12 -0
  434. package/dist/domain/types/commands/limits.d.ts +54 -0
  435. package/dist/domain/types/commands/limits.js +1 -0
  436. package/dist/domain/types/commands/management.d.ts +73 -0
  437. package/dist/domain/types/commands/management.js +1 -0
  438. package/dist/domain/types/commands/monitoring.d.ts +49 -0
  439. package/dist/domain/types/commands/monitoring.js +1 -0
  440. package/dist/domain/types/commands/protocol.d.ts +20 -0
  441. package/dist/domain/types/commands/protocol.js +1 -0
  442. package/dist/domain/types/commands/query.d.ts +46 -0
  443. package/dist/domain/types/commands/query.js +1 -0
  444. package/dist/domain/types/commands/union.d.ts +13 -0
  445. package/dist/domain/types/commands/union.js +1 -0
  446. package/dist/domain/types/commands/workers.d.ts +39 -0
  447. package/dist/domain/types/commands/workers.js +1 -0
  448. package/dist/domain/types/cron.d.ts +4 -2
  449. package/dist/domain/types/cron.js +3 -0
  450. package/dist/domain/types/dlq.d.ts +17 -0
  451. package/dist/domain/types/dlq.js +70 -14
  452. package/dist/domain/types/index.d.ts +2 -0
  453. package/dist/domain/types/index.js +1 -0
  454. package/dist/domain/types/job.d.ts +8 -269
  455. package/dist/domain/types/job.js +8 -234
  456. package/dist/domain/types/jobs/model.d.ts +152 -0
  457. package/dist/domain/types/jobs/model.js +1 -0
  458. package/dist/domain/types/metrics.d.ts +16 -0
  459. package/dist/domain/types/metrics.js +1 -0
  460. package/dist/domain/types/priorityQueue.d.ts +12 -0
  461. package/dist/domain/types/priorityQueue.js +1 -0
  462. package/dist/domain/types/protocol.d.ts +5 -0
  463. package/dist/domain/types/protocol.js +4 -0
  464. package/dist/domain/types/queue.d.ts +2 -0
  465. package/dist/domain/types/response.d.ts +3 -192
  466. package/dist/domain/types/response.js +3 -101
  467. package/dist/domain/types/responses/model.d.ts +152 -0
  468. package/dist/domain/types/responses/model.js +1 -0
  469. package/dist/domain/types/shard.d.ts +4 -0
  470. package/dist/domain/types/shard.js +1 -0
  471. package/dist/infrastructure/cloud/cloudAgent.js +6 -0
  472. package/dist/infrastructure/cloud/commandHandler.d.ts +2 -41
  473. package/dist/infrastructure/cloud/commandHandler.js +1 -1
  474. package/dist/infrastructure/cloud/commands/integrations.d.ts +2 -0
  475. package/dist/infrastructure/cloud/commands/integrations.js +31 -0
  476. package/dist/infrastructure/cloud/commands/jobMapper.d.ts +56 -0
  477. package/dist/infrastructure/cloud/commands/jobMapper.js +72 -0
  478. package/dist/infrastructure/cloud/commands/jobs.d.ts +2 -0
  479. package/dist/infrastructure/cloud/commands/jobs.js +111 -0
  480. package/dist/infrastructure/cloud/commands/queues.d.ts +2 -0
  481. package/dist/infrastructure/cloud/commands/queues.js +126 -0
  482. package/dist/infrastructure/cloud/commands.d.ts +3 -10
  483. package/dist/infrastructure/cloud/commands.js +7 -344
  484. package/dist/infrastructure/cloud/snapshot/analytics.d.ts +16 -0
  485. package/dist/infrastructure/cloud/snapshot/analytics.js +132 -0
  486. package/dist/infrastructure/cloud/snapshot/collector.d.ts +24 -0
  487. package/dist/infrastructure/cloud/snapshot/collector.js +105 -0
  488. package/dist/infrastructure/cloud/snapshot/config.d.ts +5 -0
  489. package/dist/infrastructure/cloud/snapshot/config.js +86 -0
  490. package/dist/infrastructure/cloud/snapshot/jobs.d.ts +5 -0
  491. package/dist/infrastructure/cloud/snapshot/jobs.js +148 -0
  492. package/dist/infrastructure/cloud/snapshot/stalls.d.ts +3 -0
  493. package/dist/infrastructure/cloud/snapshot/stalls.js +34 -0
  494. package/dist/infrastructure/cloud/snapshotCollector.d.ts +2 -53
  495. package/dist/infrastructure/cloud/snapshotCollector.js +5 -107
  496. package/dist/infrastructure/cloud/snapshotHelpers.d.ts +5 -45
  497. package/dist/infrastructure/cloud/snapshotHelpers.js +4 -426
  498. package/dist/infrastructure/cloud/types/collector.d.ts +54 -0
  499. package/dist/infrastructure/cloud/types/collector.js +1 -0
  500. package/dist/infrastructure/cloud/types/command.d.ts +44 -0
  501. package/dist/infrastructure/cloud/types/command.js +1 -0
  502. package/dist/infrastructure/cloud/types/config.d.ts +18 -0
  503. package/dist/infrastructure/cloud/types/config.js +1 -0
  504. package/dist/infrastructure/cloud/types/event.d.ts +14 -0
  505. package/dist/infrastructure/cloud/types/event.js +1 -0
  506. package/dist/infrastructure/cloud/types/redact.d.ts +4 -0
  507. package/dist/infrastructure/cloud/types/redact.js +1 -0
  508. package/dist/infrastructure/cloud/types/snapshot.d.ts +52 -0
  509. package/dist/infrastructure/cloud/types/snapshot.js +1 -0
  510. package/dist/infrastructure/cloud/types/snapshotCore.d.ts +125 -0
  511. package/dist/infrastructure/cloud/types/snapshotCore.js +1 -0
  512. package/dist/infrastructure/cloud/types/snapshotJobs.d.ts +124 -0
  513. package/dist/infrastructure/cloud/types/snapshotJobs.js +1 -0
  514. package/dist/infrastructure/cloud/types/snapshotTelemetry.d.ts +100 -0
  515. package/dist/infrastructure/cloud/types/snapshotTelemetry.js +1 -0
  516. package/dist/infrastructure/cloud/types.d.ts +3 -445
  517. package/dist/infrastructure/cloud/types.js +0 -4
  518. package/dist/infrastructure/persistence/batchInsert.d.ts +13 -0
  519. package/dist/infrastructure/persistence/batchInsert.js +96 -0
  520. package/dist/infrastructure/persistence/jobOptionsBlob.d.ts +18 -0
  521. package/dist/infrastructure/persistence/jobOptionsBlob.js +56 -0
  522. package/dist/infrastructure/persistence/legacyNameMigration.d.ts +5 -0
  523. package/dist/infrastructure/persistence/legacyNameMigration.js +42 -0
  524. package/dist/infrastructure/persistence/migrations.d.ts +3 -0
  525. package/dist/infrastructure/persistence/migrations.js +120 -0
  526. package/dist/infrastructure/persistence/schema.d.ts +3 -5
  527. package/dist/infrastructure/persistence/schema.js +40 -136
  528. package/dist/infrastructure/persistence/sqlite/admission.d.ts +9 -0
  529. package/dist/infrastructure/persistence/sqlite/admission.js +34 -0
  530. package/dist/infrastructure/persistence/sqlite/control.d.ts +32 -0
  531. package/dist/infrastructure/persistence/sqlite/control.js +90 -0
  532. package/dist/infrastructure/persistence/sqlite/flows.d.ts +26 -0
  533. package/dist/infrastructure/persistence/sqlite/flows.js +167 -0
  534. package/dist/infrastructure/persistence/sqlite/jobs.d.ts +23 -0
  535. package/dist/infrastructure/persistence/sqlite/jobs.js +166 -0
  536. package/dist/infrastructure/persistence/sqlite/lifecycle.d.ts +6 -0
  537. package/dist/infrastructure/persistence/sqlite/lifecycle.js +30 -0
  538. package/dist/infrastructure/persistence/sqlite/mutations.d.ts +20 -0
  539. package/dist/infrastructure/persistence/sqlite/mutations.js +149 -0
  540. package/dist/infrastructure/persistence/sqlite/queries.d.ts +23 -0
  541. package/dist/infrastructure/persistence/sqlite/queries.js +89 -0
  542. package/dist/infrastructure/persistence/sqlite/records.d.ts +24 -0
  543. package/dist/infrastructure/persistence/sqlite/records.js +115 -0
  544. package/dist/infrastructure/persistence/sqlite/state.d.ts +36 -0
  545. package/dist/infrastructure/persistence/sqlite/state.js +207 -0
  546. package/dist/infrastructure/persistence/sqlite/telemetry.d.ts +16 -0
  547. package/dist/infrastructure/persistence/sqlite/telemetry.js +126 -0
  548. package/dist/infrastructure/persistence/sqlite.d.ts +5 -280
  549. package/dist/infrastructure/persistence/sqlite.js +3 -1013
  550. package/dist/infrastructure/persistence/sqliteBatch.d.ts +4 -121
  551. package/dist/infrastructure/persistence/sqliteBatch.js +3 -422
  552. package/dist/infrastructure/persistence/sqliteSerializer.d.ts +6 -1
  553. package/dist/infrastructure/persistence/sqliteSerializer.js +33 -11
  554. package/dist/infrastructure/persistence/statements.d.ts +5 -1
  555. package/dist/infrastructure/persistence/statements.js +14 -9
  556. package/dist/infrastructure/persistence/types/admission.d.ts +8 -0
  557. package/dist/infrastructure/persistence/types/admission.js +1 -0
  558. package/dist/infrastructure/persistence/types/batch.d.ts +12 -0
  559. package/dist/infrastructure/persistence/types/batch.js +1 -0
  560. package/dist/infrastructure/persistence/types/sqlite.d.ts +17 -0
  561. package/dist/infrastructure/persistence/types/sqlite.js +1 -0
  562. package/dist/infrastructure/persistence/writeBuffer.d.ts +38 -0
  563. package/dist/infrastructure/persistence/writeBuffer.js +221 -0
  564. package/dist/infrastructure/scheduler/cron/execution.d.ts +12 -0
  565. package/dist/infrastructure/scheduler/cron/execution.js +150 -0
  566. package/dist/infrastructure/scheduler/cron/runtime.d.ts +31 -0
  567. package/dist/infrastructure/scheduler/cron/runtime.js +143 -0
  568. package/dist/infrastructure/scheduler/cronScheduler.d.ts +4 -117
  569. package/dist/infrastructure/scheduler/cronScheduler.js +3 -436
  570. package/dist/infrastructure/scheduler/types/cronScheduler.d.ts +16 -0
  571. package/dist/infrastructure/scheduler/types/cronScheduler.js +1 -0
  572. package/dist/infrastructure/server/bootstrap.js +3 -0
  573. package/dist/infrastructure/server/handler-routes/control.d.ts +8 -0
  574. package/dist/infrastructure/server/handler-routes/control.js +82 -0
  575. package/dist/infrastructure/server/handler-routes/jobs.d.ts +6 -0
  576. package/dist/infrastructure/server/handler-routes/jobs.js +110 -0
  577. package/dist/infrastructure/server/handler-routes/monitoring.d.ts +5 -0
  578. package/dist/infrastructure/server/handler-routes/monitoring.js +65 -0
  579. package/dist/infrastructure/server/handlerRoutes.d.ts +3 -26
  580. package/dist/infrastructure/server/handlerRoutes.js +3 -270
  581. package/dist/infrastructure/server/handlers/advanced/configNumbers.d.ts +2 -0
  582. package/dist/infrastructure/server/handlers/advanced/configNumbers.js +26 -0
  583. package/dist/infrastructure/server/handlers/advanced/dependencies.d.ts +15 -0
  584. package/dist/infrastructure/server/handlers/advanced/dependencies.js +38 -0
  585. package/dist/infrastructure/server/handlers/advanced/jobs.d.ts +33 -0
  586. package/dist/infrastructure/server/handlers/advanced/jobs.js +136 -0
  587. package/dist/infrastructure/server/handlers/advanced/queue.d.ts +42 -0
  588. package/dist/infrastructure/server/handlers/advanced/queue.js +111 -0
  589. package/dist/infrastructure/server/handlers/advanced.d.ts +3 -121
  590. package/dist/infrastructure/server/handlers/advanced.js +3 -336
  591. package/dist/infrastructure/server/handlers/core.d.ts +1 -4
  592. package/dist/infrastructure/server/handlers/core.js +37 -20
  593. package/dist/infrastructure/server/handlers/cron.js +9 -1
  594. package/dist/infrastructure/server/handlers/flow.js +6 -1
  595. package/dist/infrastructure/server/handlers/introspection.js +1 -1
  596. package/dist/infrastructure/server/handlers/management.d.ts +8 -0
  597. package/dist/infrastructure/server/handlers/management.js +30 -0
  598. package/dist/infrastructure/server/handlers/monitoring/health.d.ts +13 -0
  599. package/dist/infrastructure/server/handlers/monitoring/health.js +61 -0
  600. package/dist/infrastructure/server/handlers/monitoring/operations.d.ts +8 -0
  601. package/dist/infrastructure/server/handlers/monitoring/operations.js +28 -0
  602. package/dist/infrastructure/server/handlers/monitoring/webhooks.d.ts +7 -0
  603. package/dist/infrastructure/server/handlers/monitoring/webhooks.js +56 -0
  604. package/dist/infrastructure/server/handlers/monitoring/workers.d.ts +6 -0
  605. package/dist/infrastructure/server/handlers/monitoring/workers.js +57 -0
  606. package/dist/infrastructure/server/handlers/monitoring.d.ts +4 -30
  607. package/dist/infrastructure/server/handlers/monitoring.js +4 -222
  608. package/dist/infrastructure/server/handlers/pushBatchValidation.d.ts +1 -1
  609. package/dist/infrastructure/server/handlers/pushBatchValidation.js +7 -0
  610. package/dist/infrastructure/server/handlers/query.js +12 -3
  611. package/dist/infrastructure/server/http-routes/jobAdvanced.d.ts +2 -0
  612. package/dist/infrastructure/server/http-routes/jobAdvanced.js +106 -0
  613. package/dist/infrastructure/server/http-routes/jobManagement.d.ts +2 -0
  614. package/dist/infrastructure/server/http-routes/jobManagement.js +74 -0
  615. package/dist/infrastructure/server/http-routes/queueJobs.d.ts +2 -0
  616. package/dist/infrastructure/server/http-routes/queueJobs.js +108 -0
  617. package/dist/infrastructure/server/httpRouteJobs.d.ts +1 -8
  618. package/dist/infrastructure/server/httpRouteJobs.js +33 -222
  619. package/dist/infrastructure/server/httpRouteQueues.d.ts +1 -6
  620. package/dist/infrastructure/server/httpRouteQueues.js +51 -217
  621. package/dist/infrastructure/server/httpRouteResources.js +1 -0
  622. package/dist/infrastructure/server/protocol/commands.d.ts +8 -0
  623. package/dist/infrastructure/server/protocol/commands.js +31 -0
  624. package/dist/infrastructure/server/protocol/frameParser.d.ts +16 -0
  625. package/dist/infrastructure/server/protocol/frameParser.js +65 -0
  626. package/dist/infrastructure/server/protocol/lineBuffer.d.ts +6 -0
  627. package/dist/infrastructure/server/protocol/lineBuffer.js +21 -0
  628. package/dist/infrastructure/server/protocol/validation.d.ts +9 -0
  629. package/dist/infrastructure/server/protocol/validation.js +75 -0
  630. package/dist/infrastructure/server/protocol.d.ts +5 -77
  631. package/dist/infrastructure/server/protocol.js +4 -265
  632. package/dist/infrastructure/server/rateLimiter.js +1 -0
  633. package/dist/infrastructure/server/socketWriteQueue.d.ts +1 -1
  634. package/dist/infrastructure/server/socketWriteQueue.js +8 -5
  635. package/dist/infrastructure/server/sse/constants.d.ts +5 -0
  636. package/dist/infrastructure/server/sse/constants.js +5 -0
  637. package/dist/infrastructure/server/sse/eventBuffer.d.ts +3 -0
  638. package/dist/infrastructure/server/sse/eventBuffer.js +21 -0
  639. package/dist/infrastructure/server/sseHandler.d.ts +2 -6
  640. package/dist/infrastructure/server/sseHandler.js +20 -96
  641. package/dist/infrastructure/server/tcp/clientRelease.d.ts +2 -0
  642. package/dist/infrastructure/server/tcp/clientRelease.js +18 -0
  643. package/dist/infrastructure/server/tcp/connections.d.ts +24 -0
  644. package/dist/infrastructure/server/tcp/connections.js +162 -0
  645. package/dist/infrastructure/server/tcp/constants.d.ts +3 -0
  646. package/dist/infrastructure/server/tcp/constants.js +3 -0
  647. package/dist/infrastructure/server/tcp/eventSubscriptions.d.ts +10 -0
  648. package/dist/infrastructure/server/tcp/eventSubscriptions.js +17 -0
  649. package/dist/infrastructure/server/tcp/responses.d.ts +3 -0
  650. package/dist/infrastructure/server/tcp/responses.js +8 -0
  651. package/dist/infrastructure/server/tcp.d.ts +10 -68
  652. package/dist/infrastructure/server/tcp.js +47 -256
  653. package/dist/infrastructure/server/types/protocol.d.ts +4 -0
  654. package/dist/infrastructure/server/types/protocol.js +1 -0
  655. package/dist/infrastructure/server/types/sse.d.ts +11 -0
  656. package/dist/infrastructure/server/types/sse.js +1 -0
  657. package/dist/infrastructure/server/types/tcpServer.d.ts +25 -0
  658. package/dist/infrastructure/server/types/tcpServer.js +1 -0
  659. package/dist/infrastructure/server/types/ws.d.ts +6 -0
  660. package/dist/infrastructure/server/types/ws.js +1 -0
  661. package/dist/infrastructure/server/ws/constants.d.ts +6 -0
  662. package/dist/infrastructure/server/ws/constants.js +130 -0
  663. package/dist/infrastructure/server/ws/snapshots.d.ts +4 -0
  664. package/dist/infrastructure/server/ws/snapshots.js +52 -0
  665. package/dist/infrastructure/server/ws/subscriptions.d.ts +10 -0
  666. package/dist/infrastructure/server/ws/subscriptions.js +39 -0
  667. package/dist/infrastructure/server/wsHandler.d.ts +2 -10
  668. package/dist/infrastructure/server/wsHandler.js +12 -237
  669. package/dist/mcp/adapter.d.ts +5 -403
  670. package/dist/mcp/adapter.js +6 -778
  671. package/dist/mcp/backend/embedded/base.d.ts +7 -0
  672. package/dist/mcp/backend/embedded/base.js +15 -0
  673. package/dist/mcp/backend/embedded/index.d.ts +14 -0
  674. package/dist/mcp/backend/embedded/index.js +22 -0
  675. package/dist/mcp/backend/embedded/jobs.d.ts +44 -0
  676. package/dist/mcp/backend/embedded/jobs.js +98 -0
  677. package/dist/mcp/backend/embedded/queues.d.ts +27 -0
  678. package/dist/mcp/backend/embedded/queues.js +84 -0
  679. package/dist/mcp/backend/embedded/services.d.ts +29 -0
  680. package/dist/mcp/backend/embedded/services.js +107 -0
  681. package/dist/mcp/backend/serializers.d.ts +7 -0
  682. package/dist/mcp/backend/serializers.js +32 -0
  683. package/dist/mcp/backend/tcp/base.d.ts +19 -0
  684. package/dist/mcp/backend/tcp/base.js +54 -0
  685. package/dist/mcp/backend/tcp/index.d.ts +14 -0
  686. package/dist/mcp/backend/tcp/index.js +20 -0
  687. package/dist/mcp/backend/tcp/jobs.d.ts +44 -0
  688. package/dist/mcp/backend/tcp/jobs.js +122 -0
  689. package/dist/mcp/backend/tcp/queues.d.ts +27 -0
  690. package/dist/mcp/backend/tcp/queues.js +89 -0
  691. package/dist/mcp/backend/tcp/services.d.ts +30 -0
  692. package/dist/mcp/backend/tcp/services.js +161 -0
  693. package/dist/mcp/types/adapter.d.ts +176 -0
  694. package/dist/mcp/types/adapter.js +1 -0
  695. package/dist/shared/asyncLock.d.ts +13 -0
  696. package/dist/shared/asyncLock.js +65 -0
  697. package/dist/shared/lock.d.ts +10 -72
  698. package/dist/shared/lock.js +7 -231
  699. package/dist/shared/lockError.d.ts +3 -0
  700. package/dist/shared/lockError.js +6 -0
  701. package/dist/shared/lockTimeout.d.ts +2 -0
  702. package/dist/shared/lockTimeout.js +2 -0
  703. package/dist/shared/rwLock.d.ts +22 -0
  704. package/dist/shared/rwLock.js +124 -0
  705. package/dist/shared/serialization.js +1 -0
  706. package/dist/shared/skipList.d.ts +0 -5
  707. package/dist/shared/skipList.js +10 -57
  708. package/dist/shared/skipListNodes.d.ts +6 -0
  709. package/dist/shared/skipListNodes.js +43 -0
  710. package/dist/shared/types/lock.d.ts +7 -0
  711. package/dist/shared/types/lock.js +1 -0
  712. package/dist/shared/types/skipList.d.ts +4 -0
  713. package/dist/shared/types/skipList.js +1 -0
  714. package/package.json +2 -1
@@ -19,20 +19,13 @@ export interface DlqContext {
19
19
  };
20
20
  storage: SqliteStorage | null;
21
21
  }
22
+ export { processAutoRetry, retryDlqByFilter, retryDlqJob, retryDlqJobs, } from './dlqRetry';
22
23
  /** Get jobs from DLQ (backward compatible) */
23
24
  export declare function getDlqJobs(queue: string, ctx: DlqContext, count?: number): Job[];
24
25
  /** Get DLQ entries with full metadata */
25
26
  export declare function getDlqEntries(queue: string, ctx: DlqContext, filter?: DlqFilter): DlqEntry[];
26
27
  /** Get DLQ statistics */
27
28
  export declare function getDlqStats(queue: string, ctx: DlqContext): DlqStats;
28
- /** Retry a single job from DLQ */
29
- export declare function retryDlqJob(queue: string, jobId: JobId, ctx: DlqContext): Job | null;
30
- /** Retry jobs from DLQ (backward compatible) */
31
- export declare function retryDlqJobs(queue: string, ctx: DlqContext, jobId?: JobId, limit?: number): number;
32
- /** Retry jobs by filter */
33
- export declare function retryDlqByFilter(queue: string, ctx: DlqContext, filter: DlqFilter): number;
34
- /** Process auto-retry for a queue */
35
- export declare function processAutoRetry(queue: string, ctx: DlqContext): number;
36
29
  /** Purge expired entries from DLQ */
37
30
  export declare function purgeExpiredDlq(queue: string, ctx: DlqContext): number;
38
31
  /** Purge all jobs from DLQ */
@@ -49,6 +42,7 @@ export interface RetryCompletedContext extends DlqContext {
49
42
  } & Iterable<JobId>;
50
43
  completedJobsData: {
51
44
  get(id: JobId): Job | undefined;
45
+ delete(id: JobId): boolean;
52
46
  };
53
47
  jobResults: {
54
48
  delete(id: JobId): boolean;
@@ -3,8 +3,9 @@
3
3
  * Dead Letter Queue operations with auto-retry, metadata, and lifecycle management
4
4
  */
5
5
  import { MAX_TIMELINE_ENTRIES } from '../domain/types/job';
6
- import { scheduleNextRetry } from '../domain/types/dlq';
6
+ import { setDlqRetryState } from '../domain/types/dlq';
7
7
  import { shardIndex } from '../shared/hash';
8
+ export { processAutoRetry, retryDlqByFilter, retryDlqJob, retryDlqJobs, } from './dlqRetry';
8
9
  /** Get jobs from DLQ (backward compatible) */
9
10
  export function getDlqJobs(queue, ctx, count) {
10
11
  const idx = shardIndex(queue);
@@ -59,152 +60,6 @@ export function getDlqStats(queue, ctx) {
59
60
  }
60
61
  return stats;
61
62
  }
62
- /** Retry a single job from DLQ */
63
- export function retryDlqJob(queue, jobId, ctx) {
64
- const idx = shardIndex(queue);
65
- const shard = ctx.shards[idx];
66
- const now = Date.now();
67
- const entry = shard.removeFromDlq(queue, jobId);
68
- if (!entry)
69
- return null;
70
- // Delete from SQLite
71
- ctx.storage?.deleteDlqEntry(jobId);
72
- const job = entry.job;
73
- job.attempts = 0;
74
- job.runAt = now;
75
- job.stallCount = 0;
76
- job.lastHeartbeat = now;
77
- if (job.timeline.length < MAX_TIMELINE_ENTRIES) {
78
- job.timeline.push({ state: 'waiting', timestamp: now });
79
- }
80
- shard.getQueue(queue).push(job);
81
- const isDelayed = job.runAt > now;
82
- shard.incrementQueued(job.id, isDelayed, job.createdAt, queue, job.runAt);
83
- ctx.jobIndex.set(job.id, { type: 'queue', shardIdx: idx, queueName: queue });
84
- // Re-insert jobs row (deleted when job entered DLQ) so retry survives restart
85
- ctx.storage?.insertJob(job, true);
86
- return job;
87
- }
88
- /** Retry jobs from DLQ (backward compatible) */
89
- export function retryDlqJobs(queue, ctx, jobId, limit) {
90
- if (jobId) {
91
- return retryDlqJob(queue, jobId, ctx) ? 1 : 0;
92
- }
93
- // Bounded retry (#111-class: `retryJobs({ state:'failed', count })`). Retry
94
- // only the first `limit` DLQ entries, reusing the tested single-entry path so
95
- // the remaining entries stay in the DLQ (memory + SQLite) instead of the
96
- // clear-all fast path below wrongly draining the whole queue. Any provided
97
- // `limit` engages the bounded path; a negative/NaN/fractional cap is clamped
98
- // to a safe non-negative integer so it can never fall through to clear-all
99
- // (skeptic: `limit >= 0` let `-1`/`NaN` drain the entire DLQ). `undefined`
100
- // (no cap requested) still means "retry all" via the fast path below.
101
- if (limit !== undefined) {
102
- const cap = Number.isFinite(limit) && limit > 0 ? Math.floor(limit) : 0;
103
- const idx = shardIndex(queue);
104
- const shard = ctx.shards[idx];
105
- // Snapshot ids first: retryDlqJob mutates the DLQ as it goes.
106
- const ids = shard
107
- .getDlqEntries(queue)
108
- .slice(0, cap)
109
- .map((e) => e.job.id);
110
- let retried = 0;
111
- for (const id of ids) {
112
- if (retryDlqJob(queue, id, ctx))
113
- retried++;
114
- }
115
- return retried;
116
- }
117
- const idx = shardIndex(queue);
118
- const shard = ctx.shards[idx];
119
- const entries = shard.getDlqEntries(queue);
120
- const count = entries.length;
121
- // Clear all entries from memory
122
- shard.clearDlq(queue);
123
- // Clear from SQLite
124
- ctx.storage?.clearDlqQueue(queue);
125
- const now = Date.now();
126
- for (const entry of entries) {
127
- const job = entry.job;
128
- job.attempts = 0;
129
- job.runAt = now;
130
- job.stallCount = 0;
131
- job.lastHeartbeat = now;
132
- if (job.timeline.length < MAX_TIMELINE_ENTRIES) {
133
- job.timeline.push({ state: 'waiting', timestamp: now });
134
- }
135
- shard.getQueue(queue).push(job);
136
- const isDelayed = job.runAt > now;
137
- shard.incrementQueued(job.id, isDelayed, job.createdAt, queue, job.runAt);
138
- ctx.jobIndex.set(job.id, { type: 'queue', shardIdx: idx, queueName: queue });
139
- ctx.storage?.insertJob(job, true);
140
- }
141
- return count;
142
- }
143
- /** Retry jobs by filter */
144
- export function retryDlqByFilter(queue, ctx, filter) {
145
- const idx = shardIndex(queue);
146
- const shard = ctx.shards[idx];
147
- const entries = shard.getDlqFiltered(queue, filter);
148
- let count = 0;
149
- const now = Date.now();
150
- for (const entry of entries) {
151
- const removed = shard.removeFromDlq(queue, entry.job.id);
152
- if (!removed)
153
- continue;
154
- // Delete from SQLite
155
- ctx.storage?.deleteDlqEntry(entry.job.id);
156
- const job = entry.job;
157
- job.attempts = 0;
158
- job.runAt = now;
159
- job.stallCount = 0;
160
- job.lastHeartbeat = now;
161
- if (job.timeline.length < MAX_TIMELINE_ENTRIES) {
162
- job.timeline.push({ state: 'waiting', timestamp: now });
163
- }
164
- shard.getQueue(queue).push(job);
165
- const isDelayed = job.runAt > now;
166
- shard.incrementQueued(job.id, isDelayed, job.createdAt, queue, job.runAt);
167
- ctx.jobIndex.set(job.id, { type: 'queue', shardIdx: idx, queueName: queue });
168
- ctx.storage?.insertJob(job, true);
169
- count++;
170
- }
171
- return count;
172
- }
173
- /** Process auto-retry for a queue */
174
- export function processAutoRetry(queue, ctx) {
175
- const idx = shardIndex(queue);
176
- const shard = ctx.shards[idx];
177
- const config = shard.getDlqConfig(queue);
178
- if (!config.autoRetry)
179
- return 0;
180
- const now = Date.now();
181
- const entries = shard.getAutoRetryEntries(queue, now);
182
- let count = 0;
183
- for (const entry of entries) {
184
- // Update retry tracking
185
- scheduleNextRetry(entry, config);
186
- // Remove from DLQ
187
- const removed = shard.removeFromDlq(queue, entry.job.id);
188
- if (!removed)
189
- continue;
190
- // Re-queue job
191
- const job = entry.job;
192
- job.attempts = 0;
193
- job.runAt = now;
194
- job.stallCount = 0;
195
- job.lastHeartbeat = now;
196
- if (job.timeline.length < MAX_TIMELINE_ENTRIES) {
197
- job.timeline.push({ state: 'waiting', timestamp: now });
198
- }
199
- shard.getQueue(queue).push(job);
200
- const isDelayed = job.runAt > now;
201
- shard.incrementQueued(job.id, isDelayed, job.createdAt, queue, job.runAt);
202
- ctx.jobIndex.set(job.id, { type: 'queue', shardIdx: idx, queueName: queue });
203
- ctx.storage?.insertJob(job, true);
204
- count++;
205
- }
206
- return count;
207
- }
208
63
  /** Purge expired entries from DLQ */
209
64
  export function purgeExpiredDlq(queue, ctx) {
210
65
  const idx = shardIndex(queue);
@@ -290,22 +145,38 @@ export function retryCompletedJobs(queue, ctx, jobId, options = {}) {
290
145
  }
291
146
  /** Requeue a single completed job */
292
147
  function requeueCompletedJob(job, ctx) {
293
- job.attempts = 0;
294
- job.startedAt = null;
295
- job.completedAt = null;
296
- job.runAt = Date.now();
297
- job.progress = 0;
298
- if (job.timeline.length < MAX_TIMELINE_ENTRIES) {
299
- job.timeline.push({ state: 'waiting', timestamp: job.runAt });
148
+ const now = Date.now();
149
+ const timeline = [...job.timeline];
150
+ if (timeline.length < MAX_TIMELINE_ENTRIES) {
151
+ timeline.push({ state: 'waiting', timestamp: now });
300
152
  }
301
- const idx = shardIndex(job.queue);
153
+ const requeued = {
154
+ ...job,
155
+ attempts: 0,
156
+ startedAt: null,
157
+ completedAt: null,
158
+ runAt: now,
159
+ progress: 0,
160
+ progressMessage: null,
161
+ lastHeartbeat: now,
162
+ timeline,
163
+ };
164
+ setDlqRetryState(requeued, null);
165
+ // Commit the durable transition before publishing the new in-memory state.
166
+ // A SQLite failure therefore leaves the completed generation authoritative.
167
+ ctx.storage?.requeueCompletedJob(requeued);
168
+ const idx = shardIndex(requeued.queue);
302
169
  const shard = ctx.shards[idx];
303
- shard.getQueue(job.queue).push(job);
304
- shard.incrementQueued(job.id, false, job.createdAt, job.queue, job.runAt);
305
- ctx.jobIndex.set(job.id, { type: 'queue', shardIdx: idx, queueName: job.queue });
306
- ctx.completedJobs.delete(job.id);
307
- ctx.jobResults.delete(job.id);
308
- ctx.storage?.updateForRetry(job);
309
- shard.notify(job.queue);
170
+ shard.getQueue(requeued.queue).push(requeued);
171
+ shard.incrementQueued(requeued.id, false, requeued.createdAt, requeued.queue, requeued.runAt);
172
+ ctx.jobIndex.set(requeued.id, {
173
+ type: 'queue',
174
+ shardIdx: idx,
175
+ queueName: requeued.queue,
176
+ });
177
+ ctx.completedJobs.delete(requeued.id);
178
+ ctx.completedJobsData.delete(requeued.id);
179
+ ctx.jobResults.delete(requeued.id);
180
+ shard.notify(requeued.queue);
310
181
  return 1;
311
182
  }
@@ -0,0 +1,12 @@
1
+ /** DLQ manual and automatic retry transitions. */
2
+ import { type Job, type JobId } from '../domain/types/job';
3
+ import type { DlqFilter } from '../domain/types/dlq';
4
+ import type { DlqContext } from './dlqManager';
5
+ /** Retry a single job from DLQ and reset the automatic retry generation. */
6
+ export declare function retryDlqJob(queue: string, jobId: JobId, ctx: DlqContext): Job | null;
7
+ /** Retry jobs from DLQ, optionally bounded to the oldest `limit` entries. */
8
+ export declare function retryDlqJobs(queue: string, ctx: DlqContext, jobId?: JobId, limit?: number): number;
9
+ /** Retry all DLQ entries selected by a metadata filter. */
10
+ export declare function retryDlqByFilter(queue: string, ctx: DlqContext, filter: DlqFilter): number;
11
+ /** Dispatch due auto-retries while preserving their bounded retry chain. */
12
+ export declare function processAutoRetry(queue: string, ctx: DlqContext): number;
@@ -0,0 +1,97 @@
1
+ /** DLQ manual and automatic retry transitions. */
2
+ import { MAX_TIMELINE_ENTRIES } from '../domain/types/job';
3
+ import { retainDlqRetryState, scheduleNextRetry, setDlqRetryState } from '../domain/types/dlq';
4
+ import { shardIndex } from '../shared/hash';
5
+ function prepareRetry(job, now) {
6
+ job.attempts = 0;
7
+ job.runAt = now;
8
+ job.startedAt = null;
9
+ job.stallCount = 0;
10
+ job.lastHeartbeat = now;
11
+ if (job.timeline.length < MAX_TIMELINE_ENTRIES) {
12
+ job.timeline.push({ state: 'waiting', timestamp: now });
13
+ }
14
+ }
15
+ function enqueueRetry(queue, job, now, ctx) {
16
+ const idx = shardIndex(queue);
17
+ const shard = ctx.shards[idx];
18
+ prepareRetry(job, now);
19
+ shard.getQueue(queue).push(job);
20
+ shard.incrementQueued(job.id, job.runAt > now, job.createdAt, queue, job.runAt);
21
+ ctx.jobIndex.set(job.id, { type: 'queue', shardIdx: idx, queueName: queue });
22
+ ctx.storage?.requeueDlqJob(job);
23
+ }
24
+ /** Retry a single job from DLQ and reset the automatic retry generation. */
25
+ export function retryDlqJob(queue, jobId, ctx) {
26
+ const shard = ctx.shards[shardIndex(queue)];
27
+ const entry = shard.removeFromDlq(queue, jobId);
28
+ if (!entry)
29
+ return null;
30
+ setDlqRetryState(entry.job, null);
31
+ enqueueRetry(queue, entry.job, Date.now(), ctx);
32
+ return entry.job;
33
+ }
34
+ /** Retry jobs from DLQ, optionally bounded to the oldest `limit` entries. */
35
+ export function retryDlqJobs(queue, ctx, jobId, limit) {
36
+ if (jobId)
37
+ return retryDlqJob(queue, jobId, ctx) ? 1 : 0;
38
+ const shard = ctx.shards[shardIndex(queue)];
39
+ if (limit !== undefined) {
40
+ const cap = Number.isFinite(limit) && limit > 0 ? Math.floor(limit) : 0;
41
+ const ids = shard
42
+ .getDlqEntries(queue)
43
+ .slice(0, cap)
44
+ .map((entry) => entry.job.id);
45
+ let retried = 0;
46
+ for (const id of ids) {
47
+ if (retryDlqJob(queue, id, ctx))
48
+ retried++;
49
+ }
50
+ return retried;
51
+ }
52
+ const entries = [...shard.getDlqEntries(queue)];
53
+ shard.clearDlq(queue);
54
+ ctx.storage?.clearDlqQueue(queue);
55
+ const now = Date.now();
56
+ for (const entry of entries) {
57
+ setDlqRetryState(entry.job, null);
58
+ enqueueRetry(queue, entry.job, now, ctx);
59
+ }
60
+ return entries.length;
61
+ }
62
+ /** Retry all DLQ entries selected by a metadata filter. */
63
+ export function retryDlqByFilter(queue, ctx, filter) {
64
+ const shard = ctx.shards[shardIndex(queue)];
65
+ const entries = [...shard.getDlqFiltered(queue, filter)];
66
+ const now = Date.now();
67
+ let retried = 0;
68
+ for (const entry of entries) {
69
+ const removed = shard.removeFromDlq(queue, entry.job.id);
70
+ if (!removed)
71
+ continue;
72
+ setDlqRetryState(removed.job, null);
73
+ enqueueRetry(queue, removed.job, now, ctx);
74
+ retried++;
75
+ }
76
+ return retried;
77
+ }
78
+ /** Dispatch due auto-retries while preserving their bounded retry chain. */
79
+ export function processAutoRetry(queue, ctx) {
80
+ const shard = ctx.shards[shardIndex(queue)];
81
+ const config = shard.getDlqConfig(queue);
82
+ if (!config.autoRetry)
83
+ return 0;
84
+ const now = Date.now();
85
+ const entries = [...shard.getAutoRetryEntries(queue, now)];
86
+ let retried = 0;
87
+ for (const entry of entries) {
88
+ const removed = shard.removeFromDlq(queue, entry.job.id);
89
+ if (!removed)
90
+ continue;
91
+ scheduleNextRetry(removed, config);
92
+ retainDlqRetryState(removed.job, removed);
93
+ enqueueRetry(queue, removed.job, now, ctx);
94
+ retried++;
95
+ }
96
+ return retried;
97
+ }
@@ -3,6 +3,7 @@
3
3
  * Handles BullMQ-style lock-based job ownership
4
4
  */
5
5
  import { isLockExpired } from '../domain/types/job';
6
+ import { recordJobFailureAttempt } from '../domain/types/dlq';
6
7
  import { shardIndex, processingShardIndex } from '../shared/hash';
7
8
  import { withWriteLock } from '../shared/lock';
8
9
  // Re-export lock operations
@@ -59,6 +60,13 @@ export async function checkExpiredLocks(ctx) {
59
60
  for (const [procIdx, items] of procMap) {
60
61
  await withWriteLock(ctx.processingLocks[procIdx], async () => {
61
62
  for (const { jobId, lock, job } of items) {
63
+ const currentJob = ctx.processingShards[procIdx].get(jobId);
64
+ const currentLock = ctx.jobLocks.get(jobId);
65
+ if (currentJob !== job ||
66
+ currentLock !== lock ||
67
+ !isLockExpired(currentLock, Date.now())) {
68
+ continue;
69
+ }
62
70
  processExpiredLockInner(jobId, lock, job, shardIdx, procIdx, ctx, now);
63
71
  }
64
72
  });
@@ -76,11 +84,13 @@ function processExpiredLockInner(jobId, lock, job, shardIdx, procIdx, ctx, now)
76
84
  const queue = shard.getQueue(job.queue);
77
85
  // Remove from processing
78
86
  ctx.processingShards[procIdx].delete(jobId);
87
+ ctx.timeoutScheduler.cancel(jobId);
79
88
  // Discard cron jobs with preventOverlap instead of re-queuing (#75).
80
89
  // During graceful shutdown, heartbeats stop and the lock expires before
81
90
  // the job finishes. Re-queuing would cause "starts right away on reconnect".
82
91
  // The cron scheduler will re-create the job at the next scheduled tick.
83
92
  if (job.uniqueKey?.startsWith('cron:')) {
93
+ ctx.retiredCronLeaseTokens.set(jobId, lock.token);
84
94
  shard.releaseJobResources(job.queue, job.uniqueKey, job.groupId, job.id);
85
95
  ctx.jobIndex.delete(jobId);
86
96
  ctx.storage?.deleteJob(jobId);
@@ -89,7 +99,6 @@ function processExpiredLockInner(jobId, lock, job, shardIdx, procIdx, ctx, now)
89
99
  }
90
100
  // Increment attempts and reset state
91
101
  job.attempts++;
92
- job.startedAt = null;
93
102
  job.lastHeartbeat = now;
94
103
  job.stallCount++;
95
104
  // A lost lock consumes both retry budgets. Never requeue beyond either bound.
@@ -128,6 +137,7 @@ function handleRecoveryBoundExceeded(opts) {
128
137
  const entry = shard.addToDlq(job, attemptsExhausted ? "max_attempts_exceeded" /* FailureReason.MaxAttemptsExceeded */ : "stalled" /* FailureReason.Stalled */, attemptsExhausted
129
138
  ? `Lock expired at max attempts (${job.maxAttempts})`
130
139
  : `Lock expired after ${lock.renewalCount} renewals`);
140
+ job.startedAt = null;
131
141
  ctx.jobIndex.set(jobId, { type: 'dlq', queueName: job.queue });
132
142
  // Persist the DLQ move like the sibling paths (ack.moveFailedJobToDlq,
133
143
  // stallDetection.moveStalliedJobToDlq, backgroundTasks startup-recovery).
@@ -136,6 +146,13 @@ function handleRecoveryBoundExceeded(opts) {
136
146
  // surviving row and throws `UNIQUE constraint failed: jobs.id` (#97).
137
147
  ctx.storage?.saveDlqEntry(entry);
138
148
  ctx.storage?.deleteJob(jobId);
149
+ ctx.eventsManager.broadcast({
150
+ eventType: "stalled" /* EventType.Stalled */,
151
+ jobId,
152
+ queue: job.queue,
153
+ timestamp: now,
154
+ data: { stallCount: job.stallCount, action: "move_to_dlq" /* StallAction.MoveToDlq */ },
155
+ });
139
156
  ctx.eventsManager.broadcast({
140
157
  eventType: "failed" /* EventType.Failed */,
141
158
  jobId,
@@ -150,6 +167,8 @@ function handleRecoveryBoundExceeded(opts) {
150
167
  function requeueExpiredJob(opts) {
151
168
  const { jobId, job, queue, idx, ctx, now } = opts;
152
169
  const shard = ctx.shards[idx];
170
+ recordJobFailureAttempt(job, "stalled" /* FailureReason.Stalled */, 'Lock expired', now);
171
+ job.startedAt = null;
153
172
  // Release the concurrency slot (+group+uniqueKey) acquired at pull before
154
173
  // re-pushing — otherwise the slot leaks and the queue wedges (mirrors
155
174
  // stallDetection.retryStalliedJob).
@@ -158,6 +177,7 @@ function requeueExpiredJob(opts) {
158
177
  const isDelayed = job.runAt > now;
159
178
  shard.incrementQueued(jobId, isDelayed, job.createdAt, job.queue, job.runAt);
160
179
  ctx.jobIndex.set(jobId, { type: 'queue', shardIdx: idx, queueName: job.queue });
180
+ ctx.storage?.updateForRetry(job);
161
181
  shard.notify(job.queue);
162
182
  ctx.eventsManager.broadcast({
163
183
  eventType: "stalled" /* EventType.Stalled */,
@@ -10,9 +10,22 @@ export function createLock(jobId, owner, ctx, ttl = DEFAULT_LOCK_TTL) {
10
10
  const loc = ctx.jobIndex.get(jobId);
11
11
  if (loc?.type !== 'processing')
12
12
  return null;
13
- // Check if lock already exists (shouldn't happen, but defensive)
14
- if (ctx.jobLocks.has(jobId)) {
15
- return null;
13
+ const existing = ctx.jobLocks.get(jobId);
14
+ if (existing) {
15
+ const job = ctx.processingShards[loc.shardIdx].get(jobId);
16
+ const isNewGeneration = job?.startedAt !== null && job?.startedAt !== undefined && job.startedAt > existing.createdAt;
17
+ if (!isNewGeneration)
18
+ return null;
19
+ // Stall retry deliberately leaves the previous lease as a stale-outcome
20
+ // guard. Once that job is pulled again, replace the lease and detach the
21
+ // old connection before the new connection registers ownership.
22
+ ctx.jobLocks.delete(jobId);
23
+ for (const [clientId, jobs] of ctx.clientJobs) {
24
+ if (!jobs.delete(jobId))
25
+ continue;
26
+ if (jobs.size === 0)
27
+ ctx.clientJobs.delete(clientId);
28
+ }
16
29
  }
17
30
  const lock = createJobLock(jobId, owner, ttl);
18
31
  ctx.jobLocks.set(jobId, lock);
@@ -0,0 +1,8 @@
1
+ import type { JobId } from '../../../domain/types/job';
2
+ import type { AckContext, CompletionOptions } from '../../types/ack';
3
+ export declare function ackJobBatch(jobIds: JobId[], ctx: AckContext, leaseTokens?: Array<string | undefined>): Promise<boolean[]>;
4
+ export declare function ackJobBatchWithResults(items: Array<{
5
+ id: JobId;
6
+ result: unknown;
7
+ token?: string;
8
+ } & CompletionOptions>, ctx: AckContext): Promise<boolean[]>;
@@ -0,0 +1,64 @@
1
+ import { extractJobs, extractJobsWithResults, finalizeBatchAck, groupByProcShard, groupByQueueShard, groupItemsByProcShard, releaseResources, } from '../ackHelpers';
2
+ import { ackJob } from './completion';
3
+ function notifyReleasedQueues(shard, jobs) {
4
+ const releasedByQueue = new Map();
5
+ for (const job of jobs) {
6
+ releasedByQueue.set(job.queue, (releasedByQueue.get(job.queue) ?? 0) + 1);
7
+ }
8
+ for (const [queue, count] of releasedByQueue)
9
+ shard.notifyBatch(queue, count);
10
+ }
11
+ function alignApplied(jobIds, appliedIds) {
12
+ const counts = new Map();
13
+ for (const id of appliedIds)
14
+ counts.set(id, (counts.get(id) ?? 0) + 1);
15
+ return jobIds.map((id) => {
16
+ const remaining = counts.get(id) ?? 0;
17
+ if (remaining === 0)
18
+ return false;
19
+ counts.set(id, remaining - 1);
20
+ return true;
21
+ });
22
+ }
23
+ export async function ackJobBatch(jobIds, ctx, leaseTokens) {
24
+ if (jobIds.length === 0)
25
+ return [];
26
+ if (jobIds.length <= 4) {
27
+ return Promise.all(jobIds.map((id, index) => ackJob(id, undefined, ctx, { leaseToken: leaseTokens?.[index] })));
28
+ }
29
+ const batchContext = {
30
+ processingShards: ctx.processingShards,
31
+ processingLocks: ctx.processingLocks,
32
+ shards: ctx.shards,
33
+ shardLocks: ctx.shardLocks,
34
+ };
35
+ const byProcessingShard = groupByProcShard(jobIds);
36
+ const extractedJobs = await extractJobs(byProcessingShard, batchContext);
37
+ const byQueueShard = groupByQueueShard(extractedJobs);
38
+ await releaseResources(byQueueShard, batchContext);
39
+ for (const [index, jobs] of byQueueShard)
40
+ notifyReleasedQueues(ctx.shards[index], jobs);
41
+ finalizeBatchAck(extractedJobs, ctx, false);
42
+ return alignApplied(jobIds, extractedJobs.map((entry) => entry.id));
43
+ }
44
+ export async function ackJobBatchWithResults(items, ctx) {
45
+ if (items.length === 0)
46
+ return [];
47
+ if (items.length <= 4) {
48
+ return Promise.all(items.map((item) => ackJob(item.id, item.result, ctx, { ...item, leaseToken: item.token })));
49
+ }
50
+ const batchContext = {
51
+ processingShards: ctx.processingShards,
52
+ processingLocks: ctx.processingLocks,
53
+ shards: ctx.shards,
54
+ shardLocks: ctx.shardLocks,
55
+ };
56
+ const byProcessingShard = groupItemsByProcShard(items);
57
+ const extractedJobs = await extractJobsWithResults(byProcessingShard, batchContext);
58
+ const byQueueShard = groupByQueueShard(extractedJobs);
59
+ await releaseResources(byQueueShard, batchContext);
60
+ for (const [index, jobs] of byQueueShard)
61
+ notifyReleasedQueues(ctx.shards[index], jobs);
62
+ finalizeBatchAck(extractedJobs, ctx, true);
63
+ return alignApplied(items.map((item) => item.id), extractedJobs.map((entry) => entry.id));
64
+ }
@@ -0,0 +1,3 @@
1
+ import { type JobId } from '../../../domain/types/job';
2
+ import type { AckContext, CompletionOptions } from '../../types/ack';
3
+ export declare function ackJob(jobId: JobId, result: unknown, ctx: AckContext, options?: CompletionOptions): Promise<boolean>;
@@ -0,0 +1,74 @@
1
+ import { setDlqRetryState } from '../../../domain/types/dlq';
2
+ import { MAX_TIMELINE_ENTRIES } from '../../../domain/types/job';
3
+ import { processingShardIndex, shardIndex } from '../../../shared/hash';
4
+ import { withWriteLock } from '../../../shared/lock';
5
+ import { commitRemovedCompletion } from '../../dependencyCompletions';
6
+ import { latencyTracker } from '../../latencyTracker';
7
+ import { throughputTracker } from '../../throughputTracker';
8
+ export async function ackJob(jobId, result, ctx, options = {}) {
9
+ const startNs = Bun.nanoseconds();
10
+ const processingIndex = processingShardIndex(jobId);
11
+ const job = await withWriteLock(ctx.processingLocks[processingIndex], () => {
12
+ const job = ctx.processingShards[processingIndex].get(jobId);
13
+ if (job)
14
+ ctx.processingShards[processingIndex].delete(jobId);
15
+ return job;
16
+ });
17
+ if (!job)
18
+ return false;
19
+ const index = shardIndex(job.queue);
20
+ await withWriteLock(ctx.shardLocks[index], () => {
21
+ const shard = ctx.shards[index];
22
+ shard.releaseJobResources(job.queue, job.uniqueKey, job.groupId, job.id);
23
+ shard.notify(job.queue);
24
+ });
25
+ if (job.customId && ctx.customIdMap)
26
+ ctx.customIdMap.delete(job.customId);
27
+ setDlqRetryState(job, null);
28
+ if (!(job.removeOnComplete || options.removeOnComplete === true)) {
29
+ const now = Date.now();
30
+ job.completedAt = now;
31
+ if (job.timeline.length < MAX_TIMELINE_ENTRIES) {
32
+ job.timeline.push({ state: 'completed', timestamp: now });
33
+ }
34
+ ctx.completedJobs.add(jobId);
35
+ ctx.completedJobsData.set(jobId, job);
36
+ if (result !== undefined) {
37
+ ctx.jobResults.set(jobId, result);
38
+ ctx.storage?.storeResult(jobId, result);
39
+ }
40
+ ctx.jobIndex.set(jobId, { type: 'completed', queueName: job.queue });
41
+ ctx.storage?.markCompleted(jobId, now, job.timeline);
42
+ }
43
+ else {
44
+ commitRemovedCompletion(job, ctx);
45
+ ctx.jobIndex.delete(jobId);
46
+ }
47
+ if (result !== undefined)
48
+ ctx.dependencyResults.retain(jobId, result);
49
+ ctx.dependencyResults.releaseConsumer(jobId);
50
+ ctx.totalCompleted.value++;
51
+ if (ctx.perQueueMetrics) {
52
+ const queueMetrics = ctx.perQueueMetrics.get(job.queue);
53
+ if (queueMetrics)
54
+ queueMetrics.totalCompleted++;
55
+ else
56
+ ctx.perQueueMetrics.set(job.queue, { totalCompleted: 1n, totalFailed: 0n });
57
+ }
58
+ throughputTracker.completeRate.increment();
59
+ ctx.broadcast({
60
+ eventType: 'completed',
61
+ queue: job.queue,
62
+ jobId,
63
+ timestamp: Date.now(),
64
+ data: result,
65
+ });
66
+ ctx.onJobCompleted(jobId);
67
+ if (job.repeat && ctx.onRepeat) {
68
+ const shouldRepeat = job.repeat.limit === undefined || job.repeat.count < job.repeat.limit;
69
+ if (shouldRepeat)
70
+ ctx.onRepeat(job);
71
+ }
72
+ latencyTracker.ack.observe((Bun.nanoseconds() - startNs) / 1e6);
73
+ return true;
74
+ }
@@ -0,0 +1,3 @@
1
+ import { type JobId } from '../../../domain/types/job';
2
+ import type { AckContext, FailJobOptions } from '../../types/ack';
3
+ export declare function failJob(jobId: JobId, error: string | undefined, ctx: AckContext, options?: FailJobOptions): Promise<void>;