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.
- package/dist/application/background/dlq.d.ts +2 -0
- package/dist/application/background/dlq.js +26 -0
- package/dist/application/background/lifecycle.d.ts +4 -0
- package/dist/application/background/lifecycle.js +90 -0
- package/dist/application/background/recovery/active.d.ts +4 -0
- package/dist/application/background/recovery/active.js +69 -0
- package/dist/application/background/recovery/index.d.ts +2 -0
- package/dist/application/background/recovery/index.js +22 -0
- package/dist/application/background/recovery/pending.d.ts +3 -0
- package/dist/application/background/recovery/pending.js +69 -0
- package/dist/application/background/recovery/restore.d.ts +5 -0
- package/dist/application/background/recovery/restore.js +58 -0
- package/dist/application/background/recovery/shared.d.ts +6 -0
- package/dist/application/background/recovery/shared.js +15 -0
- package/dist/application/background/timeouts.d.ts +25 -0
- package/dist/application/background/timeouts.js +191 -0
- package/dist/application/backgroundTasks.d.ts +7 -31
- package/dist/application/backgroundTasks.js +6 -438
- package/dist/application/cleanupTasks.js +2 -1
- package/dist/application/clientTracking.js +3 -1
- package/dist/application/contextFactory.d.ts +13 -90
- package/dist/application/contextFactory.js +9 -0
- package/dist/application/dependencyResultTracker.d.ts +1 -0
- package/dist/application/dependencyResultTracker.js +3 -0
- package/dist/application/dlqManager.d.ts +9 -9
- package/dist/application/dlqManager.js +49 -167
- package/dist/application/dlqRetry.d.ts +12 -0
- package/dist/application/dlqRetry.js +97 -0
- package/dist/application/lockManager.js +24 -4
- package/dist/application/lockOperations.js +16 -3
- package/dist/application/operations/ack/batch.d.ts +8 -0
- package/dist/application/operations/ack/batch.js +64 -0
- package/dist/application/operations/ack/completion.d.ts +3 -0
- package/dist/application/operations/ack/completion.js +74 -0
- package/dist/application/operations/ack/failure.d.ts +3 -0
- package/dist/application/operations/ack/failure.js +160 -0
- package/dist/application/operations/ack.d.ts +5 -79
- package/dist/application/operations/ack.js +4 -319
- package/dist/application/operations/ackHelpers.d.ts +3 -52
- package/dist/application/operations/ackHelpers.js +11 -4
- package/dist/application/operations/customId.d.ts +18 -5
- package/dist/application/operations/customId.js +36 -25
- package/dist/application/operations/flowValidation.js +9 -4
- package/dist/application/operations/jobManagement.js +50 -11
- package/dist/application/operations/jobMoveOperations.js +3 -3
- package/dist/application/operations/jobStateTransitions.d.ts +1 -1
- package/dist/application/operations/jobStateTransitions.js +16 -2
- package/dist/application/operations/parentLink.d.ts +36 -0
- package/dist/application/operations/parentLink.js +153 -0
- package/dist/application/operations/parentLinkInput.d.ts +8 -0
- package/dist/application/operations/parentLinkInput.js +23 -0
- package/dist/application/operations/push.d.ts +5 -44
- package/dist/application/operations/push.js +62 -152
- package/dist/application/operations/pushAdmission.d.ts +32 -0
- package/dist/application/operations/pushAdmission.js +38 -0
- package/dist/application/operations/pushBatch.d.ts +4 -0
- package/dist/application/operations/pushBatch.js +136 -0
- package/dist/application/operations/pushContext.d.ts +39 -0
- package/dist/application/operations/pushContext.js +1 -0
- package/dist/application/operations/pushDeduplication.d.ts +42 -0
- package/dist/application/operations/pushDeduplication.js +131 -0
- package/dist/application/operations/pushInsert.d.ts +13 -1
- package/dist/application/operations/pushInsert.js +33 -17
- package/dist/application/operations/pushLocks.js +13 -9
- package/dist/application/operations/query/collect.d.ts +12 -0
- package/dist/application/operations/query/collect.js +118 -0
- package/dist/application/operations/query/jobLookup.d.ts +9 -0
- package/dist/application/operations/query/jobLookup.js +110 -0
- package/dist/application/operations/query/pagination.d.ts +8 -0
- package/dist/application/operations/query/pagination.js +90 -0
- package/dist/application/operations/query/state.d.ts +4 -0
- package/dist/application/operations/query/state.js +63 -0
- package/dist/application/operations/queryOperations.d.ts +5 -50
- package/dist/application/operations/queryOperations.js +4 -474
- package/dist/application/queue-manager/ack.d.ts +23 -0
- package/dist/application/queue-manager/ack.js +242 -0
- package/dist/application/queue-manager/configuration.d.ts +27 -0
- package/dist/application/queue-manager/configuration.js +84 -0
- package/dist/application/queue-manager/context.d.ts +5 -0
- package/dist/application/queue-manager/context.js +61 -0
- package/dist/application/queue-manager/control.d.ts +17 -0
- package/dist/application/queue-manager/control.js +133 -0
- package/dist/application/queue-manager/delivery.d.ts +32 -0
- package/dist/application/queue-manager/delivery.js +143 -0
- package/dist/application/queue-manager/dependencies.d.ts +8 -0
- package/dist/application/queue-manager/dependencies.js +127 -0
- package/dist/application/queue-manager/dependency-runtime.d.ts +8 -0
- package/dist/application/queue-manager/dependency-runtime.js +40 -0
- package/dist/application/queue-manager/flow-failures.d.ts +18 -0
- package/dist/application/queue-manager/flow-failures.js +107 -0
- package/dist/application/queue-manager/flow-options.d.ts +8 -0
- package/dist/application/queue-manager/flow-options.js +129 -0
- package/dist/application/queue-manager/job-management.d.ts +17 -0
- package/dist/application/queue-manager/job-management.js +100 -0
- package/dist/application/queue-manager/lifecycle.d.ts +4 -0
- package/dist/application/queue-manager/lifecycle.js +41 -0
- package/dist/application/queue-manager/limits.d.ts +41 -0
- package/dist/application/queue-manager/limits.js +108 -0
- package/dist/application/queue-manager/locks.d.ts +21 -0
- package/dist/application/queue-manager/locks.js +59 -0
- package/dist/application/queue-manager/observability.d.ts +16 -0
- package/dist/application/queue-manager/observability.js +44 -0
- package/dist/application/queue-manager/queries.d.ts +17 -0
- package/dist/application/queue-manager/queries.js +118 -0
- package/dist/application/queue-manager/repeat.d.ts +4 -0
- package/dist/application/queue-manager/repeat.js +26 -0
- package/dist/application/queue-manager/services.d.ts +19 -0
- package/dist/application/queue-manager/services.js +80 -0
- package/dist/application/queue-manager/state.d.ts +92 -0
- package/dist/application/queue-manager/state.js +144 -0
- package/dist/application/queue-manager/stats.d.ts +28 -0
- package/dist/application/queue-manager/stats.js +52 -0
- package/dist/application/queueManager.d.ts +4 -380
- package/dist/application/queueManager.js +3 -1880
- package/dist/application/queueTelemetryJournal.d.ts +20 -0
- package/dist/application/queueTelemetryJournal.js +133 -0
- package/dist/application/repeatJobs.d.ts +7 -0
- package/dist/application/repeatJobs.js +132 -0
- package/dist/application/stallDetection.js +9 -4
- package/dist/application/types/ack.d.ts +132 -0
- package/dist/application/types/ack.js +1 -0
- package/dist/application/types/background.d.ts +18 -0
- package/dist/application/types/background.js +1 -0
- package/dist/application/types/config.d.ts +37 -0
- package/dist/application/types/config.js +15 -0
- package/dist/application/types/contextFactory.d.ts +83 -0
- package/dist/application/types/contextFactory.js +1 -0
- package/dist/application/types/contexts.d.ts +110 -0
- package/dist/application/types/contexts.js +1 -0
- package/dist/application/types/index.d.ts +7 -0
- package/dist/application/types/index.js +1 -0
- package/dist/application/types/query.d.ts +23 -0
- package/dist/application/types/query.js +1 -0
- package/dist/application/types/queueManager.d.ts +94 -0
- package/dist/application/types/queueManager.js +1 -0
- package/dist/cli/commandRouter.d.ts +1 -1
- package/dist/cli/commands/core.js +1 -0
- package/dist/cli/output/collections.d.ts +8 -0
- package/dist/cli/output/collections.js +131 -0
- package/dist/cli/output/jobs.d.ts +2 -0
- package/dist/cli/output/jobs.js +61 -0
- package/dist/cli/output/style.d.ts +14 -0
- package/dist/cli/output/style.js +28 -0
- package/dist/cli/output/success.d.ts +1 -0
- package/dist/cli/output/success.js +108 -0
- package/dist/cli/output.d.ts +1 -6
- package/dist/cli/output.js +7 -395
- package/dist/client/bunqueue/dlqRateLimit.d.ts +8 -0
- package/dist/client/bunqueue/dlqRateLimit.js +24 -0
- package/dist/client/bunqueue/runtime.d.ts +35 -0
- package/dist/client/bunqueue/runtime.js +138 -0
- package/dist/client/bunqueue.d.ts +19 -34
- package/dist/client/bunqueue.js +45 -166
- package/dist/client/dlqConversion.d.ts +5 -0
- package/dist/client/dlqConversion.js +28 -0
- package/dist/client/events.d.ts +7 -56
- package/dist/client/events.js +38 -15
- package/dist/client/flow.d.ts +6 -12
- package/dist/client/flow.js +16 -34
- package/dist/client/flowJobDependencies.js +3 -1
- package/dist/client/flowJobFactory.d.ts +9 -1
- package/dist/client/flowJobFactory.js +25 -9
- package/dist/client/flowJobMoveMethods.d.ts +5 -5
- package/dist/client/flowJobMoveMethods.js +37 -17
- package/dist/client/flowLegacyPlan.js +22 -8
- package/dist/client/flowOptions.d.ts +1 -1
- package/dist/client/flowOptions.js +2 -1
- package/dist/client/flowPlan.js +2 -3
- package/dist/client/flowPush.d.ts +1 -0
- package/dist/client/flowPush.js +5 -1
- package/dist/client/flowReader.js +5 -5
- package/dist/client/flowResults.d.ts +11 -0
- package/dist/client/flowResults.js +42 -0
- package/dist/client/index.d.ts +3 -1
- package/dist/client/jobConversion.d.ts +3 -7
- package/dist/client/jobConversion.js +36 -33
- package/dist/client/jobConversionHelpers.d.ts +19 -3
- package/dist/client/jobConversionHelpers.js +20 -16
- package/dist/client/jobConversionTypes.d.ts +8 -0
- package/dist/client/jobDeduplication.d.ts +6 -0
- package/dist/client/jobDeduplication.js +14 -0
- package/dist/client/jobHelpers.d.ts +7 -2
- package/dist/client/jobHelpers.js +16 -8
- package/dist/client/queue/bullmqCompat.d.ts +18 -8
- package/dist/client/queue/bullmqCompat.js +39 -71
- package/dist/client/queue/deduplication.d.ts +2 -0
- package/dist/client/queue/deduplication.js +20 -11
- package/dist/client/queue/dlq.d.ts +11 -6
- package/dist/client/queue/dlq.js +57 -16
- package/dist/client/queue/dlqJobMethods.d.ts +9 -0
- package/dist/client/queue/dlqJobMethods.js +177 -0
- package/dist/client/queue/dlqOps.d.ts +2 -1
- package/dist/client/queue/dlqOps.js +4 -10
- package/dist/client/queue/dlqStats.d.ts +3 -0
- package/dist/client/queue/dlqStats.js +21 -0
- package/dist/client/queue/job-proxy/dependencies.d.ts +9 -0
- package/dist/client/queue/job-proxy/dependencies.js +67 -0
- package/dist/client/queue/job-proxy/reflection.d.ts +2 -0
- package/dist/client/queue/job-proxy/reflection.js +18 -0
- package/dist/client/queue/job-proxy/simple.d.ts +3 -0
- package/dist/client/queue/job-proxy/simple.js +316 -0
- package/dist/client/queue/job-proxy/tcp.d.ts +4 -0
- package/dist/client/queue/job-proxy/tcp.js +191 -0
- package/dist/client/queue/jobMetadata.d.ts +10 -0
- package/dist/client/queue/jobMetadata.js +24 -0
- package/dist/client/queue/jobMove.d.ts +4 -4
- package/dist/client/queue/jobMove.js +87 -24
- package/dist/client/queue/jobProxy.d.ts +4 -50
- package/dist/client/queue/jobProxy.js +3 -511
- package/dist/client/queue/operations/add/bulk.d.ts +7 -0
- package/dist/client/queue/operations/add/bulk.js +129 -0
- package/dist/client/queue/operations/add/payload.d.ts +24 -0
- package/dist/client/queue/operations/add/payload.js +85 -0
- package/dist/client/queue/operations/add/single.d.ts +3 -0
- package/dist/client/queue/operations/add/single.js +107 -0
- package/dist/client/queue/operations/add.d.ts +2 -47
- package/dist/client/queue/operations/add.js +2 -347
- package/dist/client/queue/operations/index.d.ts +1 -0
- package/dist/client/queue/operations/index.js +1 -0
- package/dist/client/queue/operations/management.d.ts +0 -4
- package/dist/client/queue/operations/management.js +35 -6
- package/dist/client/queue/operations/query.d.ts +1 -20
- package/dist/client/queue/operations/query.js +38 -116
- package/dist/client/queue/operations/queryStates.d.ts +13 -0
- package/dist/client/queue/operations/queryStates.js +32 -0
- package/dist/client/queue/operations/queryTcpPages.d.ts +14 -0
- package/dist/client/queue/operations/queryTcpPages.js +40 -0
- package/dist/client/queue/queue.d.ts +6 -189
- package/dist/client/queue/queue.js +6 -547
- package/dist/client/queue/rateLimit.d.ts +4 -4
- package/dist/client/queue/rateLimit.js +17 -8
- package/dist/client/queue/runtime/compatibility.d.ts +13 -0
- package/dist/client/queue/runtime/compatibility.js +38 -0
- package/dist/client/queue/runtime/configuration.d.ts +42 -0
- package/dist/client/queue/runtime/configuration.js +109 -0
- package/dist/client/queue/runtime/connection.d.ts +6 -0
- package/dist/client/queue/runtime/connection.js +16 -0
- package/dist/client/queue/runtime/control.d.ts +41 -0
- package/dist/client/queue/runtime/control.js +87 -0
- package/dist/client/queue/runtime/queries.d.ts +48 -0
- package/dist/client/queue/runtime/queries.js +95 -0
- package/dist/client/queue/runtime/scheduling.d.ts +33 -0
- package/dist/client/queue/runtime/scheduling.js +56 -0
- package/dist/client/queue/runtime/state.d.ts +96 -0
- package/dist/client/queue/runtime/state.js +149 -0
- package/dist/client/queue/scheduler.d.ts +2 -5
- package/dist/client/queue/scheduler.js +25 -23
- package/dist/client/queue/schedulerPagination.d.ts +7 -0
- package/dist/client/queue/schedulerPagination.js +10 -0
- package/dist/client/queue/types/add.d.ts +40 -0
- package/dist/client/queue/types/add.js +1 -0
- package/dist/client/queue/types/contexts.d.ts +33 -0
- package/dist/client/queue/types/contexts.js +5 -0
- package/dist/client/queue/types/index.d.ts +3 -0
- package/dist/client/queue/types/index.js +1 -0
- package/dist/client/queue/types/job.d.ts +50 -0
- package/dist/client/queue/types/job.js +1 -0
- package/dist/client/queue/types/runtime.d.ts +35 -0
- package/dist/client/queue/types/runtime.js +1 -0
- package/dist/client/queue/workers.d.ts +16 -8
- package/dist/client/queue/workers.js +42 -16
- package/dist/client/queue-events/tcpSubscription.d.ts +23 -0
- package/dist/client/queue-events/tcpSubscription.js +99 -0
- package/dist/client/queueGroup.d.ts +11 -0
- package/dist/client/queueGroup.js +28 -1
- package/dist/client/sandboxed/queueOps.d.ts +2 -2
- package/dist/client/sandboxed/queueOps.js +32 -5
- package/dist/client/sandboxed/runtime/dispatch.d.ts +13 -0
- package/dist/client/sandboxed/runtime/dispatch.js +186 -0
- package/dist/client/sandboxed/runtime/lifecycle.d.ts +20 -0
- package/dist/client/sandboxed/runtime/lifecycle.js +95 -0
- package/dist/client/sandboxed/runtime/log.d.ts +1 -0
- package/dist/client/sandboxed/runtime/log.js +15 -0
- package/dist/client/sandboxed/runtime/pool.d.ts +11 -0
- package/dist/client/sandboxed/runtime/pool.js +121 -0
- package/dist/client/sandboxed/runtime/recovery.d.ts +11 -0
- package/dist/client/sandboxed/runtime/recovery.js +122 -0
- package/dist/client/sandboxed/runtime/state.d.ts +39 -0
- package/dist/client/sandboxed/runtime/state.js +59 -0
- package/dist/client/sandboxed/types/index.d.ts +2 -0
- package/dist/client/sandboxed/types/index.js +1 -0
- package/dist/client/sandboxed/types/options.d.ts +27 -0
- package/dist/client/sandboxed/types/options.js +1 -0
- package/dist/client/sandboxed/types/process.d.ts +30 -0
- package/dist/client/sandboxed/types/process.js +1 -0
- package/dist/client/sandboxed/worker.d.ts +3 -85
- package/dist/client/sandboxed/worker.js +3 -557
- package/dist/client/sandboxed/wrapper.js +1 -0
- package/dist/client/tcp/client.d.ts +5 -112
- package/dist/client/tcp/client.js +5 -481
- package/dist/client/tcp/commandQueue.d.ts +23 -0
- package/dist/client/tcp/commandQueue.js +89 -0
- package/dist/client/tcp/connection.d.ts +4 -85
- package/dist/client/tcp/connection.js +3 -315
- package/dist/client/tcp/errors.d.ts +6 -0
- package/dist/client/tcp/errors.js +18 -0
- package/dist/client/tcp/runtime/commands.d.ts +9 -0
- package/dist/client/tcp/runtime/commands.js +124 -0
- package/dist/client/tcp/runtime/connectivity.d.ts +13 -0
- package/dist/client/tcp/runtime/connectivity.js +77 -0
- package/dist/client/tcp/runtime/health.d.ts +14 -0
- package/dist/client/tcp/runtime/health.js +127 -0
- package/dist/client/tcp/runtime/lifecycle.d.ts +8 -0
- package/dist/client/tcp/runtime/lifecycle.js +32 -0
- package/dist/client/tcp/runtime/state.d.ts +50 -0
- package/dist/client/tcp/runtime/state.js +45 -0
- package/dist/client/tcp/transport.d.ts +18 -0
- package/dist/client/tcp/transport.js +158 -0
- package/dist/client/tcp/types/command.d.ts +9 -0
- package/dist/client/tcp/types/command.js +1 -0
- package/dist/client/tcp/types/connection.d.ts +31 -0
- package/dist/client/tcp/types/connection.js +17 -0
- package/dist/client/tcp/types/index.d.ts +5 -0
- package/dist/client/tcp/types/index.js +1 -0
- package/dist/client/tcp/types/socket.d.ts +8 -0
- package/dist/client/tcp/types/socket.js +1 -0
- package/dist/client/tcp/types/tls.d.ts +4 -0
- package/dist/client/tcp/types/tls.js +1 -0
- package/dist/client/tcp/types.d.ts +2 -106
- package/dist/client/tcp/types.js +2 -22
- package/dist/client/types/connection.d.ts +29 -0
- package/dist/client/types/connection.js +1 -0
- package/dist/client/types/dlq.d.ts +45 -0
- package/dist/client/types/dlq.js +1 -0
- package/dist/client/types/events.d.ts +54 -0
- package/dist/client/types/events.js +1 -0
- package/dist/client/types/flow.d.ts +10 -0
- package/dist/client/types/flow.js +1 -0
- package/dist/client/types/index.d.ts +10 -0
- package/dist/client/types/index.js +1 -0
- package/dist/client/types/job.d.ts +127 -0
- package/dist/client/types/job.js +1 -0
- package/dist/client/types/metrics.d.ts +1 -0
- package/dist/client/types/metrics.js +1 -0
- package/dist/client/types/options.d.ts +62 -0
- package/dist/client/types/options.js +1 -0
- package/dist/client/types/worker.d.ts +38 -0
- package/dist/client/types/worker.js +1 -0
- package/dist/client/types.d.ts +2 -583
- package/dist/client/types.js +2 -6
- package/dist/client/worker/ackBatcher.d.ts +1 -1
- package/dist/client/worker/ackBatcher.js +17 -5
- package/dist/client/worker/ackOutcome.d.ts +8 -0
- package/dist/client/worker/ackOutcome.js +58 -0
- package/dist/client/worker/constants.d.ts +7 -0
- package/dist/client/worker/constants.js +7 -0
- package/dist/client/worker/groupConcurrency.js +3 -0
- package/dist/client/worker/handlers/completion.d.ts +28 -0
- package/dist/client/worker/handlers/completion.js +68 -0
- package/dist/client/worker/handlers/dependencies.d.ts +11 -0
- package/dist/client/worker/handlers/dependencies.js +107 -0
- package/dist/client/worker/handlers/mutations.d.ts +23 -0
- package/dist/client/worker/handlers/mutations.js +211 -0
- package/dist/client/worker/handlers/queries.d.ts +15 -0
- package/dist/client/worker/handlers/queries.js +100 -0
- package/dist/client/worker/index.d.ts +2 -2
- package/dist/client/worker/index.js +1 -1
- package/dist/client/worker/jobParser.js +4 -2
- package/dist/client/worker/processor.d.ts +2 -15
- package/dist/client/worker/processor.js +68 -125
- package/dist/client/worker/processorHandlers.d.ts +4 -65
- package/dist/client/worker/processorHandlers.js +4 -400
- package/dist/client/worker/processorOutcome.d.ts +14 -0
- package/dist/client/worker/processorOutcome.js +125 -0
- package/dist/client/worker/runtime/buffer.d.ts +8 -0
- package/dist/client/worker/runtime/buffer.js +50 -0
- package/dist/client/worker/runtime/control.d.ts +26 -0
- package/dist/client/worker/runtime/control.js +175 -0
- package/dist/client/worker/runtime/execution.d.ts +11 -0
- package/dist/client/worker/runtime/execution.js +123 -0
- package/dist/client/worker/runtime/lifecycle.d.ts +7 -0
- package/dist/client/worker/runtime/lifecycle.js +114 -0
- package/dist/client/worker/runtime/manual.d.ts +10 -0
- package/dist/client/worker/runtime/manual.js +137 -0
- package/dist/client/worker/runtime/options.d.ts +5 -0
- package/dist/client/worker/runtime/options.js +39 -0
- package/dist/client/worker/runtime/polling.d.ts +12 -0
- package/dist/client/worker/runtime/polling.js +123 -0
- package/dist/client/worker/runtime/state.d.ts +110 -0
- package/dist/client/worker/runtime/state.js +156 -0
- package/dist/client/worker/types/index.d.ts +5 -0
- package/dist/client/worker/types/index.js +1 -0
- package/dist/client/worker/types/manual.d.ts +7 -0
- package/dist/client/worker/types/manual.js +1 -0
- package/dist/client/worker/types/options.d.ts +24 -0
- package/dist/client/worker/types/options.js +1 -0
- package/dist/client/worker/types/outcome.d.ts +23 -0
- package/dist/client/worker/types/outcome.js +1 -0
- package/dist/client/worker/types/processor.d.ts +22 -0
- package/dist/client/worker/types/processor.js +1 -0
- package/dist/client/worker/types/transport.d.ts +11 -0
- package/dist/client/worker/types/transport.js +1 -0
- package/dist/client/worker/worker.d.ts +3 -160
- package/dist/client/worker/worker.js +3 -904
- package/dist/client/worker/workerRateLimiter.d.ts +5 -1
- package/dist/client/worker/workerRateLimiter.js +40 -20
- package/dist/client/worker.d.ts +1 -0
- package/dist/client/workflow/compensationChild.d.ts +2 -1
- package/dist/client/workflow/compensationChild.js +1 -1
- package/dist/client/workflow/compensationClaim.d.ts +11 -0
- package/dist/client/workflow/compensationClaim.js +30 -0
- package/dist/client/workflow/compensator.d.ts +7 -2
- package/dist/client/workflow/compensator.js +5 -11
- package/dist/client/workflow/recovery.js +25 -2
- package/dist/client/workflow/rollbackControl.js +1 -1
- package/dist/domain/job/constants.d.ts +12 -0
- package/dist/domain/job/constants.js +12 -0
- package/dist/domain/job/create.d.ts +2 -0
- package/dist/domain/job/create.js +103 -0
- package/dist/domain/job/ids.d.ts +5 -0
- package/dist/domain/job/ids.js +12 -0
- package/dist/domain/job/locks.d.ts +4 -0
- package/dist/domain/job/locks.js +23 -0
- package/dist/domain/job/payload.d.ts +18 -0
- package/dist/domain/job/payload.js +43 -0
- package/dist/domain/job/state.d.ts +8 -0
- package/dist/domain/job/state.js +51 -0
- package/dist/domain/job/terminal.d.ts +3 -0
- package/dist/domain/job/terminal.js +9 -0
- package/dist/domain/queue/dlqShard.d.ts +2 -0
- package/dist/domain/queue/dlqShard.js +34 -9
- package/dist/domain/queue/limiterManager.d.ts +11 -0
- package/dist/domain/queue/limiterManager.js +28 -0
- package/dist/domain/queue/priorityQueue.js +3 -39
- package/dist/domain/queue/priorityQueueOrder.d.ts +3 -0
- package/dist/domain/queue/priorityQueueOrder.js +21 -0
- package/dist/domain/queue/shard/dependencies.d.ts +11 -0
- package/dist/domain/queue/shard/dependencies.js +22 -0
- package/dist/domain/queue/shard/dlq.d.ts +25 -0
- package/dist/domain/queue/shard/dlq.js +71 -0
- package/dist/domain/queue/shard/keys.d.ts +18 -0
- package/dist/domain/queue/shard/keys.js +45 -0
- package/dist/domain/queue/shard/lifecycle.d.ts +10 -0
- package/dist/domain/queue/shard/lifecycle.js +43 -0
- package/dist/domain/queue/shard/limits.d.ts +24 -0
- package/dist/domain/queue/shard/limits.js +57 -0
- package/dist/domain/queue/shard/metrics.d.ts +32 -0
- package/dist/domain/queue/shard/metrics.js +72 -0
- package/dist/domain/queue/shard/state.d.ts +34 -0
- package/dist/domain/queue/shard/state.js +80 -0
- package/dist/domain/queue/shard.d.ts +5 -137
- package/dist/domain/queue/shard.js +4 -390
- package/dist/domain/queue/uniqueKeyManager.d.ts +3 -1
- package/dist/domain/queue/uniqueKeyManager.js +9 -1
- package/dist/domain/response/builders.d.ts +15 -0
- package/dist/domain/response/builders.js +39 -0
- package/dist/domain/types/command.d.ts +2 -522
- package/dist/domain/types/command.js +2 -5
- package/dist/domain/types/commands/base.d.ts +5 -0
- package/dist/domain/types/commands/base.js +1 -0
- package/dist/domain/types/commands/core.d.ts +106 -0
- package/dist/domain/types/commands/core.js +1 -0
- package/dist/domain/types/commands/cron.d.ts +36 -0
- package/dist/domain/types/commands/cron.js +1 -0
- package/dist/domain/types/commands/dashboard.d.ts +13 -0
- package/dist/domain/types/commands/dashboard.js +1 -0
- package/dist/domain/types/commands/dlq.d.ts +39 -0
- package/dist/domain/types/commands/dlq.js +1 -0
- package/dist/domain/types/commands/extended.d.ts +63 -0
- package/dist/domain/types/commands/extended.js +1 -0
- package/dist/domain/types/commands/index.d.ts +12 -0
- package/dist/domain/types/commands/index.js +12 -0
- package/dist/domain/types/commands/limits.d.ts +54 -0
- package/dist/domain/types/commands/limits.js +1 -0
- package/dist/domain/types/commands/management.d.ts +73 -0
- package/dist/domain/types/commands/management.js +1 -0
- package/dist/domain/types/commands/monitoring.d.ts +49 -0
- package/dist/domain/types/commands/monitoring.js +1 -0
- package/dist/domain/types/commands/protocol.d.ts +20 -0
- package/dist/domain/types/commands/protocol.js +1 -0
- package/dist/domain/types/commands/query.d.ts +46 -0
- package/dist/domain/types/commands/query.js +1 -0
- package/dist/domain/types/commands/union.d.ts +13 -0
- package/dist/domain/types/commands/union.js +1 -0
- package/dist/domain/types/commands/workers.d.ts +39 -0
- package/dist/domain/types/commands/workers.js +1 -0
- package/dist/domain/types/cron.d.ts +4 -2
- package/dist/domain/types/cron.js +3 -0
- package/dist/domain/types/dlq.d.ts +17 -0
- package/dist/domain/types/dlq.js +70 -14
- package/dist/domain/types/index.d.ts +2 -0
- package/dist/domain/types/index.js +1 -0
- package/dist/domain/types/job.d.ts +8 -269
- package/dist/domain/types/job.js +8 -234
- package/dist/domain/types/jobs/model.d.ts +152 -0
- package/dist/domain/types/jobs/model.js +1 -0
- package/dist/domain/types/metrics.d.ts +16 -0
- package/dist/domain/types/metrics.js +1 -0
- package/dist/domain/types/priorityQueue.d.ts +12 -0
- package/dist/domain/types/priorityQueue.js +1 -0
- package/dist/domain/types/protocol.d.ts +5 -0
- package/dist/domain/types/protocol.js +4 -0
- package/dist/domain/types/queue.d.ts +7 -0
- package/dist/domain/types/queue.js +13 -0
- package/dist/domain/types/response.d.ts +3 -192
- package/dist/domain/types/response.js +3 -101
- package/dist/domain/types/responses/model.d.ts +152 -0
- package/dist/domain/types/responses/model.js +1 -0
- package/dist/domain/types/shard.d.ts +4 -0
- package/dist/domain/types/shard.js +1 -0
- package/dist/infrastructure/cloud/cloudAgent.js +6 -0
- package/dist/infrastructure/cloud/commandHandler.d.ts +2 -41
- package/dist/infrastructure/cloud/commandHandler.js +1 -1
- package/dist/infrastructure/cloud/commands/integrations.d.ts +2 -0
- package/dist/infrastructure/cloud/commands/integrations.js +31 -0
- package/dist/infrastructure/cloud/commands/jobMapper.d.ts +56 -0
- package/dist/infrastructure/cloud/commands/jobMapper.js +72 -0
- package/dist/infrastructure/cloud/commands/jobs.d.ts +2 -0
- package/dist/infrastructure/cloud/commands/jobs.js +111 -0
- package/dist/infrastructure/cloud/commands/queues.d.ts +2 -0
- package/dist/infrastructure/cloud/commands/queues.js +126 -0
- package/dist/infrastructure/cloud/commands.d.ts +3 -10
- package/dist/infrastructure/cloud/commands.js +7 -344
- package/dist/infrastructure/cloud/snapshot/analytics.d.ts +16 -0
- package/dist/infrastructure/cloud/snapshot/analytics.js +132 -0
- package/dist/infrastructure/cloud/snapshot/collector.d.ts +24 -0
- package/dist/infrastructure/cloud/snapshot/collector.js +105 -0
- package/dist/infrastructure/cloud/snapshot/config.d.ts +5 -0
- package/dist/infrastructure/cloud/snapshot/config.js +86 -0
- package/dist/infrastructure/cloud/snapshot/jobs.d.ts +5 -0
- package/dist/infrastructure/cloud/snapshot/jobs.js +148 -0
- package/dist/infrastructure/cloud/snapshot/stalls.d.ts +3 -0
- package/dist/infrastructure/cloud/snapshot/stalls.js +34 -0
- package/dist/infrastructure/cloud/snapshotCollector.d.ts +2 -53
- package/dist/infrastructure/cloud/snapshotCollector.js +5 -107
- package/dist/infrastructure/cloud/snapshotHelpers.d.ts +5 -45
- package/dist/infrastructure/cloud/snapshotHelpers.js +4 -426
- package/dist/infrastructure/cloud/types/collector.d.ts +54 -0
- package/dist/infrastructure/cloud/types/collector.js +1 -0
- package/dist/infrastructure/cloud/types/command.d.ts +44 -0
- package/dist/infrastructure/cloud/types/command.js +1 -0
- package/dist/infrastructure/cloud/types/config.d.ts +18 -0
- package/dist/infrastructure/cloud/types/config.js +1 -0
- package/dist/infrastructure/cloud/types/event.d.ts +14 -0
- package/dist/infrastructure/cloud/types/event.js +1 -0
- package/dist/infrastructure/cloud/types/redact.d.ts +4 -0
- package/dist/infrastructure/cloud/types/redact.js +1 -0
- package/dist/infrastructure/cloud/types/snapshot.d.ts +52 -0
- package/dist/infrastructure/cloud/types/snapshot.js +1 -0
- package/dist/infrastructure/cloud/types/snapshotCore.d.ts +125 -0
- package/dist/infrastructure/cloud/types/snapshotCore.js +1 -0
- package/dist/infrastructure/cloud/types/snapshotJobs.d.ts +124 -0
- package/dist/infrastructure/cloud/types/snapshotJobs.js +1 -0
- package/dist/infrastructure/cloud/types/snapshotTelemetry.d.ts +100 -0
- package/dist/infrastructure/cloud/types/snapshotTelemetry.js +1 -0
- package/dist/infrastructure/cloud/types.d.ts +3 -445
- package/dist/infrastructure/cloud/types.js +0 -4
- package/dist/infrastructure/persistence/batchInsert.d.ts +13 -0
- package/dist/infrastructure/persistence/batchInsert.js +96 -0
- package/dist/infrastructure/persistence/jobOptionsBlob.d.ts +18 -0
- package/dist/infrastructure/persistence/jobOptionsBlob.js +56 -0
- package/dist/infrastructure/persistence/legacyNameMigration.d.ts +5 -0
- package/dist/infrastructure/persistence/legacyNameMigration.js +42 -0
- package/dist/infrastructure/persistence/migrations.d.ts +3 -0
- package/dist/infrastructure/persistence/migrations.js +120 -0
- package/dist/infrastructure/persistence/schema.d.ts +3 -5
- package/dist/infrastructure/persistence/schema.js +40 -136
- package/dist/infrastructure/persistence/sqlite/admission.d.ts +9 -0
- package/dist/infrastructure/persistence/sqlite/admission.js +34 -0
- package/dist/infrastructure/persistence/sqlite/control.d.ts +32 -0
- package/dist/infrastructure/persistence/sqlite/control.js +90 -0
- package/dist/infrastructure/persistence/sqlite/flows.d.ts +26 -0
- package/dist/infrastructure/persistence/sqlite/flows.js +167 -0
- package/dist/infrastructure/persistence/sqlite/jobs.d.ts +23 -0
- package/dist/infrastructure/persistence/sqlite/jobs.js +166 -0
- package/dist/infrastructure/persistence/sqlite/lifecycle.d.ts +6 -0
- package/dist/infrastructure/persistence/sqlite/lifecycle.js +30 -0
- package/dist/infrastructure/persistence/sqlite/mutations.d.ts +20 -0
- package/dist/infrastructure/persistence/sqlite/mutations.js +149 -0
- package/dist/infrastructure/persistence/sqlite/queries.d.ts +23 -0
- package/dist/infrastructure/persistence/sqlite/queries.js +89 -0
- package/dist/infrastructure/persistence/sqlite/records.d.ts +24 -0
- package/dist/infrastructure/persistence/sqlite/records.js +115 -0
- package/dist/infrastructure/persistence/sqlite/state.d.ts +36 -0
- package/dist/infrastructure/persistence/sqlite/state.js +207 -0
- package/dist/infrastructure/persistence/sqlite/telemetry.d.ts +16 -0
- package/dist/infrastructure/persistence/sqlite/telemetry.js +126 -0
- package/dist/infrastructure/persistence/sqlite.d.ts +5 -276
- package/dist/infrastructure/persistence/sqlite.js +3 -997
- package/dist/infrastructure/persistence/sqliteBatch.d.ts +4 -121
- package/dist/infrastructure/persistence/sqliteBatch.js +3 -422
- package/dist/infrastructure/persistence/sqliteSerializer.d.ts +6 -1
- package/dist/infrastructure/persistence/sqliteSerializer.js +33 -11
- package/dist/infrastructure/persistence/statements.d.ts +5 -1
- package/dist/infrastructure/persistence/statements.js +14 -9
- package/dist/infrastructure/persistence/types/admission.d.ts +8 -0
- package/dist/infrastructure/persistence/types/admission.js +1 -0
- package/dist/infrastructure/persistence/types/batch.d.ts +12 -0
- package/dist/infrastructure/persistence/types/batch.js +1 -0
- package/dist/infrastructure/persistence/types/sqlite.d.ts +17 -0
- package/dist/infrastructure/persistence/types/sqlite.js +1 -0
- package/dist/infrastructure/persistence/writeBuffer.d.ts +38 -0
- package/dist/infrastructure/persistence/writeBuffer.js +221 -0
- package/dist/infrastructure/scheduler/cron/execution.d.ts +12 -0
- package/dist/infrastructure/scheduler/cron/execution.js +150 -0
- package/dist/infrastructure/scheduler/cron/runtime.d.ts +31 -0
- package/dist/infrastructure/scheduler/cron/runtime.js +143 -0
- package/dist/infrastructure/scheduler/cronScheduler.d.ts +4 -117
- package/dist/infrastructure/scheduler/cronScheduler.js +3 -436
- package/dist/infrastructure/scheduler/types/cronScheduler.d.ts +16 -0
- package/dist/infrastructure/scheduler/types/cronScheduler.js +1 -0
- package/dist/infrastructure/server/bootstrap.js +3 -0
- package/dist/infrastructure/server/handler-routes/control.d.ts +8 -0
- package/dist/infrastructure/server/handler-routes/control.js +82 -0
- package/dist/infrastructure/server/handler-routes/jobs.d.ts +6 -0
- package/dist/infrastructure/server/handler-routes/jobs.js +110 -0
- package/dist/infrastructure/server/handler-routes/monitoring.d.ts +5 -0
- package/dist/infrastructure/server/handler-routes/monitoring.js +65 -0
- package/dist/infrastructure/server/handlerRoutes.d.ts +3 -26
- package/dist/infrastructure/server/handlerRoutes.js +3 -257
- package/dist/infrastructure/server/handlers/advanced/configNumbers.d.ts +2 -0
- package/dist/infrastructure/server/handlers/advanced/configNumbers.js +26 -0
- package/dist/infrastructure/server/handlers/advanced/dependencies.d.ts +15 -0
- package/dist/infrastructure/server/handlers/advanced/dependencies.js +38 -0
- package/dist/infrastructure/server/handlers/advanced/jobs.d.ts +33 -0
- package/dist/infrastructure/server/handlers/advanced/jobs.js +136 -0
- package/dist/infrastructure/server/handlers/advanced/queue.d.ts +42 -0
- package/dist/infrastructure/server/handlers/advanced/queue.js +111 -0
- package/dist/infrastructure/server/handlers/advanced.d.ts +3 -121
- package/dist/infrastructure/server/handlers/advanced.js +3 -336
- package/dist/infrastructure/server/handlers/core.d.ts +1 -4
- package/dist/infrastructure/server/handlers/core.js +37 -20
- package/dist/infrastructure/server/handlers/cron.js +9 -1
- package/dist/infrastructure/server/handlers/dlq.d.ts +3 -0
- package/dist/infrastructure/server/handlers/dlq.js +18 -4
- package/dist/infrastructure/server/handlers/flow.js +6 -1
- package/dist/infrastructure/server/handlers/introspection.d.ts +19 -0
- package/dist/infrastructure/server/handlers/introspection.js +21 -0
- package/dist/infrastructure/server/handlers/management.d.ts +8 -0
- package/dist/infrastructure/server/handlers/management.js +30 -0
- package/dist/infrastructure/server/handlers/monitoring/health.d.ts +13 -0
- package/dist/infrastructure/server/handlers/monitoring/health.js +61 -0
- package/dist/infrastructure/server/handlers/monitoring/operations.d.ts +8 -0
- package/dist/infrastructure/server/handlers/monitoring/operations.js +28 -0
- package/dist/infrastructure/server/handlers/monitoring/webhooks.d.ts +7 -0
- package/dist/infrastructure/server/handlers/monitoring/webhooks.js +56 -0
- package/dist/infrastructure/server/handlers/monitoring/workers.d.ts +6 -0
- package/dist/infrastructure/server/handlers/monitoring/workers.js +57 -0
- package/dist/infrastructure/server/handlers/monitoring.d.ts +4 -30
- package/dist/infrastructure/server/handlers/monitoring.js +4 -222
- package/dist/infrastructure/server/handlers/pushBatchValidation.d.ts +1 -1
- package/dist/infrastructure/server/handlers/pushBatchValidation.js +7 -0
- package/dist/infrastructure/server/handlers/query.js +13 -4
- package/dist/infrastructure/server/http-routes/jobAdvanced.d.ts +2 -0
- package/dist/infrastructure/server/http-routes/jobAdvanced.js +106 -0
- package/dist/infrastructure/server/http-routes/jobManagement.d.ts +2 -0
- package/dist/infrastructure/server/http-routes/jobManagement.js +74 -0
- package/dist/infrastructure/server/http-routes/queueJobs.d.ts +2 -0
- package/dist/infrastructure/server/http-routes/queueJobs.js +108 -0
- package/dist/infrastructure/server/httpRouteJobs.d.ts +1 -8
- package/dist/infrastructure/server/httpRouteJobs.js +33 -222
- package/dist/infrastructure/server/httpRouteQueues.d.ts +1 -6
- package/dist/infrastructure/server/httpRouteQueues.js +51 -217
- package/dist/infrastructure/server/httpRouteResources.js +1 -0
- package/dist/infrastructure/server/protocol/commands.d.ts +8 -0
- package/dist/infrastructure/server/protocol/commands.js +31 -0
- package/dist/infrastructure/server/protocol/frameParser.d.ts +16 -0
- package/dist/infrastructure/server/protocol/frameParser.js +65 -0
- package/dist/infrastructure/server/protocol/lineBuffer.d.ts +6 -0
- package/dist/infrastructure/server/protocol/lineBuffer.js +21 -0
- package/dist/infrastructure/server/protocol/validation.d.ts +9 -0
- package/dist/infrastructure/server/protocol/validation.js +75 -0
- package/dist/infrastructure/server/protocol.d.ts +5 -77
- package/dist/infrastructure/server/protocol.js +4 -265
- package/dist/infrastructure/server/rateLimiter.js +1 -0
- package/dist/infrastructure/server/socketWriteQueue.d.ts +1 -1
- package/dist/infrastructure/server/socketWriteQueue.js +8 -5
- package/dist/infrastructure/server/sse/constants.d.ts +5 -0
- package/dist/infrastructure/server/sse/constants.js +5 -0
- package/dist/infrastructure/server/sse/eventBuffer.d.ts +3 -0
- package/dist/infrastructure/server/sse/eventBuffer.js +21 -0
- package/dist/infrastructure/server/sseHandler.d.ts +2 -6
- package/dist/infrastructure/server/sseHandler.js +20 -96
- package/dist/infrastructure/server/tcp/clientRelease.d.ts +2 -0
- package/dist/infrastructure/server/tcp/clientRelease.js +18 -0
- package/dist/infrastructure/server/tcp/connections.d.ts +24 -0
- package/dist/infrastructure/server/tcp/connections.js +162 -0
- package/dist/infrastructure/server/tcp/constants.d.ts +3 -0
- package/dist/infrastructure/server/tcp/constants.js +3 -0
- package/dist/infrastructure/server/tcp/eventSubscriptions.d.ts +10 -0
- package/dist/infrastructure/server/tcp/eventSubscriptions.js +17 -0
- package/dist/infrastructure/server/tcp/responses.d.ts +3 -0
- package/dist/infrastructure/server/tcp/responses.js +8 -0
- package/dist/infrastructure/server/tcp.d.ts +10 -68
- package/dist/infrastructure/server/tcp.js +47 -256
- package/dist/infrastructure/server/types/protocol.d.ts +4 -0
- package/dist/infrastructure/server/types/protocol.js +1 -0
- package/dist/infrastructure/server/types/sse.d.ts +11 -0
- package/dist/infrastructure/server/types/sse.js +1 -0
- package/dist/infrastructure/server/types/tcpServer.d.ts +25 -0
- package/dist/infrastructure/server/types/tcpServer.js +1 -0
- package/dist/infrastructure/server/types/ws.d.ts +6 -0
- package/dist/infrastructure/server/types/ws.js +1 -0
- package/dist/infrastructure/server/ws/constants.d.ts +6 -0
- package/dist/infrastructure/server/ws/constants.js +130 -0
- package/dist/infrastructure/server/ws/snapshots.d.ts +4 -0
- package/dist/infrastructure/server/ws/snapshots.js +52 -0
- package/dist/infrastructure/server/ws/subscriptions.d.ts +10 -0
- package/dist/infrastructure/server/ws/subscriptions.js +39 -0
- package/dist/infrastructure/server/wsHandler.d.ts +2 -10
- package/dist/infrastructure/server/wsHandler.js +12 -237
- package/dist/mcp/adapter.d.ts +5 -403
- package/dist/mcp/adapter.js +6 -778
- package/dist/mcp/backend/embedded/base.d.ts +7 -0
- package/dist/mcp/backend/embedded/base.js +15 -0
- package/dist/mcp/backend/embedded/index.d.ts +14 -0
- package/dist/mcp/backend/embedded/index.js +22 -0
- package/dist/mcp/backend/embedded/jobs.d.ts +44 -0
- package/dist/mcp/backend/embedded/jobs.js +98 -0
- package/dist/mcp/backend/embedded/queues.d.ts +27 -0
- package/dist/mcp/backend/embedded/queues.js +84 -0
- package/dist/mcp/backend/embedded/services.d.ts +29 -0
- package/dist/mcp/backend/embedded/services.js +107 -0
- package/dist/mcp/backend/serializers.d.ts +7 -0
- package/dist/mcp/backend/serializers.js +32 -0
- package/dist/mcp/backend/tcp/base.d.ts +19 -0
- package/dist/mcp/backend/tcp/base.js +54 -0
- package/dist/mcp/backend/tcp/index.d.ts +14 -0
- package/dist/mcp/backend/tcp/index.js +20 -0
- package/dist/mcp/backend/tcp/jobs.d.ts +44 -0
- package/dist/mcp/backend/tcp/jobs.js +122 -0
- package/dist/mcp/backend/tcp/queues.d.ts +27 -0
- package/dist/mcp/backend/tcp/queues.js +89 -0
- package/dist/mcp/backend/tcp/services.d.ts +30 -0
- package/dist/mcp/backend/tcp/services.js +161 -0
- package/dist/mcp/types/adapter.d.ts +176 -0
- package/dist/mcp/types/adapter.js +1 -0
- package/dist/shared/asyncLock.d.ts +13 -0
- package/dist/shared/asyncLock.js +65 -0
- package/dist/shared/lock.d.ts +10 -72
- package/dist/shared/lock.js +7 -231
- package/dist/shared/lockError.d.ts +3 -0
- package/dist/shared/lockError.js +6 -0
- package/dist/shared/lockTimeout.d.ts +2 -0
- package/dist/shared/lockTimeout.js +2 -0
- package/dist/shared/rwLock.d.ts +22 -0
- package/dist/shared/rwLock.js +124 -0
- package/dist/shared/serialization.js +1 -0
- package/dist/shared/skipList.d.ts +0 -5
- package/dist/shared/skipList.js +10 -57
- package/dist/shared/skipListNodes.d.ts +6 -0
- package/dist/shared/skipListNodes.js +43 -0
- package/dist/shared/types/lock.d.ts +7 -0
- package/dist/shared/types/lock.js +1 -0
- package/dist/shared/types/skipList.d.ts +4 -0
- package/dist/shared/types/skipList.js +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { DEPENDENCY_COMPLETION_SCHEMA } from './dependencyCompletionSchema';
|
|
2
|
+
import { SCHEMA } from './schema';
|
|
3
|
+
/** All SQLite migrations in order. Arrays preserve atomic statement boundaries. */
|
|
4
|
+
export const MIGRATIONS = {
|
|
5
|
+
1: SCHEMA,
|
|
6
|
+
// Migration 5: Add performance indexes for high-throughput operations
|
|
7
|
+
5: `
|
|
8
|
+
CREATE INDEX IF NOT EXISTS idx_dlq_entered_at ON dlq(entered_at);
|
|
9
|
+
CREATE INDEX IF NOT EXISTS idx_jobs_state_started
|
|
10
|
+
ON jobs(state, started_at) WHERE state = 'active';
|
|
11
|
+
CREATE INDEX IF NOT EXISTS idx_jobs_group_id
|
|
12
|
+
ON jobs(group_id) WHERE group_id IS NOT NULL;
|
|
13
|
+
CREATE INDEX IF NOT EXISTS idx_jobs_pending_priority
|
|
14
|
+
ON jobs(queue, state, priority DESC, run_at ASC) WHERE state IN ('waiting', 'delayed');
|
|
15
|
+
`,
|
|
16
|
+
// Migration 6: Add deduplication fields to cron_jobs
|
|
17
|
+
6: [
|
|
18
|
+
'ALTER TABLE cron_jobs ADD COLUMN unique_key TEXT;',
|
|
19
|
+
'ALTER TABLE cron_jobs ADD COLUMN dedup BLOB;',
|
|
20
|
+
],
|
|
21
|
+
// Migration 7: Add timeline blob to jobs
|
|
22
|
+
7: 'ALTER TABLE jobs ADD COLUMN timeline BLOB;',
|
|
23
|
+
// Migration 8: Add skipMissedOnRestart to cron_jobs
|
|
24
|
+
8: 'ALTER TABLE cron_jobs ADD COLUMN skip_missed_on_restart INTEGER NOT NULL DEFAULT 0;',
|
|
25
|
+
// Migration 9: Add skipIfNoWorker to cron_jobs
|
|
26
|
+
9: 'ALTER TABLE cron_jobs ADD COLUMN skip_if_no_worker INTEGER NOT NULL DEFAULT 0;',
|
|
27
|
+
// Migration 10: Add preventOverlap to cron_jobs (default 1 = enabled)
|
|
28
|
+
10: 'ALTER TABLE cron_jobs ADD COLUMN prevent_overlap INTEGER NOT NULL DEFAULT 1;',
|
|
29
|
+
// Migration 11: Index for completed-job recovery ordering (issue #84)
|
|
30
|
+
11: `
|
|
31
|
+
CREATE INDEX IF NOT EXISTS idx_jobs_completed_order
|
|
32
|
+
ON jobs(completed_at DESC) WHERE state = 'completed';
|
|
33
|
+
`,
|
|
34
|
+
// Migration 12: Add per-cron job options (retry/cleanup policy, issue #86)
|
|
35
|
+
12: 'ALTER TABLE cron_jobs ADD COLUMN job_options BLOB;',
|
|
36
|
+
// Migration 13: Persist the last failure's stacktrace on jobs (issue #74)
|
|
37
|
+
13: 'ALTER TABLE jobs ADD COLUMN stacktrace BLOB;',
|
|
38
|
+
// Migration 14: Stable, index-backed getJobs ordering and pagination
|
|
39
|
+
14: `
|
|
40
|
+
CREATE INDEX IF NOT EXISTS idx_jobs_queue_created
|
|
41
|
+
ON jobs(queue, created_at, id);
|
|
42
|
+
CREATE INDEX IF NOT EXISTS idx_jobs_queue_state_created
|
|
43
|
+
ON jobs(queue, state, created_at, id);
|
|
44
|
+
`,
|
|
45
|
+
// Migrations 15-16: rate-limit window and TTL auto-expiry on queue_state.
|
|
46
|
+
15: 'ALTER TABLE queue_state ADD COLUMN rate_limit_duration INTEGER;',
|
|
47
|
+
16: 'ALTER TABLE queue_state ADD COLUMN rate_limit_expires_at INTEGER;',
|
|
48
|
+
// Migration 17: preserve the cumulative stall bound across restarts.
|
|
49
|
+
17: 'ALTER TABLE jobs ADD COLUMN stall_count INTEGER NOT NULL DEFAULT 0;',
|
|
50
|
+
// Migrations 18-21: persist the complete per-queue stall policy.
|
|
51
|
+
18: 'ALTER TABLE queue_state ADD COLUMN stall_enabled INTEGER;',
|
|
52
|
+
19: 'ALTER TABLE queue_state ADD COLUMN stall_interval INTEGER;',
|
|
53
|
+
20: 'ALTER TABLE queue_state ADD COLUMN max_stalls INTEGER;',
|
|
54
|
+
21: 'ALTER TABLE queue_state ADD COLUMN stall_grace_period INTEGER;',
|
|
55
|
+
// Migration 22: Persist the complete per-queue DLQ policy atomically.
|
|
56
|
+
22: 'ALTER TABLE queue_state ADD COLUMN dlq_config BLOB;',
|
|
57
|
+
// Migrations 23-26: flow failure policy must survive active-job recovery.
|
|
58
|
+
23: 'ALTER TABLE jobs ADD COLUMN fail_parent_on_failure INTEGER NOT NULL DEFAULT 0;',
|
|
59
|
+
24: 'ALTER TABLE jobs ADD COLUMN remove_dependency_on_failure INTEGER NOT NULL DEFAULT 0;',
|
|
60
|
+
25: 'ALTER TABLE jobs ADD COLUMN continue_parent_on_failure INTEGER NOT NULL DEFAULT 0;',
|
|
61
|
+
26: 'ALTER TABLE jobs ADD COLUMN ignore_dependency_on_failure INTEGER NOT NULL DEFAULT 0;',
|
|
62
|
+
27: `
|
|
63
|
+
CREATE TABLE IF NOT EXISTS flow_failures (
|
|
64
|
+
parent_id TEXT NOT NULL,
|
|
65
|
+
child_id TEXT NOT NULL,
|
|
66
|
+
child_queue TEXT NOT NULL,
|
|
67
|
+
mode TEXT NOT NULL,
|
|
68
|
+
error TEXT NOT NULL,
|
|
69
|
+
created_at INTEGER NOT NULL,
|
|
70
|
+
PRIMARY KEY (parent_id, child_id)
|
|
71
|
+
);
|
|
72
|
+
CREATE INDEX IF NOT EXISTS idx_flow_failures_parent ON flow_failures(parent_id);
|
|
73
|
+
|
|
74
|
+
DROP INDEX IF EXISTS idx_jobs_run_at;
|
|
75
|
+
CREATE INDEX idx_jobs_run_at
|
|
76
|
+
ON jobs(run_at) WHERE state IN ('waiting', 'prioritized', 'waiting-children', 'delayed');
|
|
77
|
+
|
|
78
|
+
DROP INDEX IF EXISTS idx_jobs_pending_priority;
|
|
79
|
+
CREATE INDEX idx_jobs_pending_priority
|
|
80
|
+
ON jobs(queue, state, priority DESC, run_at ASC) WHERE state IN ('waiting', 'prioritized', 'waiting-children', 'delayed');
|
|
81
|
+
`,
|
|
82
|
+
28: DEPENDENCY_COMPLETION_SCHEMA,
|
|
83
|
+
29: 'ALTER TABLE dependency_completions ADD COLUMN pinned INTEGER NOT NULL DEFAULT 0;',
|
|
84
|
+
// Preserve bounded DLQ auto-retry metadata while the job is live.
|
|
85
|
+
30: 'ALTER TABLE jobs ADD COLUMN dlq_retry_state BLOB;',
|
|
86
|
+
// Persist operation names outside user payloads.
|
|
87
|
+
31: 'ALTER TABLE jobs ADD COLUMN name TEXT;',
|
|
88
|
+
32: 'ALTER TABLE cron_jobs ADD COLUMN job_name TEXT;',
|
|
89
|
+
33: `
|
|
90
|
+
CREATE TABLE IF NOT EXISTS queue_events (
|
|
91
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
92
|
+
queue TEXT NOT NULL,
|
|
93
|
+
event_type TEXT NOT NULL,
|
|
94
|
+
job_id TEXT NOT NULL,
|
|
95
|
+
occurred_at INTEGER NOT NULL,
|
|
96
|
+
payload BLOB
|
|
97
|
+
);
|
|
98
|
+
CREATE INDEX IF NOT EXISTS idx_queue_events_queue_id
|
|
99
|
+
ON queue_events(queue, id DESC);
|
|
100
|
+
CREATE TABLE IF NOT EXISTS queue_metrics_meta (
|
|
101
|
+
queue TEXT NOT NULL,
|
|
102
|
+
type TEXT NOT NULL CHECK (type IN ('completed', 'failed')),
|
|
103
|
+
total_count INTEGER NOT NULL DEFAULT 0,
|
|
104
|
+
prev_ts INTEGER NOT NULL DEFAULT 0,
|
|
105
|
+
prev_count INTEGER NOT NULL DEFAULT 0,
|
|
106
|
+
PRIMARY KEY (queue, type)
|
|
107
|
+
);
|
|
108
|
+
CREATE TABLE IF NOT EXISTS queue_metric_buckets (
|
|
109
|
+
queue TEXT NOT NULL,
|
|
110
|
+
type TEXT NOT NULL CHECK (type IN ('completed', 'failed')),
|
|
111
|
+
minute INTEGER NOT NULL,
|
|
112
|
+
count INTEGER NOT NULL DEFAULT 0,
|
|
113
|
+
PRIMARY KEY (queue, type, minute)
|
|
114
|
+
);
|
|
115
|
+
CREATE INDEX IF NOT EXISTS idx_queue_metric_buckets_window
|
|
116
|
+
ON queue_metric_buckets(queue, type, minute DESC);
|
|
117
|
+
`,
|
|
118
|
+
// Persist repeat-chain and advanced per-generation job policies.
|
|
119
|
+
34: 'ALTER TABLE jobs ADD COLUMN extended_options BLOB;',
|
|
120
|
+
};
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
/** SQLite PRAGMA settings for optimal performance */
|
|
2
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 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);\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) WHERE state = 'completed';\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 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";
|
|
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) WHERE state = 'completed';\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-- 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
5
|
/** Migration version table */
|
|
6
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
7
|
/** Current schema version */
|
|
8
|
-
export declare const SCHEMA_VERSION =
|
|
9
|
-
/** All migrations in order */
|
|
10
|
-
export declare const MIGRATIONS: Record<number, string>;
|
|
8
|
+
export declare const SCHEMA_VERSION = 34;
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SQLite schema and migrations
|
|
3
|
-
*/
|
|
4
1
|
import { DEPENDENCY_COMPLETION_SCHEMA } from './dependencyCompletionSchema';
|
|
5
2
|
/** SQLite PRAGMA settings for optimal performance */
|
|
6
3
|
export const PRAGMA_SETTINGS = `
|
|
@@ -12,13 +9,14 @@ PRAGMA mmap_size = 268435456;
|
|
|
12
9
|
PRAGMA page_size = 4096;
|
|
13
10
|
PRAGMA busy_timeout = 5000;
|
|
14
11
|
`;
|
|
15
|
-
/** Main schema creation */
|
|
12
|
+
/** Main schema creation. */
|
|
16
13
|
export const SCHEMA = `
|
|
17
14
|
-- Jobs table (using UUIDv7 for job IDs)
|
|
18
15
|
-- Uses BLOB for data fields (MessagePack serialization for ~2-3x faster than JSON)
|
|
19
16
|
CREATE TABLE IF NOT EXISTS jobs (
|
|
20
17
|
id TEXT PRIMARY KEY,
|
|
21
18
|
queue TEXT NOT NULL,
|
|
19
|
+
name TEXT,
|
|
22
20
|
data BLOB NOT NULL,
|
|
23
21
|
priority INTEGER NOT NULL DEFAULT 0,
|
|
24
22
|
created_at INTEGER NOT NULL,
|
|
@@ -51,7 +49,9 @@ CREATE TABLE IF NOT EXISTS jobs (
|
|
|
51
49
|
last_heartbeat INTEGER,
|
|
52
50
|
stall_count INTEGER NOT NULL DEFAULT 0,
|
|
53
51
|
timeline BLOB,
|
|
54
|
-
stacktrace BLOB
|
|
52
|
+
stacktrace BLOB,
|
|
53
|
+
dlq_retry_state BLOB,
|
|
54
|
+
extended_options BLOB
|
|
55
55
|
);
|
|
56
56
|
|
|
57
57
|
-- Indexes for common queries
|
|
@@ -126,6 +126,7 @@ CREATE INDEX IF NOT EXISTS idx_jobs_completed_order
|
|
|
126
126
|
CREATE TABLE IF NOT EXISTS cron_jobs (
|
|
127
127
|
name TEXT PRIMARY KEY,
|
|
128
128
|
queue TEXT NOT NULL,
|
|
129
|
+
job_name TEXT,
|
|
129
130
|
data BLOB NOT NULL,
|
|
130
131
|
schedule TEXT,
|
|
131
132
|
repeat_every INTEGER,
|
|
@@ -156,6 +157,39 @@ CREATE TABLE IF NOT EXISTS queue_state (
|
|
|
156
157
|
stall_grace_period INTEGER,
|
|
157
158
|
dlq_config BLOB
|
|
158
159
|
);
|
|
160
|
+
|
|
161
|
+
-- Per-queue lifecycle event journal. Entries are kept newest-first by id and
|
|
162
|
+
-- bounded by QueueManagerConfig.maxQueueEvents when they are appended.
|
|
163
|
+
CREATE TABLE IF NOT EXISTS queue_events (
|
|
164
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
165
|
+
queue TEXT NOT NULL,
|
|
166
|
+
event_type TEXT NOT NULL,
|
|
167
|
+
job_id TEXT NOT NULL,
|
|
168
|
+
occurred_at INTEGER NOT NULL,
|
|
169
|
+
payload BLOB
|
|
170
|
+
);
|
|
171
|
+
CREATE INDEX IF NOT EXISTS idx_queue_events_queue_id
|
|
172
|
+
ON queue_events(queue, id DESC);
|
|
173
|
+
|
|
174
|
+
-- Cumulative terminal counters are separate from bounded minute buckets so
|
|
175
|
+
-- pruning old data points never resets meta.count.
|
|
176
|
+
CREATE TABLE IF NOT EXISTS queue_metrics_meta (
|
|
177
|
+
queue TEXT NOT NULL,
|
|
178
|
+
type TEXT NOT NULL CHECK (type IN ('completed', 'failed')),
|
|
179
|
+
total_count INTEGER NOT NULL DEFAULT 0,
|
|
180
|
+
prev_ts INTEGER NOT NULL DEFAULT 0,
|
|
181
|
+
prev_count INTEGER NOT NULL DEFAULT 0,
|
|
182
|
+
PRIMARY KEY (queue, type)
|
|
183
|
+
);
|
|
184
|
+
CREATE TABLE IF NOT EXISTS queue_metric_buckets (
|
|
185
|
+
queue TEXT NOT NULL,
|
|
186
|
+
type TEXT NOT NULL CHECK (type IN ('completed', 'failed')),
|
|
187
|
+
minute INTEGER NOT NULL,
|
|
188
|
+
count INTEGER NOT NULL DEFAULT 0,
|
|
189
|
+
PRIMARY KEY (queue, type, minute)
|
|
190
|
+
);
|
|
191
|
+
CREATE INDEX IF NOT EXISTS idx_queue_metric_buckets_window
|
|
192
|
+
ON queue_metric_buckets(queue, type, minute DESC);
|
|
159
193
|
`;
|
|
160
194
|
/** Migration version table */
|
|
161
195
|
export const MIGRATION_TABLE = `
|
|
@@ -165,134 +199,4 @@ CREATE TABLE IF NOT EXISTS migrations (
|
|
|
165
199
|
);
|
|
166
200
|
`;
|
|
167
201
|
/** Current schema version */
|
|
168
|
-
export const SCHEMA_VERSION =
|
|
169
|
-
/** All migrations in order */
|
|
170
|
-
export const MIGRATIONS = {
|
|
171
|
-
1: SCHEMA,
|
|
172
|
-
// Migration 5: Add performance indexes for high-throughput operations
|
|
173
|
-
5: `
|
|
174
|
-
-- DLQ expiration cleanup: O(log n) instead of O(n) table scan
|
|
175
|
-
CREATE INDEX IF NOT EXISTS idx_dlq_entered_at ON dlq(entered_at);
|
|
176
|
-
|
|
177
|
-
-- Stall detection: runs every 5s, needs fast lookup of active jobs
|
|
178
|
-
CREATE INDEX IF NOT EXISTS idx_jobs_state_started
|
|
179
|
-
ON jobs(state, started_at) WHERE state = 'active';
|
|
180
|
-
|
|
181
|
-
-- Group operations: fast lookup by group_id
|
|
182
|
-
CREATE INDEX IF NOT EXISTS idx_jobs_group_id
|
|
183
|
-
ON jobs(group_id) WHERE group_id IS NOT NULL;
|
|
184
|
-
|
|
185
|
-
-- Pending jobs: compound index for priority-ordered retrieval
|
|
186
|
-
CREATE INDEX IF NOT EXISTS idx_jobs_pending_priority
|
|
187
|
-
ON jobs(queue, state, priority DESC, run_at ASC) WHERE state IN ('waiting', 'delayed');
|
|
188
|
-
`,
|
|
189
|
-
// Migration 6: Add deduplication fields to cron_jobs
|
|
190
|
-
6: `
|
|
191
|
-
ALTER TABLE cron_jobs ADD COLUMN unique_key TEXT;
|
|
192
|
-
ALTER TABLE cron_jobs ADD COLUMN dedup BLOB;
|
|
193
|
-
`,
|
|
194
|
-
// Migration 7: Add timeline blob to jobs
|
|
195
|
-
7: `
|
|
196
|
-
ALTER TABLE jobs ADD COLUMN timeline BLOB;
|
|
197
|
-
`,
|
|
198
|
-
// Migration 8: Add skipMissedOnRestart to cron_jobs
|
|
199
|
-
8: `
|
|
200
|
-
ALTER TABLE cron_jobs ADD COLUMN skip_missed_on_restart INTEGER NOT NULL DEFAULT 0;
|
|
201
|
-
`,
|
|
202
|
-
// Migration 9: Add skipIfNoWorker to cron_jobs
|
|
203
|
-
9: `
|
|
204
|
-
ALTER TABLE cron_jobs ADD COLUMN skip_if_no_worker INTEGER NOT NULL DEFAULT 0;
|
|
205
|
-
`,
|
|
206
|
-
// Migration 10: Add preventOverlap to cron_jobs (default 1 = enabled)
|
|
207
|
-
10: `
|
|
208
|
-
ALTER TABLE cron_jobs ADD COLUMN prevent_overlap INTEGER NOT NULL DEFAULT 1;
|
|
209
|
-
`,
|
|
210
|
-
// Migration 11: Index for completed-job recovery ordering (issue #84)
|
|
211
|
-
11: `
|
|
212
|
-
CREATE INDEX IF NOT EXISTS idx_jobs_completed_order
|
|
213
|
-
ON jobs(completed_at DESC) WHERE state = 'completed';
|
|
214
|
-
`,
|
|
215
|
-
// Migration 12: Add per-cron job options (retry/cleanup policy, issue #86)
|
|
216
|
-
12: `
|
|
217
|
-
ALTER TABLE cron_jobs ADD COLUMN job_options BLOB;
|
|
218
|
-
`,
|
|
219
|
-
// Migration 13: Persist the last failure's stacktrace on jobs (issue #74)
|
|
220
|
-
13: `
|
|
221
|
-
ALTER TABLE jobs ADD COLUMN stacktrace BLOB;
|
|
222
|
-
`,
|
|
223
|
-
// Migration 14: Stable, index-backed getJobs ordering and pagination
|
|
224
|
-
14: `
|
|
225
|
-
CREATE INDEX IF NOT EXISTS idx_jobs_queue_created
|
|
226
|
-
ON jobs(queue, created_at, id);
|
|
227
|
-
CREATE INDEX IF NOT EXISTS idx_jobs_queue_state_created
|
|
228
|
-
ON jobs(queue, state, created_at, id);
|
|
229
|
-
`,
|
|
230
|
-
// Migrations 15-16: Rate-limit window (duration) + TTL auto-expiry on
|
|
231
|
-
// queue_state. One ALTER per migration ON PURPOSE: each runs in its own
|
|
232
|
-
// db.run with its own error-swallow, so a crash between the two leaves a
|
|
233
|
-
// retryable state (a two-ALTER string would abort at the first "duplicate
|
|
234
|
-
// column" on re-run and never execute the second statement).
|
|
235
|
-
15: `
|
|
236
|
-
ALTER TABLE queue_state ADD COLUMN rate_limit_duration INTEGER;
|
|
237
|
-
`,
|
|
238
|
-
16: `
|
|
239
|
-
ALTER TABLE queue_state ADD COLUMN rate_limit_expires_at INTEGER;
|
|
240
|
-
`,
|
|
241
|
-
// Migration 17: preserve the cumulative stall bound across restarts.
|
|
242
|
-
17: `
|
|
243
|
-
ALTER TABLE jobs ADD COLUMN stall_count INTEGER NOT NULL DEFAULT 0;
|
|
244
|
-
`,
|
|
245
|
-
// Migrations 18-21: persist the complete per-queue stall policy. One ALTER
|
|
246
|
-
// per version keeps interrupted upgrades retryable (same rule as 15-16).
|
|
247
|
-
18: `
|
|
248
|
-
ALTER TABLE queue_state ADD COLUMN stall_enabled INTEGER;
|
|
249
|
-
`,
|
|
250
|
-
19: `
|
|
251
|
-
ALTER TABLE queue_state ADD COLUMN stall_interval INTEGER;
|
|
252
|
-
`,
|
|
253
|
-
20: `
|
|
254
|
-
ALTER TABLE queue_state ADD COLUMN max_stalls INTEGER;
|
|
255
|
-
`,
|
|
256
|
-
21: `
|
|
257
|
-
ALTER TABLE queue_state ADD COLUMN stall_grace_period INTEGER;
|
|
258
|
-
`,
|
|
259
|
-
// Migration 22: Persist the complete per-queue DLQ policy atomically.
|
|
260
|
-
22: `
|
|
261
|
-
ALTER TABLE queue_state ADD COLUMN dlq_config BLOB;
|
|
262
|
-
`,
|
|
263
|
-
// Migrations 23-26: flow failure policy must survive active-job recovery.
|
|
264
|
-
23: `
|
|
265
|
-
ALTER TABLE jobs ADD COLUMN fail_parent_on_failure INTEGER NOT NULL DEFAULT 0;
|
|
266
|
-
`,
|
|
267
|
-
24: `
|
|
268
|
-
ALTER TABLE jobs ADD COLUMN remove_dependency_on_failure INTEGER NOT NULL DEFAULT 0;
|
|
269
|
-
`,
|
|
270
|
-
25: `
|
|
271
|
-
ALTER TABLE jobs ADD COLUMN continue_parent_on_failure INTEGER NOT NULL DEFAULT 0;
|
|
272
|
-
`,
|
|
273
|
-
26: `
|
|
274
|
-
ALTER TABLE jobs ADD COLUMN ignore_dependency_on_failure INTEGER NOT NULL DEFAULT 0;
|
|
275
|
-
`,
|
|
276
|
-
27: `
|
|
277
|
-
CREATE TABLE IF NOT EXISTS flow_failures (
|
|
278
|
-
parent_id TEXT NOT NULL,
|
|
279
|
-
child_id TEXT NOT NULL,
|
|
280
|
-
child_queue TEXT NOT NULL,
|
|
281
|
-
mode TEXT NOT NULL,
|
|
282
|
-
error TEXT NOT NULL,
|
|
283
|
-
created_at INTEGER NOT NULL,
|
|
284
|
-
PRIMARY KEY (parent_id, child_id)
|
|
285
|
-
);
|
|
286
|
-
CREATE INDEX IF NOT EXISTS idx_flow_failures_parent ON flow_failures(parent_id);
|
|
287
|
-
|
|
288
|
-
DROP INDEX IF EXISTS idx_jobs_run_at;
|
|
289
|
-
CREATE INDEX idx_jobs_run_at
|
|
290
|
-
ON jobs(run_at) WHERE state IN ('waiting', 'prioritized', 'waiting-children', 'delayed');
|
|
291
|
-
|
|
292
|
-
DROP INDEX IF EXISTS idx_jobs_pending_priority;
|
|
293
|
-
CREATE INDEX idx_jobs_pending_priority
|
|
294
|
-
ON jobs(queue, state, priority DESC, run_at ASC) WHERE state IN ('waiting', 'prioritized', 'waiting-children', 'delayed');
|
|
295
|
-
`,
|
|
296
|
-
28: DEPENDENCY_COMPLETION_SCHEMA,
|
|
297
|
-
29: 'ALTER TABLE dependency_completions ADD COLUMN pinned INTEGER NOT NULL DEFAULT 0;',
|
|
298
|
-
};
|
|
202
|
+
export const SCHEMA_VERSION = 34;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { DurableAdmissionMetadata } from '../types/admission';
|
|
2
|
+
import { SqliteState } from './state';
|
|
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,34 @@
|
|
|
1
|
+
import { SqliteState } from './state';
|
|
2
|
+
/** SQL primitives shared by every durable job-admission transaction. */
|
|
3
|
+
export class SqliteAdmission extends SqliteState {
|
|
4
|
+
hasAdmissionMetadata(metadata) {
|
|
5
|
+
return (metadata?.retireGenerationId !== undefined || (metadata?.completionPins?.length ?? 0) > 0);
|
|
6
|
+
}
|
|
7
|
+
runAdmissionMetadata(metadata) {
|
|
8
|
+
const retiredId = metadata?.retireGenerationId;
|
|
9
|
+
if (retiredId !== undefined) {
|
|
10
|
+
this.statements.get('deleteJob').run(retiredId);
|
|
11
|
+
this.statements.get('deleteJobResult').run(retiredId);
|
|
12
|
+
this.statements.get('deleteDlqEntry').run(retiredId);
|
|
13
|
+
this.statements.get('deleteDependencyCompletionForAdmission').run(retiredId);
|
|
14
|
+
this.statements.get('deleteFlowFailuresForAdmission').run(retiredId, retiredId);
|
|
15
|
+
}
|
|
16
|
+
for (const jobId of new Set(metadata?.completionPins ?? [])) {
|
|
17
|
+
this.statements.get('pinDependencyCompletionForAdmission').run(jobId);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
finalizeAdmissionMetadata(metadata) {
|
|
21
|
+
const retiredId = metadata?.retireGenerationId;
|
|
22
|
+
if (retiredId !== undefined)
|
|
23
|
+
this.writeBuffer.removePending(retiredId);
|
|
24
|
+
}
|
|
25
|
+
commitBufferedAdmissionMetadata(metadata) {
|
|
26
|
+
if (!this.hasAdmissionMetadata(metadata))
|
|
27
|
+
return;
|
|
28
|
+
this.safeWrite(() => {
|
|
29
|
+
const transaction = this.db.transaction(() => this.runAdmissionMetadata(metadata));
|
|
30
|
+
transaction();
|
|
31
|
+
});
|
|
32
|
+
this.finalizeAdmissionMetadata(metadata);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { CronJob } from '../../../domain/types/cron';
|
|
2
|
+
import type { DlqConfig } from '../../../domain/types/dlq';
|
|
3
|
+
import type { StallConfig } from '../../../domain/types/stall';
|
|
4
|
+
import { SqliteQueries } from './queries';
|
|
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
|
+
/** Cron schedules and durable queue control-state. */
|
|
16
|
+
export declare abstract class SqliteControl extends SqliteQueries {
|
|
17
|
+
saveCron(cron: CronJob): void;
|
|
18
|
+
loadCronJobs(): CronJob[];
|
|
19
|
+
deleteCron(name: string): void;
|
|
20
|
+
updateCron(name: string, executions: number, nextRun: number): void;
|
|
21
|
+
saveQueueState(name: string, state: {
|
|
22
|
+
paused: boolean;
|
|
23
|
+
rateLimit: number | null;
|
|
24
|
+
concurrencyLimit: number | null;
|
|
25
|
+
rateLimitDuration?: number | null;
|
|
26
|
+
rateLimitExpiresAt?: number | null;
|
|
27
|
+
stallConfig?: StallConfig | null;
|
|
28
|
+
dlqConfig?: DlqConfig | null;
|
|
29
|
+
}): void;
|
|
30
|
+
loadQueueState(): PersistedQueueState[];
|
|
31
|
+
deleteQueueState(name: string): void;
|
|
32
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { decodeStoredNamedPayload, pack, unpack } from '../sqliteSerializer';
|
|
2
|
+
import { SqliteQueries } from './queries';
|
|
3
|
+
/** Cron schedules and durable queue control-state. */
|
|
4
|
+
export class SqliteControl extends SqliteQueries {
|
|
5
|
+
saveCron(cron) {
|
|
6
|
+
this.safeWrite(() => {
|
|
7
|
+
this.statements
|
|
8
|
+
.get('insertCron')
|
|
9
|
+
.run(cron.name, cron.queue, cron.jobName, pack(cron.data), cron.schedule, cron.repeatEvery, cron.priority, cron.nextRun, cron.executions, cron.maxLimit, cron.timezone, cron.uniqueKey, cron.dedup ? pack(cron.dedup) : null, cron.skipMissedOnRestart ? 1 : 0, cron.skipIfNoWorker ? 1 : 0, cron.preventOverlap ? 1 : 0, cron.jobOptions ? pack(cron.jobOptions) : null);
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
loadCronJobs() {
|
|
13
|
+
const rows = this.db.query('SELECT * FROM cron_jobs').all();
|
|
14
|
+
return rows.map((row) => {
|
|
15
|
+
const payload = decodeStoredNamedPayload(row.job_name, row.data, `loadCronJobs:${row.name}`);
|
|
16
|
+
return {
|
|
17
|
+
name: row.name,
|
|
18
|
+
queue: row.queue,
|
|
19
|
+
jobName: payload.name,
|
|
20
|
+
data: payload.data,
|
|
21
|
+
schedule: row.schedule,
|
|
22
|
+
repeatEvery: row.repeat_every,
|
|
23
|
+
priority: row.priority,
|
|
24
|
+
timezone: row.timezone,
|
|
25
|
+
nextRun: row.next_run,
|
|
26
|
+
executions: row.executions,
|
|
27
|
+
maxLimit: row.max_limit,
|
|
28
|
+
uniqueKey: row.unique_key ?? null,
|
|
29
|
+
dedup: row.dedup
|
|
30
|
+
? unpack(row.dedup, null, `loadCronDedup:${row.name}`)
|
|
31
|
+
: null,
|
|
32
|
+
skipMissedOnRestart: row.skip_missed_on_restart === 1,
|
|
33
|
+
skipIfNoWorker: row.skip_if_no_worker === 1,
|
|
34
|
+
preventOverlap: row.prevent_overlap === 1,
|
|
35
|
+
jobOptions: row.job_options
|
|
36
|
+
? unpack(row.job_options, null, `loadCronJobOptions:${row.name}`)
|
|
37
|
+
: null,
|
|
38
|
+
};
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
deleteCron(name) {
|
|
42
|
+
this.safeWrite(() => {
|
|
43
|
+
this.db.prepare('DELETE FROM cron_jobs WHERE name = ?').run(name);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
updateCron(name, executions, nextRun) {
|
|
47
|
+
this.safeWrite(() => {
|
|
48
|
+
this.statements.get('updateCron').run(executions, nextRun, name);
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
saveQueueState(name, state) {
|
|
52
|
+
this.safeWrite(() => {
|
|
53
|
+
this.statements
|
|
54
|
+
.get('upsertQueueState')
|
|
55
|
+
.run(name, state.paused ? 1 : 0, state.rateLimit, state.concurrencyLimit, state.rateLimitDuration ?? null, state.rateLimitExpiresAt ?? null, state.stallConfig === null || state.stallConfig === undefined
|
|
56
|
+
? null
|
|
57
|
+
: state.stallConfig.enabled
|
|
58
|
+
? 1
|
|
59
|
+
: 0, state.stallConfig?.stallInterval ?? null, state.stallConfig?.maxStalls ?? null, state.stallConfig?.gracePeriod ?? null, state.dlqConfig ? pack(state.dlqConfig) : null);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
loadQueueState() {
|
|
63
|
+
const rows = this.statements.get('loadQueueState').all();
|
|
64
|
+
return rows.map((row) => ({
|
|
65
|
+
name: row.name,
|
|
66
|
+
paused: row.paused === 1,
|
|
67
|
+
rateLimit: row.rate_limit,
|
|
68
|
+
concurrencyLimit: row.concurrency_limit,
|
|
69
|
+
rateLimitDuration: row.rate_limit_duration ?? null,
|
|
70
|
+
rateLimitExpiresAt: row.rate_limit_expires_at ?? null,
|
|
71
|
+
stallConfig: row.stall_enabled === null ||
|
|
72
|
+
row.stall_interval === null ||
|
|
73
|
+
row.max_stalls === null ||
|
|
74
|
+
row.stall_grace_period === null
|
|
75
|
+
? null
|
|
76
|
+
: {
|
|
77
|
+
enabled: row.stall_enabled === 1,
|
|
78
|
+
stallInterval: row.stall_interval,
|
|
79
|
+
maxStalls: row.max_stalls,
|
|
80
|
+
gracePeriod: row.stall_grace_period,
|
|
81
|
+
},
|
|
82
|
+
dlqConfig: unpack(row.dlq_config, null, `loadQueueDlqConfig:${row.name}`),
|
|
83
|
+
}));
|
|
84
|
+
}
|
|
85
|
+
deleteQueueState(name) {
|
|
86
|
+
this.safeWrite(() => {
|
|
87
|
+
this.statements.get('deleteQueueState').run(name);
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { FlowFailureRecord } from '../../../domain/types/flow';
|
|
2
|
+
import type { Job, JobId } from '../../../domain/types/job';
|
|
3
|
+
import type { DurableAdmissionMetadata } from '../types/admission';
|
|
4
|
+
import { SqliteMutations } from './mutations';
|
|
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
|
+
}
|