bunqueue-client 0.1.8 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (580) hide show
  1. package/CHANGELOG.md +162 -0
  2. package/LEGACY.md +460 -0
  3. package/README.md +204 -349
  4. package/dist/ack-batcher.js +7 -67
  5. package/dist/canonical-manifest.json +930 -0
  6. package/dist/chunk-b967v3w3.js +79 -0
  7. package/dist/chunk-fekm0ma6.js +110 -0
  8. package/dist/chunk-jxkszwqp.js +573 -0
  9. package/dist/embedded.js +16418 -0
  10. package/dist/frame.js +14 -57
  11. package/dist/index.d.ts +1 -27
  12. package/dist/index.js +10905 -16
  13. package/dist/legacy.d.ts +1 -0
  14. package/dist/legacy.js +2081 -0
  15. package/dist/{ack-batcher.d.ts → types/sdk/typescript/src/ack-batcher.d.ts} +3 -3
  16. package/dist/{bunqueue → types/sdk/typescript/src/bunqueue}/aging.d.ts +2 -2
  17. package/dist/{bunqueue → types/sdk/typescript/src/bunqueue}/batch.d.ts +2 -2
  18. package/dist/{bunqueue → types/sdk/typescript/src/bunqueue}/bunqueue-api.d.ts +5 -5
  19. package/dist/{bunqueue → types/sdk/typescript/src/bunqueue}/bunqueue.d.ts +13 -13
  20. package/dist/{bunqueue → types/sdk/typescript/src/bunqueue}/circuit-breaker.d.ts +2 -2
  21. package/dist/{bunqueue → types/sdk/typescript/src/bunqueue}/dedup-debounce.d.ts +2 -2
  22. package/dist/{bunqueue → types/sdk/typescript/src/bunqueue}/dlq-rate-limit.d.ts +2 -2
  23. package/dist/{bunqueue → types/sdk/typescript/src/bunqueue}/rate-gate.d.ts +1 -1
  24. package/dist/{bunqueue → types/sdk/typescript/src/bunqueue}/retry.d.ts +1 -1
  25. package/dist/{bunqueue → types/sdk/typescript/src/bunqueue}/triggers.d.ts +3 -3
  26. package/dist/{bunqueue → types/sdk/typescript/src/bunqueue}/ttl.d.ts +1 -1
  27. package/dist/{bunqueue → types/sdk/typescript/src/bunqueue}/types.d.ts +4 -4
  28. package/dist/types/sdk/typescript/src/canonical-transport/bun-sqlite-types.d.ts +21 -0
  29. package/dist/{connection-pool.d.ts → types/sdk/typescript/src/connection-pool.d.ts} +1 -1
  30. package/dist/{connection-types.d.ts → types/sdk/typescript/src/connection-types.d.ts} +1 -1
  31. package/dist/{connection.d.ts → types/sdk/typescript/src/connection.d.ts} +6 -19
  32. package/dist/{errors.d.ts → types/sdk/typescript/src/errors.d.ts} +3 -0
  33. package/dist/types/sdk/typescript/src/flow-commit.d.ts +5 -0
  34. package/dist/types/sdk/typescript/src/flow-plan-legacy.d.ts +13 -0
  35. package/dist/types/sdk/typescript/src/flow-plan.d.ts +29 -0
  36. package/dist/{flow-types.d.ts → types/sdk/typescript/src/flow-types.d.ts} +7 -4
  37. package/dist/{flow.d.ts → types/sdk/typescript/src/flow.d.ts} +6 -10
  38. package/dist/{frame.d.ts → types/sdk/typescript/src/frame.d.ts} +1 -1
  39. package/dist/types/sdk/typescript/src/index.d.ts +10 -0
  40. package/dist/{job.d.ts → types/sdk/typescript/src/job.d.ts} +4 -3
  41. package/dist/types/sdk/typescript/src/legacy.d.ts +27 -0
  42. package/dist/{observability.d.ts → types/sdk/typescript/src/observability.d.ts} +14 -0
  43. package/dist/{queue-admin.d.ts → types/sdk/typescript/src/queue-admin.d.ts} +3 -4
  44. package/dist/{queue-control.d.ts → types/sdk/typescript/src/queue-control.d.ts} +7 -6
  45. package/dist/{queue-query.d.ts → types/sdk/typescript/src/queue-query.d.ts} +3 -3
  46. package/dist/{queue.d.ts → types/sdk/typescript/src/queue.d.ts} +8 -8
  47. package/dist/{responses.d.ts → types/sdk/typescript/src/responses.d.ts} +2 -2
  48. package/dist/types/sdk/typescript/src/serialization.d.ts +10 -0
  49. package/dist/{socket-factory.d.ts → types/sdk/typescript/src/socket-factory.d.ts} +1 -1
  50. package/dist/types/sdk/typescript/src/terminal-outcome.d.ts +8 -0
  51. package/dist/{types.d.ts → types/sdk/typescript/src/types.d.ts} +5 -2
  52. package/dist/{worker-base.d.ts → types/sdk/typescript/src/worker-base.d.ts} +6 -6
  53. package/dist/types/sdk/typescript/src/worker-slot-signal.d.ts +6 -0
  54. package/dist/{worker-types.d.ts → types/sdk/typescript/src/worker-types.d.ts} +3 -3
  55. package/dist/{worker.d.ts → types/sdk/typescript/src/worker.d.ts} +3 -2
  56. package/dist/types/src/application/background/dlq.d.ts +2 -0
  57. package/dist/types/src/application/background/lifecycle.d.ts +4 -0
  58. package/dist/types/src/application/background/recovery/active.d.ts +5 -0
  59. package/dist/types/src/application/background/recovery/index.d.ts +2 -0
  60. package/dist/types/src/application/background/recovery/pending.d.ts +3 -0
  61. package/dist/types/src/application/background/recovery/restore.d.ts +5 -0
  62. package/dist/types/src/application/background/recovery/shared.d.ts +6 -0
  63. package/dist/types/src/application/background/timeouts.d.ts +25 -0
  64. package/dist/types/src/application/backgroundTasks.d.ts +7 -0
  65. package/dist/types/src/application/cleanupTasks.d.ts +10 -0
  66. package/dist/types/src/application/clientTracking.d.ts +44 -0
  67. package/dist/types/src/application/completedCleanup.d.ts +34 -0
  68. package/dist/types/src/application/completedRetry.d.ts +21 -0
  69. package/dist/types/src/application/contextFactory.d.ts +49 -0
  70. package/dist/types/src/application/dependencyCompletions.d.ts +63 -0
  71. package/dist/types/src/application/dependencyProcessor.d.ts +15 -0
  72. package/dist/types/src/application/dependencyResultTracker.d.ts +18 -0
  73. package/dist/types/src/application/dlqManager.d.ts +49 -0
  74. package/dist/types/src/application/dlqRetry.d.ts +12 -0
  75. package/dist/types/src/application/emptyQueueCleanup.d.ts +3 -0
  76. package/dist/types/src/application/eventsManager.d.ts +50 -0
  77. package/dist/types/src/application/flowFailureRecovery.d.ts +20 -0
  78. package/dist/types/src/application/flowParentBackpatch.d.ts +27 -0
  79. package/dist/types/src/application/jobLogsManager.d.ts +21 -0
  80. package/dist/types/src/application/latencyTracker.d.ts +39 -0
  81. package/dist/types/src/application/lockManager.d.ts +15 -0
  82. package/dist/types/src/application/lockOperations.d.ts +38 -0
  83. package/dist/types/src/application/metricsExporter.d.ts +27 -0
  84. package/dist/types/src/application/monitoringChecks.d.ts +36 -0
  85. package/dist/types/src/application/operations/ack/batch.d.ts +8 -0
  86. package/dist/types/src/application/operations/ack/completion.d.ts +3 -0
  87. package/dist/types/src/application/operations/ack/failure.d.ts +3 -0
  88. package/dist/types/src/application/operations/ack.d.ts +5 -0
  89. package/dist/types/src/application/operations/ackHelpers.d.ts +36 -0
  90. package/dist/types/src/application/operations/customId.d.ts +51 -0
  91. package/dist/types/src/application/operations/flowPush.d.ts +9 -0
  92. package/dist/types/src/application/operations/flowTopologyValidation.d.ts +3 -0
  93. package/dist/types/src/application/operations/flowValidation.d.ts +3 -0
  94. package/dist/types/src/application/operations/jobClaim.d.ts +17 -0
  95. package/dist/types/src/application/operations/jobManagement.d.ts +43 -0
  96. package/dist/types/src/application/operations/jobMoveOperations.d.ts +9 -0
  97. package/dist/types/src/application/operations/jobPromotion.d.ts +7 -0
  98. package/dist/types/src/application/operations/jobStateTransitions.d.ts +15 -0
  99. package/dist/types/src/application/operations/parentLink.d.ts +36 -0
  100. package/dist/types/src/application/operations/parentLinkInput.d.ts +8 -0
  101. package/dist/types/src/application/operations/pull.d.ts +20 -0
  102. package/dist/types/src/application/operations/pullFinalization.d.ts +6 -0
  103. package/dist/types/src/application/operations/pullStateTransition.d.ts +51 -0
  104. package/dist/types/src/application/operations/push.d.ts +13 -0
  105. package/dist/types/src/application/operations/pushAdmission.d.ts +36 -0
  106. package/dist/types/src/application/operations/pushBatch.d.ts +4 -0
  107. package/dist/types/src/application/operations/pushContext.d.ts +48 -0
  108. package/dist/types/src/application/operations/pushDeduplication.d.ts +42 -0
  109. package/dist/types/src/application/operations/pushInsert.d.ts +39 -0
  110. package/dist/types/src/application/operations/pushLocks.d.ts +15 -0
  111. package/dist/types/src/application/operations/query/collect.d.ts +12 -0
  112. package/dist/types/src/application/operations/query/jobLookup.d.ts +9 -0
  113. package/dist/types/src/application/operations/query/pagination.d.ts +8 -0
  114. package/dist/types/src/application/operations/query/state.d.ts +4 -0
  115. package/dist/types/src/application/operations/queryOperations.d.ts +5 -0
  116. package/dist/types/src/application/operations/queueControl.d.ts +50 -0
  117. package/dist/types/src/application/prometheusOperationalMetrics.d.ts +31 -0
  118. package/dist/types/src/application/queue-manager/ack.d.ts +23 -0
  119. package/dist/types/src/application/queue-manager/configuration.d.ts +27 -0
  120. package/dist/types/src/application/queue-manager/context.d.ts +5 -0
  121. package/dist/types/src/application/queue-manager/control.d.ts +20 -0
  122. package/dist/types/src/application/queue-manager/delivery.d.ts +33 -0
  123. package/dist/types/src/application/queue-manager/dependencies.d.ts +8 -0
  124. package/dist/types/src/application/queue-manager/dependency-runtime.d.ts +8 -0
  125. package/dist/types/src/application/queue-manager/flow-failures.d.ts +18 -0
  126. package/dist/types/src/application/queue-manager/flow-options.d.ts +8 -0
  127. package/dist/types/src/application/queue-manager/job-management.d.ts +17 -0
  128. package/dist/types/src/application/queue-manager/lifecycle.d.ts +4 -0
  129. package/dist/types/src/application/queue-manager/limits.d.ts +58 -0
  130. package/dist/types/src/application/queue-manager/locks.d.ts +21 -0
  131. package/dist/types/src/application/queue-manager/observability.d.ts +16 -0
  132. package/dist/types/src/application/queue-manager/queries.d.ts +24 -0
  133. package/dist/types/src/application/queue-manager/repeat.d.ts +4 -0
  134. package/dist/types/src/application/queue-manager/services.d.ts +19 -0
  135. package/dist/types/src/application/queue-manager/state.d.ts +96 -0
  136. package/dist/types/src/application/queue-manager/stats.d.ts +28 -0
  137. package/dist/types/src/application/queueManager.d.ts +5 -0
  138. package/dist/types/src/application/queueStatsAggregator.d.ts +23 -0
  139. package/dist/types/src/application/queueTelemetryJournal.d.ts +24 -0
  140. package/dist/types/src/application/repeatJobs.d.ts +7 -0
  141. package/dist/types/src/application/stallDetection.d.ts +10 -0
  142. package/dist/types/src/application/statsManager.d.ts +59 -0
  143. package/dist/types/src/application/taskErrorTracking.d.ts +22 -0
  144. package/dist/types/src/application/throughputTracker.d.ts +34 -0
  145. package/dist/types/src/application/types/ack.d.ts +136 -0
  146. package/dist/types/src/application/types/background.d.ts +18 -0
  147. package/dist/types/src/application/types/config.d.ts +41 -0
  148. package/dist/types/src/application/types/contextFactory.d.ts +87 -0
  149. package/dist/types/src/application/types/contexts.d.ts +114 -0
  150. package/dist/types/src/application/types/index.d.ts +7 -0
  151. package/dist/types/src/application/types/query.d.ts +23 -0
  152. package/dist/types/src/application/types/queueManager.d.ts +98 -0
  153. package/dist/types/src/application/webhookManager.d.ts +47 -0
  154. package/dist/types/src/application/workerManager.d.ts +61 -0
  155. package/dist/types/src/client/bunqueue/aging.d.ts +16 -0
  156. package/dist/types/src/client/bunqueue/batch.d.ts +16 -0
  157. package/dist/types/src/client/bunqueue/cancellation.d.ts +21 -0
  158. package/dist/types/src/client/bunqueue/circuitBreaker.d.ts +21 -0
  159. package/dist/types/src/client/bunqueue/dedupDebounce.d.ts +12 -0
  160. package/dist/types/src/client/bunqueue/dlqRateLimit.d.ts +26 -0
  161. package/dist/types/src/client/bunqueue/retry.d.ts +8 -0
  162. package/dist/types/src/client/bunqueue/runtime.d.ts +35 -0
  163. package/dist/types/src/client/bunqueue/triggers.d.ts +17 -0
  164. package/dist/types/src/client/bunqueue/ttl.d.ts +17 -0
  165. package/dist/types/src/client/bunqueue/types.d.ts +147 -0
  166. package/dist/types/src/client/bunqueue.d.ts +73 -0
  167. package/dist/types/src/client/dlqConversion.d.ts +5 -0
  168. package/dist/types/src/client/errors.d.ts +24 -0
  169. package/dist/types/src/client/events.d.ts +85 -0
  170. package/dist/types/src/client/flow.d.ts +70 -0
  171. package/dist/types/src/client/flowAtomic.d.ts +9 -0
  172. package/dist/types/src/client/flowJobCoreMethods.d.ts +28 -0
  173. package/dist/types/src/client/flowJobDependencies.d.ts +7 -0
  174. package/dist/types/src/client/flowJobFactory.d.ts +24 -0
  175. package/dist/types/src/client/flowJobMoveMethods.d.ts +16 -0
  176. package/dist/types/src/client/flowJobTypes.d.ts +29 -0
  177. package/dist/types/src/client/flowLegacyPlan.d.ts +16 -0
  178. package/dist/types/src/client/flowOptions.d.ts +10 -0
  179. package/dist/types/src/client/flowPlan.d.ts +16 -0
  180. package/dist/types/src/client/flowPush.d.ts +27 -0
  181. package/dist/types/src/client/flowReader.d.ts +10 -0
  182. package/dist/types/src/client/flowResults.d.ts +11 -0
  183. package/dist/types/src/client/flowTypes.d.ts +77 -0
  184. package/dist/types/src/client/forwarder.d.ts +74 -0
  185. package/dist/types/src/client/groupId.d.ts +1 -0
  186. package/dist/types/src/client/index.d.ts +46 -0
  187. package/dist/types/src/client/jobConversion.d.ts +10 -0
  188. package/dist/types/src/client/jobConversionHelpers.d.ts +28 -0
  189. package/dist/types/src/client/jobConversionTypes.d.ts +88 -0
  190. package/dist/types/src/client/jobDeduplication.d.ts +6 -0
  191. package/dist/types/src/client/jobHelpers.d.ts +31 -0
  192. package/dist/types/src/client/legacyConnectionOptions.d.ts +8 -0
  193. package/dist/types/src/client/manager.d.ts +15 -0
  194. package/dist/types/src/client/pro.d.ts +9 -0
  195. package/dist/types/src/client/queue/addBatcher.d.ts +59 -0
  196. package/dist/types/src/client/queue/bullmqCompat.d.ts +57 -0
  197. package/dist/types/src/client/queue/deduplication.d.ts +14 -0
  198. package/dist/types/src/client/queue/dlq.d.ts +61 -0
  199. package/dist/types/src/client/queue/dlqJobMethods.d.ts +9 -0
  200. package/dist/types/src/client/queue/dlqOps.d.ts +26 -0
  201. package/dist/types/src/client/queue/dlqStats.d.ts +3 -0
  202. package/dist/types/src/client/queue/failWire.d.ts +17 -0
  203. package/dist/types/src/client/queue/helpers.d.ts +19 -0
  204. package/dist/types/src/client/queue/job-proxy/dependencies.d.ts +9 -0
  205. package/dist/types/src/client/queue/job-proxy/reflection.d.ts +2 -0
  206. package/dist/types/src/client/queue/job-proxy/simple.d.ts +3 -0
  207. package/dist/types/src/client/queue/job-proxy/tcp.d.ts +4 -0
  208. package/dist/types/src/client/queue/jobMetadata.d.ts +10 -0
  209. package/dist/types/src/client/queue/jobMove.d.ts +32 -0
  210. package/dist/types/src/client/queue/jobProxy.d.ts +4 -0
  211. package/dist/types/src/client/queue/operations/add/bulk.d.ts +7 -0
  212. package/dist/types/src/client/queue/operations/add/payload.d.ts +25 -0
  213. package/dist/types/src/client/queue/operations/add/single.d.ts +3 -0
  214. package/dist/types/src/client/queue/operations/add.d.ts +2 -0
  215. package/dist/types/src/client/queue/operations/control.d.ts +42 -0
  216. package/dist/types/src/client/queue/operations/counts.d.ts +48 -0
  217. package/dist/types/src/client/queue/operations/groups.d.ts +24 -0
  218. package/dist/types/src/client/queue/operations/management.d.ts +51 -0
  219. package/dist/types/src/client/queue/operations/query.d.ts +50 -0
  220. package/dist/types/src/client/queue/operations/queryStates.d.ts +13 -0
  221. package/dist/types/src/client/queue/operations/queryTcpPages.d.ts +14 -0
  222. package/dist/types/src/client/queue/queue.d.ts +12 -0
  223. package/dist/types/src/client/queue/rateLimit.d.ts +46 -0
  224. package/dist/types/src/client/queue/runtime/compatibility.d.ts +13 -0
  225. package/dist/types/src/client/queue/runtime/configuration.d.ts +46 -0
  226. package/dist/types/src/client/queue/runtime/connection.d.ts +6 -0
  227. package/dist/types/src/client/queue/runtime/control.d.ts +41 -0
  228. package/dist/types/src/client/queue/runtime/queries.d.ts +66 -0
  229. package/dist/types/src/client/queue/runtime/scheduling.d.ts +33 -0
  230. package/dist/types/src/client/queue/runtime/state.d.ts +101 -0
  231. package/dist/types/src/client/queue/scheduler.d.ts +58 -0
  232. package/dist/types/src/client/queue/schedulerPagination.d.ts +7 -0
  233. package/dist/types/src/client/queue/stall.d.ts +20 -0
  234. package/dist/types/src/client/queue/types/add.d.ts +40 -0
  235. package/dist/types/src/client/queue/types/contexts.d.ts +33 -0
  236. package/dist/types/src/client/queue/types/index.d.ts +3 -0
  237. package/dist/types/src/client/queue/types/job.d.ts +50 -0
  238. package/dist/types/src/client/queue/types/runtime.d.ts +35 -0
  239. package/dist/types/src/client/queue/workers.d.ts +36 -0
  240. package/dist/types/src/client/queue-events/tcpSubscription.d.ts +23 -0
  241. package/dist/types/src/client/queue.d.ts +5 -0
  242. package/dist/types/src/client/queueGroup.d.ts +51 -0
  243. package/dist/types/src/client/resolveToken.d.ts +10 -0
  244. package/dist/types/src/client/sandboxed/index.d.ts +7 -0
  245. package/dist/types/src/client/sandboxed/queueOps.d.ts +24 -0
  246. package/dist/types/src/client/sandboxed/runtime/dispatch.d.ts +13 -0
  247. package/dist/types/src/client/sandboxed/runtime/lifecycle.d.ts +20 -0
  248. package/dist/types/src/client/sandboxed/runtime/log.d.ts +1 -0
  249. package/dist/types/src/client/sandboxed/runtime/pool.d.ts +11 -0
  250. package/dist/types/src/client/sandboxed/runtime/recovery.d.ts +11 -0
  251. package/dist/types/src/client/sandboxed/runtime/state.d.ts +39 -0
  252. package/dist/types/src/client/sandboxed/types/index.d.ts +2 -0
  253. package/dist/types/src/client/sandboxed/types/options.d.ts +27 -0
  254. package/dist/types/src/client/sandboxed/types/process.d.ts +39 -0
  255. package/dist/types/src/client/sandboxed/worker.d.ts +4 -0
  256. package/dist/types/src/client/sandboxed/wrapper.d.ts +12 -0
  257. package/dist/types/src/client/sandboxedWorker.d.ts +6 -0
  258. package/dist/types/src/client/tcp/client.d.ts +6 -0
  259. package/dist/types/src/client/tcp/commandQueue.d.ts +23 -0
  260. package/dist/types/src/client/tcp/connection.d.ts +4 -0
  261. package/dist/types/src/client/tcp/errors.d.ts +6 -0
  262. package/dist/types/src/client/tcp/health.d.ts +60 -0
  263. package/dist/types/src/client/tcp/index.d.ts +11 -0
  264. package/dist/types/src/client/tcp/reconnect.d.ts +47 -0
  265. package/dist/types/src/client/tcp/runtime/commands.d.ts +9 -0
  266. package/dist/types/src/client/tcp/runtime/connectivity.d.ts +13 -0
  267. package/dist/types/src/client/tcp/runtime/health.d.ts +14 -0
  268. package/dist/types/src/client/tcp/runtime/lifecycle.d.ts +8 -0
  269. package/dist/types/src/client/tcp/runtime/state.d.ts +50 -0
  270. package/dist/types/src/client/tcp/shared.d.ts +12 -0
  271. package/dist/types/src/client/tcp/transport.d.ts +18 -0
  272. package/dist/types/src/client/tcp/types/command.d.ts +9 -0
  273. package/dist/types/src/client/tcp/types/connection.d.ts +31 -0
  274. package/dist/types/src/client/tcp/types/index.d.ts +5 -0
  275. package/dist/types/src/client/tcp/types/socket.d.ts +8 -0
  276. package/dist/types/src/client/tcp/types/tls.d.ts +4 -0
  277. package/dist/types/src/client/tcp/types.d.ts +2 -0
  278. package/dist/types/src/client/tcpClient.d.ts +6 -0
  279. package/dist/types/src/client/tcpPool.d.ts +69 -0
  280. package/dist/types/src/client/types/connection.d.ts +30 -0
  281. package/dist/types/src/client/types/dlq.d.ts +45 -0
  282. package/dist/types/src/client/types/events.d.ts +54 -0
  283. package/dist/types/src/client/types/flow.d.ts +22 -0
  284. package/dist/types/src/client/types/index.d.ts +10 -0
  285. package/dist/types/src/client/types/job.d.ts +131 -0
  286. package/dist/types/src/client/types/metrics.d.ts +1 -0
  287. package/dist/types/src/client/types/options.d.ts +70 -0
  288. package/dist/types/src/client/types/worker.d.ts +54 -0
  289. package/dist/types/src/client/types.d.ts +2 -0
  290. package/dist/types/src/client/worker/ackBatcher.d.ts +55 -0
  291. package/dist/types/src/client/worker/ackFrontier.d.ts +21 -0
  292. package/dist/types/src/client/worker/ackOutcome.d.ts +8 -0
  293. package/dist/types/src/client/worker/batchExecution.d.ts +14 -0
  294. package/dist/types/src/client/worker/constants.d.ts +7 -0
  295. package/dist/types/src/client/worker/groupConcurrency.d.ts +49 -0
  296. package/dist/types/src/client/worker/handlers/completion.d.ts +29 -0
  297. package/dist/types/src/client/worker/handlers/dependencies.d.ts +11 -0
  298. package/dist/types/src/client/worker/handlers/mutations.d.ts +23 -0
  299. package/dist/types/src/client/worker/handlers/queries.d.ts +15 -0
  300. package/dist/types/src/client/worker/jobParser.d.ts +9 -0
  301. package/dist/types/src/client/worker/processor.d.ts +11 -0
  302. package/dist/types/src/client/worker/processorHandlers.d.ts +4 -0
  303. package/dist/types/src/client/worker/processorOutcome.d.ts +14 -0
  304. package/dist/types/src/client/worker/processorResult.d.ts +2 -0
  305. package/dist/types/src/client/worker/runtime/buffer.d.ts +8 -0
  306. package/dist/types/src/client/worker/runtime/control.d.ts +28 -0
  307. package/dist/types/src/client/worker/runtime/execution.d.ts +16 -0
  308. package/dist/types/src/client/worker/runtime/lifecycle.d.ts +7 -0
  309. package/dist/types/src/client/worker/runtime/manual.d.ts +10 -0
  310. package/dist/types/src/client/worker/runtime/options.d.ts +5 -0
  311. package/dist/types/src/client/worker/runtime/polling.d.ts +14 -0
  312. package/dist/types/src/client/worker/runtime/state.d.ts +121 -0
  313. package/dist/types/src/client/worker/types/index.d.ts +5 -0
  314. package/dist/types/src/client/worker/types/manual.d.ts +7 -0
  315. package/dist/types/src/client/worker/types/options.d.ts +26 -0
  316. package/dist/types/src/client/worker/types/outcome.d.ts +23 -0
  317. package/dist/types/src/client/worker/types/processor.d.ts +25 -0
  318. package/dist/types/src/client/worker/types/transport.d.ts +11 -0
  319. package/dist/types/src/client/worker/worker.d.ts +6 -0
  320. package/dist/types/src/client/worker/workerHeartbeat.d.ts +15 -0
  321. package/dist/types/src/client/worker/workerPull.d.ts +24 -0
  322. package/dist/types/src/client/worker/workerRateLimiter.d.ts +51 -0
  323. package/dist/types/src/client/worker.d.ts +6 -0
  324. package/dist/types/src/client/workflow/admission.d.ts +45 -0
  325. package/dist/types/src/client/workflow/clock.d.ts +60 -0
  326. package/dist/types/src/client/workflow/compensationChild.d.ts +33 -0
  327. package/dist/types/src/client/workflow/compensationClaim.d.ts +11 -0
  328. package/dist/types/src/client/workflow/compensationPass.d.ts +17 -0
  329. package/dist/types/src/client/workflow/compensationSupport.d.ts +24 -0
  330. package/dist/types/src/client/workflow/compensator.d.ts +34 -0
  331. package/dist/types/src/client/workflow/definitionGuard.d.ts +11 -0
  332. package/dist/types/src/client/workflow/emitter.d.ts +17 -0
  333. package/dist/types/src/client/workflow/engine.d.ts +66 -0
  334. package/dist/types/src/client/workflow/eventTypes.d.ts +44 -0
  335. package/dist/types/src/client/workflow/executionFence.d.ts +15 -0
  336. package/dist/types/src/client/workflow/executionTypes.d.ts +133 -0
  337. package/dist/types/src/client/workflow/executor.d.ts +52 -0
  338. package/dist/types/src/client/workflow/executorLifecycle.d.ts +19 -0
  339. package/dist/types/src/client/workflow/executorNodes.d.ts +18 -0
  340. package/dist/types/src/client/workflow/executorQueue.d.ts +9 -0
  341. package/dist/types/src/client/workflow/forEachRunner.d.ts +4 -0
  342. package/dist/types/src/client/workflow/identity.d.ts +48 -0
  343. package/dist/types/src/client/workflow/index.d.ts +23 -0
  344. package/dist/types/src/client/workflow/loops.d.ts +11 -0
  345. package/dist/types/src/client/workflow/mapRunner.d.ts +4 -0
  346. package/dist/types/src/client/workflow/recovery.d.ts +32 -0
  347. package/dist/types/src/client/workflow/rollbackControl.d.ts +37 -0
  348. package/dist/types/src/client/workflow/runner.d.ts +23 -0
  349. package/dist/types/src/client/workflow/runnerTiming.d.ts +14 -0
  350. package/dist/types/src/client/workflow/stepTypes.d.ts +171 -0
  351. package/dist/types/src/client/workflow/store.d.ts +83 -0
  352. package/dist/types/src/client/workflow/storeCodec.d.ts +7 -0
  353. package/dist/types/src/client/workflow/storeExecutionCodec.d.ts +11 -0
  354. package/dist/types/src/client/workflow/storeListing.d.ts +11 -0
  355. package/dist/types/src/client/workflow/storeMaintenance.d.ts +4 -0
  356. package/dist/types/src/client/workflow/storeSignals.d.ts +70 -0
  357. package/dist/types/src/client/workflow/subWorkflowRunner.d.ts +14 -0
  358. package/dist/types/src/client/workflow/types.d.ts +4 -0
  359. package/dist/types/src/client/workflow/unwindPlan.d.ts +87 -0
  360. package/dist/types/src/client/workflow/waitFor.d.ts +56 -0
  361. package/dist/types/src/client/workflow/workflow.d.ts +70 -0
  362. package/dist/types/src/client/workflow/workflowDecisions.d.ts +11 -0
  363. package/dist/types/src/client/workflow/workflowDefinition.d.ts +16 -0
  364. package/dist/types/src/client/workflow/workflowIntrospection.d.ts +5 -0
  365. package/dist/types/src/client/workflow/workflowValidation.d.ts +44 -0
  366. package/dist/types/src/config/index.d.ts +9 -0
  367. package/dist/types/src/config/loader.d.ts +7 -0
  368. package/dist/types/src/config/resolve.d.ts +59 -0
  369. package/dist/types/src/config/types.d.ts +88 -0
  370. package/dist/types/src/domain/job/constants.d.ts +12 -0
  371. package/dist/types/src/domain/job/create.d.ts +2 -0
  372. package/dist/types/src/domain/job/groupFifoOrder.d.ts +9 -0
  373. package/dist/types/src/domain/job/ids.d.ts +7 -0
  374. package/dist/types/src/domain/job/locks.d.ts +4 -0
  375. package/dist/types/src/domain/job/payload.d.ts +18 -0
  376. package/dist/types/src/domain/job/state.d.ts +8 -0
  377. package/dist/types/src/domain/job/terminal.d.ts +3 -0
  378. package/dist/types/src/domain/queue/dependencyTracker.d.ts +78 -0
  379. package/dist/types/src/domain/queue/dlqShard.d.ts +66 -0
  380. package/dist/types/src/domain/queue/groupLimiterManager.d.ts +30 -0
  381. package/dist/types/src/domain/queue/groupScheduler.d.ts +31 -0
  382. package/dist/types/src/domain/queue/groupSchedulerOrder.d.ts +6 -0
  383. package/dist/types/src/domain/queue/limiterManager.d.ts +68 -0
  384. package/dist/types/src/domain/queue/priorityQueue.d.ts +54 -0
  385. package/dist/types/src/domain/queue/priorityQueueOrder.d.ts +3 -0
  386. package/dist/types/src/domain/queue/shard/dependencies.d.ts +11 -0
  387. package/dist/types/src/domain/queue/shard/dlq.d.ts +26 -0
  388. package/dist/types/src/domain/queue/shard/keys.d.ts +19 -0
  389. package/dist/types/src/domain/queue/shard/lifecycle.d.ts +10 -0
  390. package/dist/types/src/domain/queue/shard/limits.d.ts +47 -0
  391. package/dist/types/src/domain/queue/shard/metrics.d.ts +32 -0
  392. package/dist/types/src/domain/queue/shard/state.d.ts +40 -0
  393. package/dist/types/src/domain/queue/shard.d.ts +7 -0
  394. package/dist/types/src/domain/queue/shardCounters.d.ts +35 -0
  395. package/dist/types/src/domain/queue/temporalIndex.d.ts +24 -0
  396. package/dist/types/src/domain/queue/temporalManager.d.ts +72 -0
  397. package/dist/types/src/domain/queue/uniqueKeyManager.d.ts +33 -0
  398. package/dist/types/src/domain/queue/waiterManager.d.ts +18 -0
  399. package/dist/types/src/domain/response/builders.d.ts +15 -0
  400. package/dist/types/src/domain/types/command.d.ts +2 -0
  401. package/dist/types/src/domain/types/commands/base.d.ts +5 -0
  402. package/dist/types/src/domain/types/commands/core.d.ts +110 -0
  403. package/dist/types/src/domain/types/commands/cron.d.ts +36 -0
  404. package/dist/types/src/domain/types/commands/dashboard.d.ts +13 -0
  405. package/dist/types/src/domain/types/commands/dlq.d.ts +44 -0
  406. package/dist/types/src/domain/types/commands/extended.d.ts +63 -0
  407. package/dist/types/src/domain/types/commands/index.d.ts +12 -0
  408. package/dist/types/src/domain/types/commands/limits.d.ts +108 -0
  409. package/dist/types/src/domain/types/commands/management.d.ts +73 -0
  410. package/dist/types/src/domain/types/commands/monitoring.d.ts +49 -0
  411. package/dist/types/src/domain/types/commands/protocol.d.ts +20 -0
  412. package/dist/types/src/domain/types/commands/query.d.ts +46 -0
  413. package/dist/types/src/domain/types/commands/union.d.ts +13 -0
  414. package/dist/types/src/domain/types/commands/workers.d.ts +39 -0
  415. package/dist/types/src/domain/types/cron.d.ts +91 -0
  416. package/dist/types/src/domain/types/deduplication.d.ts +43 -0
  417. package/dist/types/src/domain/types/dlq.d.ts +136 -0
  418. package/dist/types/src/domain/types/flow.d.ts +25 -0
  419. package/dist/types/src/domain/types/group.d.ts +26 -0
  420. package/dist/types/src/domain/types/job.d.ts +8 -0
  421. package/dist/types/src/domain/types/jobs/model.d.ts +153 -0
  422. package/dist/types/src/domain/types/metrics.d.ts +16 -0
  423. package/dist/types/src/domain/types/priorityQueue.d.ts +13 -0
  424. package/dist/types/src/domain/types/protocol.d.ts +5 -0
  425. package/dist/types/src/domain/types/queue.d.ts +110 -0
  426. package/dist/types/src/domain/types/response.d.ts +3 -0
  427. package/dist/types/src/domain/types/responses/model.d.ts +152 -0
  428. package/dist/types/src/domain/types/shard.d.ts +4 -0
  429. package/dist/types/src/domain/types/stall.d.ts +48 -0
  430. package/dist/types/src/domain/types/webhook.d.ts +42 -0
  431. package/dist/types/src/domain/types/worker.d.ts +40 -0
  432. package/dist/types/src/infrastructure/backup/backupTelemetry.d.ts +30 -0
  433. package/dist/types/src/infrastructure/backup/s3BackupConfig.d.ts +80 -0
  434. package/dist/types/src/infrastructure/cloud/types/config.d.ts +18 -0
  435. package/dist/types/src/infrastructure/cloud/types/event.d.ts +14 -0
  436. package/dist/types/src/infrastructure/cloud/types/snapshot.d.ts +52 -0
  437. package/dist/types/src/infrastructure/cloud/types/snapshotCore.d.ts +125 -0
  438. package/dist/types/src/infrastructure/cloud/types/snapshotJobs.d.ts +124 -0
  439. package/dist/types/src/infrastructure/cloud/types/snapshotTelemetry.d.ts +100 -0
  440. package/dist/types/src/infrastructure/cloud/types.d.ts +3 -0
  441. package/dist/types/src/infrastructure/persistence/batchInsert.d.ts +13 -0
  442. package/dist/types/src/infrastructure/persistence/completedJobCountSchema.d.ts +6 -0
  443. package/dist/types/src/infrastructure/persistence/dependencyCompletionSchema.d.ts +6 -0
  444. package/dist/types/src/infrastructure/persistence/dependencyCompletionStore.d.ts +40 -0
  445. package/dist/types/src/infrastructure/persistence/index.d.ts +5 -0
  446. package/dist/types/src/infrastructure/persistence/jobOptionsBlob.d.ts +19 -0
  447. package/dist/types/src/infrastructure/persistence/legacyNameMigration.d.ts +17 -0
  448. package/dist/types/src/infrastructure/persistence/migrationProgressSchema.d.ts +2 -0
  449. package/dist/types/src/infrastructure/persistence/migrations.d.ts +3 -0
  450. package/dist/types/src/infrastructure/persistence/schema.d.ts +8 -0
  451. package/dist/types/src/infrastructure/persistence/sqlite/admission.d.ts +9 -0
  452. package/dist/types/src/infrastructure/persistence/sqlite/completed.d.ts +17 -0
  453. package/dist/types/src/infrastructure/persistence/sqlite/control.d.ts +48 -0
  454. package/dist/types/src/infrastructure/persistence/sqlite/flows.d.ts +26 -0
  455. package/dist/types/src/infrastructure/persistence/sqlite/jobLifecycle.d.ts +17 -0
  456. package/dist/types/src/infrastructure/persistence/sqlite/jobs.d.ts +15 -0
  457. package/dist/types/src/infrastructure/persistence/sqlite/lifecycle.d.ts +6 -0
  458. package/dist/types/src/infrastructure/persistence/sqlite/mutations.d.ts +27 -0
  459. package/dist/types/src/infrastructure/persistence/sqlite/queries.d.ts +23 -0
  460. package/dist/types/src/infrastructure/persistence/sqlite/queueDeletionSql.d.ts +3 -0
  461. package/dist/types/src/infrastructure/persistence/sqlite/records.d.ts +24 -0
  462. package/dist/types/src/infrastructure/persistence/sqlite/state.d.ts +42 -0
  463. package/dist/types/src/infrastructure/persistence/sqlite/telemetry.d.ts +17 -0
  464. package/dist/types/src/infrastructure/persistence/sqlite/telemetryStore.d.ts +30 -0
  465. package/dist/types/src/infrastructure/persistence/sqlite/telemetryWrites.d.ts +47 -0
  466. package/dist/types/src/infrastructure/persistence/sqlite.d.ts +6 -0
  467. package/dist/types/src/infrastructure/persistence/sqliteBatch.d.ts +4 -0
  468. package/dist/types/src/infrastructure/persistence/sqliteMigration.d.ts +5 -0
  469. package/dist/types/src/infrastructure/persistence/sqliteSerializer.d.ts +50 -0
  470. package/dist/types/src/infrastructure/persistence/statements.d.ts +86 -0
  471. package/dist/types/src/infrastructure/persistence/types/admission.d.ts +8 -0
  472. package/dist/types/src/infrastructure/persistence/types/batch.d.ts +12 -0
  473. package/dist/types/src/infrastructure/persistence/types/sqlite.d.ts +27 -0
  474. package/dist/types/src/infrastructure/persistence/writeBuffer.d.ts +48 -0
  475. package/dist/types/src/infrastructure/persistence/writeBufferPending.d.ts +11 -0
  476. package/dist/types/src/infrastructure/scheduler/cron/execution.d.ts +12 -0
  477. package/dist/types/src/infrastructure/scheduler/cron/persisted.d.ts +5 -0
  478. package/dist/types/src/infrastructure/scheduler/cron/runtime.d.ts +31 -0
  479. package/dist/types/src/infrastructure/scheduler/cron/validation.d.ts +3 -0
  480. package/dist/types/src/infrastructure/scheduler/cronParser.d.ts +45 -0
  481. package/dist/types/src/infrastructure/scheduler/cronScheduler.d.ts +5 -0
  482. package/dist/types/src/infrastructure/scheduler/types/cronScheduler.d.ts +16 -0
  483. package/dist/types/src/infrastructure/server/protocol/commands.d.ts +8 -0
  484. package/dist/types/src/infrastructure/server/protocol/frameParser.d.ts +16 -0
  485. package/dist/types/src/infrastructure/server/protocol/lineBuffer.d.ts +6 -0
  486. package/dist/types/src/infrastructure/server/protocol/validation.d.ts +10 -0
  487. package/dist/types/src/infrastructure/server/protocol.d.ts +6 -0
  488. package/dist/types/src/infrastructure/server/socketWriteQueue.d.ts +66 -0
  489. package/dist/types/src/infrastructure/server/types/protocol.d.ts +4 -0
  490. package/dist/types/src/require-bun.d.ts +13 -0
  491. package/dist/types/src/shared/asyncLock.d.ts +13 -0
  492. package/dist/types/src/shared/boundedMap.d.ts +30 -0
  493. package/dist/types/src/shared/boundedSet.d.ts +26 -0
  494. package/dist/types/src/shared/hash.d.ts +30 -0
  495. package/dist/types/src/shared/histogram.d.ts +23 -0
  496. package/dist/types/src/shared/lock.d.ts +13 -0
  497. package/dist/types/src/shared/lockError.d.ts +3 -0
  498. package/dist/types/src/shared/lockTimeout.d.ts +2 -0
  499. package/dist/types/src/shared/logger.d.ts +48 -0
  500. package/dist/types/src/shared/lru.d.ts +9 -0
  501. package/dist/types/src/shared/lruMap.d.ts +42 -0
  502. package/dist/types/src/shared/lruSet.d.ts +36 -0
  503. package/dist/types/src/shared/minHeap.d.ts +43 -0
  504. package/dist/types/src/shared/msgpack.d.ts +3 -0
  505. package/dist/types/src/shared/pausedView.d.ts +19 -0
  506. package/dist/types/src/shared/rwLock.d.ts +22 -0
  507. package/dist/types/src/shared/serialization.d.ts +24 -0
  508. package/dist/types/src/shared/skipList.d.ts +97 -0
  509. package/dist/types/src/shared/skipListNodes.d.ts +6 -0
  510. package/dist/types/src/shared/storageHealth.d.ts +9 -0
  511. package/dist/types/src/shared/ttlMap.d.ts +81 -0
  512. package/dist/types/src/shared/types/lock.d.ts +7 -0
  513. package/dist/types/src/shared/types/skipList.d.ts +4 -0
  514. package/dist/types/src/shared/version.d.ts +4 -0
  515. package/dist/types/src/shared/webhookValidation.d.ts +6 -0
  516. package/package.json +27 -9
  517. package/src/ack-batcher.ts +8 -5
  518. package/src/bunqueue/bunqueue-api.ts +1 -1
  519. package/src/bunqueue/bunqueue.ts +2 -1
  520. package/src/canonical-transport/bun-sqlite-types.ts +22 -0
  521. package/src/canonical-transport/dlq.ts +12 -0
  522. package/src/canonical-transport/embedded.ts +55 -0
  523. package/src/canonical-transport/runtime.ts +49 -0
  524. package/src/canonical-transport/thread-worker.ts +83 -0
  525. package/src/canonical-transport/transport.ts +153 -0
  526. package/src/connection.ts +25 -30
  527. package/src/errors.ts +3 -0
  528. package/src/flow-commit.ts +45 -0
  529. package/src/flow-plan-legacy.ts +117 -0
  530. package/src/flow-plan.ts +209 -0
  531. package/src/flow-types.ts +4 -0
  532. package/src/flow.ts +31 -163
  533. package/src/frame.ts +5 -2
  534. package/src/index.ts +7 -75
  535. package/src/job.ts +43 -9
  536. package/src/legacy.ts +91 -0
  537. package/src/observability.ts +59 -1
  538. package/src/queue-admin.ts +5 -5
  539. package/src/queue-control.ts +12 -8
  540. package/src/queue.ts +10 -6
  541. package/src/serialization.ts +93 -0
  542. package/src/terminal-outcome.ts +58 -0
  543. package/src/types.ts +3 -6
  544. package/src/worker-base.ts +9 -6
  545. package/src/worker-slot-signal.ts +23 -0
  546. package/src/worker.ts +11 -5
  547. package/dist/backpressure.js +0 -39
  548. package/dist/bunqueue/aging.js +0 -53
  549. package/dist/bunqueue/batch.js +0 -60
  550. package/dist/bunqueue/bunqueue-api.js +0 -116
  551. package/dist/bunqueue/bunqueue.js +0 -194
  552. package/dist/bunqueue/cancellation.js +0 -48
  553. package/dist/bunqueue/circuit-breaker.js +0 -69
  554. package/dist/bunqueue/dedup-debounce.js +0 -37
  555. package/dist/bunqueue/dlq-rate-limit.js +0 -65
  556. package/dist/bunqueue/rate-gate.js +0 -61
  557. package/dist/bunqueue/retry.js +0 -56
  558. package/dist/bunqueue/triggers.js +0 -42
  559. package/dist/bunqueue/ttl.js +0 -31
  560. package/dist/bunqueue/types.js +0 -6
  561. package/dist/connection-pool.js +0 -60
  562. package/dist/connection-types.js +0 -2
  563. package/dist/connection.js +0 -281
  564. package/dist/errors.js +0 -25
  565. package/dist/flow-types.js +0 -2
  566. package/dist/flow.js +0 -212
  567. package/dist/job.js +0 -155
  568. package/dist/observability.js +0 -110
  569. package/dist/queue-admin.js +0 -158
  570. package/dist/queue-control.js +0 -105
  571. package/dist/queue-query.js +0 -187
  572. package/dist/queue.js +0 -92
  573. package/dist/responses.js +0 -10
  574. package/dist/socket-factory.js +0 -47
  575. package/dist/types.js +0 -50
  576. package/dist/worker-base.js +0 -159
  577. package/dist/worker-types.js +0 -5
  578. package/dist/worker.js +0 -211
  579. /package/dist/{backpressure.d.ts → types/sdk/typescript/src/backpressure.d.ts} +0 -0
  580. /package/dist/{bunqueue → types/sdk/typescript/src/bunqueue}/cancellation.d.ts +0 -0
