bunqueue 2.8.53 → 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 (747) 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 -438
  19. package/dist/application/cleanupTasks.js +2 -1
  20. package/dist/application/clientTracking.js +3 -1
  21. package/dist/application/contextFactory.d.ts +13 -90
  22. package/dist/application/contextFactory.js +9 -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 +9 -9
  26. package/dist/application/dlqManager.js +49 -167
  27. package/dist/application/dlqRetry.d.ts +12 -0
  28. package/dist/application/dlqRetry.js +97 -0
  29. package/dist/application/lockManager.js +24 -4
  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 +11 -4
  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 +50 -11
  45. package/dist/application/operations/jobMoveOperations.js +3 -3
  46. package/dist/application/operations/jobStateTransitions.d.ts +1 -1
  47. package/dist/application/operations/jobStateTransitions.js +16 -2
  48. package/dist/application/operations/parentLink.d.ts +36 -0
  49. package/dist/application/operations/parentLink.js +153 -0
  50. package/dist/application/operations/parentLinkInput.d.ts +8 -0
  51. package/dist/application/operations/parentLinkInput.js +23 -0
  52. package/dist/application/operations/push.d.ts +5 -44
  53. package/dist/application/operations/push.js +62 -152
  54. package/dist/application/operations/pushAdmission.d.ts +32 -0
  55. package/dist/application/operations/pushAdmission.js +38 -0
  56. package/dist/application/operations/pushBatch.d.ts +4 -0
  57. package/dist/application/operations/pushBatch.js +136 -0
  58. package/dist/application/operations/pushContext.d.ts +39 -0
  59. package/dist/application/operations/pushContext.js +1 -0
  60. package/dist/application/operations/pushDeduplication.d.ts +42 -0
  61. package/dist/application/operations/pushDeduplication.js +131 -0
  62. package/dist/application/operations/pushInsert.d.ts +13 -1
  63. package/dist/application/operations/pushInsert.js +33 -17
  64. package/dist/application/operations/pushLocks.js +13 -9
  65. package/dist/application/operations/query/collect.d.ts +12 -0
  66. package/dist/application/operations/query/collect.js +118 -0
  67. package/dist/application/operations/query/jobLookup.d.ts +9 -0
  68. package/dist/application/operations/query/jobLookup.js +110 -0
  69. package/dist/application/operations/query/pagination.d.ts +8 -0
  70. package/dist/application/operations/query/pagination.js +90 -0
  71. package/dist/application/operations/query/state.d.ts +4 -0
  72. package/dist/application/operations/query/state.js +63 -0
  73. package/dist/application/operations/queryOperations.d.ts +5 -50
  74. package/dist/application/operations/queryOperations.js +4 -474
  75. package/dist/application/queue-manager/ack.d.ts +23 -0
  76. package/dist/application/queue-manager/ack.js +242 -0
  77. package/dist/application/queue-manager/configuration.d.ts +27 -0
  78. package/dist/application/queue-manager/configuration.js +84 -0
  79. package/dist/application/queue-manager/context.d.ts +5 -0
  80. package/dist/application/queue-manager/context.js +61 -0
  81. package/dist/application/queue-manager/control.d.ts +17 -0
  82. package/dist/application/queue-manager/control.js +133 -0
  83. package/dist/application/queue-manager/delivery.d.ts +32 -0
  84. package/dist/application/queue-manager/delivery.js +143 -0
  85. package/dist/application/queue-manager/dependencies.d.ts +8 -0
  86. package/dist/application/queue-manager/dependencies.js +127 -0
  87. package/dist/application/queue-manager/dependency-runtime.d.ts +8 -0
  88. package/dist/application/queue-manager/dependency-runtime.js +40 -0
  89. package/dist/application/queue-manager/flow-failures.d.ts +18 -0
  90. package/dist/application/queue-manager/flow-failures.js +107 -0
  91. package/dist/application/queue-manager/flow-options.d.ts +8 -0
  92. package/dist/application/queue-manager/flow-options.js +129 -0
  93. package/dist/application/queue-manager/job-management.d.ts +17 -0
  94. package/dist/application/queue-manager/job-management.js +100 -0
  95. package/dist/application/queue-manager/lifecycle.d.ts +4 -0
  96. package/dist/application/queue-manager/lifecycle.js +41 -0
  97. package/dist/application/queue-manager/limits.d.ts +41 -0
  98. package/dist/application/queue-manager/limits.js +108 -0
  99. package/dist/application/queue-manager/locks.d.ts +21 -0
  100. package/dist/application/queue-manager/locks.js +59 -0
  101. package/dist/application/queue-manager/observability.d.ts +16 -0
  102. package/dist/application/queue-manager/observability.js +44 -0
  103. package/dist/application/queue-manager/queries.d.ts +17 -0
  104. package/dist/application/queue-manager/queries.js +118 -0
  105. package/dist/application/queue-manager/repeat.d.ts +4 -0
  106. package/dist/application/queue-manager/repeat.js +26 -0
  107. package/dist/application/queue-manager/services.d.ts +19 -0
  108. package/dist/application/queue-manager/services.js +80 -0
  109. package/dist/application/queue-manager/state.d.ts +92 -0
  110. package/dist/application/queue-manager/state.js +144 -0
  111. package/dist/application/queue-manager/stats.d.ts +28 -0
  112. package/dist/application/queue-manager/stats.js +52 -0
  113. package/dist/application/queueManager.d.ts +4 -380
  114. package/dist/application/queueManager.js +3 -1880
  115. package/dist/application/queueTelemetryJournal.d.ts +20 -0
  116. package/dist/application/queueTelemetryJournal.js +133 -0
  117. package/dist/application/repeatJobs.d.ts +7 -0
  118. package/dist/application/repeatJobs.js +132 -0
  119. package/dist/application/stallDetection.js +9 -4
  120. package/dist/application/types/ack.d.ts +132 -0
  121. package/dist/application/types/ack.js +1 -0
  122. package/dist/application/types/background.d.ts +18 -0
  123. package/dist/application/types/background.js +1 -0
  124. package/dist/application/types/config.d.ts +37 -0
  125. package/dist/application/types/config.js +15 -0
  126. package/dist/application/types/contextFactory.d.ts +83 -0
  127. package/dist/application/types/contextFactory.js +1 -0
  128. package/dist/application/types/contexts.d.ts +110 -0
  129. package/dist/application/types/contexts.js +1 -0
  130. package/dist/application/types/index.d.ts +7 -0
  131. package/dist/application/types/index.js +1 -0
  132. package/dist/application/types/query.d.ts +23 -0
  133. package/dist/application/types/query.js +1 -0
  134. package/dist/application/types/queueManager.d.ts +94 -0
  135. package/dist/application/types/queueManager.js +1 -0
  136. package/dist/cli/commandRouter.d.ts +1 -1
  137. package/dist/cli/commands/core.js +1 -0
  138. package/dist/cli/output/collections.d.ts +8 -0
  139. package/dist/cli/output/collections.js +131 -0
  140. package/dist/cli/output/jobs.d.ts +2 -0
  141. package/dist/cli/output/jobs.js +61 -0
  142. package/dist/cli/output/style.d.ts +14 -0
  143. package/dist/cli/output/style.js +28 -0
  144. package/dist/cli/output/success.d.ts +1 -0
  145. package/dist/cli/output/success.js +108 -0
  146. package/dist/cli/output.d.ts +1 -6
  147. package/dist/cli/output.js +7 -395
  148. package/dist/client/bunqueue/dlqRateLimit.d.ts +8 -0
  149. package/dist/client/bunqueue/dlqRateLimit.js +24 -0
  150. package/dist/client/bunqueue/runtime.d.ts +35 -0
  151. package/dist/client/bunqueue/runtime.js +138 -0
  152. package/dist/client/bunqueue.d.ts +19 -34
  153. package/dist/client/bunqueue.js +45 -166
  154. package/dist/client/dlqConversion.d.ts +5 -0
  155. package/dist/client/dlqConversion.js +28 -0
  156. package/dist/client/events.d.ts +7 -56
  157. package/dist/client/events.js +38 -15
  158. package/dist/client/flow.d.ts +6 -12
  159. package/dist/client/flow.js +16 -34
  160. package/dist/client/flowJobDependencies.js +3 -1
  161. package/dist/client/flowJobFactory.d.ts +9 -1
  162. package/dist/client/flowJobFactory.js +25 -9
  163. package/dist/client/flowJobMoveMethods.d.ts +5 -5
  164. package/dist/client/flowJobMoveMethods.js +37 -17
  165. package/dist/client/flowLegacyPlan.js +22 -8
  166. package/dist/client/flowOptions.d.ts +1 -1
  167. package/dist/client/flowOptions.js +2 -1
  168. package/dist/client/flowPlan.js +2 -3
  169. package/dist/client/flowPush.d.ts +1 -0
  170. package/dist/client/flowPush.js +5 -1
  171. package/dist/client/flowReader.js +5 -5
  172. package/dist/client/flowResults.d.ts +11 -0
  173. package/dist/client/flowResults.js +42 -0
  174. package/dist/client/index.d.ts +3 -1
  175. package/dist/client/jobConversion.d.ts +3 -7
  176. package/dist/client/jobConversion.js +36 -33
  177. package/dist/client/jobConversionHelpers.d.ts +19 -3
  178. package/dist/client/jobConversionHelpers.js +20 -16
  179. package/dist/client/jobConversionTypes.d.ts +8 -0
  180. package/dist/client/jobDeduplication.d.ts +6 -0
  181. package/dist/client/jobDeduplication.js +14 -0
  182. package/dist/client/jobHelpers.d.ts +7 -2
  183. package/dist/client/jobHelpers.js +16 -8
  184. package/dist/client/queue/bullmqCompat.d.ts +18 -8
  185. package/dist/client/queue/bullmqCompat.js +39 -71
  186. package/dist/client/queue/deduplication.d.ts +2 -0
  187. package/dist/client/queue/deduplication.js +20 -11
  188. package/dist/client/queue/dlq.d.ts +11 -6
  189. package/dist/client/queue/dlq.js +57 -16
  190. package/dist/client/queue/dlqJobMethods.d.ts +9 -0
  191. package/dist/client/queue/dlqJobMethods.js +177 -0
  192. package/dist/client/queue/dlqOps.d.ts +2 -1
  193. package/dist/client/queue/dlqOps.js +4 -10
  194. package/dist/client/queue/dlqStats.d.ts +3 -0
  195. package/dist/client/queue/dlqStats.js +21 -0
  196. package/dist/client/queue/job-proxy/dependencies.d.ts +9 -0
  197. package/dist/client/queue/job-proxy/dependencies.js +67 -0
  198. package/dist/client/queue/job-proxy/reflection.d.ts +2 -0
  199. package/dist/client/queue/job-proxy/reflection.js +18 -0
  200. package/dist/client/queue/job-proxy/simple.d.ts +3 -0
  201. package/dist/client/queue/job-proxy/simple.js +316 -0
  202. package/dist/client/queue/job-proxy/tcp.d.ts +4 -0
  203. package/dist/client/queue/job-proxy/tcp.js +191 -0
  204. package/dist/client/queue/jobMetadata.d.ts +10 -0
  205. package/dist/client/queue/jobMetadata.js +24 -0
  206. package/dist/client/queue/jobMove.d.ts +4 -4
  207. package/dist/client/queue/jobMove.js +87 -24
  208. package/dist/client/queue/jobProxy.d.ts +4 -50
  209. package/dist/client/queue/jobProxy.js +3 -511
  210. package/dist/client/queue/operations/add/bulk.d.ts +7 -0
  211. package/dist/client/queue/operations/add/bulk.js +129 -0
  212. package/dist/client/queue/operations/add/payload.d.ts +24 -0
  213. package/dist/client/queue/operations/add/payload.js +85 -0
  214. package/dist/client/queue/operations/add/single.d.ts +3 -0
  215. package/dist/client/queue/operations/add/single.js +107 -0
  216. package/dist/client/queue/operations/add.d.ts +2 -47
  217. package/dist/client/queue/operations/add.js +2 -347
  218. package/dist/client/queue/operations/index.d.ts +1 -0
  219. package/dist/client/queue/operations/index.js +1 -0
  220. package/dist/client/queue/operations/management.d.ts +0 -4
  221. package/dist/client/queue/operations/management.js +35 -6
  222. package/dist/client/queue/operations/query.d.ts +1 -20
  223. package/dist/client/queue/operations/query.js +38 -116
  224. package/dist/client/queue/operations/queryStates.d.ts +13 -0
  225. package/dist/client/queue/operations/queryStates.js +32 -0
  226. package/dist/client/queue/operations/queryTcpPages.d.ts +14 -0
  227. package/dist/client/queue/operations/queryTcpPages.js +40 -0
  228. package/dist/client/queue/queue.d.ts +6 -189
  229. package/dist/client/queue/queue.js +6 -547
  230. package/dist/client/queue/rateLimit.d.ts +4 -4
  231. package/dist/client/queue/rateLimit.js +17 -8
  232. package/dist/client/queue/runtime/compatibility.d.ts +13 -0
  233. package/dist/client/queue/runtime/compatibility.js +38 -0
  234. package/dist/client/queue/runtime/configuration.d.ts +42 -0
  235. package/dist/client/queue/runtime/configuration.js +109 -0
  236. package/dist/client/queue/runtime/connection.d.ts +6 -0
  237. package/dist/client/queue/runtime/connection.js +16 -0
  238. package/dist/client/queue/runtime/control.d.ts +41 -0
  239. package/dist/client/queue/runtime/control.js +87 -0
  240. package/dist/client/queue/runtime/queries.d.ts +48 -0
  241. package/dist/client/queue/runtime/queries.js +95 -0
  242. package/dist/client/queue/runtime/scheduling.d.ts +33 -0
  243. package/dist/client/queue/runtime/scheduling.js +56 -0
  244. package/dist/client/queue/runtime/state.d.ts +96 -0
  245. package/dist/client/queue/runtime/state.js +149 -0
  246. package/dist/client/queue/scheduler.d.ts +2 -5
  247. package/dist/client/queue/scheduler.js +25 -23
  248. package/dist/client/queue/schedulerPagination.d.ts +7 -0
  249. package/dist/client/queue/schedulerPagination.js +10 -0
  250. package/dist/client/queue/types/add.d.ts +40 -0
  251. package/dist/client/queue/types/add.js +1 -0
  252. package/dist/client/queue/types/contexts.d.ts +33 -0
  253. package/dist/client/queue/types/contexts.js +5 -0
  254. package/dist/client/queue/types/index.d.ts +3 -0
  255. package/dist/client/queue/types/index.js +1 -0
  256. package/dist/client/queue/types/job.d.ts +50 -0
  257. package/dist/client/queue/types/job.js +1 -0
  258. package/dist/client/queue/types/runtime.d.ts +35 -0
  259. package/dist/client/queue/types/runtime.js +1 -0
  260. package/dist/client/queue/workers.d.ts +16 -8
  261. package/dist/client/queue/workers.js +42 -16
  262. package/dist/client/queue-events/tcpSubscription.d.ts +23 -0
  263. package/dist/client/queue-events/tcpSubscription.js +99 -0
  264. package/dist/client/queueGroup.d.ts +11 -0
  265. package/dist/client/queueGroup.js +28 -1
  266. package/dist/client/sandboxed/queueOps.d.ts +2 -2
  267. package/dist/client/sandboxed/queueOps.js +32 -5
  268. package/dist/client/sandboxed/runtime/dispatch.d.ts +13 -0
  269. package/dist/client/sandboxed/runtime/dispatch.js +186 -0
  270. package/dist/client/sandboxed/runtime/lifecycle.d.ts +20 -0
  271. package/dist/client/sandboxed/runtime/lifecycle.js +95 -0
  272. package/dist/client/sandboxed/runtime/log.d.ts +1 -0
  273. package/dist/client/sandboxed/runtime/log.js +15 -0
  274. package/dist/client/sandboxed/runtime/pool.d.ts +11 -0
  275. package/dist/client/sandboxed/runtime/pool.js +121 -0
  276. package/dist/client/sandboxed/runtime/recovery.d.ts +11 -0
  277. package/dist/client/sandboxed/runtime/recovery.js +122 -0
  278. package/dist/client/sandboxed/runtime/state.d.ts +39 -0
  279. package/dist/client/sandboxed/runtime/state.js +59 -0
  280. package/dist/client/sandboxed/types/index.d.ts +2 -0
  281. package/dist/client/sandboxed/types/index.js +1 -0
  282. package/dist/client/sandboxed/types/options.d.ts +27 -0
  283. package/dist/client/sandboxed/types/options.js +1 -0
  284. package/dist/client/sandboxed/types/process.d.ts +30 -0
  285. package/dist/client/sandboxed/types/process.js +1 -0
  286. package/dist/client/sandboxed/worker.d.ts +3 -85
  287. package/dist/client/sandboxed/worker.js +3 -557
  288. package/dist/client/sandboxed/wrapper.js +1 -0
  289. package/dist/client/tcp/client.d.ts +5 -112
  290. package/dist/client/tcp/client.js +5 -481
  291. package/dist/client/tcp/commandQueue.d.ts +23 -0
  292. package/dist/client/tcp/commandQueue.js +89 -0
  293. package/dist/client/tcp/connection.d.ts +4 -85
  294. package/dist/client/tcp/connection.js +3 -315
  295. package/dist/client/tcp/errors.d.ts +6 -0
  296. package/dist/client/tcp/errors.js +18 -0
  297. package/dist/client/tcp/runtime/commands.d.ts +9 -0
  298. package/dist/client/tcp/runtime/commands.js +124 -0
  299. package/dist/client/tcp/runtime/connectivity.d.ts +13 -0
  300. package/dist/client/tcp/runtime/connectivity.js +77 -0
  301. package/dist/client/tcp/runtime/health.d.ts +14 -0
  302. package/dist/client/tcp/runtime/health.js +127 -0
  303. package/dist/client/tcp/runtime/lifecycle.d.ts +8 -0
  304. package/dist/client/tcp/runtime/lifecycle.js +32 -0
  305. package/dist/client/tcp/runtime/state.d.ts +50 -0
  306. package/dist/client/tcp/runtime/state.js +45 -0
  307. package/dist/client/tcp/transport.d.ts +18 -0
  308. package/dist/client/tcp/transport.js +158 -0
  309. package/dist/client/tcp/types/command.d.ts +9 -0
  310. package/dist/client/tcp/types/command.js +1 -0
  311. package/dist/client/tcp/types/connection.d.ts +31 -0
  312. package/dist/client/tcp/types/connection.js +17 -0
  313. package/dist/client/tcp/types/index.d.ts +5 -0
  314. package/dist/client/tcp/types/index.js +1 -0
  315. package/dist/client/tcp/types/socket.d.ts +8 -0
  316. package/dist/client/tcp/types/socket.js +1 -0
  317. package/dist/client/tcp/types/tls.d.ts +4 -0
  318. package/dist/client/tcp/types/tls.js +1 -0
  319. package/dist/client/tcp/types.d.ts +2 -106
  320. package/dist/client/tcp/types.js +2 -22
  321. package/dist/client/types/connection.d.ts +29 -0
  322. package/dist/client/types/connection.js +1 -0
  323. package/dist/client/types/dlq.d.ts +45 -0
  324. package/dist/client/types/dlq.js +1 -0
  325. package/dist/client/types/events.d.ts +54 -0
  326. package/dist/client/types/events.js +1 -0
  327. package/dist/client/types/flow.d.ts +10 -0
  328. package/dist/client/types/flow.js +1 -0
  329. package/dist/client/types/index.d.ts +10 -0
  330. package/dist/client/types/index.js +1 -0
  331. package/dist/client/types/job.d.ts +127 -0
  332. package/dist/client/types/job.js +1 -0
  333. package/dist/client/types/metrics.d.ts +1 -0
  334. package/dist/client/types/metrics.js +1 -0
  335. package/dist/client/types/options.d.ts +62 -0
  336. package/dist/client/types/options.js +1 -0
  337. package/dist/client/types/worker.d.ts +38 -0
  338. package/dist/client/types/worker.js +1 -0
  339. package/dist/client/types.d.ts +2 -583
  340. package/dist/client/types.js +2 -6
  341. package/dist/client/worker/ackBatcher.d.ts +1 -1
  342. package/dist/client/worker/ackBatcher.js +17 -5
  343. package/dist/client/worker/ackOutcome.d.ts +8 -0
  344. package/dist/client/worker/ackOutcome.js +58 -0
  345. package/dist/client/worker/constants.d.ts +7 -0
  346. package/dist/client/worker/constants.js +7 -0
  347. package/dist/client/worker/groupConcurrency.js +3 -0
  348. package/dist/client/worker/handlers/completion.d.ts +28 -0
  349. package/dist/client/worker/handlers/completion.js +68 -0
  350. package/dist/client/worker/handlers/dependencies.d.ts +11 -0
  351. package/dist/client/worker/handlers/dependencies.js +107 -0
  352. package/dist/client/worker/handlers/mutations.d.ts +23 -0
  353. package/dist/client/worker/handlers/mutations.js +211 -0
  354. package/dist/client/worker/handlers/queries.d.ts +15 -0
  355. package/dist/client/worker/handlers/queries.js +100 -0
  356. package/dist/client/worker/index.d.ts +2 -2
  357. package/dist/client/worker/index.js +1 -1
  358. package/dist/client/worker/jobParser.js +4 -2
  359. package/dist/client/worker/processor.d.ts +2 -15
  360. package/dist/client/worker/processor.js +68 -125
  361. package/dist/client/worker/processorHandlers.d.ts +4 -65
  362. package/dist/client/worker/processorHandlers.js +4 -400
  363. package/dist/client/worker/processorOutcome.d.ts +14 -0
  364. package/dist/client/worker/processorOutcome.js +125 -0
  365. package/dist/client/worker/runtime/buffer.d.ts +8 -0
  366. package/dist/client/worker/runtime/buffer.js +50 -0
  367. package/dist/client/worker/runtime/control.d.ts +26 -0
  368. package/dist/client/worker/runtime/control.js +175 -0
  369. package/dist/client/worker/runtime/execution.d.ts +11 -0
  370. package/dist/client/worker/runtime/execution.js +123 -0
  371. package/dist/client/worker/runtime/lifecycle.d.ts +7 -0
  372. package/dist/client/worker/runtime/lifecycle.js +114 -0
  373. package/dist/client/worker/runtime/manual.d.ts +10 -0
  374. package/dist/client/worker/runtime/manual.js +137 -0
  375. package/dist/client/worker/runtime/options.d.ts +5 -0
  376. package/dist/client/worker/runtime/options.js +39 -0
  377. package/dist/client/worker/runtime/polling.d.ts +12 -0
  378. package/dist/client/worker/runtime/polling.js +123 -0
  379. package/dist/client/worker/runtime/state.d.ts +110 -0
  380. package/dist/client/worker/runtime/state.js +156 -0
  381. package/dist/client/worker/types/index.d.ts +5 -0
  382. package/dist/client/worker/types/index.js +1 -0
  383. package/dist/client/worker/types/manual.d.ts +7 -0
  384. package/dist/client/worker/types/manual.js +1 -0
  385. package/dist/client/worker/types/options.d.ts +24 -0
  386. package/dist/client/worker/types/options.js +1 -0
  387. package/dist/client/worker/types/outcome.d.ts +23 -0
  388. package/dist/client/worker/types/outcome.js +1 -0
  389. package/dist/client/worker/types/processor.d.ts +22 -0
  390. package/dist/client/worker/types/processor.js +1 -0
  391. package/dist/client/worker/types/transport.d.ts +11 -0
  392. package/dist/client/worker/types/transport.js +1 -0
  393. package/dist/client/worker/worker.d.ts +3 -160
  394. package/dist/client/worker/worker.js +3 -904
  395. package/dist/client/worker/workerRateLimiter.d.ts +5 -1
  396. package/dist/client/worker/workerRateLimiter.js +40 -20
  397. package/dist/client/worker.d.ts +1 -0
  398. package/dist/client/workflow/compensationChild.d.ts +2 -1
  399. package/dist/client/workflow/compensationChild.js +1 -1
  400. package/dist/client/workflow/compensationClaim.d.ts +11 -0
  401. package/dist/client/workflow/compensationClaim.js +30 -0
  402. package/dist/client/workflow/compensator.d.ts +7 -2
  403. package/dist/client/workflow/compensator.js +5 -11
  404. package/dist/client/workflow/recovery.js +25 -2
  405. package/dist/client/workflow/rollbackControl.js +1 -1
  406. package/dist/domain/job/constants.d.ts +12 -0
  407. package/dist/domain/job/constants.js +12 -0
  408. package/dist/domain/job/create.d.ts +2 -0
  409. package/dist/domain/job/create.js +103 -0
  410. package/dist/domain/job/ids.d.ts +5 -0
  411. package/dist/domain/job/ids.js +12 -0
  412. package/dist/domain/job/locks.d.ts +4 -0
  413. package/dist/domain/job/locks.js +23 -0
  414. package/dist/domain/job/payload.d.ts +18 -0
  415. package/dist/domain/job/payload.js +43 -0
  416. package/dist/domain/job/state.d.ts +8 -0
  417. package/dist/domain/job/state.js +51 -0
  418. package/dist/domain/job/terminal.d.ts +3 -0
  419. package/dist/domain/job/terminal.js +9 -0
  420. package/dist/domain/queue/dlqShard.d.ts +2 -0
  421. package/dist/domain/queue/dlqShard.js +34 -9
  422. package/dist/domain/queue/limiterManager.d.ts +11 -0
  423. package/dist/domain/queue/limiterManager.js +28 -0
  424. package/dist/domain/queue/priorityQueue.js +3 -39
  425. package/dist/domain/queue/priorityQueueOrder.d.ts +3 -0
  426. package/dist/domain/queue/priorityQueueOrder.js +21 -0
  427. package/dist/domain/queue/shard/dependencies.d.ts +11 -0
  428. package/dist/domain/queue/shard/dependencies.js +22 -0
  429. package/dist/domain/queue/shard/dlq.d.ts +25 -0
  430. package/dist/domain/queue/shard/dlq.js +71 -0
  431. package/dist/domain/queue/shard/keys.d.ts +18 -0
  432. package/dist/domain/queue/shard/keys.js +45 -0
  433. package/dist/domain/queue/shard/lifecycle.d.ts +10 -0
  434. package/dist/domain/queue/shard/lifecycle.js +43 -0
  435. package/dist/domain/queue/shard/limits.d.ts +24 -0
  436. package/dist/domain/queue/shard/limits.js +57 -0
  437. package/dist/domain/queue/shard/metrics.d.ts +32 -0
  438. package/dist/domain/queue/shard/metrics.js +72 -0
  439. package/dist/domain/queue/shard/state.d.ts +34 -0
  440. package/dist/domain/queue/shard/state.js +80 -0
  441. package/dist/domain/queue/shard.d.ts +5 -137
  442. package/dist/domain/queue/shard.js +4 -390
  443. package/dist/domain/queue/uniqueKeyManager.d.ts +3 -1
  444. package/dist/domain/queue/uniqueKeyManager.js +9 -1
  445. package/dist/domain/response/builders.d.ts +15 -0
  446. package/dist/domain/response/builders.js +39 -0
  447. package/dist/domain/types/command.d.ts +2 -522
  448. package/dist/domain/types/command.js +2 -5
  449. package/dist/domain/types/commands/base.d.ts +5 -0
  450. package/dist/domain/types/commands/base.js +1 -0
  451. package/dist/domain/types/commands/core.d.ts +106 -0
  452. package/dist/domain/types/commands/core.js +1 -0
  453. package/dist/domain/types/commands/cron.d.ts +36 -0
  454. package/dist/domain/types/commands/cron.js +1 -0
  455. package/dist/domain/types/commands/dashboard.d.ts +13 -0
  456. package/dist/domain/types/commands/dashboard.js +1 -0
  457. package/dist/domain/types/commands/dlq.d.ts +39 -0
  458. package/dist/domain/types/commands/dlq.js +1 -0
  459. package/dist/domain/types/commands/extended.d.ts +63 -0
  460. package/dist/domain/types/commands/extended.js +1 -0
  461. package/dist/domain/types/commands/index.d.ts +12 -0
  462. package/dist/domain/types/commands/index.js +12 -0
  463. package/dist/domain/types/commands/limits.d.ts +54 -0
  464. package/dist/domain/types/commands/limits.js +1 -0
  465. package/dist/domain/types/commands/management.d.ts +73 -0
  466. package/dist/domain/types/commands/management.js +1 -0
  467. package/dist/domain/types/commands/monitoring.d.ts +49 -0
  468. package/dist/domain/types/commands/monitoring.js +1 -0
  469. package/dist/domain/types/commands/protocol.d.ts +20 -0
  470. package/dist/domain/types/commands/protocol.js +1 -0
  471. package/dist/domain/types/commands/query.d.ts +46 -0
  472. package/dist/domain/types/commands/query.js +1 -0
  473. package/dist/domain/types/commands/union.d.ts +13 -0
  474. package/dist/domain/types/commands/union.js +1 -0
  475. package/dist/domain/types/commands/workers.d.ts +39 -0
  476. package/dist/domain/types/commands/workers.js +1 -0
  477. package/dist/domain/types/cron.d.ts +4 -2
  478. package/dist/domain/types/cron.js +3 -0
  479. package/dist/domain/types/dlq.d.ts +17 -0
  480. package/dist/domain/types/dlq.js +70 -14
  481. package/dist/domain/types/index.d.ts +2 -0
  482. package/dist/domain/types/index.js +1 -0
  483. package/dist/domain/types/job.d.ts +8 -269
  484. package/dist/domain/types/job.js +8 -234
  485. package/dist/domain/types/jobs/model.d.ts +152 -0
  486. package/dist/domain/types/jobs/model.js +1 -0
  487. package/dist/domain/types/metrics.d.ts +16 -0
  488. package/dist/domain/types/metrics.js +1 -0
  489. package/dist/domain/types/priorityQueue.d.ts +12 -0
  490. package/dist/domain/types/priorityQueue.js +1 -0
  491. package/dist/domain/types/protocol.d.ts +5 -0
  492. package/dist/domain/types/protocol.js +4 -0
  493. package/dist/domain/types/queue.d.ts +7 -0
  494. package/dist/domain/types/queue.js +13 -0
  495. package/dist/domain/types/response.d.ts +3 -192
  496. package/dist/domain/types/response.js +3 -101
  497. package/dist/domain/types/responses/model.d.ts +152 -0
  498. package/dist/domain/types/responses/model.js +1 -0
  499. package/dist/domain/types/shard.d.ts +4 -0
  500. package/dist/domain/types/shard.js +1 -0
  501. package/dist/infrastructure/cloud/cloudAgent.js +6 -0
  502. package/dist/infrastructure/cloud/commandHandler.d.ts +2 -41
  503. package/dist/infrastructure/cloud/commandHandler.js +1 -1
  504. package/dist/infrastructure/cloud/commands/integrations.d.ts +2 -0
  505. package/dist/infrastructure/cloud/commands/integrations.js +31 -0
  506. package/dist/infrastructure/cloud/commands/jobMapper.d.ts +56 -0
  507. package/dist/infrastructure/cloud/commands/jobMapper.js +72 -0
  508. package/dist/infrastructure/cloud/commands/jobs.d.ts +2 -0
  509. package/dist/infrastructure/cloud/commands/jobs.js +111 -0
  510. package/dist/infrastructure/cloud/commands/queues.d.ts +2 -0
  511. package/dist/infrastructure/cloud/commands/queues.js +126 -0
  512. package/dist/infrastructure/cloud/commands.d.ts +3 -10
  513. package/dist/infrastructure/cloud/commands.js +7 -344
  514. package/dist/infrastructure/cloud/snapshot/analytics.d.ts +16 -0
  515. package/dist/infrastructure/cloud/snapshot/analytics.js +132 -0
  516. package/dist/infrastructure/cloud/snapshot/collector.d.ts +24 -0
  517. package/dist/infrastructure/cloud/snapshot/collector.js +105 -0
  518. package/dist/infrastructure/cloud/snapshot/config.d.ts +5 -0
  519. package/dist/infrastructure/cloud/snapshot/config.js +86 -0
  520. package/dist/infrastructure/cloud/snapshot/jobs.d.ts +5 -0
  521. package/dist/infrastructure/cloud/snapshot/jobs.js +148 -0
  522. package/dist/infrastructure/cloud/snapshot/stalls.d.ts +3 -0
  523. package/dist/infrastructure/cloud/snapshot/stalls.js +34 -0
  524. package/dist/infrastructure/cloud/snapshotCollector.d.ts +2 -53
  525. package/dist/infrastructure/cloud/snapshotCollector.js +5 -107
  526. package/dist/infrastructure/cloud/snapshotHelpers.d.ts +5 -45
  527. package/dist/infrastructure/cloud/snapshotHelpers.js +4 -426
  528. package/dist/infrastructure/cloud/types/collector.d.ts +54 -0
  529. package/dist/infrastructure/cloud/types/collector.js +1 -0
  530. package/dist/infrastructure/cloud/types/command.d.ts +44 -0
  531. package/dist/infrastructure/cloud/types/command.js +1 -0
  532. package/dist/infrastructure/cloud/types/config.d.ts +18 -0
  533. package/dist/infrastructure/cloud/types/config.js +1 -0
  534. package/dist/infrastructure/cloud/types/event.d.ts +14 -0
  535. package/dist/infrastructure/cloud/types/event.js +1 -0
  536. package/dist/infrastructure/cloud/types/redact.d.ts +4 -0
  537. package/dist/infrastructure/cloud/types/redact.js +1 -0
  538. package/dist/infrastructure/cloud/types/snapshot.d.ts +52 -0
  539. package/dist/infrastructure/cloud/types/snapshot.js +1 -0
  540. package/dist/infrastructure/cloud/types/snapshotCore.d.ts +125 -0
  541. package/dist/infrastructure/cloud/types/snapshotCore.js +1 -0
  542. package/dist/infrastructure/cloud/types/snapshotJobs.d.ts +124 -0
  543. package/dist/infrastructure/cloud/types/snapshotJobs.js +1 -0
  544. package/dist/infrastructure/cloud/types/snapshotTelemetry.d.ts +100 -0
  545. package/dist/infrastructure/cloud/types/snapshotTelemetry.js +1 -0
  546. package/dist/infrastructure/cloud/types.d.ts +3 -445
  547. package/dist/infrastructure/cloud/types.js +0 -4
  548. package/dist/infrastructure/persistence/batchInsert.d.ts +13 -0
  549. package/dist/infrastructure/persistence/batchInsert.js +96 -0
  550. package/dist/infrastructure/persistence/jobOptionsBlob.d.ts +18 -0
  551. package/dist/infrastructure/persistence/jobOptionsBlob.js +56 -0
  552. package/dist/infrastructure/persistence/legacyNameMigration.d.ts +5 -0
  553. package/dist/infrastructure/persistence/legacyNameMigration.js +42 -0
  554. package/dist/infrastructure/persistence/migrations.d.ts +3 -0
  555. package/dist/infrastructure/persistence/migrations.js +120 -0
  556. package/dist/infrastructure/persistence/schema.d.ts +3 -5
  557. package/dist/infrastructure/persistence/schema.js +40 -136
  558. package/dist/infrastructure/persistence/sqlite/admission.d.ts +9 -0
  559. package/dist/infrastructure/persistence/sqlite/admission.js +34 -0
  560. package/dist/infrastructure/persistence/sqlite/control.d.ts +32 -0
  561. package/dist/infrastructure/persistence/sqlite/control.js +90 -0
  562. package/dist/infrastructure/persistence/sqlite/flows.d.ts +26 -0
  563. package/dist/infrastructure/persistence/sqlite/flows.js +167 -0
  564. package/dist/infrastructure/persistence/sqlite/jobs.d.ts +23 -0
  565. package/dist/infrastructure/persistence/sqlite/jobs.js +166 -0
  566. package/dist/infrastructure/persistence/sqlite/lifecycle.d.ts +6 -0
  567. package/dist/infrastructure/persistence/sqlite/lifecycle.js +30 -0
  568. package/dist/infrastructure/persistence/sqlite/mutations.d.ts +20 -0
  569. package/dist/infrastructure/persistence/sqlite/mutations.js +149 -0
  570. package/dist/infrastructure/persistence/sqlite/queries.d.ts +23 -0
  571. package/dist/infrastructure/persistence/sqlite/queries.js +89 -0
  572. package/dist/infrastructure/persistence/sqlite/records.d.ts +24 -0
  573. package/dist/infrastructure/persistence/sqlite/records.js +115 -0
  574. package/dist/infrastructure/persistence/sqlite/state.d.ts +36 -0
  575. package/dist/infrastructure/persistence/sqlite/state.js +207 -0
  576. package/dist/infrastructure/persistence/sqlite/telemetry.d.ts +16 -0
  577. package/dist/infrastructure/persistence/sqlite/telemetry.js +126 -0
  578. package/dist/infrastructure/persistence/sqlite.d.ts +5 -276
  579. package/dist/infrastructure/persistence/sqlite.js +3 -997
  580. package/dist/infrastructure/persistence/sqliteBatch.d.ts +4 -121
  581. package/dist/infrastructure/persistence/sqliteBatch.js +3 -422
  582. package/dist/infrastructure/persistence/sqliteSerializer.d.ts +6 -1
  583. package/dist/infrastructure/persistence/sqliteSerializer.js +33 -11
  584. package/dist/infrastructure/persistence/statements.d.ts +5 -1
  585. package/dist/infrastructure/persistence/statements.js +14 -9
  586. package/dist/infrastructure/persistence/types/admission.d.ts +8 -0
  587. package/dist/infrastructure/persistence/types/admission.js +1 -0
  588. package/dist/infrastructure/persistence/types/batch.d.ts +12 -0
  589. package/dist/infrastructure/persistence/types/batch.js +1 -0
  590. package/dist/infrastructure/persistence/types/sqlite.d.ts +17 -0
  591. package/dist/infrastructure/persistence/types/sqlite.js +1 -0
  592. package/dist/infrastructure/persistence/writeBuffer.d.ts +38 -0
  593. package/dist/infrastructure/persistence/writeBuffer.js +221 -0
  594. package/dist/infrastructure/scheduler/cron/execution.d.ts +12 -0
  595. package/dist/infrastructure/scheduler/cron/execution.js +150 -0
  596. package/dist/infrastructure/scheduler/cron/runtime.d.ts +31 -0
  597. package/dist/infrastructure/scheduler/cron/runtime.js +143 -0
  598. package/dist/infrastructure/scheduler/cronScheduler.d.ts +4 -117
  599. package/dist/infrastructure/scheduler/cronScheduler.js +3 -436
  600. package/dist/infrastructure/scheduler/types/cronScheduler.d.ts +16 -0
  601. package/dist/infrastructure/scheduler/types/cronScheduler.js +1 -0
  602. package/dist/infrastructure/server/bootstrap.js +3 -0
  603. package/dist/infrastructure/server/handler-routes/control.d.ts +8 -0
  604. package/dist/infrastructure/server/handler-routes/control.js +82 -0
  605. package/dist/infrastructure/server/handler-routes/jobs.d.ts +6 -0
  606. package/dist/infrastructure/server/handler-routes/jobs.js +110 -0
  607. package/dist/infrastructure/server/handler-routes/monitoring.d.ts +5 -0
  608. package/dist/infrastructure/server/handler-routes/monitoring.js +65 -0
  609. package/dist/infrastructure/server/handlerRoutes.d.ts +3 -26
  610. package/dist/infrastructure/server/handlerRoutes.js +3 -257
  611. package/dist/infrastructure/server/handlers/advanced/configNumbers.d.ts +2 -0
  612. package/dist/infrastructure/server/handlers/advanced/configNumbers.js +26 -0
  613. package/dist/infrastructure/server/handlers/advanced/dependencies.d.ts +15 -0
  614. package/dist/infrastructure/server/handlers/advanced/dependencies.js +38 -0
  615. package/dist/infrastructure/server/handlers/advanced/jobs.d.ts +33 -0
  616. package/dist/infrastructure/server/handlers/advanced/jobs.js +136 -0
  617. package/dist/infrastructure/server/handlers/advanced/queue.d.ts +42 -0
  618. package/dist/infrastructure/server/handlers/advanced/queue.js +111 -0
  619. package/dist/infrastructure/server/handlers/advanced.d.ts +3 -121
  620. package/dist/infrastructure/server/handlers/advanced.js +3 -336
  621. package/dist/infrastructure/server/handlers/core.d.ts +1 -4
  622. package/dist/infrastructure/server/handlers/core.js +37 -20
  623. package/dist/infrastructure/server/handlers/cron.js +9 -1
  624. package/dist/infrastructure/server/handlers/dlq.d.ts +3 -0
  625. package/dist/infrastructure/server/handlers/dlq.js +18 -4
  626. package/dist/infrastructure/server/handlers/flow.js +6 -1
  627. package/dist/infrastructure/server/handlers/introspection.d.ts +19 -0
  628. package/dist/infrastructure/server/handlers/introspection.js +21 -0
  629. package/dist/infrastructure/server/handlers/management.d.ts +8 -0
  630. package/dist/infrastructure/server/handlers/management.js +30 -0
  631. package/dist/infrastructure/server/handlers/monitoring/health.d.ts +13 -0
  632. package/dist/infrastructure/server/handlers/monitoring/health.js +61 -0
  633. package/dist/infrastructure/server/handlers/monitoring/operations.d.ts +8 -0
  634. package/dist/infrastructure/server/handlers/monitoring/operations.js +28 -0
  635. package/dist/infrastructure/server/handlers/monitoring/webhooks.d.ts +7 -0
  636. package/dist/infrastructure/server/handlers/monitoring/webhooks.js +56 -0
  637. package/dist/infrastructure/server/handlers/monitoring/workers.d.ts +6 -0
  638. package/dist/infrastructure/server/handlers/monitoring/workers.js +57 -0
  639. package/dist/infrastructure/server/handlers/monitoring.d.ts +4 -30
  640. package/dist/infrastructure/server/handlers/monitoring.js +4 -222
  641. package/dist/infrastructure/server/handlers/pushBatchValidation.d.ts +1 -1
  642. package/dist/infrastructure/server/handlers/pushBatchValidation.js +7 -0
  643. package/dist/infrastructure/server/handlers/query.js +13 -4
  644. package/dist/infrastructure/server/http-routes/jobAdvanced.d.ts +2 -0
  645. package/dist/infrastructure/server/http-routes/jobAdvanced.js +106 -0
  646. package/dist/infrastructure/server/http-routes/jobManagement.d.ts +2 -0
  647. package/dist/infrastructure/server/http-routes/jobManagement.js +74 -0
  648. package/dist/infrastructure/server/http-routes/queueJobs.d.ts +2 -0
  649. package/dist/infrastructure/server/http-routes/queueJobs.js +108 -0
  650. package/dist/infrastructure/server/httpRouteJobs.d.ts +1 -8
  651. package/dist/infrastructure/server/httpRouteJobs.js +33 -222
  652. package/dist/infrastructure/server/httpRouteQueues.d.ts +1 -6
  653. package/dist/infrastructure/server/httpRouteQueues.js +51 -217
  654. package/dist/infrastructure/server/httpRouteResources.js +1 -0
  655. package/dist/infrastructure/server/protocol/commands.d.ts +8 -0
  656. package/dist/infrastructure/server/protocol/commands.js +31 -0
  657. package/dist/infrastructure/server/protocol/frameParser.d.ts +16 -0
  658. package/dist/infrastructure/server/protocol/frameParser.js +65 -0
  659. package/dist/infrastructure/server/protocol/lineBuffer.d.ts +6 -0
  660. package/dist/infrastructure/server/protocol/lineBuffer.js +21 -0
  661. package/dist/infrastructure/server/protocol/validation.d.ts +9 -0
  662. package/dist/infrastructure/server/protocol/validation.js +75 -0
  663. package/dist/infrastructure/server/protocol.d.ts +5 -77
  664. package/dist/infrastructure/server/protocol.js +4 -265
  665. package/dist/infrastructure/server/rateLimiter.js +1 -0
  666. package/dist/infrastructure/server/socketWriteQueue.d.ts +1 -1
  667. package/dist/infrastructure/server/socketWriteQueue.js +8 -5
  668. package/dist/infrastructure/server/sse/constants.d.ts +5 -0
  669. package/dist/infrastructure/server/sse/constants.js +5 -0
  670. package/dist/infrastructure/server/sse/eventBuffer.d.ts +3 -0
  671. package/dist/infrastructure/server/sse/eventBuffer.js +21 -0
  672. package/dist/infrastructure/server/sseHandler.d.ts +2 -6
  673. package/dist/infrastructure/server/sseHandler.js +20 -96
  674. package/dist/infrastructure/server/tcp/clientRelease.d.ts +2 -0
  675. package/dist/infrastructure/server/tcp/clientRelease.js +18 -0
  676. package/dist/infrastructure/server/tcp/connections.d.ts +24 -0
  677. package/dist/infrastructure/server/tcp/connections.js +162 -0
  678. package/dist/infrastructure/server/tcp/constants.d.ts +3 -0
  679. package/dist/infrastructure/server/tcp/constants.js +3 -0
  680. package/dist/infrastructure/server/tcp/eventSubscriptions.d.ts +10 -0
  681. package/dist/infrastructure/server/tcp/eventSubscriptions.js +17 -0
  682. package/dist/infrastructure/server/tcp/responses.d.ts +3 -0
  683. package/dist/infrastructure/server/tcp/responses.js +8 -0
  684. package/dist/infrastructure/server/tcp.d.ts +10 -68
  685. package/dist/infrastructure/server/tcp.js +47 -256
  686. package/dist/infrastructure/server/types/protocol.d.ts +4 -0
  687. package/dist/infrastructure/server/types/protocol.js +1 -0
  688. package/dist/infrastructure/server/types/sse.d.ts +11 -0
  689. package/dist/infrastructure/server/types/sse.js +1 -0
  690. package/dist/infrastructure/server/types/tcpServer.d.ts +25 -0
  691. package/dist/infrastructure/server/types/tcpServer.js +1 -0
  692. package/dist/infrastructure/server/types/ws.d.ts +6 -0
  693. package/dist/infrastructure/server/types/ws.js +1 -0
  694. package/dist/infrastructure/server/ws/constants.d.ts +6 -0
  695. package/dist/infrastructure/server/ws/constants.js +130 -0
  696. package/dist/infrastructure/server/ws/snapshots.d.ts +4 -0
  697. package/dist/infrastructure/server/ws/snapshots.js +52 -0
  698. package/dist/infrastructure/server/ws/subscriptions.d.ts +10 -0
  699. package/dist/infrastructure/server/ws/subscriptions.js +39 -0
  700. package/dist/infrastructure/server/wsHandler.d.ts +2 -10
  701. package/dist/infrastructure/server/wsHandler.js +12 -237
  702. package/dist/mcp/adapter.d.ts +5 -403
  703. package/dist/mcp/adapter.js +6 -778
  704. package/dist/mcp/backend/embedded/base.d.ts +7 -0
  705. package/dist/mcp/backend/embedded/base.js +15 -0
  706. package/dist/mcp/backend/embedded/index.d.ts +14 -0
  707. package/dist/mcp/backend/embedded/index.js +22 -0
  708. package/dist/mcp/backend/embedded/jobs.d.ts +44 -0
  709. package/dist/mcp/backend/embedded/jobs.js +98 -0
  710. package/dist/mcp/backend/embedded/queues.d.ts +27 -0
  711. package/dist/mcp/backend/embedded/queues.js +84 -0
  712. package/dist/mcp/backend/embedded/services.d.ts +29 -0
  713. package/dist/mcp/backend/embedded/services.js +107 -0
  714. package/dist/mcp/backend/serializers.d.ts +7 -0
  715. package/dist/mcp/backend/serializers.js +32 -0
  716. package/dist/mcp/backend/tcp/base.d.ts +19 -0
  717. package/dist/mcp/backend/tcp/base.js +54 -0
  718. package/dist/mcp/backend/tcp/index.d.ts +14 -0
  719. package/dist/mcp/backend/tcp/index.js +20 -0
  720. package/dist/mcp/backend/tcp/jobs.d.ts +44 -0
  721. package/dist/mcp/backend/tcp/jobs.js +122 -0
  722. package/dist/mcp/backend/tcp/queues.d.ts +27 -0
  723. package/dist/mcp/backend/tcp/queues.js +89 -0
  724. package/dist/mcp/backend/tcp/services.d.ts +30 -0
  725. package/dist/mcp/backend/tcp/services.js +161 -0
  726. package/dist/mcp/types/adapter.d.ts +176 -0
  727. package/dist/mcp/types/adapter.js +1 -0
  728. package/dist/shared/asyncLock.d.ts +13 -0
  729. package/dist/shared/asyncLock.js +65 -0
  730. package/dist/shared/lock.d.ts +10 -72
  731. package/dist/shared/lock.js +7 -231
  732. package/dist/shared/lockError.d.ts +3 -0
  733. package/dist/shared/lockError.js +6 -0
  734. package/dist/shared/lockTimeout.d.ts +2 -0
  735. package/dist/shared/lockTimeout.js +2 -0
  736. package/dist/shared/rwLock.d.ts +22 -0
  737. package/dist/shared/rwLock.js +124 -0
  738. package/dist/shared/serialization.js +1 -0
  739. package/dist/shared/skipList.d.ts +0 -5
  740. package/dist/shared/skipList.js +10 -57
  741. package/dist/shared/skipListNodes.d.ts +6 -0
  742. package/dist/shared/skipListNodes.js +43 -0
  743. package/dist/shared/types/lock.d.ts +7 -0
  744. package/dist/shared/types/lock.js +1 -0
  745. package/dist/shared/types/skipList.d.ts +4 -0
  746. package/dist/shared/types/skipList.js +1 -0
  747. package/package.json +2 -1
