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
@@ -1,24 +1,7 @@
1
1
  /** Shared batch acknowledgement utilities. */
2
2
  import type { Job, JobId } from '../../domain/types/job';
3
- import type { JobLocation, EventType } from '../../domain/types/queue';
4
- import type { Shard } from '../../domain/queue/shard';
5
- import type { RWLock } from '../../shared/lock';
6
- import type { SetLike, MapLike } from '../../shared/lru';
7
- import type { SqliteStorage } from '../../infrastructure/persistence/sqlite';
8
- import type { DependencyResultTracker } from '../dependencyResultTracker';
9
- import { type DependencyCompletionTracker } from '../dependencyCompletions';
10
- export interface ExtractedJob<T = unknown> {
11
- id: JobId;
12
- job: Job;
13
- result?: T;
14
- }
15
- /** Context for batch operations */
16
- export interface BatchContext {
17
- processingShards: Map<JobId, Job>[];
18
- processingLocks: RWLock[];
19
- shards: Shard[];
20
- shardLocks: RWLock[];
21
- }
3
+ import type { BatchContext, ExtractedJob, FinalizeContext } from '../types/ack';
4
+ export type { BatchContext, ExtractedJob, FinalizeContext } from '../types/ack';
22
5
  /**
23
6
  * Group job IDs by processing shard
24
7
  * Returns Map<shardIndex, jobIds[]>
@@ -40,6 +23,7 @@ export declare function extractJobs(byProcShard: Map<number, JobId[]>, ctx: Batc
40
23
  export declare function extractJobsWithResults<T>(byProcShard: Map<number, Array<{
41
24
  id: JobId;
42
25
  result: T;
26
+ removeOnComplete?: boolean;
43
27
  }>>, ctx: BatchContext): Promise<Array<ExtractedJob<T>>>;
44
28
  /**
45
29
  * Group extracted jobs by queue shard
@@ -49,39 +33,6 @@ export declare function groupByQueueShard(extractedJobs: ExtractedJob[]): Map<nu
49
33
  * Release resources for each queue shard (one lock per shard)
50
34
  */
51
35
  export declare function releaseResources(byQueueShard: Map<number, Job[]>, ctx: BatchContext): Promise<void>;
52
- /** Context for finalize operations */
53
- export interface FinalizeContext {
54
- storage: SqliteStorage | null;
55
- shards: Shard[];
56
- completedJobs: SetLike<JobId>;
57
- completedJobsData: MapLike<JobId, Job>;
58
- /** Bare completion ids for removeOnComplete jobs so dependents can unblock */
59
- depCompletions?: DependencyCompletionTracker;
60
- maxDependencyCompletions: number;
61
- jobResults: MapLike<JobId, unknown>;
62
- dependencyResults?: DependencyResultTracker;
63
- jobIndex: Map<JobId, JobLocation>;
64
- customIdMap?: MapLike<string, JobId>;
65
- totalCompleted: {
66
- value: bigint;
67
- };
68
- perQueueMetrics?: MapLike<string, {
69
- totalCompleted: bigint;
70
- totalFailed: bigint;
71
- }>;
72
- broadcast: (event: {
73
- eventType: EventType;
74
- queue: string;
75
- jobId: JobId;
76
- timestamp: number;
77
- data?: unknown;
78
- }) => void;
79
- onJobCompleted: (jobId: JobId) => void;
80
- onJobsCompleted?: (jobIds: JobId[]) => void;
81
- needsBroadcast?: () => boolean;
82
- hasPendingDeps?: () => boolean;
83
- onRepeat?: (job: Job) => void;
84
- }
85
36
  /**
86
37
  * Finalize batch ack - update indexes, metrics, broadcast, notify
87
38
  */
@@ -1,8 +1,9 @@
1
1
  import { MAX_TIMELINE_ENTRIES } from '../../domain/types/job';
2
+ import { setDlqRetryState } from '../../domain/types/dlq';
2
3
  import { withWriteLock } from '../../shared/lock';
3
4
  import { shardIndex, processingShardIndex } from '../../shared/hash';
4
5
  import { throughputTracker } from '../throughputTracker';