@@ -0,0 +1,6 @@
1
+ /** Exact retained-completion counts maintained by the jobs lifecycle itself. */
2
+ export declare const COMPLETED_JOB_COUNTS_TABLE = "\nCREATE TABLE IF NOT EXISTS completed_job_counts (\n queue TEXT PRIMARY KEY,\n count INTEGER NOT NULL CHECK (count >= 0)\n);\n";
3
+ export declare const COMPLETED_JOB_COUNT_TRIGGERS = "\nCREATE TRIGGER IF NOT EXISTS trg_jobs_completed_insert\nAFTER INSERT ON jobs\nWHEN NEW.state = 'completed'\nBEGIN\n INSERT INTO completed_job_counts(queue, count) VALUES (NEW.queue, 1)\n ON CONFLICT(queue) DO UPDATE SET count = count + 1;\nEND;\n\nCREATE TRIGGER IF NOT EXISTS trg_jobs_completed_leave\nAFTER UPDATE OF state, queue ON jobs\nWHEN OLD.state = 'completed'\n AND (NEW.state <> 'completed' OR NEW.queue <> OLD.queue)\nBEGIN\n UPDATE completed_job_counts SET count = count - 1 WHERE queue = OLD.queue;\n DELETE FROM completed_job_counts WHERE queue = OLD.queue AND count = 0;\nEND;\n\nCREATE TRIGGER IF NOT EXISTS trg_jobs_completed_enter\nAFTER UPDATE OF state, queue ON jobs\nWHEN NEW.state = 'completed'\n AND (OLD.state <> 'completed' OR NEW.queue <> OLD.queue)\nBEGIN\n INSERT INTO completed_job_counts(queue, count) VALUES (NEW.queue, 1)\n ON CONFLICT(queue) DO UPDATE SET count = count + 1;\nEND;\n\nCREATE TRIGGER IF NOT EXISTS trg_jobs_completed_delete\nAFTER DELETE ON jobs\nWHEN OLD.state = 'completed'\nBEGIN\n UPDATE completed_job_counts SET count = count - 1 WHERE queue = OLD.queue;\n DELETE FROM completed_job_counts WHERE queue = OLD.queue AND count = 0;\nEND;\n";
4
+ export declare const COMPLETED_JOB_RETENTION_INDEX = "\nCREATE INDEX IF NOT EXISTS idx_jobs_completed_retention\n ON jobs(queue, COALESCE(completed_at, created_at), id)\n WHERE state = 'completed';\n\nCREATE INDEX IF NOT EXISTS idx_jobs_completed_retention_global\n ON jobs(COALESCE(completed_at, created_at), id)\n WHERE state = 'completed';\n";
5
+ /** Backfill existing rows before lifecycle triggers become authoritative. */
6
+ export declare const COMPLETED_JOB_MAINTENANCE_MIGRATION = "\nDROP INDEX IF EXISTS idx_jobs_completed_order;\nCREATE INDEX idx_jobs_completed_order\n ON jobs(completed_at DESC, id DESC) WHERE state = 'completed';\n\nCREATE INDEX IF NOT EXISTS idx_jobs_completed_retention\n ON jobs(queue, COALESCE(completed_at, created_at), id)\n WHERE state = 'completed';\n\nCREATE INDEX IF NOT EXISTS idx_jobs_completed_retention_global\n ON jobs(COALESCE(completed_at, created_at), id)\n WHERE state = 'completed';\n\n\nCREATE TABLE IF NOT EXISTS completed_job_counts (\n queue TEXT PRIMARY KEY,\n count INTEGER NOT NULL CHECK (count >= 0)\n);\n\nDELETE FROM completed_job_counts;\nINSERT INTO completed_job_counts(queue, count)\nSELECT queue, COUNT(*) FROM jobs WHERE state = 'completed' GROUP BY queue;\n\nCREATE TRIGGER IF NOT EXISTS trg_jobs_completed_insert\nAFTER INSERT ON jobs\nWHEN NEW.state = 'completed'\nBEGIN\n INSERT INTO completed_job_counts(queue, count) VALUES (NEW.queue, 1)\n ON CONFLICT(queue) DO UPDATE SET count = count + 1;\nEND;\n\nCREATE TRIGGER IF NOT EXISTS trg_jobs_completed_leave\nAFTER UPDATE OF state, queue ON jobs\nWHEN OLD.state = 'completed'\n AND (NEW.state <> 'completed' OR NEW.queue <> OLD.queue)\nBEGIN\n UPDATE completed_job_counts SET count = count - 1 WHERE queue = OLD.queue;\n DELETE FROM completed_job_counts WHERE queue = OLD.queue AND count = 0;\nEND;\n\nCREATE TRIGGER IF NOT EXISTS trg_jobs_completed_enter\nAFTER UPDATE OF state, queue ON jobs\nWHEN NEW.state = 'completed'\n AND (OLD.state <> 'completed' OR NEW.queue <> OLD.queue)\nBEGIN\n INSERT INTO completed_job_counts(queue, count) VALUES (NEW.queue, 1)\n ON CONFLICT(queue) DO UPDATE SET count = count + 1;\nEND;\n\nCREATE TRIGGER IF NOT EXISTS trg_jobs_completed_delete\nAFTER DELETE ON jobs\nWHEN OLD.state = 'completed'\nBEGIN\n UPDATE completed_job_counts SET count = count - 1 WHERE queue = OLD.queue;\n DELETE FROM completed_job_counts WHERE queue = OLD.queue AND count = 0;\nEND;\n\n";
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Durable, payload-free evidence for completed jobs removed by
3
+ * `removeOnComplete`. Unreferenced rows follow the bounded FIFO retention
4
+ * window; rows owned by live dependency edges remain pinned until checkpoint.
5
+ */
6
+ export declare const DEPENDENCY_COMPLETION_SCHEMA = "\nCREATE TABLE IF NOT EXISTS dependency_completions (\n sequence INTEGER PRIMARY KEY AUTOINCREMENT,\n job_id TEXT NOT NULL UNIQUE,\n queue TEXT NOT NULL,\n completed_at INTEGER NOT NULL,\n pinned INTEGER NOT NULL DEFAULT 0\n);\nCREATE INDEX IF NOT EXISTS idx_dependency_completions_queue\n ON dependency_completions(queue);\n";
@@ -0,0 +1,40 @@
1
+ import type { Database } from "../../../sdk/typescript/src/canonical-transport/bun-sqlite-types.js";
2
+ import type { JobId } from "../../domain/types/job.js";
3
+ export interface DependencyCompletionRecord {
4
+ jobId: JobId;
5
+ queue: string;
6
+ completedAt: number;
7
+ pinned: boolean;
8
+ }
9
+ /**
10
+ * SQLite operations for payload-free `removeOnComplete` completion evidence.
11
+ * The owner supplies write-error handling and buffered-job coordination.
12
+ */
13
+ export declare class DependencyCompletionStore {
14
+ private readonly db;
15
+ private readonly insert;
16
+ private readonly deleteJob;
17
+ private readonly deleteResult;
18
+ private readonly deleteFlowFailures;
19
+ private readonly pruneThrough;
20
+ private readonly maxSequence;
21
+ private readonly loadAll;
22
+ private readonly deleteOne;
23
+ private readonly pinOne;
24
+ private readonly unpinOne;
25
+ private readonly unpinAll;
26
+ private readonly loadQueue;
27
+ private readonly deleteQueue;
28
+ constructor(db: Database);
29
+ commit(record: DependencyCompletionRecord, retentionLimit: number): void;
30
+ load(): DependencyCompletionRecord[];
31
+ private loadRecords;
32
+ pin(jobIds: Iterable<JobId>): void;
33
+ unpin(jobIds: Iterable<JobId>, retentionLimit: number): DependencyCompletionRecord[];
34
+ reconcilePins(referenced: ReadonlySet<JobId>, retentionLimit: number): DependencyCompletionRecord[];
35
+ /** Reconcile inside a transaction already owned by the caller. */
36
+ reconcilePinsInTransaction(referenced: ReadonlySet<JobId>, retentionLimit: number): DependencyCompletionRecord[];
37
+ private prune;
38
+ delete(jobId: JobId): boolean;
39
+ deleteForQueue(queue: string): JobId[];
40
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Persistence barrel export
3
+ */
4
+ export * from "./schema.js";
5
+ export * from "./sqlite.js";
@@ -0,0 +1,19 @@
1
+ import type { BackoffConfig, Job, RepeatConfig } from "../../domain/types/job.js";
2
+ export interface StoredJobOptions {
3
+ backoffConfig: BackoffConfig | null;
4
+ repeat: RepeatConfig | null;
5
+ stackTraceLimit: number;
6
+ keepLogs: number | null;
7
+ sizeLimit: number | null;
8
+ deduplicationTtl: number | null;
9
+ deduplicationExtend: boolean;
10
+ deduplicationReplace: boolean;
11
+ debounceId: string | null;
12
+ debounceTtl: number | null;
13
+ durable: boolean;
14
+ groupFifoOrder: string | null;
15
+ }
16
+ /** Persist generation policies that do not have dedicated legacy columns. */
17
+ export declare function encodeJobOptions(job: Job): Uint8Array;
18
+ /** Decode current blobs while giving pre-v34 rows their historical defaults. */
19
+ export declare function decodeJobOptions(blob: Uint8Array | null, context: string): StoredJobOptions;
@@ -0,0 +1,17 @@
1
+ import type { Database } from "../../../sdk/typescript/src/canonical-transport/bun-sqlite-types.js";
2
+ export interface LegacyNameMigrationProgress {
3
+ version: 31 | 32;
4
+ phase: 'job-names' | 'cron-job-names';
5
+ table: 'jobs' | 'cron_jobs';
6
+ processedRows: number;
7
+ processedBytes: number;
8
+ totalRows: number;
9
+ batchRows: number;
10
+ batchBytes: number;
11
+ elapsedMs: number;
12
+ complete: boolean;
13
+ }
14
+ /** Backfill pre-v31 job payload envelopes after adding jobs.name. */
15
+ export declare function migrateLegacyJobNames(db: Database, onProgress?: (progress: LegacyNameMigrationProgress) => void): LegacyNameMigrationProgress;
16
+ /** Backfill pre-v32 cron payload envelopes after adding cron_jobs.job_name. */
17
+ export declare function migrateLegacyCronJobNames(db: Database, onProgress?: (progress: LegacyNameMigrationProgress) => void): LegacyNameMigrationProgress;
@@ -0,0 +1,2 @@
1
+ /** Durable cursor for resumable, bounded SQLite data migrations. */
2
+ export declare const MIGRATION_PROGRESS_TABLE = "\nCREATE TABLE IF NOT EXISTS migration_progress (\n version INTEGER NOT NULL,\n phase TEXT NOT NULL,\n last_key TEXT,\n processed_rows INTEGER NOT NULL DEFAULT 0,\n processed_bytes INTEGER NOT NULL DEFAULT 0,\n total_rows INTEGER NOT NULL DEFAULT 0,\n started_at INTEGER NOT NULL,\n updated_at INTEGER NOT NULL,\n PRIMARY KEY (version, phase)\n);\n";
@@ -0,0 +1,3 @@
1
+ export type MigrationSql = string | readonly string[];
2
+ /** All SQLite migrations in order. Arrays preserve atomic statement boundaries. */
3
+ export declare const MIGRATIONS: Record<number, MigrationSql>;
@@ -0,0 +1,8 @@
1
+ /** SQLite PRAGMA settings for optimal performance */
2
+ export declare const PRAGMA_SETTINGS = "\nPRAGMA journal_mode = WAL;\nPRAGMA synchronous = NORMAL;\nPRAGMA cache_size = -64000;\nPRAGMA temp_store = MEMORY;\nPRAGMA mmap_size = 268435456;\nPRAGMA page_size = 4096;\nPRAGMA busy_timeout = 5000;\n";
3
+ /** Main schema creation. */
4
+ export declare const SCHEMA = "\n-- Jobs table (using UUIDv7 for job IDs)\n-- Uses BLOB for data fields (MessagePack serialization for ~2-3x faster than JSON)\nCREATE TABLE IF NOT EXISTS jobs (\n id TEXT PRIMARY KEY,\n queue TEXT NOT NULL,\n name TEXT,\n data BLOB NOT NULL,\n priority INTEGER NOT NULL DEFAULT 0,\n created_at INTEGER NOT NULL,\n run_at INTEGER NOT NULL,\n started_at INTEGER,\n completed_at INTEGER,\n attempts INTEGER NOT NULL DEFAULT 0,\n max_attempts INTEGER NOT NULL DEFAULT 3,\n backoff INTEGER NOT NULL DEFAULT 1000,\n ttl INTEGER,\n timeout INTEGER,\n unique_key TEXT,\n custom_id TEXT,\n depends_on BLOB,\n parent_id TEXT,\n children_ids BLOB,\n tags BLOB,\n state TEXT NOT NULL DEFAULT 'waiting',\n lifo INTEGER NOT NULL DEFAULT 0,\n group_id TEXT,\n progress INTEGER DEFAULT 0,\n progress_msg TEXT,\n remove_on_complete INTEGER DEFAULT 0,\n remove_on_fail INTEGER DEFAULT 0,\n fail_parent_on_failure INTEGER NOT NULL DEFAULT 0,\n remove_dependency_on_failure INTEGER NOT NULL DEFAULT 0,\n continue_parent_on_failure INTEGER NOT NULL DEFAULT 0,\n ignore_dependency_on_failure INTEGER NOT NULL DEFAULT 0,\n stall_timeout INTEGER,\n last_heartbeat INTEGER,\n stall_count INTEGER NOT NULL DEFAULT 0,\n timeline BLOB,\n stacktrace BLOB,\n dlq_retry_state BLOB,\n extended_options BLOB\n);\n\n-- Indexes for common queries\nCREATE INDEX IF NOT EXISTS idx_jobs_queue_state\n ON jobs(queue, state);\n-- Stable createdAt/id pagination for unfiltered and logical-state queue views\nCREATE INDEX IF NOT EXISTS idx_jobs_queue_created\n ON jobs(queue, created_at, id);\nCREATE INDEX IF NOT EXISTS idx_jobs_queue_state_created\n ON jobs(queue, state, created_at, id);\nCREATE INDEX IF NOT EXISTS idx_jobs_run_at\n ON jobs(run_at) WHERE state IN ('waiting', 'prioritized', 'waiting-children', 'delayed');\nCREATE INDEX IF NOT EXISTS idx_jobs_unique\n ON jobs(queue, unique_key) WHERE unique_key IS NOT NULL;\nCREATE INDEX IF NOT EXISTS idx_jobs_custom_id\n ON jobs(custom_id) WHERE custom_id IS NOT NULL;\nCREATE INDEX IF NOT EXISTS idx_jobs_parent\n ON jobs(parent_id) WHERE parent_id IS NOT NULL;\n\n-- Durable outbox/state for terminal child failure propagation.\nCREATE TABLE IF NOT EXISTS flow_failures (\n parent_id TEXT NOT NULL,\n child_id TEXT NOT NULL,\n child_queue TEXT NOT NULL,\n mode TEXT NOT NULL,\n error TEXT NOT NULL,\n created_at INTEGER NOT NULL,\n PRIMARY KEY (parent_id, child_id)\n);\nCREATE INDEX IF NOT EXISTS idx_flow_failures_parent ON flow_failures(parent_id);\n\n\nCREATE TABLE IF NOT EXISTS dependency_completions (\n sequence INTEGER PRIMARY KEY AUTOINCREMENT,\n job_id TEXT NOT NULL UNIQUE,\n queue TEXT NOT NULL,\n completed_at INTEGER NOT NULL,\n pinned INTEGER NOT NULL DEFAULT 0\n);\nCREATE INDEX IF NOT EXISTS idx_dependency_completions_queue\n ON dependency_completions(queue);\n\n\n-- Job results storage (BLOB for MessagePack)\nCREATE TABLE IF NOT EXISTS job_results (\n job_id TEXT PRIMARY KEY,\n result BLOB,\n completed_at INTEGER NOT NULL\n);\n\n-- Dead letter queue (BLOB for MessagePack - stores full DlqEntry)\nCREATE TABLE IF NOT EXISTS dlq (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n job_id TEXT NOT NULL,\n queue TEXT NOT NULL,\n entry BLOB NOT NULL,\n entered_at INTEGER NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_dlq_queue ON dlq(queue);\nCREATE INDEX IF NOT EXISTS idx_dlq_job_id ON dlq(job_id);\nCREATE INDEX IF NOT EXISTS idx_dlq_entered_at ON dlq(entered_at);\n\n-- Performance indexes for high-throughput operations\n-- Stall detection: runs every 5s, needs fast lookup of active jobs by started_at\nCREATE INDEX IF NOT EXISTS idx_jobs_state_started\n ON jobs(state, started_at) WHERE state = 'active';\n\n-- Group operations: fast lookup by group_id\nCREATE INDEX IF NOT EXISTS idx_jobs_group_id\n ON jobs(group_id) WHERE group_id IS NOT NULL;\n\n-- Pending jobs: compound index for priority-ordered retrieval\nCREATE INDEX IF NOT EXISTS idx_jobs_pending_priority\n ON jobs(queue, state, priority DESC, run_at ASC) WHERE state IN ('waiting', 'prioritized', 'waiting-children', 'delayed');\n\n-- Completed jobs: index for recovery ordering (issue #84)\nCREATE INDEX IF NOT EXISTS idx_jobs_completed_order\n ON jobs(completed_at DESC, id DESC) WHERE state = 'completed';\n\nCREATE INDEX IF NOT EXISTS idx_jobs_completed_retention\n ON jobs(queue, COALESCE(completed_at, created_at), id)\n WHERE state = 'completed';\n\nCREATE INDEX IF NOT EXISTS idx_jobs_completed_retention_global\n ON jobs(COALESCE(completed_at, created_at), id)\n WHERE state = 'completed';\n\n\n\nCREATE TABLE IF NOT EXISTS completed_job_counts (\n queue TEXT PRIMARY KEY,\n count INTEGER NOT NULL CHECK (count >= 0)\n);\n\n\nCREATE TRIGGER IF NOT EXISTS trg_jobs_completed_insert\nAFTER INSERT ON jobs\nWHEN NEW.state = 'completed'\nBEGIN\n INSERT INTO completed_job_counts(queue, count) VALUES (NEW.queue, 1)\n ON CONFLICT(queue) DO UPDATE SET count = count + 1;\nEND;\n\nCREATE TRIGGER IF NOT EXISTS trg_jobs_completed_leave\nAFTER UPDATE OF state, queue ON jobs\nWHEN OLD.state = 'completed'\n AND (NEW.state <> 'completed' OR NEW.queue <> OLD.queue)\nBEGIN\n UPDATE completed_job_counts SET count = count - 1 WHERE queue = OLD.queue;\n DELETE FROM completed_job_counts WHERE queue = OLD.queue AND count = 0;\nEND;\n\nCREATE TRIGGER IF NOT EXISTS trg_jobs_completed_enter\nAFTER UPDATE OF state, queue ON jobs\nWHEN NEW.state = 'completed'\n AND (OLD.state <> 'completed' OR NEW.queue <> OLD.queue)\nBEGIN\n INSERT INTO completed_job_counts(queue, count) VALUES (NEW.queue, 1)\n ON CONFLICT(queue) DO UPDATE SET count = count + 1;\nEND;\n\nCREATE TRIGGER IF NOT EXISTS trg_jobs_completed_delete\nAFTER DELETE ON jobs\nWHEN OLD.state = 'completed'\nBEGIN\n UPDATE completed_job_counts SET count = count - 1 WHERE queue = OLD.queue;\n DELETE FROM completed_job_counts WHERE queue = OLD.queue AND count = 0;\nEND;\n\n\n-- Cron jobs (BLOB for MessagePack)\nCREATE TABLE IF NOT EXISTS cron_jobs (\n name TEXT PRIMARY KEY,\n queue TEXT NOT NULL,\n job_name TEXT,\n data BLOB NOT NULL,\n schedule TEXT,\n repeat_every INTEGER,\n priority INTEGER NOT NULL DEFAULT 0,\n next_run INTEGER NOT NULL,\n executions INTEGER NOT NULL DEFAULT 0,\n max_limit INTEGER,\n timezone TEXT,\n unique_key TEXT,\n dedup BLOB,\n skip_missed_on_restart INTEGER NOT NULL DEFAULT 0,\n skip_if_no_worker INTEGER NOT NULL DEFAULT 0,\n prevent_overlap INTEGER NOT NULL DEFAULT 1,\n job_options BLOB\n);\n\n-- Queue state persistence (optional)\nCREATE TABLE IF NOT EXISTS queue_state (\n name TEXT PRIMARY KEY,\n paused INTEGER NOT NULL DEFAULT 0,\n rate_limit INTEGER,\n concurrency_limit INTEGER,\n rate_limit_duration INTEGER,\n rate_limit_expires_at INTEGER,\n stall_enabled INTEGER,\n stall_interval INTEGER,\n max_stalls INTEGER,\n stall_grace_period INTEGER,\n dlq_config BLOB\n);\n\n-- Durable per-group overrides. Runtime rate windows remain in-memory in the\n-- embedded single-broker engine, matching the existing queue-level limiter.\nCREATE TABLE IF NOT EXISTS group_state (\n queue TEXT NOT NULL,\n group_id TEXT NOT NULL,\n rate_limit INTEGER,\n rate_duration INTEGER,\n concurrency_limit INTEGER,\n paused INTEGER NOT NULL DEFAULT 0,\n PRIMARY KEY (queue, group_id)\n);\n\n-- Per-queue lifecycle event journal. Entries are kept newest-first by id and\n-- bounded by QueueManagerConfig.maxQueueEvents when they are appended.\nCREATE TABLE IF NOT EXISTS queue_events (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n queue TEXT NOT NULL,\n event_type TEXT NOT NULL,\n job_id TEXT NOT NULL,\n occurred_at INTEGER NOT NULL,\n payload BLOB\n);\nCREATE INDEX IF NOT EXISTS idx_queue_events_queue_id\n ON queue_events(queue, id DESC);\n\n-- Cumulative terminal counters are separate from bounded minute buckets so\n-- pruning old data points never resets meta.count.\nCREATE TABLE IF NOT EXISTS queue_metrics_meta (\n queue TEXT NOT NULL,\n type TEXT NOT NULL CHECK (type IN ('completed', 'failed')),\n total_count INTEGER NOT NULL DEFAULT 0,\n prev_ts INTEGER NOT NULL DEFAULT 0,\n prev_count INTEGER NOT NULL DEFAULT 0,\n PRIMARY KEY (queue, type)\n);\nCREATE TABLE IF NOT EXISTS queue_metric_buckets (\n queue TEXT NOT NULL,\n type TEXT NOT NULL CHECK (type IN ('completed', 'failed')),\n minute INTEGER NOT NULL,\n count INTEGER NOT NULL DEFAULT 0,\n PRIMARY KEY (queue, type, minute)\n);\nCREATE INDEX IF NOT EXISTS idx_queue_metric_buckets_window\n ON queue_metric_buckets(queue, type, minute DESC);\n";
5
+ /** Migration version table */
6
+ export declare const MIGRATION_TABLE = "\nCREATE TABLE IF NOT EXISTS migrations (\n version INTEGER PRIMARY KEY,\n applied_at INTEGER NOT NULL\n);\n";
7
+ /** Current schema version */
8
+ export declare const SCHEMA_VERSION = 37;
@@ -0,0 +1,9 @@
1
+ import type { DurableAdmissionMetadata } from "../types/admission.js";
2
+ import { SqliteState } from "./state.js";
3
+ /** SQL primitives shared by every durable job-admission transaction. */
4
+ export declare abstract class SqliteAdmission extends SqliteState {
5
+ protected hasAdmissionMetadata(metadata?: DurableAdmissionMetadata): boolean;
6
+ protected runAdmissionMetadata(metadata?: DurableAdmissionMetadata): void;
7
+ protected finalizeAdmissionMetadata(metadata?: DurableAdmissionMetadata): void;
8
+ protected commitBufferedAdmissionMetadata(metadata?: DurableAdmissionMetadata): void;
9
+ }
@@ -0,0 +1,17 @@
1
+ import type { Job, JobId } from "../../../domain/types/job.js";
2
+ import { SqliteRecords } from "./records.js";
3
+ export interface CompletedJobRemoval {
4
+ jobId: JobId;
5
+ queue: string;
6
+ }
7
+ /** SQLite-authoritative cleanup and exact retained-completion counts. */
8
+ export declare abstract class SqliteCompleted extends SqliteRecords {
9
+ getCompletedJob(jobId: JobId): Job | null;
10
+ cleanCompletedJobs(queue: string | null, completedBefore: number, limit: number, isProtected?: (jobId: JobId) => boolean): CompletedJobRemoval[];
11
+ countCompletedJobs(): number;
12
+ countCompletedJobsByQueue(queueNames: Iterable<string>): Map<string, number>;
13
+ loadCompletedQueueNames(): string[];
14
+ loadCompletedJobsForRetry(queue: string, completedBefore: number, cursorTimestamp: number, cursorId: string, limit: number): Job[];
15
+ private selectCompletedCandidates;
16
+ private completedCandidatePage;
17
+ }
@@ -0,0 +1,48 @@
1
+ import type { CronJob } from "../../../domain/types/cron.js";
2
+ import type { DlqConfig } from "../../../domain/types/dlq.js";
3
+ import type { StallConfig } from "../../../domain/types/stall.js";
4
+ import { SqliteQueries } from "./queries.js";
5
+ export interface PersistedQueueState {
6
+ name: string;
7
+ paused: boolean;
8
+ rateLimit: number | null;
9
+ concurrencyLimit: number | null;
10
+ rateLimitDuration: number | null;
11
+ rateLimitExpiresAt: number | null;
12
+ stallConfig: StallConfig | null;
13
+ dlqConfig: DlqConfig | null;
14
+ }
15
+ export interface PersistedGroupState {
16
+ queue: string;
17
+ groupId: string;
18
+ rateLimit: number | null;
19
+ rateDuration: number | null;
20
+ concurrencyLimit: number | null;
21
+ paused: boolean;
22
+ }
23
+ /** Cron schedules and durable queue control-state. */
24
+ export declare abstract class SqliteControl extends SqliteQueries {
25
+ saveCron(cron: CronJob): void;
26
+ loadCronJobs(): CronJob[];
27
+ deleteCron(name: string): void;
28
+ updateCron(name: string, executions: number, nextRun: number): void;
29
+ saveQueueState(name: string, state: {
30
+ paused: boolean;
31
+ rateLimit: number | null;
32
+ concurrencyLimit: number | null;
33
+ rateLimitDuration?: number | null;
34
+ rateLimitExpiresAt?: number | null;
35
+ stallConfig?: StallConfig | null;
36
+ dlqConfig?: DlqConfig | null;
37
+ }): void;
38
+ loadQueueState(): PersistedQueueState[];
39
+ saveGroupRateLimit(queue: string, groupId: string, max: number, duration: number): void;
40
+ removeGroupRateLimit(queue: string, groupId: string): void;
41
+ saveGroupConcurrency(queue: string, groupId: string, concurrency: number): void;
42
+ removeGroupConcurrency(queue: string, groupId: string): void;
43
+ saveGroupPaused(queue: string, groupId: string, paused: boolean): void;
44
+ loadGroupState(): PersistedGroupState[];
45
+ deleteGroupState(queue: string): void;
46
+ deleteQueueState(name: string): void;
47
+ private deleteEmptyGroupState;
48
+ }
@@ -0,0 +1,26 @@
1
+ import type { FlowFailureRecord } from "../../../domain/types/flow.js";
2
+ import type { Job, JobId } from "../../../domain/types/job.js";
3
+ import type { DurableAdmissionMetadata } from "../types/admission.js";
4
+ import { SqliteMutations } from "./mutations.js";
5
+ export type FlowLinkWriteMode = {
6
+ readonly type: 'update';
7
+ } | {
8
+ readonly type: 'insert';
9
+ } | {
10
+ readonly type: 'replace';
11
+ readonly previousJobId: JobId;
12
+ } | {
13
+ readonly type: 'transfer-active';
14
+ readonly previousJobId: JobId;
15
+ };
16
+ /** Atomic persistence for parent/child relationships and failure outbox rows. */
17
+ export declare abstract class SqliteFlows extends SqliteMutations {
18
+ updateFlowLink(child: Job, parent: Job, parentState: 'waiting-children' | 'waiting' | 'prioritized' | 'delayed'): void;
19
+ commitFlowLink(child: Job, parent: Job, parentState: 'waiting-children' | 'waiting' | 'prioritized' | 'delayed', mode: FlowLinkWriteMode, admission?: DurableAdmissionMetadata): void;
20
+ backpatchFlowChild(child: Pick<Job, 'id' | 'parentId' | 'data'>, previousParentId: JobId | null): void;
21
+ removeFlowLink(child: Pick<Job, 'id' | 'parentId' | 'data'>, parent: Pick<Job, 'id' | 'childrenIds' | 'dependsOn' | 'data' | 'runAt'>, parentState: 'waiting-children' | 'waiting' | 'prioritized'): void;
22
+ saveFlowFailure(record: FlowFailureRecord): void;
23
+ loadFlowFailures(): FlowFailureRecord[];
24
+ deleteFlowFailure(parentId: JobId, childId?: JobId): void;
25
+ updateFlowParentResolution(job: Pick<Job, 'id' | 'dependsOn' | 'runAt' | 'priority' | 'timeline'>, stateOverride?: 'waiting-children' | 'waiting' | 'prioritized' | 'delayed'): void;
26
+ }
@@ -0,0 +1,17 @@
1
+ import { type Job, type JobId, type JobTimelineEntry } from "../../../domain/types/job.js";
2
+ import type { DurableAdmissionMetadata } from "../types/admission.js";
3
+ import type { ActiveJobWrite, CompletedJobWrite } from "../types/sqlite.js";
4
+ import { SqliteAdmission } from "./admission.js";
5
+ /** Buffered admission and lifecycle state persistence. */
6
+ export declare abstract class SqliteJobLifecycle extends SqliteAdmission {
7
+ insertJob(job: Job, durable?: boolean, admission?: DurableAdmissionMetadata): void;
8
+ insertJobImmediate(job: Job, admission?: DurableAdmissionMetadata): void;
9
+ protected runInsertJobStmt(job: Job): void;
10
+ protected flushIfBuffered(jobId: JobId): void;
11
+ private flushPendingBatch;
12
+ markActive(jobId: JobId, startedAt: number, timeline?: JobTimelineEntry[]): void;
13
+ markActiveBatch(updates: readonly ActiveJobWrite[]): void;
14
+ markWaitingChildren(jobId: JobId, timeline?: JobTimelineEntry[]): void;
15
+ markCompleted(jobId: JobId, completedAt: number, timeline?: JobTimelineEntry[]): void;
16
+ markCompletedBatch(updates: readonly CompletedJobWrite[]): void;
17
+ }
@@ -0,0 +1,15 @@
1
+ import type { DlqEntry } from "../../../domain/types/dlq.js";
2
+ import type { FlowFailureRecord } from "../../../domain/types/flow.js";
3
+ import type { Job, JobId } from "../../../domain/types/job.js";
4
+ import { SqliteJobLifecycle } from "./jobLifecycle.js";
5
+ /** DLQ persistence layered on buffered job lifecycle writes. */
6
+ export declare abstract class SqliteJobs extends SqliteJobLifecycle {
7
+ markFailed(job: Job, error: string | null): void;
8
+ saveDlqEntry(entry: DlqEntry): void;
9
+ commitFailedJob(jobId: JobId, entry: DlqEntry | null, flowFailure: FlowFailureRecord | null): void;
10
+ deleteDlqEntry(jobId: JobId): void;
11
+ requeueDlqJob(job: Job): void;
12
+ clearDlqQueue(queue: string): void;
13
+ purgeDlqEntries(queue: string, dlqJobIds: readonly JobId[], terminalJobIds: readonly JobId[], clearQueue: boolean): void;
14
+ loadDlq(): Map<string, DlqEntry[]>;
15
+ }
@@ -0,0 +1,6 @@
1
+ import { SqliteTelemetry } from "./telemetry.js";
2
+ /** Storage shutdown and file-size inspection. */
3
+ export declare class SqliteLifecycle extends SqliteTelemetry {
4
+ close(): void;
5
+ getSize(): number;
6
+ }
@@ -0,0 +1,27 @@
1
+ import type { Job, JobId } from "../../../domain/types/job.js";
2
+ import type { DependencyCompletionRecord } from "../dependencyCompletionStore.js";
3
+ import type { DurableAdmissionMetadata } from "../types/admission.js";
4
+ import { SqliteJobs } from "./jobs.js";
5
+ export interface QueueDeletionResult {
6
+ bufferedJobIds: JobId[];
7
+ dependencyCompletions: DependencyCompletionRecord[];
8
+ }
9
+ /** Non-terminal job field and scheduling mutations. */
10
+ export declare abstract class SqliteMutations extends SqliteJobs {
11
+ updateForRetry(job: Job): void;
12
+ /** Atomically move a completed job back to waiting and retire its old result. */
13
+ requeueCompletedJob(job: Job): void;
14
+ deleteJob(jobId: JobId): void;
15
+ /** Commit every durable queue-owned deletion before removing buffered jobs. */
16
+ deleteJobsForQueue(queue: string, referencedDependencyIds: ReadonlySet<JobId>, dependencyRetentionLimit: number): QueueDeletionResult;
17
+ replaceJob(oldJobId: JobId, newJob: Job, durable?: boolean, admission?: DurableAdmissionMetadata): void;
18
+ transferActiveDedupJob(oldJobId: JobId, newJob: Job, durable?: boolean, admission?: DurableAdmissionMetadata): void;
19
+ protected runDeleteJobRows(jobId: JobId): void;
20
+ protected runClearActiveDedupKey(jobId: JobId): void;
21
+ updateJobData(jobId: JobId, data: unknown): void;
22
+ clearJobUniqueKey(jobId: JobId): void;
23
+ updateJobPriority(jobId: JobId, priority: number, lifo: boolean): void;
24
+ updateJobProgress(jobId: JobId, progress: number, message: string | null, lastHeartbeat: number): void;
25
+ updateRunAt(jobId: JobId, runAt: number): void;
26
+ updateJobChildrenIds(jobId: JobId, childrenIds: JobId[]): void;
27
+ }
@@ -0,0 +1,23 @@
1
+ import type { Job } from "../../../domain/types/job.js";
2
+ import { SqliteCompleted } from "./completed.js";
3
+ /** Persisted and logical-state job queries used by recovery and public pagination. */
4
+ export declare abstract class SqliteQueries extends SqliteCompleted {
5
+ queryJobs(queue: string, options: {
6
+ state?: string;
7
+ states?: string[];
8
+ limit: number;
9
+ offset: number;
10
+ asc: boolean;
11
+ }): Job[];
12
+ queryJobsByLogicalStates(queue: string, states: string[], options: {
13
+ limit: number;
14
+ offset: number;
15
+ asc: boolean;
16
+ now: number;
17
+ }): Job[];
18
+ loadPendingJobs(limit?: number, offset?: number): Job[];
19
+ loadActiveJobs(limit?: number, offset?: number): Job[];
20
+ loadCompletedJobs(limit?: number, offset?: number): Job[];
21
+ countPendingJobs(): number;
22
+ countActiveJobs(): number;
23
+ }
@@ -0,0 +1,3 @@
1
+ export declare const DELETE_QUEUE_JOB_RESULTS_FROM_JOBS_SQL = "DELETE FROM job_results\n WHERE job_id IN (\n SELECT target.id FROM jobs AS target\n WHERE target.queue = ?\n AND NOT EXISTS (\n SELECT 1 FROM dlq AS other_dlq\n WHERE other_dlq.job_id = target.id AND other_dlq.queue <> ?\n )\n )";
2
+ export declare const DELETE_QUEUE_JOB_RESULTS_FROM_DLQ_SQL = "DELETE FROM job_results\n WHERE job_id IN (\n SELECT dlq.job_id FROM dlq\n WHERE dlq.queue = ?\n AND NOT EXISTS (\n SELECT 1 FROM jobs\n WHERE jobs.id = dlq.job_id AND jobs.queue <> ?\n )\n AND NOT EXISTS (\n SELECT 1 FROM dlq AS other_dlq\n WHERE other_dlq.job_id = dlq.job_id AND other_dlq.queue <> ?\n )\n )";
3
+ export declare const DELETE_QUEUE_FLOW_FAILURES_SQL = "DELETE FROM flow_failures\n WHERE child_queue = ?\n OR parent_id IN (\n SELECT target.id FROM jobs AS target\n WHERE target.queue = ?\n AND NOT EXISTS (\n SELECT 1 FROM dlq AS other_dlq\n WHERE other_dlq.job_id = target.id AND other_dlq.queue <> ?\n )\n )\n OR child_id IN (\n SELECT target.id FROM jobs AS target\n WHERE target.queue = ?\n AND NOT EXISTS (\n SELECT 1 FROM dlq AS other_dlq\n WHERE other_dlq.job_id = target.id AND other_dlq.queue <> ?\n )\n )\n OR EXISTS (\n SELECT 1 FROM dlq\n WHERE dlq.queue = ?\n AND (dlq.job_id = flow_failures.parent_id\n OR dlq.job_id = flow_failures.child_id)\n AND NOT EXISTS (\n SELECT 1 FROM jobs\n WHERE jobs.id = dlq.job_id AND jobs.queue <> ?\n )\n AND NOT EXISTS (\n SELECT 1 FROM dlq AS other_dlq\n WHERE other_dlq.job_id = dlq.job_id AND other_dlq.queue <> ?\n )\n )";
@@ -0,0 +1,24 @@
1
+ import type { DlqEntry } from "../../../domain/types/dlq.js";
2
+ import { type Job, type JobId } from "../../../domain/types/job.js";
3
+ import type { DependencyCompletionRecord } from "../dependencyCompletionStore.js";
4
+ import { SqliteFlows } from "./flows.js";
5
+ /** Direct job/result lookup and payload-free dependency completion records. */
6
+ export declare abstract class SqliteRecords extends SqliteFlows {
7
+ getJob(id: JobId): Job | null;
8
+ storeResult(jobId: JobId, result: unknown): void;
9
+ getResult(jobId: JobId): unknown;
10
+ hasResult(jobId: JobId): boolean;
11
+ hasDlqEntry(jobId: JobId): boolean;
12
+ getDlqEntry(jobId: JobId): DlqEntry | null;
13
+ loadDlqJobIds(): Set<JobId>;
14
+ getJobStateRaw(jobId: JobId): string | null;
15
+ loadCompletedJobIds(requested: Iterable<JobId>): Set<JobId>;
16
+ commitRemovedCompletion(job: Pick<Job, 'id' | 'queue'>, retentionLimit: number, pinned: boolean, completedAt?: number): void;
17
+ loadDependencyCompletions(): DependencyCompletionRecord[];
18
+ pinDependencyCompletions(jobIds: Iterable<JobId>): void;
19
+ unpinDependencyCompletions(jobIds: Iterable<JobId>, retentionLimit: number): DependencyCompletionRecord[];
20
+ reconcileDependencyCompletionPins(referenced: ReadonlySet<JobId>, retentionLimit: number): DependencyCompletionRecord[];
21
+ deleteDependencyCompletion(jobId: JobId): boolean;
22
+ deleteDependencyCompletionsForQueue(queue: string): JobId[];
23
+ insertJobsBatch(jobs: Job[], durable?: boolean): void;
24
+ }
@@ -0,0 +1,42 @@
1
+ import { Database } from "../../../../sdk/typescript/src/canonical-transport/bun-sqlite-types.js";
2
+ import { type DlqEntry } from "../../../domain/types/dlq.js";
3
+ import type { Job, JobId } from "../../../domain/types/job.js";
4
+ import { BatchInsertManager, WriteBuffer } from "../sqliteBatch.js";
5
+ import { DependencyCompletionStore } from "../dependencyCompletionStore.js";
6
+ import { type StatementName } from "../statements.js";
7
+ import type { SqliteConfig, SqliteCriticalLoss, SqliteCriticalLossCallback } from "../types/sqlite.js";
8
+ import { SqliteTelemetryStore } from "./telemetryStore.js";
9
+ /** Owns the database, prepared statements, buffering, and storage health state. */
10
+ export declare abstract class SqliteState {
11
+ protected readonly db: Database;
12
+ protected readonly statements: Map<StatementName, ReturnType<Database['prepare']>>;
13
+ protected readonly batchManager: BatchInsertManager;
14
+ protected readonly writeBuffer: WriteBuffer;
15
+ protected readonly dependencyCompletionStore: DependencyCompletionStore;
16
+ protected readonly telemetryStore: SqliteTelemetryStore;
17
+ protected _diskFull: boolean;
18
+ protected _lastDiskFullError: string | null;
19
+ protected _lastDiskFullAt: number | null;
20
+ protected readonly _criticalLosses: SqliteCriticalLoss[];
21
+ protected readonly _onCriticalLoss?: SqliteCriticalLossCallback;
22
+ private static readonly MAX_RETAINED_LOSSES;
23
+ protected abstract saveDlqEntry(entry: DlqEntry): void;
24
+ constructor(config: SqliteConfig);
25
+ private handleCriticalLoss;
26
+ private previewJobData;
27
+ getCriticalLosses(): readonly SqliteCriticalLoss[];
28
+ clearCriticalLosses(): void;
29
+ private setDiskFull;
30
+ protected safeWrite(operation: () => void): void;
31
+ get diskFull(): boolean;
32
+ getDiskFullStatus(): {
33
+ diskFull: boolean;
34
+ error: string | null;
35
+ since: number | null;
36
+ };
37
+ flushWriteBuffer(): number;
38
+ withDeferredBufferFlush<T>(operation: () => T): T;
39
+ getBufferedJobs(queue?: string): Job[];
40
+ getBufferedJob(jobId: JobId): Job | null;
41
+ getBufferedJobState(jobId: JobId): string | null;
42
+ }
@@ -0,0 +1,17 @@
1
+ import type { QueueMetricsMeta, QueueMetricType } from "../../../domain/types/metrics.js";
2
+ import type { JobEvent } from "../../../domain/types/queue.js";
3
+ import { SqliteControl } from "./control.js";
4
+ export interface PersistedQueueMetrics {
5
+ meta: QueueMetricsMeta;
6
+ data: number[];
7
+ }
8
+ /** Durable lifecycle journal and minute-bucket metrics. */
9
+ export declare abstract class SqliteTelemetry extends SqliteControl {
10
+ recordQueueEvent(event: JobEvent, maxEvents: number, maxMetricDataPoints: number): void;
11
+ recordQueueEventsBatch(events: readonly JobEvent[], maxEvents: number, maxMetricDataPoints: number): void;
12
+ getQueueMetrics(queue: string, type: QueueMetricType, maxMetricDataPoints: number): PersistedQueueMetrics;
13
+ trimQueueEvents(queue: string, maxLength: number): number;
14
+ countQueueEvents(queue: string): number;
15
+ clearQueueTelemetry(queue: string): void;
16
+ private expandMetricBuckets;
17
+ }
@@ -0,0 +1,30 @@
1
+ import type { Database } from "../../../../sdk/typescript/src/canonical-transport/bun-sqlite-types.js";
2
+ import type { QueueMetricType } from "../../../domain/types/metrics.js";
3
+ import type { JobEvent } from "../../../domain/types/queue.js";
4
+ export interface MetricBucketRow {
5
+ minute: number;
6
+ count: number;
7
+ }
8
+ export interface MetricMetaRow {
9
+ total_count: number;
10
+ prev_ts: number;
11
+ prev_count: number;
12
+ }
13
+ /** Owns SQLite telemetry statements, transactions, and exact event retention counts. */
14
+ export declare class SqliteTelemetryStore {
15
+ private readonly statements;
16
+ private readonly eventCounts;
17
+ private readonly writeTransaction;
18
+ private readonly clearTransaction;
19
+ constructor(db: Database);
20
+ writeQueueEvents(events: readonly JobEvent[], maxEvents: number, maxMetricDataPoints: number): void;
21
+ getMetricMeta(queue: string, type: QueueMetricType): MetricMetaRow | null;
22
+ getMetricBuckets(queue: string, type: QueueMetricType, limit: number): MetricBucketRow[];
23
+ trimQueueEvents(queue: string, maxLength: number): number;
24
+ countQueueEvents(queue: string): number;
25
+ clearQueueTelemetry(queue: string): void;
26
+ /** Run cached queue deletes inside the caller's transaction. */
27
+ deleteQueueTelemetryRows(queue: string): void;
28
+ markQueueTelemetryCleared(queue: string): void;
29
+ private refreshEventCount;
30
+ }
@@ -0,0 +1,47 @@
1
+ import type { Database } from "../../../../sdk/typescript/src/canonical-transport/bun-sqlite-types.js";
2
+ import type { QueueMetricType } from "../../../domain/types/metrics.js";
3
+ import { type JobEvent } from "../../../domain/types/queue.js";
4
+ export interface PreparedQueueEvent {
5
+ event: JobEvent;
6
+ metricType: QueueMetricType | null;
7
+ minute: number;
8
+ payload: Uint8Array;
9
+ }
10
+ interface MetricEvent {
11
+ minute: number;
12
+ timestamp: number;
13
+ }
14
+ export interface MetricGroup {
15
+ queue: string;
16
+ type: QueueMetricType;
17
+ events: MetricEvent[];
18
+ }
19
+ export declare function prepareQueueEvents(events: readonly JobEvent[]): PreparedQueueEvent[];
20
+ export declare function groupMetricEvents(events: readonly PreparedQueueEvent[]): MetricGroup[];
21
+ type TelemetryStatement = ReturnType<Database['prepare']>;
22
+ export interface TelemetryWriteStatements {
23
+ insertEvent: TelemetryStatement;
24
+ trimEvents: TelemetryStatement;
25
+ evictOldestEvents: TelemetryStatement;
26
+ incrementBucket: TelemetryStatement;
27
+ readBucket: TelemetryStatement;
28
+ updateMeta: TelemetryStatement;
29
+ clearBuckets: TelemetryStatement;
30
+ readNewest: TelemetryStatement;
31
+ trimBuckets: TelemetryStatement;
32
+ }
33
+ export interface QueueEventCountUpdate {
34
+ queue: string;
35
+ count: number;
36
+ }
37
+ export interface QueueEventWrite {
38
+ statements: TelemetryWriteStatements;
39
+ batch: readonly PreparedQueueEvent[];
40
+ metricGroups: readonly MetricGroup[];
41
+ eventLimit: number;
42
+ metricLimit: number;
43
+ eventCounts: ReadonlyMap<string, number>;
44
+ }
45
+ /** Apply prepared events inside an existing transaction, preserving scalar semantics. */
46
+ export declare function applyQueueEvents(write: QueueEventWrite): QueueEventCountUpdate[];
47
+ export {};
@@ -0,0 +1,6 @@
1
+ import { SqliteLifecycle } from "./sqlite/lifecycle.js";
2
+ export type { SqliteConfig, SqliteCriticalLoss, SqliteCriticalLossCallback } from "./types/sqlite.js";
3
+ export type { DurableAdmissionMetadata } from "./types/admission.js";
4
+ /** SQLite persistence façade. Implementation is split by responsibility. */
5
+ export declare class SqliteStorage extends SqliteLifecycle {
6
+ }
@@ -0,0 +1,4 @@
1
+ /** Stable batch-persistence import surface. */
2
+ export { BatchInsertManager } from "./batchInsert.js";
3
+ export { WriteBuffer } from "./writeBuffer.js";
4
+ export type { BatchInsertResult, CriticalErrorCallback, WriteBufferErrorCallback, } from "./types/batch.js";
@@ -0,0 +1,5 @@
1
+ import type { Database } from "../../../sdk/typescript/src/canonical-transport/bun-sqlite-types.js";
2
+ export declare function readSqliteSchemaVersion(db: Database): number;
3
+ export declare function assertSupportedSqliteSchema(db: Database): number;
4
+ /** Apply every pending SQLite migration in restart-safe, bounded phases. */
5
+ export declare function migrateSqliteDatabase(db: Database, path: string): void;
@@ -0,0 +1,50 @@
1
+ /**
2
+ * SQLite Serialization Utilities
3
+ * MessagePack encoding/decoding and row conversion
4
+ * Uses msgpackr for 2-3x faster serialization
5
+ */
6
+ import { type Job } from "../../domain/types/job.js";
7
+ import { type DlqEntry } from "../../domain/types/dlq.js";
8
+ import type { DbJob } from "./statements.js";
9
+ /** Encode data to MessagePack buffer */
10
+ export declare function pack(data: unknown): Uint8Array;
11
+ /** Decode MessagePack buffer to data */
12
+ export declare function unpack<T>(buffer: Uint8Array | null, fallback: T, context: string): T;
13
+ /** Decode a modern named payload or a pre-v31 name-in-data envelope. */
14
+ export declare function decodeStoredNamedPayload(name: string | null | undefined, buffer: Uint8Array, context: string): {
15
+ name: string;
16
+ data: unknown;
17
+ };
18
+ /**
19
+ * Normalize jobs constructed by pre-stallCount integrations at the persistence
20
+ * boundary. The database keeps its NOT NULL invariant while an omitted legacy
21
+ * field receives the same zero default as a freshly created Job.
22
+ */
23
+ export declare function persistedStallCount(job: Pick<Job, 'stallCount'>): number;
24
+ export type PersistedJobState = 'active' | 'completed' | 'delayed' | 'prioritized' | 'waiting' | 'waiting-children';
25
+ /** Override inference after a buffered job changes lifecycle before its insert succeeds. */
26
+ export declare function setBufferedJobState(job: Job, state: PersistedJobState): void;
27
+ /** Derive the current durable state when a buffered job is eventually inserted. */
28
+ export declare function persistedJobStateForWrite(job: Job, now?: number): PersistedJobState;
29
+ /**
30
+ * Symbol marker stamped on a Job whose `depends_on` blob failed to decode.
31
+ *
32
+ * A corrupt dependency list must NOT collapse into `dependsOn: []` (which the
33
+ * recovery path treats as "ready, no deps" -> out-of-order execution). Rather
34
+ * than parking the job behind a magic-string dependency (which could collide
35
+ * with a real user-supplied jobId, and which leaks into waitingDeps forever),
36
+ * we signal corruption with a Symbol-keyed flag that cannot collide with any
37
+ * user data. The recovery path detects this flag and routes the job to the DLQ.
38
+ *
39
+ * A Symbol property is non-enumerable to JSON/msgpack and is never persisted,
40
+ * so it only exists on the in-memory Job for the duration of recovery.
41
+ */
42
+ export declare const CORRUPT_DEPENDS_ON: unique symbol;
43
+ /** Read the authoritative SQLite state carried by a recovered job. */
44
+ export declare function persistedJobState(job: Job): PersistedJobState | undefined;
45
+ /** True if a Job was recovered with a corrupt `depends_on` blob. */
46
+ export declare function isCorruptDependsOn(job: Job): boolean;
47
+ /** Convert database row to Job object */
48
+ export declare function rowToJob(row: DbJob): Job;
49
+ /** Reconstruct DlqEntry from MessagePack-decoded data */
50
+ export declare function reconstructDlqEntry(entry: DlqEntry): DlqEntry;