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,438 +1,6 @@
1
- /**
2
- * Background Tasks - Periodic maintenance operations
3
- * Orchestrates stall detection, cleanup, recovery, DLQ maintenance
4
- */
5
- import { queueLog } from '../shared/logger';
6
- import { shardIndex } from '../shared/hash';
7
- import { createDlqEntry } from '../domain/types/dlq';
8
- import { calculateBackoff } from '../domain/types/job';
9
- import * as dlqOps from './dlqManager';
10
- import { checkExpiredLocks } from './lockManager';
11
- import { cleanup } from './cleanupTasks';
12
- import { checkStalledJobs } from './stallDetection';
13
- import { checkpointDependencyPromotion, dependencyReadyState, processPendingDependencies, } from './dependencyProcessor';
14
- import { handleTaskError, handleTaskSuccess, getTaskErrorStats } from './taskErrorTracking';
15
- import { runMonitoringChecks } from './monitoringChecks';
16
- import { isCorruptDependsOn, persistedJobState, } from '../infrastructure/persistence/sqliteSerializer';
17
- import { reconcileDependencyCompletionPins } from './dependencyCompletions';
18
- export { getTaskErrorStats };
19
- /**
20
- * Start all background tasks
21
- * Returns handles that can be used to stop tasks later
22
- */
23
- export function startBackgroundTasks(ctx, cronScheduler) {
24
- const cleanupInterval = setInterval(() => {
25
- cleanup(ctx)
26
- .then(() => {
27
- handleTaskSuccess('cleanup');
28
- // Run monitoring checks after cleanup (same interval)
29
- runMonitoringChecks({
30
- queueNamesCache: ctx.queueNamesCache,
31
- shards: ctx.shards,
32
- processingShards: ctx.processingShards,
33
- workerManager: ctx.workerManager,
34
- storage: ctx.storage,
35
- dashboardEmit: ctx.dashboardEmit,
36
- state: ctx.monitoringState,
37
- });
38
- })
39
- .catch((err) => {
40
- handleTaskError('cleanup', err);
41
- });
42
- }, ctx.config.cleanupIntervalMs);
43
- const timeoutInterval = setInterval(() => {
44
- checkJobTimeouts(ctx);
45
- }, ctx.config.jobTimeoutCheckMs);
46
- // Safety fallback: event-driven path in queueManager handles the fast path
47
- const depCheckInterval = setInterval(() => {
48
- if (ctx.pendingDepChecks.size === 0)
49
- return;
50
- processPendingDependencies(ctx)
51
- .then(() => {
52
- handleTaskSuccess('dependency');
53
- })
54
- .catch((err) => {
55
- handleTaskError('dependency', err);
56
- });
57
- }, ctx.config.dependencyCheckMs);
58
- const stallCheckInterval = setInterval(() => {
59
- checkStalledJobs(ctx);
60
- }, ctx.config.stallCheckMs);
61
- const dlqMaintenanceInterval = setInterval(() => {
62
- performDlqMaintenance(ctx);
63
- }, ctx.config.dlqMaintenanceMs);
64
- // Lock expiration check runs at same interval as stall check
65
- const lockCheckInterval = setInterval(() => {
66
- checkExpiredLocks(getLockContext(ctx))
67
- .then(() => {
68
- handleTaskSuccess('lockExpiration');
69
- })
70
- .catch((err) => {
71
- handleTaskError('lockExpiration', err);
72
- });
73
- }, ctx.config.stallCheckMs);
74
- cronScheduler.start();
75
- return {
76
- cleanupInterval,
77
- timeoutInterval,
78
- depCheckInterval,
79
- stallCheckInterval,
80
- dlqMaintenanceInterval,
81
- lockCheckInterval,
82
- cronScheduler,
83
- };
84
- }
85
- /**
86
- * Stop all background tasks
87
- */
88
- export function stopBackgroundTasks(handles) {
89
- clearInterval(handles.cleanupInterval);
90
- clearInterval(handles.timeoutInterval);
91
- clearInterval(handles.depCheckInterval);
92
- clearInterval(handles.stallCheckInterval);
93
- clearInterval(handles.dlqMaintenanceInterval);
94
- clearInterval(handles.lockCheckInterval);
95
- handles.cronScheduler.stop();
96
- }
97
- /** Extract lock context from background context */
98
- function getLockContext(ctx) {
99
- return {
100
- jobIndex: ctx.jobIndex,
101
- jobLocks: ctx.jobLocks,
102
- clientJobs: ctx.clientJobs,
103
- processingShards: ctx.processingShards,
104
- processingLocks: ctx.processingLocks,
105
- shards: ctx.shards,
106
- shardLocks: ctx.shardLocks,
107
- eventsManager: ctx.eventsManager,
108
- dashboardEmit: ctx.dashboardEmit,
109
- // #110: without storage, handleMaxStallsExceeded's saveDlqEntry/deleteJob
110
- // (the #97 fix) silently no-op via optional chaining on the ONLY
111
- // production path to checkExpiredLocks — the DLQ move never persists and
112
- // SQLite keeps an orphan `active` row. LockContext.storage is optional,
113
- // which is why this omission compiled unnoticed since 2.8.17.
114
- storage: ctx.storage,
115
- };
116
- }
117
- // ============ Job Timeouts ============
118
- export function checkJobTimeouts(ctx) {
119
- const now = Date.now();
120
- for (const procShard of ctx.processingShards) {
121
- for (const [jobId, job] of procShard) {
122
- if (job.timeout && job.startedAt && now - job.startedAt > job.timeout) {
123
- ctx.dashboardEmit?.('job:timeout', {
124
- jobId: String(jobId),
125
- queue: job.queue,
126
- timeout: job.timeout,
127
- });
128
- // Mark as timed-out BEFORE requeuing for retry, so a late ACK from the
129
- // (still-hung) worker that exceeded the deadline is discarded instead of
130
- // phantom-completing the job and skipping the retry. See ack-recovery in
131
- // queueManager.ack (timedOutJobs guard).
132
- ctx.timedOutJobs?.add(jobId);
133
- ctx.fail(jobId, 'Job timeout exceeded').catch((err) => {
134
- queueLog.error('Failed to mark timed out job as failed', {
135
- jobId: String(jobId),
136
- error: String(err),
137
- });
138
- });
139
- }
140
- }
141
- }
142
- }
143
- // ============ DLQ Maintenance ============
144
- function performDlqMaintenance(ctx) {
145
- const dlqCtx = {
146
- shards: ctx.shards,
147
- jobIndex: ctx.jobIndex,
148
- jobResults: ctx.jobResults,
149
- jobLogs: ctx.jobLogs,
150
- storage: ctx.storage,
151
- };
152
- for (const queueName of ctx.queueNamesCache) {
153
- try {
154
- const retried = dlqOps.processAutoRetry(queueName, dlqCtx);
155
- if (retried > 0) {
156
- ctx.dashboardEmit?.('dlq:auto-retried', { queue: queueName, count: retried });
157
- }
158
- const expired = dlqOps.purgeExpiredDlq(queueName, dlqCtx);
159
- if (expired > 0)
160
- ctx.dashboardEmit?.('dlq:expired', { queue: queueName, count: expired });
161
- }
162
- catch (err) {
163
- queueLog.error('DLQ maintenance failed', { queue: queueName, error: String(err) });
164
- }
165
- }
166
- }
167
- // ============ Recovery ============
168
- /** Batch size for paginated recovery */
169
- const RECOVERY_BATCH_SIZE = 10000;
170
- /**
171
- * Route a job whose `depends_on` blob was corrupt on disk straight to the DLQ.
172
- *
173
- * Its real dependency metadata is unrecoverable, so it must never be enqueued
174
- * as "ready" (out-of-order execution) nor parked in waitingDeps behind a
175
- * dependency that can never complete (an unbounded leak).
176
- *
177
- * We persist the DLQ entry to disk and drop the jobs row here, but do NOT add
178
- * it to the in-memory DLQ — the later `loadDlq()` pass (which runs after both
179
- * recovery phases) restores every persisted entry into memory exactly once.
180
- * Adding it here too would double-count it. The job row is deleted so that pass
181
- * sees only the DLQ table.
182
- */
183
- function quarantineCorruptDependsOn(ctx, job) {
184
- if (!ctx.storage)
185
- return;
186
- const entry = createDlqEntry(job, "unknown" /* FailureReason.Unknown */, 'corrupt-dependency-metadata');
187
- ctx.storage.saveDlqEntry(entry);
188
- ctx.storage.deleteJob(job.id);
189
- ctx.registerQueueName(job.queue);
190
- queueLog.error('Recovered job with corrupt depends_on metadata -> routed to DLQ', {
191
- jobId: String(job.id),
192
- queue: job.queue,
193
- });
194
- }
195
- // eslint-disable-next-line complexity
196
- export function recover(ctx) {
197
- if (!ctx.storage)
198
- return;
199
- // Keep the full pre-reconciliation window outside the bounded RAM tracker.
200
- // A restart may lower maxCompletedJobs; pruning before Phase 2 reconstructs
201
- // reverse edges could discard an old proof still owned by a waiting parent.
202
- const dependencyCompletions = ctx.storage.loadDependencyCompletions();
203
- // Load completed job IDs from SQLite for dependency checking
204
- const completedInDb = ctx.storage.loadCompletedJobIds();
205
- for (const record of dependencyCompletions)
206
- completedInDb.add(record.jobId);
207
- // Load DLQ job IDs so Phase 1 can skip stale active rows for DLQ'd jobs
208
- // (legacy DBs predate the DLQ-row cleanup fix in failJob).
209
- const dlqJobIds = ctx.storage.loadDlqJobIds();
210
- const queueStates = ctx.storage.loadQueueState();
211
- // Recovery bounds are needed before Phase 1 classifies interrupted active
212
- // jobs. Restore the stall policy first; paused/limiter state can wait until
213
- // the queues themselves have been rebuilt below.
214
- for (const qs of queueStates) {
215
- if (qs.stallConfig) {
216
- ctx.shards[shardIndex(qs.name)].setStallConfig(qs.name, qs.stallConfig);
217
- }
218
- if (qs.dlqConfig) {
219
- ctx.shards[shardIndex(qs.name)].setDlqConfig(qs.name, qs.dlqConfig);
220
- }
221
- }
222
- const now = Date.now();
223
- // === PHASE 1: Recover active jobs (were processing when server stopped) ===
224
- // These jobs are considered "stalled" and need to be retried or moved to DLQ
225
- while (true) {
226
- // Every successfully handled row leaves state='active' (retry -> waiting, or
227
- // delete -> DLQ/discard). Always read the first page: advancing OFFSET over
228
- // this shrinking result set would skip up to half of the active rows.
229
- const activeJobs = ctx.storage.loadActiveJobs(RECOVERY_BATCH_SIZE, 0);
230
- if (activeJobs.length === 0)
231
- break;
232
- for (const job of activeJobs) {
233
- const idx = shardIndex(job.queue);
234
- const shard = ctx.shards[idx];
235
- const stallConfig = shard.getStallConfig(job.queue);
236
- // Skip recovery for cron jobs with preventOverlap (uniqueKey='cron:*').
237
- // These jobs will be re-created by the cron scheduler at the next tick.
238
- // Re-queuing them would cause the "starts right away" bug (#73).
239
- if (job.uniqueKey?.startsWith('cron:')) {
240
- ctx.storage.deleteJob(job.id);
241
- ctx.registerQueueName(job.queue);
242
- continue;
243
- }
244
- // Skip jobs already present in DLQ (stale 'active' row from before the
245
- // failJob fix). Drop the orphan row so Phase 2 and subsequent queries
246
- // don't double-count it.
247
- if (dlqJobIds.has(job.id)) {
248
- ctx.storage.deleteJob(job.id);
249
- ctx.registerQueueName(job.queue);
250
- continue;
251
- }
252
- // A corrupt depends_on blob makes the job's real dependencies
253
- // unrecoverable: route it to the DLQ instead of retrying it (which could
254
- // execute it out-of-order once stalls are exhausted).
255
- if (isCorruptDependsOn(job)) {
256
- quarantineCorruptDependsOn(ctx, job);
257
- continue;
258
- }
259
- // Increment stall count (job was interrupted)
260
- job.stallCount = (job.stallCount || 0) + 1;
261
- job.attempts++;
262
- job.startedAt = null;
263
- job.lastHeartbeat = now;
264
- // A crash consumes one processing attempt and one stall allowance. Both
265
- // bounds are terminal: requeueing after either reaches its configured
266
- // maximum would make attempts/stalls unbounded across restart loops.
267
- const maxStalls = stallConfig.maxStalls ?? 3;
268
- const attemptsExhausted = job.attempts >= job.maxAttempts;
269
- const stallsExhausted = maxStalls > 0 && job.stallCount >= maxStalls;
270
- if (attemptsExhausted || stallsExhausted) {
271
- // Move to DLQ
272
- const reason = attemptsExhausted
273
- ? "max_attempts_exceeded" /* FailureReason.MaxAttemptsExceeded */
274
- : "stalled" /* FailureReason.Stalled */;
275
- const error = attemptsExhausted
276
- ? `Job reached max attempts (${job.maxAttempts}) during startup recovery`
277
- : `Job stalled ${job.stallCount} times (recovered at startup)`;
278
- // Persist only here; the later loadDlq() phase is the single in-memory
279
- // restore path. Adding to the shard now and restoring the same row below
280
- // would duplicate the DLQ entry after every terminal crash recovery.
281
- const entry = createDlqEntry(job, reason, error, shard.getDlqConfig(job.queue));
282
- ctx.storage.saveDlqEntry(entry);
283
- ctx.storage.deleteJob(job.id);
284
- }
285
- else {
286
- // Persist the retry here, but let Phase 2 be the single authoritative
287
- // enqueue path. Enqueuing in both phases replaces the priority-queue entry
288
- // by ID but increments queued/delayed counters twice.
289
- job.runAt = now + calculateBackoff(job);
290
- ctx.storage.updateForRetry(job);
291
- }
292
- ctx.registerQueueName(job.queue);
293
- }
294
- if (activeJobs.length < RECOVERY_BATCH_SIZE)
295
- break;
296
- }
297
- // === PHASE 2: Load pending jobs ===
298
- let offset = 0;
299
- const corruptPendingJobs = [];
300
- // Load pending jobs in batches to avoid memory spikes
301
- while (true) {
302
- const jobs = ctx.storage.loadPendingJobs(RECOVERY_BATCH_SIZE, offset);
303
- if (jobs.length === 0)
304
- break;
305
- for (const job of jobs) {
306
- const idx = shardIndex(job.queue);
307
- const shard = ctx.shards[idx];
308
- // A corrupt depends_on blob means the real dependencies are unrecoverable.
309
- // Route the job to the DLQ rather than enqueuing it as ready (out-of-order
310
- // execution) or parking it in waitingDeps forever (unbounded leak).
311
- if (isCorruptDependsOn(job)) {
312
- // Keep the SQLite pending result set stable until OFFSET pagination has
313
- // finished. Deleting this row now shifts a healthy row across the next
314
- // page boundary and leaves it absent from the in-memory queue.
315
- corruptPendingJobs.push(job);
316
- continue;
317
- }
318
- // Check if job has unmet dependencies
319
- // A ready persisted state is an authoritative checkpoint: dependency
320
- // proofs are deliberately bounded and may have expired after promotion.
321
- const hasDependencies = job.dependsOn && job.dependsOn.length > 0;
322
- const recoveredState = persistedJobState(job);
323
- const wasAlreadyPromoted = recoveredState === 'waiting' ||
324
- recoveredState === 'prioritized' ||
325
- recoveredState === 'delayed';
326
- const needsWaitingDeps = hasDependencies &&
327
- !wasAlreadyPromoted &&
328
- !job.dependsOn.every((depId) => ctx.completedJobs.has(depId) || completedInDb.has(depId));
329
- if (needsWaitingDeps) {
330
- // Job is waiting for dependencies - don't add to main queue
331
- shard.waitingDeps.set(job.id, job);
332
- shard.registerDependencies(job.id, job.dependsOn);
333
- // Note: don't call incrementQueued for waitingDeps jobs (matches push.ts behavior)
334
- }
335
- else {
336
- // Job is ready to process
337
- shard.getQueue(job.queue).push(job);
338
- // Update running counters for O(1) stats and temporal index
339
- const state = dependencyReadyState(job, now);
340
- const isDelayed = state === 'delayed';
341
- shard.incrementQueued(job.id, isDelayed, job.createdAt, job.queue, job.runAt);
342
- if (hasDependencies)
343
- checkpointDependencyPromotion(job, state, now, ctx.storage);
344
- }
345
- ctx.jobIndex.set(job.id, { type: 'queue', shardIdx: idx, queueName: job.queue });
346
- ctx.dependencyResults.registerConsumer(job.id, job.dependsOn);
347
- for (const dependencyId of job.dependsOn) {
348
- if (ctx.jobResults.has(dependencyId)) {
349
- ctx.dependencyResults.retain(dependencyId, ctx.jobResults.get(dependencyId));
350
- }
351
- }
352
- // Restore customId mapping for deduplication (fixes idempotency on restart)
353
- if (job.customId) {
354
- ctx.customIdMap.set(job.customId, job.id);
355
- }
356
- // Restore uniqueKey mapping for TTL-based deduplication
357
- if (job.uniqueKey) {
358
- shard.registerUniqueKeyWithTtl(job.queue, job.uniqueKey, job.id, job.deduplicationTtl ?? undefined);
359
- }
360
- ctx.registerQueueName(job.queue);
361
- }
362
- offset += jobs.length;
363
- // If we got less than batch size, we're done
364
- if (jobs.length < RECOVERY_BATCH_SIZE)
365
- break;
366
- }
367
- // Quarantine only after the paginated scan so deletions cannot move page
368
- // boundaries. loadDlq() below restores these entries into memory exactly once.
369
- for (const job of corruptPendingJobs) {
370
- quarantineCorruptDependsOn(ctx, job);
371
- }
372
- // Load DLQ entries
373
- const dlqEntries = ctx.storage.loadDlq();
374
- for (const [queue, entries] of dlqEntries) {
375
- const idx = shardIndex(queue);
376
- const shard = ctx.shards[idx];
377
- for (const entry of entries) {
378
- shard.restoreDlqEntry(queue, entry);
379
- // Populate jobIndex so getJob/getJobState resolve DLQ'd jobs post-restart.
380
- ctx.jobIndex.set(entry.job.id, { type: 'dlq', queueName: queue });
381
- }
382
- ctx.registerQueueName(queue);
383
- }
384
- // === Restore queue control-state (#100) ===
385
- // paused / rate-limit / concurrency live only in LimiterManager's in-memory
386
- // Map; without this load every queue silently un-pauses and loses its limits
387
- // on restart. Applied directly to the owning shard (in-memory only — these
388
- // setters do not re-persist, so there is no write-back loop).
389
- for (const qs of queueStates) {
390
- const shard = ctx.shards[shardIndex(qs.name)];
391
- if (qs.paused)
392
- shard.pause(qs.name);
393
- if (qs.rateLimit !== null) {
394
- // TTL'd limits are temporary by definition: an already-expired one must
395
- // not resurrect as permanent. A still-live one is restored with its
396
- // remaining TTL so it keeps expiring broker-side.
397
- const remainingTtl = qs.rateLimitExpiresAt === null ? undefined : qs.rateLimitExpiresAt - Date.now();
398
- if (remainingTtl === undefined || remainingTtl > 0) {
399
- shard.setRateLimit(qs.name, qs.rateLimit, qs.rateLimitDuration ?? undefined, remainingTtl);
400
- }
401
- }
402
- if (qs.concurrencyLimit !== null)
403
- shard.setConcurrency(qs.name, qs.concurrencyLimit);
404
- ctx.registerQueueName(qs.name);
405
- }
406
- // === PHASE 3: Recover completed jobs ===
407
- // Required for clean('completed'), stats.completed, and in-memory lookups
408
- // on jobs that completed before a server restart (issue #84).
409
- // Capped at maxCompletedJobs (matches BoundedSet cap) so we don't exceed
410
- // the in-memory budget when SQLite contains more rows than the cap.
411
- // Note: we deliberately do NOT populate customIdMap here — Phase 2 owns
412
- // dedup for pending jobs, and push.ts handles customId collision against
413
- // completed jobs via the storage fallback. Touching customIdMap here would
414
- // LRU-evict pending-job mappings when many completed jobs have customIds.
415
- const completedCap = ctx.config.maxCompletedJobs;
416
- let completedLoaded = 0;
417
- let completedOffset = 0;
418
- while (completedLoaded < completedCap) {
419
- const remaining = completedCap - completedLoaded;
420
- const batchSize = Math.min(RECOVERY_BATCH_SIZE, remaining);
421
- const completedBatch = ctx.storage.loadCompletedJobs(batchSize, completedOffset);
422
- if (completedBatch.length === 0)
423
- break;
424
- for (const job of completedBatch) {
425
- ctx.jobIndex.set(job.id, { type: 'completed', queueName: job.queue });
426
- ctx.completedJobs.add(job.id);
427
- ctx.completedJobsData.set(job.id, job);
428
- ctx.registerQueueName(job.queue);
429
- }
430
- completedLoaded += completedBatch.length;
431
- completedOffset += completedBatch.length;
432
- if (completedBatch.length < batchSize)
433
- break;
434
- }
435
- reconcileDependencyCompletionPins(ctx);
436
- }
437
- // Re-export for backward compatibility
438
- export { processPendingDependencies };
1
+ /** Stable background-task import surface. */
2
+ export { startBackgroundTasks, stopBackgroundTasks } from './background/lifecycle';
3
+ export { recover } from './background/recovery';
4
+ export { checkJobTimeouts } from './background/timeouts';
5
+ export { processPendingDependencies } from './dependencyProcessor';
6
+ export { getTaskErrorStats } from './taskErrorTracking';
@@ -50,6 +50,7 @@ async function cleanOrphanedProcessingEntries(ctx, now, stallTimeout) {
50
50
  const job = ctx.processingShards[i].get(jobId);
51
51
  if (job) {
52
52
  ctx.processingShards[i].delete(jobId);
53
+ ctx.timeoutScheduler.cancel(jobId);
53
54
  ctx.jobIndex.delete(jobId);
54
55
  removed++;
55
56
  }
@@ -85,7 +86,7 @@ async function cleanStaleWaitingDependencies(ctx, now) {
85
86
  shard.unregisterDependencies(job.id, job.dependsOn);
86
87
  released.push(...job.dependsOn);
87
88
  if (job.uniqueKey && shard.getUniqueKeyEntry(job.queue, job.uniqueKey)?.jobId === job.id) {
88
- shard.releaseUniqueKey(job.queue, job.uniqueKey);
89
+ shard.releaseUniqueKeyIfOwned(job.queue, job.uniqueKey, job.id);
89
90
  }
90
91
  if (job.customId && ctx.customIdMap.get(job.customId) === job.id) {
91
92
  ctx.customIdMap.delete(job.customId);
@@ -165,6 +165,7 @@ export function forceReleaseClientJobs(clientId, ctx) {
165
165
  // gate passes on the next eligible tick.
166
166
  job.lastHeartbeat = 0;
167
167
  job.startedAt = 0;
168
+ ctx.timeoutScheduler.cancel(jobId);
168
169
  touched++;
169
170
  }
170
171
  ctx.clientJobs.delete(clientId);
@@ -176,10 +177,11 @@ function releaseJobToQueue(opts) {
176
177
  const shard = ctx.shards[queueShardIdx];
177
178
  // Remove from processing
178
179
  ctx.processingShards[procIdx].delete(jobId);
180
+ ctx.timeoutScheduler.cancel(jobId);
179
181
  // Release lock if exists
180
182
  ctx.jobLocks.delete(jobId);
181
183
  // Release all job resources (concurrency, uniqueKey, groupId)
182
- shard.releaseJobResources(job.queue, job.uniqueKey, job.groupId);
184
+ shard.releaseJobResources(job.queue, job.uniqueKey, job.groupId, job.id);
183
185
  // Discard cron jobs with preventOverlap instead of re-queuing (#73).
184
186
  // The cron scheduler will re-create them at the next scheduled tick.
185
187
  // Re-queuing them causes the "starts right away on reconnect" bug.
@@ -1,19 +1,6 @@
1
1
  /**
2
2
  * ContextFactory - Builds context objects for delegated operations
3
3
  */
4
- import type { Job, JobId, JobLock } from '../domain/types/job';
5
- import type { JobLocation } from '../domain/types/queue';
6
- import type { JobLogEntry } from '../domain/types/worker';
7
- import type { Shard } from '../domain/queue/shard';
8
- import type { SqliteStorage } from '../infrastructure/persistence/sqlite';
9
- import type { RWLock } from '../shared/lock';
10
- import type { LRUMap, BoundedSet, BoundedMap, MapLike } from '../shared/lru';
11
- import type { WebhookManager } from './webhookManager';
12
- import type { WorkerManager } from './workerManager';
13
- import type { EventsManager } from './eventsManager';
14
- import type { MonitoringState } from './monitoringChecks';
15
- import type { DependencyResultTracker } from './dependencyResultTracker';
16
- import type { DependencyCompletionTracker } from './dependencyCompletions';
17
4
  import type { LockContext, BackgroundContext, StatsContext } from './types';
18
5
  import type { PushContext } from './operations/push';
19
6
  import type { PullContext } from './operations/pull';
@@ -21,72 +8,8 @@ import type { AckContext } from './operations/ack';
21
8
  import type { JobManagementContext } from './operations/jobManagement';
22
9
  import type { QueryContext } from './operations/queryOperations';
23
10
  import type { DlqContext, RetryCompletedContext } from './dlqManager';
24
- import type { DEFAULT_CONFIG } from './types';
25
- /** Dependencies needed to build all contexts */
26
- export interface ContextDependencies {
27
- config: typeof DEFAULT_CONFIG & {
28
- dataPath?: string;
29
- };
30
- storage: SqliteStorage | null;
31
- shards: Shard[];
32
- shardLocks: RWLock[];
33
- customIdLock: RWLock;
34
- processingShards: Map<JobId, Job>[];
35
- processingLocks: RWLock[];
36
- jobIndex: Map<JobId, JobLocation>;
37
- completedJobs: BoundedSet<JobId>;
38
- completedJobsData: BoundedMap<JobId, Job>;
39
- depCompletions?: DependencyCompletionTracker;
40
- timedOutJobs?: BoundedSet<JobId>;
41
- jobResults: LRUMap<JobId, unknown>;
42
- dependencyResults: DependencyResultTracker;
43
- customIdMap: LRUMap<string, JobId>;
44
- jobLogs: LRUMap<JobId, JobLogEntry[]>;
45
- jobLocks: Map<JobId, JobLock>;
46
- clientJobs: Map<string, Set<JobId>>;
47
- stalledCandidates: Set<JobId>;
48
- pendingDepChecks: Set<JobId>;
49
- queueNamesCache: Set<string>;
50
- repeatChain: Map<JobId, JobId>;
51
- eventsManager: EventsManager;
52
- webhookManager: WebhookManager;
53
- workerManager: WorkerManager;
54
- monitoringState: MonitoringState;
55
- metrics: {
56
- totalPushed: {
57
- value: bigint;
58
- };
59
- totalPulled: {
60
- value: bigint;
61
- };
62
- totalCompleted: {
63
- value: bigint;
64
- };
65
- totalFailed: {
66
- value: bigint;
67
- };
68
- };
69
- startTime: number;
70
- maxLogsPerJob: number;
71
- perQueueMetrics: MapLike<string, {
72
- totalCompleted: bigint;
73
- totalFailed: bigint;
74
- }>;
75
- }
76
- /** Callbacks needed for some contexts */
77
- export interface ContextCallbacks {
78
- fail: (jobId: JobId, error?: string, token?: string) => Promise<void>;
79
- registerQueueName: (queue: string) => void;
80
- unregisterQueueName: (queue: string) => void;
81
- onJobCompleted: (completedId: JobId) => void;
82
- onJobFailed?: (failedId: JobId) => void;
83
- onJobsCompleted: (completedIds: JobId[]) => void;
84
- hasPendingDeps: () => boolean;
85
- onRepeat: (job: Job) => void;
86
- emitDashboardEvent?: (event: string, data: Record<string, unknown>) => void;
87
- onChildTerminalFailure?: (childJob: Job, error: string | undefined) => Promise<void>;
88
- onChildDependencyOption?: (childJob: Job, error: string | undefined) => Promise<void>;
89
- }
11
+ import type { ContextCallbacks, ContextDependencies } from './types/contextFactory';
12
+ export type { ContextCallbacks, ContextDependencies } from './types/contextFactory';
90
13
  /**
91
14
  * Factory for building context objects
92
15
  */
@@ -105,19 +28,19 @@ export declare class ContextFactory {
105
28
  getDlqContext(): DlqContext;
106
29
  getRetryCompletedContext(): RetryCompletedContext;
107
30
  getLogsContext(): {
108
- jobIndex: Map<JobId, JobLocation>;
109
- jobLogs: LRUMap<JobId, JobLogEntry[]>;
31
+ jobIndex: Map<import("../domain/types").JobId, import("../domain/types").JobLocation>;
32
+ jobLogs: import("../shared/lruMap").LRUMap<import("../domain/types").JobId, import("../domain/types/worker").JobLogEntry[]>;
110
33
  maxLogsPerJob: number;
111
34
  };
112
35
  getQueueControlContext(): {
113
- shards: Shard[];
114
- jobIndex: Map<JobId, JobLocation>;
115
- processingShards: Map<JobId, Job>[];
116
- completedJobs: BoundedSet<JobId>;
117
- completedJobsData: BoundedMap<JobId, Job>;
118
- jobResults: LRUMap<JobId, unknown>;
119
- dependencyResults: DependencyResultTracker;
120
- jobLogs: LRUMap<JobId, JobLogEntry[]>;
121
- storage: SqliteStorage | null;
36
+ shards: import("../domain/queue").Shard[];
37
+ jobIndex: Map<import("../domain/types").JobId, import("../domain/types").JobLocation>;
38
+ processingShards: Map<import("../domain/types").JobId, import("../domain/types").Job>[];
39
+ completedJobs: import("../shared/boundedSet").BoundedSet<import("../domain/types").JobId>;
40
+ completedJobsData: import("../shared/boundedMap").BoundedMap<import("../domain/types").JobId, import("../domain/types").Job>;
41
+ jobResults: import("../shared/lruMap").LRUMap<import("../domain/types").JobId, unknown>;
42
+ dependencyResults: import("./dependencyResultTracker").DependencyResultTracker;
43
+ jobLogs: import("../shared/lruMap").LRUMap<import("../domain/types").JobId, import("../domain/types/worker").JobLogEntry[]>;
44
+ storage: import("../infrastructure/persistence").SqliteStorage | null;
122
45
  };
123
46
  }
@@ -15,6 +15,7 @@ export class ContextFactory {
15
15
  return {
16
16
  jobIndex: this.deps.jobIndex,
17
17
  jobLocks: this.deps.jobLocks,
18
+ retiredCronLeaseTokens: this.deps.retiredCronLeaseTokens,
18
19
  clientJobs: this.deps.clientJobs,
19
20
  processingShards: this.deps.processingShards,
20
21
  processingLocks: this.deps.processingLocks,
@@ -22,6 +23,7 @@ export class ContextFactory {
22
23
  shardLocks: this.deps.shardLocks,
23
24
  eventsManager: this.deps.eventsManager,
24
25
  storage: this.deps.storage,
26
+ timeoutScheduler: this.deps.timeoutScheduler,
25
27
  };
26
28
  }
27
29
  getBackgroundContext() {
@@ -37,11 +39,14 @@ export class ContextFactory {
37
39
  depCompletions: this.deps.depCompletions,
38
40
  maxDependencyCompletions: this.deps.config.maxCompletedJobs,
39
41
  timedOutJobs: this.deps.timedOutJobs,
42
+ retiredTimeoutLeaseTokens: this.deps.retiredTimeoutLeaseTokens,
43
+ timeoutScheduler: this.deps.timeoutScheduler,
40
44
  jobResults: this.deps.jobResults,
41
45
  dependencyResults: this.deps.dependencyResults,
42
46
  customIdMap: this.deps.customIdMap,
43
47
  jobLogs: this.deps.jobLogs,
44
48
  jobLocks: this.deps.jobLocks,
49
+ retiredCronLeaseTokens: this.deps.retiredCronLeaseTokens,
45
50
  clientJobs: this.deps.clientJobs,
46
51
  stalledCandidates: this.deps.stalledCandidates,
47
52
  pendingDepChecks: this.deps.pendingDepChecks,
@@ -89,6 +94,8 @@ export class ContextFactory {
89
94
  depCompletions: this.deps.depCompletions,
90
95
  maxDependencyCompletions: this.deps.config.maxCompletedJobs,
91
96
  timedOutJobs: this.deps.timedOutJobs,
97
+ retiredTimeoutLeaseTokens: this.deps.retiredTimeoutLeaseTokens,
98
+ retiredCronLeaseTokens: this.deps.retiredCronLeaseTokens,
92
99
  jobResults: this.deps.jobResults,
93
100
  dependencyResults: this.deps.dependencyResults,
94
101
  customIdMap: this.deps.customIdMap,
@@ -121,6 +128,7 @@ export class ContextFactory {
121
128
  processingLocks: this.deps.processingLocks,
122
129
  completedJobs: this.deps.completedJobs,
123
130
  completedJobsData: this.deps.completedJobsData,
131
+ retiredCronLeaseTokens: this.deps.retiredCronLeaseTokens,
124
132
  depCompletions: this.deps.depCompletions,
125
133
  maxDependencyCompletions: this.deps.config.maxCompletedJobs,
126
134
  jobResults: this.deps.jobResults,
@@ -191,6 +199,7 @@ export class ContextFactory {
191
199
  jobLogs: this.deps.jobLogs,
192
200
  storage: this.deps.storage,
193
201
  completedJobs: this.deps.completedJobs,
202
+ completedJobsData: this.deps.completedJobsData,
194
203
  jobResults: this.deps.jobResults,
195
204
  };
196
205
  }
@@ -11,6 +11,7 @@ export declare class DependencyResultTracker {
11
11
  retain(dependencyId: JobId, result: unknown): void;
12
12
  has(dependencyId: JobId): boolean;
13
13
  get(dependencyId: JobId): unknown;
14
+ hasConsumers(dependencyId: JobId): boolean;
14
15
  releaseConsumer(consumerId: JobId): void;
15
16
  releaseDependency(consumerId: JobId, dependencyId: JobId): void;
16
17
  clear(): void;