5
- import { commitRemovedCompletion, } from '../dependencyCompletions';
6
+ import { commitRemovedCompletion } from '../dependencyCompletions';
6
7
  /**
7
8
  * Group job IDs by processing shard
8
9
  * Returns Map<shardIndex, jobIds[]>
@@ -65,7 +66,12 @@ export async function extractJobsWithResults(byProcShard, ctx) {
65
66
  const job = ctx.processingShards[procIdx].get(item.id);
66
67
  if (job) {
67
68
  ctx.processingShards[procIdx].delete(item.id);
68
- extractedJobs.push({ id: item.id, job, result: item.result });
69
+ extractedJobs.push({
70
+ id: item.id,
71
+ job,
72
+ result: item.result,
73
+ removeOnComplete: item.removeOnComplete,
74
+ });
69
75
  }
70
76
  }
71
77
  });
@@ -97,7 +103,7 @@ export async function releaseResources(byQueueShard, ctx) {
97
103
  await withWriteLock(ctx.shardLocks[idx], () => {
98
104
  const shard = ctx.shards[idx];
99
105
  for (const job of jobs) {
100
- shard.releaseJobResources(job.queue, job.uniqueKey, job.groupId);
106
+ shard.releaseJobResources(job.queue, job.uniqueKey, job.groupId, job.id);
101
107
  }
102
108
  });
103
109
  }));
@@ -134,11 +140,12 @@ export function finalizeBatchAck(extractedJobs, ctx, includeResults) {
134
140
  // checking completedJobs.has(jobId) will always find the result available.
135
141
  for (let i = 0; i < jobCount; i++) {
136
142
  const { id: jobId, job, result } = extractedJobs[i];
143
+ setDlqRetryState(job, null);
137
144
  // Release customId so it can be reused
138
145
  if (job.customId && ctx.customIdMap) {
139
146
  ctx.customIdMap.delete(job.customId);
140
147
  }
141
- if (!job.removeOnComplete) {
148
+ if (!(job.removeOnComplete || extractedJobs[i].removeOnComplete === true)) {
142
149
  // Mark completion timestamp + timeline
143
150
  job.completedAt = now;
144
151
  if (job.timeline.length < MAX_TIMELINE_ENTRIES) {
@@ -3,7 +3,8 @@ import { type Job, type JobId, type JobInput } from '../../domain/types/job';
3
3
  import type { JobLocation } from '../../domain/types/queue';
4
4
  import type { SqliteStorage } from '../../infrastructure/persistence/sqlite';
5
5
  import type { MapLike, SetLike } from '../../shared/lru';
6
- import { type DependencyCompletionTracker } from '../dependencyCompletions';
6
+ import type { DependencyCompletionTracker } from '../dependencyCompletions';
7
+ import type { RetiredTimeoutGeneration } from '../types/background';
7
8
  export interface CustomIdContext {
8
9
  storage: SqliteStorage | null;
9
10
  shards: Shard[];
@@ -11,7 +12,9 @@ export interface CustomIdContext {
11
12
  completedJobsData: MapLike<JobId, Job>;
12
13
  depCompletions?: DependencyCompletionTracker;
13
14
  maxDependencyCompletions: number;
14
- timedOutJobs?: SetLike<JobId>;
15
+ timedOutJobs?: MapLike<JobId, RetiredTimeoutGeneration>;
16
+ retiredTimeoutLeaseTokens?: MapLike<string, RetiredTimeoutGeneration>;
17
+ retiredCronLeaseTokens?: MapLike<JobId, string>;
15
18
  jobResults: MapLike<JobId, unknown>;
16
19
  customIdMap: MapLike<string, JobId>;
17
20
  jobIndex: Map<JobId, JobLocation>;
@@ -25,10 +28,20 @@ export type CustomIdResult = {
25
28
  } | {
26
29
  skip: false;
27
30
  id: JobId;
31
+ retirement?: CustomIdRetirement;
28
32
  };
33
+ export interface CustomIdRetirement {
34
+ readonly completed: boolean;
35
+ readonly dlqQueue?: string;
36
+ readonly dependencyCompletion: boolean;
37
+ }
29
38
  /**
30
- * Enforce custom-ID idempotency while the caller holds the target shard lock.
31
- * Live generations are returned unchanged; terminal generations are retired
32
- * before the deterministic ID is admitted again.
39
+ * Inspect custom-ID idempotency while the caller holds the target shard lock.
40
+ * Terminal retirement is deliberately deferred until persistence commits, so
41
+ * a rejected durable generation cannot destroy the previous one.
33
42
  */
34
43
  export declare function handleCustomId(input: JobInput, ctx: CustomIdContext, lockedShardIndexes: ReadonlySet<number>): CustomIdResult;