@@ -35,6 +35,9 @@ export class DependencyResultTracker {
35
35
  get(dependencyId) {
36
36
  return this.protectedResults.get(dependencyId);
37
37
  }
38
+ hasConsumers(dependencyId) {
39
+ return (this.consumersByDependency.get(dependencyId)?.size ?? 0) > 0;
40
+ }
38
41
  releaseConsumer(consumerId) {
39
42
  const dependencies = this.dependenciesByConsumer.get(consumerId);
40
43
  if (!dependencies)
@@ -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 */
@@ -47,9 +40,16 @@ export interface RetryCompletedContext extends DlqContext {
47
40
  has(id: JobId): boolean;
48
41
  delete(id: JobId): boolean;
49
42
  } & Iterable<JobId>;
43
+ completedJobsData: {
44
+ get(id: JobId): Job | undefined;
45
+ delete(id: JobId): boolean;
46
+ };
50
47
  jobResults: {
51
48
  delete(id: JobId): boolean;
52
49
  };
53
50
  }
54
51
  /** Retry completed jobs */
55
- export declare function retryCompletedJobs(queue: string, ctx: RetryCompletedContext, jobId?: JobId): number;
52
+ export declare function retryCompletedJobs(queue: string, ctx: RetryCompletedContext, jobId?: JobId, options?: {
53
+ limit?: number;
54
+ timestamp?: number;
55
+ }): number;
@@ -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);
@@ -260,41 +115,68 @@ export function getDlqConfig(queue, ctx) {
260
115
  return ctx.shards[idx].getDlqConfig(queue);
261
116
  }