44
+ /** Publish custom-ID ownership after the matching storage admission succeeds. */
45
+ export declare function commitCustomIdAdmission(input: JobInput, decision: Exclude<CustomIdResult, {
46
+ skip: true;
47
+ }>, ctx: CustomIdContext): void;
@@ -1,10 +1,9 @@
1
1
  import { generateJobId, jobId } from '../../domain/types/job';
2
2
  import { shardIndex } from '../../shared/hash';
3
- import { releaseDependencyCompletionPins, } from '../dependencyCompletions';
4
3
  /**
5
- * Enforce custom-ID idempotency while the caller holds the target shard lock.
6
- * Live generations are returned unchanged; terminal generations are retired
7
- * before the deterministic ID is admitted again.
4
+ * Inspect custom-ID idempotency while the caller holds the target shard lock.
5
+ * Terminal retirement is deliberately deferred until persistence commits, so
6
+ * a rejected durable generation cannot destroy the previous one.
8
7
  */
9
8
  export function handleCustomId(input, ctx, lockedShardIndexes) {
10
9
  if (!input.customId) {
@@ -31,39 +30,51 @@ export function handleCustomId(input, ctx, lockedShardIndexes) {
31
30
  return { skip: true, existingId: id };
32
31
  }
33
32
  }
34
- if (ctx.completedJobs.has(id)) {
35
- ctx.completedJobs.delete(id);
36
- ctx.completedJobsData.delete(id);
37
- ctx.jobResults.delete(id);
38
- ctx.jobIndex.delete(id);
39
- ctx.storage?.deleteJob(id);
40
- }
33
+ const completed = ctx.completedJobs.has(id);
41
34
  const terminalLocation = ctx.jobIndex.get(id);
35
+ let dlqQueue;
42
36
  if (terminalLocation?.type === 'dlq') {
43
37
  const terminalShardIdx = shardIndex(terminalLocation.queueName);
44
38
  if (!lockedShardIndexes.has(terminalShardIdx)) {
45
39
  throw new Error('Terminal custom ID shard must be locked before reuse');
46
40
  }
47
- const terminalShard = ctx.shards[terminalShardIdx];
48
- terminalShard.removeFromDlq(terminalLocation.queueName, id);
49
- ctx.jobIndex.delete(id);
50
- // deleteDlqEntry removes every persisted generation for this deterministic
51
- // id. The fresh jobs row is inserted only after this retirement completes.
52
- ctx.storage?.deleteDlqEntry(id);
41
+ dlqQueue = terminalLocation.queueName;
53
42
  }
43
+ let dependencyCompletion = false;
54
44
  if (ctx.depCompletions?.has(id)) {
55
45
  const hasUnresolvedConsumers = ctx.shards.some((shard) => (shard.getJobsWaitingFor(id)?.size ?? 0) > 0);
56
46
  if (hasUnresolvedConsumers) {
57
47
  throw new Error(`Custom ID ${String(id)} still has unresolved dependency consumers`);
58
48
  }
59
- releaseDependencyCompletionPins([id], ctx);
60
- ctx.storage?.deleteDependencyCompletion(id);
61
- ctx.depCompletions.delete(id);
49
+ dependencyCompletion = true;
50
+ }
51
+ const retirement = completed || dlqQueue || dependencyCompletion
52
+ ? { completed, dlqQueue, dependencyCompletion }
53
+ : undefined;
54
+ return { skip: false, id, retirement };
55
+ }
56
+ /** Publish custom-ID ownership after the matching storage admission succeeds. */
57
+ export function commitCustomIdAdmission(input, decision, ctx) {
58
+ const { id, retirement } = decision;
59
+ if (retirement?.completed) {
60
+ ctx.completedJobs.delete(id);
61
+ ctx.completedJobsData.delete(id);
62
+ ctx.jobResults.delete(id);
63
+ ctx.jobIndex.delete(id);
64
+ }
65
+ if (retirement?.dlqQueue) {
66
+ const terminalShard = ctx.shards[shardIndex(retirement.dlqQueue)];
67
+ terminalShard.removeFromDlq(retirement.dlqQueue, id);
68
+ ctx.jobIndex.delete(id);
62
69
  }
63
- // A durable jobs row may outlive its in-memory tracking after an interrupted
64
- // cleanup. The storage insert upserts that orphan without adding a DELETE to
65
- // every custom-ID push.
70
+ if (retirement?.dependencyCompletion)
71
+ ctx.depCompletions?.delete(id);
72
+ // A recycled deterministic ID starts with no timeout or retired-lease state.
73
+ const timedOutGeneration = ctx.timedOutJobs?.get(id);
66
74
  ctx.timedOutJobs?.delete(id);
67
- ctx.customIdMap.set(input.customId, id);
68
- return { skip: false, id };
75
+ if (timedOutGeneration?.token)
76
+ ctx.retiredTimeoutLeaseTokens?.delete(timedOutGeneration.token);
77
+ ctx.retiredCronLeaseTokens?.delete(id);
78
+ if (input.customId)
79
+ ctx.customIdMap.set(input.customId, id);
69
80
  }