262
117
  /** Retry completed jobs */
263
- export function retryCompletedJobs(queue, ctx, jobId) {
118
+ export function retryCompletedJobs(queue, ctx, jobId, options = {}) {
264
119
  if (jobId) {
265
120
  if (!ctx.completedJobs.has(jobId))
266
121
  return 0;
267
- const job = ctx.storage?.getJob(jobId);
122
+ const job = ctx.completedJobsData.get(jobId) ?? ctx.storage?.getJob(jobId);
268
123
  if (job?.queue !== queue)
269
124
  return 0;
270
125
  return requeueCompletedJob(job, ctx);
271
126
  }
127
+ const limit = options.limit === undefined
128
+ ? Number.POSITIVE_INFINITY
129
+ : Number.isFinite(options.limit) && options.limit > 0
130
+ ? Math.floor(options.limit)
131
+ : 0;
132
+ if (limit === 0)
133
+ return 0;
134
+ const timestamp = options.timestamp ?? Number.POSITIVE_INFINITY;
272
135
  let count = 0;
273
- for (const id of ctx.completedJobs) {
274
- const job = ctx.storage?.getJob(id);
275
- if (job?.queue === queue)
136
+ for (const id of [...ctx.completedJobs]) {
137
+ if (count >= limit)
138
+ break;
139
+ const job = ctx.completedJobsData.get(id) ?? ctx.storage?.getJob(id);
140
+ if (job?.queue === queue && job.completedAt !== null && job.completedAt <= timestamp) {
276
141
  count += requeueCompletedJob(job, ctx);
142
+ }
277
143
  }
278
144
  return count;
279
145
  }
280
146
  /** Requeue a single completed job */
281
147
  function requeueCompletedJob(job, ctx) {
282
- job.attempts = 0;
283
- job.startedAt = null;
284
- job.completedAt = null;
285
- job.runAt = Date.now();
286
- job.progress = 0;
287
- if (job.timeline.length < MAX_TIMELINE_ENTRIES) {
288
- 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 });
289
152
  }
290
- 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);
291
169
  const shard = ctx.shards[idx];
292
- shard.getQueue(job.queue).push(job);
293
- shard.incrementQueued(job.id, false, job.createdAt, job.queue, job.runAt);
294
- ctx.jobIndex.set(job.id, { type: 'queue', shardIdx: idx, queueName: job.queue });
295
- ctx.completedJobs.delete(job.id);
296
- ctx.jobResults.delete(job.id);
297
- ctx.storage?.updateForRetry(job);
298
- 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);
299
181
  return 1;
300
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,12 +84,14 @@ 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:')) {
84
- shard.releaseJobResources(job.queue, job.uniqueKey, job.groupId);
93
+ ctx.retiredCronLeaseTokens.set(jobId, lock.token);
94
+ shard.releaseJobResources(job.queue, job.uniqueKey, job.groupId, job.id);
85
95
  ctx.jobIndex.delete(jobId);
86
96
  ctx.storage?.deleteJob(jobId);
87
97
  ctx.jobLocks.delete(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.
@@ -124,10 +133,11 @@ function handleRecoveryBoundExceeded(opts) {
124
133
  // Release the concurrency slot (+group+uniqueKey) acquired at pull before
125
134
  // moving to DLQ — otherwise the slot leaks (mirrors
126
135
  // stallDetection.moveStalliedJobToDlq).
127
- shard.releaseJobResources(job.queue, job.uniqueKey, job.groupId);
136
+ shard.releaseJobResources(job.queue, job.uniqueKey, job.groupId, job.id);
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,14 +167,17 @@ 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).
156
- shard.releaseJobResources(job.queue, job.uniqueKey, job.groupId);
175
+ shard.releaseJobResources(job.queue, job.uniqueKey, job.groupId, job.id);
157
176
  queue.push(job);
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>;