@@ -1,3 +1,4 @@
1
+ import { normalizeJobPayload } from '../../domain/types/job';
1
2
  import { validateFlowTopology } from './flowTopologyValidation';
2
3
  const MAX_FLOW_JOBS = 10_000;
3
4
  const MAX_JOB_DATA_BYTES = 10 * 1024 * 1024;
@@ -99,11 +100,13 @@ function validateData(data) {
99
100
  throw new Error('Job data too large (max 10MB)');
100
101
  }
101
102
  const value = data;
102
- if (typeof value.name !== 'string' || value.name.length === 0 || value.name.length > 256) {
103
- throw new Error('flow job data.name must be a non-empty string of at most 256 characters');
104
- }
105
103
  return { encodedLength: encoded.length, value };
106
104
  }
105
+ function validateName(name) {
106
+ if (name.length === 0 || name.length > 256) {
107
+ throw new Error('flow job name must be a non-empty string of at most 256 characters');
108
+ }
109
+ }
107
110
  function validateIdList(value, name) {
108
111
  if (value !== undefined &&
109
112
  (!Array.isArray(value) ||
@@ -154,7 +157,9 @@ export function validateAtomicFlowBatch(batch) {
154
157
  }
155
158
  validateIdList(job.input.dependsOn, 'dependsOn');
156
159
  validateIdList(job.input.childrenIds, 'childrenIds');
157
- const validatedData = validateData(job.input.data);
160
+ const payload = normalizeJobPayload(job.input);
161
+ validateName(payload.name);
162
+ const validatedData = validateData(payload.data);
158
163
  totalDataBytes += validatedData.encodedLength;
159
164
  if (totalDataBytes > MAX_FLOW_DATA_BYTES) {
160
165
  throw new Error('flow data is too large (max 64MB per atomic batch)');
@@ -7,6 +7,38 @@ import { webhookLog } from '../../shared/logger';
7
7
  import { withWriteLock } from '../../shared/lock';
8
8
  import { releaseDependencyCompletionPins, } from '../dependencyCompletions';
9
9
  export { discardJob, moveJobToDelayed } from './jobMoveOperations';
10
+ const FLOW_METADATA_KEYS = [
11
+ '__parentId',
12
+ '__parentQueue',
13
+ '__childrenIds',
14
+ '__flowParentId',
15
+ '__flowParentIds',
16
+ ];
17
+ function dataRecord(value) {
18
+ return typeof value === 'object' && value !== null && !Array.isArray(value)
19
+ ? value
20
+ : null;
21
+ }
22
+ /** Merge caller data without allowing it to erase or forge broker-owned flow metadata. */
23
+ function updatedJobData(job, userData) {
24
+ const current = dataRecord(job.data);
25
+ const metadata = current
26
+ ? Object.fromEntries(FLOW_METADATA_KEYS.filter((key) => Object.hasOwn(current, key)).map((key) => [
27
+ key,
28
+ current[key],
29
+ ]))
30
+ : {};
31
+ if (Object.keys(metadata).length === 0)
32
+ return userData;
33
+ const next = dataRecord(userData);
34
+ if (!next)
35
+ throw new Error('flow job data must be an object');
36
+ for (const key of Object.keys(next)) {
37
+ if (key.startsWith('__'))
38
+ throw new Error(`flow job data key is reserved: ${key}`);
39
+ }
40
+ return { ...next, ...metadata };
41
+ }
10
42
  /** Cancel a job (remove from queue) */
11
43
  export async function cancelJob(jobId, ctx) {
12
44
  const location = ctx.jobIndex.get(jobId);
@@ -19,8 +51,9 @@ export async function cancelJob(jobId, ctx) {
19
51
  if (job) {
20
52
  // Update running counters for O(1) stats
21
53
  shard.decrementQueued(jobId);
22
- if (job.uniqueKey)
23
- shard.releaseUniqueKey(location.queueName, job.uniqueKey);
54
+ if (job.uniqueKey) {
55
+ shard.releaseUniqueKeyIfOwned(location.queueName, job.uniqueKey, job.id);
56
+ }
24
57
  ctx.jobIndex.delete(jobId);
25
58
  ctx.storage?.deleteJob(jobId);
26
59
  ctx.dependencyResults.releaseConsumer(jobId);
@@ -46,8 +79,9 @@ export async function cancelJob(jobId, ctx) {
46
79
  if (waiting) {
47
80
  shard.waitingDeps.delete(jobId);
48
81
  shard.unregisterDependencies(jobId, waiting.dependsOn);
49
- if (waiting.uniqueKey)
50
- shard.releaseUniqueKey(location.queueName, waiting.uniqueKey);
82
+ if (waiting.uniqueKey) {
83
+ shard.releaseUniqueKeyIfOwned(location.queueName, waiting.uniqueKey, waiting.id);
84
+ }
51
85
  ctx.jobIndex.delete(jobId);
52
86
  ctx.storage?.deleteJob(jobId);
53
87
  ctx.dependencyResults.releaseConsumer(jobId);
@@ -118,10 +152,13 @@ export async function updateJobData(jobId, data, ctx) {
118
152
  if (location?.type === 'queue') {
119
153
  return withWriteLock(ctx.shardLocks[location.shardIdx], () => {
120
154
  const shard = ctx.shards[location.shardIdx];
121
- const job = shard.getQueue(location.queueName).find(jobId) ?? shard.waitingDeps.get(jobId);
155
+ const job = shard.getQueue(location.queueName).find(jobId) ??
156
+ shard.waitingDeps.get(jobId) ??
157
+ shard.waitingChildren.get(jobId);
122
158
  if (job) {
123
- job.data = data;
124
- ctx.storage?.updateJobData(jobId, data);
159
+ const updated = updatedJobData(job, data);
160
+ ctx.storage?.updateJobData(jobId, updated);
161
+ job.data = updated;
125
162
  return true;
126
163
  }
127
164
  return false;
@@ -132,8 +169,9 @@ export async function updateJobData(jobId, data, ctx) {
132
169
  return withWriteLock(ctx.processingLocks[procIdx], () => {
133
170
  const job = ctx.processingShards[procIdx].get(jobId);
134
171
  if (job) {
135
- job.data = data;
136
- ctx.storage?.updateJobData(jobId, data);
172
+ const updated = updatedJobData(job, data);
173
+ ctx.storage?.updateJobData(jobId, updated);
174
+ job.data = updated;
137
175
  return true;
138
176
  }
139
177
  return false;
@@ -161,8 +199,9 @@ async function updateRepeatSuccessor(originalId, data, ctx) {
161
199
  .getQueue(successorLoc.queueName)
162
200
  .find(successorId);
163
201
  if (job) {
164
- job.data = data;
165
- ctx.storage?.updateJobData(successorId, data);
202
+ const updated = updatedJobData(job, data);
203
+ ctx.storage?.updateJobData(successorId, updated);
204
+ job.data = updated;
166
205
  return true;
167
206
  }
168
207
  return false;
@@ -27,7 +27,7 @@ export async function moveJobToDelayed(jobId, delay, ctx) {
27
27
  const queueName = job.queue;
28
28
  await withWriteLock(ctx.shardLocks[idx], () => {
29
29
  const shard = ctx.shards[idx];
30
- shard.releaseJobResources(job.queue, job.uniqueKey, job.groupId);
30
+ shard.releaseJobResources(job.queue, job.uniqueKey, job.groupId, job.id);
31
31
  shard.getQueue(job.queue).push(job);
32
32
  const isDelayed = job.runAt > now;
33
33
  shard.incrementQueued(jobId, isDelayed, job.createdAt, job.queue, job.runAt);
@@ -78,11 +78,11 @@ export async function discardJob(jobId, ctx) {
78
78
  const entry = await withWriteLock(ctx.shardLocks[idx], () => {
79
79
  const shard = ctx.shards[idx];
80
80
  if (fromProcessing) {
81
- shard.releaseJobResources(validJob.queue, validJob.uniqueKey, validJob.groupId);
81
+ shard.releaseJobResources(validJob.queue, validJob.uniqueKey, validJob.groupId, validJob.id);
82
82
  shard.notify(validJob.queue);
83
83
  }
84
84
  else if (validJob.uniqueKey) {
85
- shard.releaseUniqueKey(validJob.queue, validJob.uniqueKey);
85
+ shard.releaseUniqueKeyIfOwned(validJob.queue, validJob.uniqueKey, validJob.id);
86
86
  }
87
87
  const dlqEntry = shard.addToDlq(validJob);
88
88
  ctx.jobIndex.set(jobId, { type: 'dlq', queueName: validJob.queue });
@@ -5,7 +5,7 @@
5
5
  * - changeWaitingDelay: Waiting -> Delayed
6
6
  * - moveToWaitingChildren: Active -> WaitingChildren
7
7
  */
8
- import type { JobId } from '../../domain/types/job';
8
+ import { type JobId } from '../../domain/types/job';
9
9
  import type { JobManagementContext } from './jobManagement';
10
10
  /** Move active job back to waiting */
11
11
  export declare function moveActiveToWait(jobId: JobId, ctx: JobManagementContext): Promise<boolean>;
@@ -5,6 +5,7 @@
5
5
  * - changeWaitingDelay: Waiting -> Delayed
6
6
  * - moveToWaitingChildren: Active -> WaitingChildren
7
7
  */
8
+ import { MAX_TIMELINE_ENTRIES } from '../../domain/types/job';
8
9
  import { shardIndex, processingShardIndex } from '../../shared/hash';
9
10
  import { withWriteLock } from '../../shared/lock';
10
11
  import { releaseClaimedJobOwnership } from './jobClaim';
@@ -31,7 +32,7 @@ export async function moveActiveToWait(jobId, ctx) {
31
32
  await withWriteLock(ctx.shardLocks[idx], () => {
32
33
  const shard = ctx.shards[idx];
33
34
  // Release concurrency/uniqueKey/group slots before re-queueing
34
- shard.releaseJobResources(job.queue, job.uniqueKey, job.groupId);
35
+ shard.releaseJobResources(job.queue, job.uniqueKey, job.groupId, job.id);
35
36
  shard.getQueue(job.queue).push(job);
36
37
  shard.incrementQueued(jobId, false, job.createdAt, job.queue, job.runAt);
37
38
  ctx.jobIndex.set(jobId, { type: 'queue', shardIdx: idx, queueName: job.queue });
@@ -82,13 +83,26 @@ export async function moveToWaitingChildren(jobId, ctx) {
82
83
  });
83
84
  if (!job)
84
85
  return false;
86
+ const now = Date.now();
87
+ job.startedAt = null;
88
+ if (job.timeline.length < MAX_TIMELINE_ENTRIES) {
89
+ job.timeline.push({ state: 'waiting-children', timestamp: now });
90
+ }
85
91
  const idx = shardIndex(job.queue);
86
92
  await withWriteLock(ctx.shardLocks[idx], () => {
87
93
  const shard = ctx.shards[idx];
88
94
  // Release concurrency/uniqueKey/group slots before moving to waitingChildren
89
- shard.releaseJobResources(job.queue, job.uniqueKey, job.groupId);
95
+ shard.releaseJobResources(job.queue, job.uniqueKey, job.groupId, job.id);
90
96
  shard.waitingChildren.set(jobId, job);
91
97
  ctx.jobIndex.set(jobId, { type: 'queue', shardIdx: idx, queueName: job.queue });
92
98
  });
99
+ ctx.storage?.markWaitingChildren(jobId, job.timeline);
100
+ ctx.eventsManager.broadcast({
101
+ eventType: "waiting-children" /* EventType.WaitingChildren */,
102
+ jobId,
103
+ queue: job.queue,
104
+ timestamp: now,
105
+ prev: 'active',
106
+ });
93
107
  return true;
94
108
  }
@@ -0,0 +1,36 @@
1
+ import { type Job, type JobId, type JobInput } from '../../domain/types/job';
2
+ import type { Shard } from '../../domain/queue/shard';
3
+ import { type DedupResult } from './pushDeduplication';
4
+ import { type AcceptedCustomId } from './pushAdmission';
5
+ import type { PushContext } from './pushContext';
6
+ type ParentMembership = 'queue' | 'waiting-deps' | 'waiting-children';
7
+ export interface ParentLinkPlan {
8
+ readonly child: Job;
9
+ readonly parent: Job;
10
+ readonly linkedChild: Job;
11
+ readonly linkedParent: Job;
12
+ readonly parentMembership: ParentMembership;
13
+ readonly childFinished: boolean;
14
+ }
15
+ /** Validate every parent before a batch mutates its accepted prefix. */
16
+ export declare function validateParentLinkInputs(inputs: readonly JobInput[], ctx: PushContext): void;
17
+ export declare function prepareParentLink(child: Job, ctx: PushContext, childFinished?: boolean, parentIdOverride?: JobId, now?: number): ParentLinkPlan;
18
+ /** Publish a persisted link while the parent and child queue shards are locked. */
19
+ export declare function commitParentLink(plan: ParentLinkPlan, ctx: PushContext): void;
20
+ export declare function parentLinkState(plan: ParentLinkPlan): 'waiting-children' | 'waiting' | 'prioritized' | 'delayed';
21
+ /** Persist and publish a new child and its existing parent as one locked operation. */
22
+ export declare function acceptParentedJob(options: {
23
+ job: Job;
24
+ input: JobInput;
25
+ target: {
26
+ queue: string;
27
+ shard: Shard;
28
+ shardIdx: number;
29
+ };
30
+ dedup: Exclude<DedupResult, {
31
+ skip: true;
32
+ }>;
33
+ customId: AcceptedCustomId;
34
+ ctx: PushContext;
35
+ }): JobId[];
36
+ export {};
@@ -0,0 +1,153 @@
1
+ import { MAX_TIMELINE_ENTRIES } from '../../domain/types/job';
2
+ import { shardIndex } from '../../shared/hash';
3
+ import { replaceActiveDedupJob, replacePendingDedupJob, } from './pushDeduplication';
4
+ import { admissionMetadata, publishPreparedJob } from './pushAdmission';
5
+ import { prepareJobInsertion } from './pushInsert';
6
+ import { parentLinkQueue } from './parentLinkInput';
7
+ function recordData(value) {
8
+ return value && typeof value === 'object' && !Array.isArray(value)
9
+ ? value
10
+ : {};
11
+ }
12
+ function locateParent(parentId, ctx) {
13
+ const location = ctx.jobIndex.get(parentId);
14
+ if (!location)
15
+ throw new Error(`Parent job not found: ${String(parentId)}`);
16
+ if (location.type !== 'queue') {
17
+ throw new Error(`Parent job ${String(parentId)} is not linkable`);
18
+ }
19
+ const shard = ctx.shards[location.shardIdx];
20
+ const queued = shard.getQueue(location.queueName).find(parentId);
21
+ if (queued)
22
+ return { job: queued, membership: 'queue' };
23
+ const waiting = shard.waitingDeps.get(parentId);
24
+ if (waiting)
25
+ return { job: waiting, membership: 'waiting-deps' };
26
+ const waitingChildren = shard.waitingChildren.get(parentId);
27
+ if (waitingChildren)
28
+ return { job: waitingChildren, membership: 'waiting-children' };
29
+ throw new Error(`Parent job ${String(parentId)} changed state while linking`);
30
+ }
31
+ /** Validate every parent before a batch mutates its accepted prefix. */
32
+ export function validateParentLinkInputs(inputs, ctx) {
33
+ for (const input of inputs) {
34
+ const expectedQueue = parentLinkQueue(input);
35
+ if (!input.parentId || !expectedQueue)
36
+ continue;
37
+ if (input.customId && String(input.parentId) === input.customId) {
38
+ throw new Error('A job cannot be its own parent');
39
+ }
40
+ const { job: parent } = locateParent(input.parentId, ctx);
41
+ if (parent.queue !== expectedQueue) {
42
+ throw new Error(`Parent job ${String(input.parentId)} belongs to queue ${parent.queue}, not ${expectedQueue}`);
43
+ }
44
+ }
45
+ }
46
+ export function prepareParentLink(child, ctx, childFinished = false, parentIdOverride, now = Date.now()) {
47
+ const parentId = parentIdOverride ?? child.parentId;
48
+ if (!parentId)
49
+ throw new Error(`Job ${String(child.id)} has no parent`);
50
+ if (child.id === parentId)
51
+ throw new Error('A job cannot be its own parent');
52
+ const { job: parent, membership } = locateParent(parentId, ctx);
53
+ const childrenIds = parent.childrenIds.includes(child.id)
54
+ ? [...parent.childrenIds]
55
+ : [...parent.childrenIds, child.id];
56
+ const dependsOn = parent.dependsOn.includes(child.id)
57
+ ? [...parent.dependsOn]
58
+ : [...parent.dependsOn, child.id];
59
+ const childData = {
60
+ ...recordData(child.data),
61
+ __parentId: String(parent.id),
62
+ __parentQueue: parent.queue,
63
+ };
64
+ const parentData = { ...recordData(parent.data), __childrenIds: childrenIds.map(String) };
65
+ const timeline = [...parent.timeline];
66
+ if (!childFinished &&
67
+ timeline.at(-1)?.state !== 'waiting-children' &&
68
+ timeline.length < MAX_TIMELINE_ENTRIES) {
69
+ timeline.push({ state: 'waiting-children', timestamp: now });
70
+ }
71
+ return {
72
+ child,
73
+ parent,
74
+ linkedChild: { ...child, parentId: parent.id, data: childData },
75
+ linkedParent: { ...parent, childrenIds, dependsOn, data: parentData, timeline },
76
+ parentMembership: membership,
77
+ childFinished,
78
+ };
79
+ }
80
+ /** Publish a persisted link while the parent and child queue shards are locked. */
81
+ export function commitParentLink(plan, ctx) {
82
+ const { child, parent, linkedChild, linkedParent } = plan;
83
+ child.parentId = linkedChild.parentId;
84
+ child.data = linkedChild.data;
85
+ parent.childrenIds = linkedParent.childrenIds;
86
+ parent.dependsOn = linkedParent.dependsOn;
87
+ parent.data = linkedParent.data;
88
+ parent.timeline = linkedParent.timeline;
89
+ if (!plan.childFinished) {
90
+ const parentShard = ctx.shards[shardIndex(parent.queue)];
91
+ if (plan.parentMembership === 'queue') {
92
+ if (parentShard.getQueue(parent.queue).remove(parent.id)) {
93
+ parentShard.decrementQueued(parent.id);
94
+ parentShard.removeFromTemporalIndex(parent.id);
95
+ }
96
+ parentShard.waitingDeps.set(parent.id, parent);
97
+ }
98
+ else if (plan.parentMembership === 'waiting-children') {
99
+ parentShard.waitingChildren.delete(parent.id);
100
+ parentShard.waitingDeps.set(parent.id, parent);
101
+ }
102
+ parentShard.registerDependencies(parent.id, linkedParent.dependsOn);
103
+ }
104
+ ctx.dependencyResults.registerConsumer(parent.id, linkedParent.dependsOn);
105
+ for (const dependencyId of linkedParent.dependsOn) {
106
+ if (ctx.jobResults.has(dependencyId)) {
107
+ ctx.dependencyResults.retain(dependencyId, ctx.jobResults.get(dependencyId));
108
+ }
109
+ }
110
+ }
111
+ export function parentLinkState(plan) {
112
+ if (!plan.childFinished)
113
+ return 'waiting-children';
114
+ if (plan.parent.runAt > Date.now())
115
+ return 'delayed';
116
+ return plan.parent.priority > 0 ? 'prioritized' : 'waiting';
117
+ }
118
+ function persistLink(plan, ctx, mode, admission) {
119
+ ctx.storage?.commitFlowLink(plan.linkedChild, plan.linkedParent, parentLinkState(plan), mode, admission);
120
+ }
121
+ /** Persist and publish a new child and its existing parent as one locked operation. */
122
+ export function acceptParentedJob(options) {
123
+ const { job, input, target, dedup, customId, ctx } = options;
124
+ const plan = prepareParentLink(job, ctx);
125
+ let released = [];
126
+ if (dedup.replacement) {
127
+ const replacement = dedup.replacement;
128
+ released = replacePendingDedupJob(replacement, job, input, target, {
129
+ ctx,
130
+ customId,
131
+ persist: (admission) => {
132
+ persistLink(plan, ctx, { type: 'replace', previousJobId: replacement.job.id }, admission);
133
+ },
134
+ });
135
+ }
136
+ else if (dedup.activeOwnerId) {
137
+ const activeOwnerId = dedup.activeOwnerId;
138
+ replaceActiveDedupJob(activeOwnerId, job, input, target, {
139
+ ctx,
140
+ customId,
141
+ persist: (admission) => {
142
+ persistLink(plan, ctx, { type: 'transfer-active', previousJobId: activeOwnerId }, admission);
143
+ },
144
+ });
145
+ }
146
+ else {
147
+ const prepared = prepareJobInsertion(job, ctx);
148
+ persistLink(plan, ctx, { type: 'insert' }, admissionMetadata(customId, prepared));
149
+ publishPreparedJob({ job, input, target, customId, prepared, ctx });
150
+ }
151
+ commitParentLink(plan, ctx);
152
+ return released;
153
+ }