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
|
@@ -19,8 +19,12 @@ export declare class WorkerRateLimiter {
|
|
|
19
19
|
* O(1) amortized — advances head pointer past expired tokens.
|
|
20
20
|
*/
|
|
21
21
|
canProcessWithinLimit(): boolean;
|
|
22
|
-
/**
|
|
22
|
+
/** Atomically reserve one start in the current window. */
|
|
23
|
+
tryAcquire(): boolean;
|
|
24
|
+
/** Record a synthetic start, retained for diagnostics and focused unit tests. */
|
|
23
25
|
recordJobForLimiter(): void;
|
|
26
|
+
/** Number of starts that can be admitted without waiting. */
|
|
27
|
+
getAvailableSlots(): number;
|
|
24
28
|
/**
|
|
25
29
|
* Get time until rate limiter allows next job (ms).
|
|
26
30
|
* Returns 0 if not rate limited.
|
|
@@ -13,6 +13,13 @@ export class WorkerRateLimiter {
|
|
|
13
13
|
rateLimitExpiration = 0;
|
|
14
14
|
constructor(limiter) {
|
|
15
15
|
this.limiter = limiter;
|
|
16
|
+
if (limiter &&
|
|
17
|
+
(!Number.isInteger(limiter.max) ||
|
|
18
|
+
limiter.max <= 0 ||
|
|
19
|
+
!Number.isFinite(limiter.duration) ||
|
|
20
|
+
limiter.duration <= 0)) {
|
|
21
|
+
throw new RangeError('Worker limiter max and duration must be positive finite values');
|
|
22
|
+
}
|
|
16
23
|
}
|
|
17
24
|
/**
|
|
18
25
|
* Check if rate limiter allows processing another job.
|
|
@@ -20,35 +27,54 @@ export class WorkerRateLimiter {
|
|
|
20
27
|
* O(1) amortized — advances head pointer past expired tokens.
|
|
21
28
|
*/
|
|
22
29
|
canProcessWithinLimit() {
|
|
30
|
+
return this.getAvailableSlots() > 0;
|
|
31
|
+
}
|
|
32
|
+
/** Atomically reserve one start in the current window. */
|
|
33
|
+
tryAcquire() {
|
|
34
|
+
const now = Date.now();
|
|
35
|
+
if (now < this.rateLimitExpiration)
|
|
36
|
+
return false;
|
|
23
37
|
if (!this.limiter)
|
|
24
38
|
return true;
|
|
25
|
-
const windowStart =
|
|
39
|
+
const windowStart = now - this.limiter.duration;
|
|
26
40
|
this.evictExpired(windowStart);
|
|
27
|
-
|
|
41
|
+
if (this.activeCount() >= this.limiter.max)
|
|
42
|
+
return false;
|
|
43
|
+
this.limiterTokens.push(now);
|
|
44
|
+
return true;
|
|
28
45
|
}
|
|
29
|
-
/** Record a
|
|
46
|
+
/** Record a synthetic start, retained for diagnostics and focused unit tests. */
|
|
30
47
|
recordJobForLimiter() {
|
|
31
48
|
if (!this.limiter)
|
|
32
49
|
return;
|
|
33
50
|
this.limiterTokens.push(Date.now());
|
|
34
51
|
}
|
|
52
|
+
/** Number of starts that can be admitted without waiting. */
|
|
53
|
+
getAvailableSlots() {
|
|
54
|
+
const now = Date.now();
|
|
55
|
+
if (now < this.rateLimitExpiration)
|
|
56
|
+
return 0;
|
|
57
|
+
if (!this.limiter)
|
|
58
|
+
return Number.POSITIVE_INFINITY;
|
|
59
|
+
this.evictExpired(now - this.limiter.duration);
|
|
60
|
+
return Math.max(0, this.limiter.max - this.activeCount());
|
|
61
|
+
}
|
|
35
62
|
/**
|
|
36
63
|
* Get time until rate limiter allows next job (ms).
|
|
37
64
|
* Returns 0 if not rate limited.
|
|
38
65
|
* O(1) — oldest active token is at this.limiterTokens[this.head].
|
|
39
66
|
*/
|
|
40
67
|
getTimeUntilNextSlot() {
|
|
41
|
-
if (!this.limiter)
|
|
42
|
-
return 0;
|
|
43
68
|
const now = Date.now();
|
|
44
|
-
const
|
|
45
|
-
this.
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
69
|
+
const overrideWait = Math.max(0, this.rateLimitExpiration - now);
|
|
70
|
+
if (!this.limiter)
|
|
71
|
+
return overrideWait;
|
|
72
|
+
this.evictExpired(now - this.limiter.duration);
|
|
73
|
+
if (this.activeCount() < this.limiter.max)
|
|
74
|
+
return overrideWait;
|
|
50
75
|
const oldestToken = this.limiterTokens[this.head];
|
|
51
|
-
|
|
76
|
+
const windowWait = Math.max(0, oldestToken + this.limiter.duration - now);
|
|
77
|
+
return Math.max(overrideWait, windowWait);
|
|
52
78
|
}
|
|
53
79
|
/** Get rate limiter info (for debugging/monitoring). */
|
|
54
80
|
getRateLimiterInfo() {
|
|
@@ -67,15 +93,9 @@ export class WorkerRateLimiter {
|
|
|
67
93
|
* The worker will not process jobs until the rate limit expires.
|
|
68
94
|
*/
|
|
69
95
|
rateLimit(expireTimeMs) {
|
|
70
|
-
if (expireTimeMs <= 0)
|
|
96
|
+
if (!Number.isFinite(expireTimeMs) || expireTimeMs <= 0)
|
|
71
97
|
return;
|
|
72
|
-
|
|
73
|
-
const now = Date.now();
|
|
74
|
-
for (let i = 0; i < this.limiter.max; i++) {
|
|
75
|
-
this.limiterTokens.push(now + expireTimeMs - this.limiter.duration);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
this.rateLimitExpiration = Date.now() + expireTimeMs;
|
|
98
|
+
this.rateLimitExpiration = Math.max(this.rateLimitExpiration, Date.now() + expireTimeMs);
|
|
79
99
|
}
|
|
80
100
|
/** Check if worker is currently rate limited. */
|
|
81
101
|
isRateLimited() {
|
package/dist/client/worker.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/** Nested-saga compensation. */
|
|
2
|
+
import type { LostCompensationClaim } from './compensationClaim';
|
|
2
3
|
import type { WorkflowEmitter } from './emitter';
|
|
3
4
|
import type { WorkflowStore } from './store';
|
|
4
5
|
import type { Execution, StepRecord } from './types';
|
|
@@ -11,7 +12,7 @@ export interface ChildUnwindRequest {
|
|
|
11
12
|
workflows?: Map<string, Workflow>;
|
|
12
13
|
retryFailed?: boolean;
|
|
13
14
|
}
|
|
14
|
-
export type ChildUnwind = (request: ChildUnwindRequest) => Promise<'ran' |
|
|
15
|
+
export type ChildUnwind = (request: ChildUnwindRequest) => Promise<'ran' | LostCompensationClaim>;
|
|
15
16
|
export interface UnwindChildRequest {
|
|
16
17
|
record: StepRecord;
|
|
17
18
|
store: WorkflowStore;
|
|
@@ -30,7 +30,7 @@ export async function unwindChild(request) {
|
|
|
30
30
|
workflows,
|
|
31
31
|
retryFailed,
|
|
32
32
|
});
|
|
33
|
-
if (outcome
|
|
33
|
+
if (outcome !== 'ran') {
|
|
34
34
|
throw new Error(`child "${child.workflowName}" (${childId}) is being rolled back by another driver; ` +
|
|
35
35
|
'outcome unknown');
|
|
36
36
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Process-local ownership for one workflow unwind. */
|
|
2
|
+
export interface AcquiredCompensationClaim {
|
|
3
|
+
readonly kind: 'acquired';
|
|
4
|
+
release(): void;
|
|
5
|
+
}
|
|
6
|
+
export interface LostCompensationClaim {
|
|
7
|
+
readonly kind: 'claim-lost';
|
|
8
|
+
readonly sameOwner: boolean;
|
|
9
|
+
readonly settled: Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
export declare function acquireCompensationClaim(executionId: string, owner: object): AcquiredCompensationClaim | LostCompensationClaim;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/** Process-local ownership for one workflow unwind. */
|
|
2
|
+
const active = new Map();
|
|
3
|
+
export function acquireCompensationClaim(executionId, owner) {
|
|
4
|
+
const current = active.get(executionId);
|
|
5
|
+
if (current) {
|
|
6
|
+
return {
|
|
7
|
+
kind: 'claim-lost',
|
|
8
|
+
sameOwner: current.owner === owner,
|
|
9
|
+
settled: current.settled,
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
let resolveFinished = () => undefined;
|
|
13
|
+
const settled = new Promise((resolve) => {
|
|
14
|
+
resolveFinished = resolve;
|
|
15
|
+
});
|
|
16
|
+
const claim = { owner, settled, finish: resolveFinished };
|
|
17
|
+
active.set(executionId, claim);
|
|
18
|
+
let released = false;
|
|
19
|
+
return {
|
|
20
|
+
kind: 'acquired',
|
|
21
|
+
release() {
|
|
22
|
+
if (released)
|
|
23
|
+
return;
|
|
24
|
+
released = true;
|
|
25
|
+
if (active.get(executionId) === claim)
|
|
26
|
+
active.delete(executionId);
|
|
27
|
+
claim.finish();
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* from overlapping in-process drivers. The execution mechanics live in
|
|
6
6
|
* compensationPass.ts; record selection lives in compensationSupport.ts.
|
|
7
7
|
*/
|
|
8
|
+
import type { LostCompensationClaim } from './compensationClaim';
|
|
8
9
|
import type { WorkflowEmitter } from './emitter';
|
|
9
10
|
import type { WorkflowStore } from './store';
|
|
10
11
|
import type { Execution } from './types';
|
|
@@ -15,8 +16,12 @@ export declare class WaitForSignalError extends Error {
|
|
|
15
16
|
readonly event: string;
|
|
16
17
|
constructor(event: string);
|
|
17
18
|
}
|
|
18
|
-
/**
|
|
19
|
-
|
|
19
|
+
/**
|
|
20
|
+
* This is not a distributed lock. It prevents two local recovery/operator paths from
|
|
21
|
+
* reading the same unsettled snapshot and issuing the same reversal twice. A losing
|
|
22
|
+
* recovery path receives the current owner's completion latch and can retry safely.
|
|
23
|
+
*/
|
|
24
|
+
export type UnwindOutcome = 'ran' | LostCompensationClaim;
|
|
20
25
|
/** Run compensation handlers in reverse start order for every eligible step. */
|
|
21
26
|
export declare function runCompensation(exec: Execution, wf: Workflow, store: WorkflowStore, emitter: WorkflowEmitter | null, workflows?: Map<string, Workflow>, opts?: {
|
|
22
27
|
retryFailed?: boolean;
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { unwind } from './compensationPass';
|
|
9
9
|
import { AbandonedCompensationError } from './compensationChild';
|
|
10
|
+
import { acquireCompensationClaim } from './compensationClaim';
|
|
10
11
|
import { settle, unwindSet } from './compensationSupport';
|
|
11
12
|
import { owesOutcome } from './unwindPlan';
|
|
12
13
|
export { AbandonedCompensationError, CommittedChildError } from './compensationChild';
|
|
@@ -18,13 +19,6 @@ export class WaitForSignalError extends Error {
|
|
|
18
19
|
this.event = event;
|
|
19
20
|
}
|
|
20
21
|
}
|
|
21
|
-
/**
|
|
22
|
-
* Executions with an unwind in flight in this process.
|
|
23
|
-
*
|
|
24
|
-
* This is not a distributed lock. It prevents two local recovery/operator paths from
|
|
25
|
-
* reading the same unsettled snapshot and issuing the same reversal twice.
|
|
26
|
-
*/
|
|
27
|
-
const inFlight = new Set();
|
|
28
22
|
/** Run compensation handlers in reverse start order for every eligible step. */
|
|
29
23
|
// biome-ignore lint/complexity/useMaxParams: registry and operator retry are independent inputs
|
|
30
24
|
export async function runCompensation(exec, wf, store, emitter, workflows, opts = {}) {
|
|
@@ -41,14 +35,14 @@ export async function runCompensation(exec, wf, store, emitter, workflows, opts
|
|
|
41
35
|
store.update(exec);
|
|
42
36
|
return 'ran';
|
|
43
37
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
38
|
+
const claim = acquireCompensationClaim(exec.id, store);
|
|
39
|
+
if (claim.kind === 'claim-lost')
|
|
40
|
+
return claim;
|
|
47
41
|
try {
|
|
48
42
|
await unwind({ exec, wf, store, emitter, eligible, workflows, ...opts }, ({ exec, workflow, store, emitter, workflows, retryFailed }) => runCompensation(exec, workflow, store, emitter, workflows, { retryFailed }));
|
|
49
43
|
}
|
|
50
44
|
finally {
|
|
51
|
-
|
|
45
|
+
claim.release();
|
|
52
46
|
}
|
|
53
47
|
return 'ran';
|
|
54
48
|
}
|
|
@@ -51,14 +51,37 @@ export async function recoverExecutions(deps) {
|
|
|
51
51
|
// recoverable until runCompensation writes an explicit rollbackStatus.
|
|
52
52
|
// A lost claim means another driver owns this unwind, so nothing happened here
|
|
53
53
|
// and counting it as a recovery would overstate what recover() did.
|
|
54
|
-
|
|
55
|
-
if (outcome === 'ran')
|
|
54
|
+
if (await recoverCompensation(exec.id, wf, deps))
|
|
56
55
|
result.compensating++;
|
|
57
56
|
}
|
|
58
57
|
}
|
|
59
58
|
result.total = result.running + result.waiting + result.compensating;
|
|
60
59
|
return result;
|
|
61
60
|
}
|
|
61
|
+
async function recoverCompensation(executionId, wf, deps) {
|
|
62
|
+
while (true) {
|
|
63
|
+
const exec = deps.store.get(executionId);
|
|
64
|
+
if (!exec ||
|
|
65
|
+
(exec.state !== 'compensating' &&
|
|
66
|
+
!(exec.state === 'failed' && exec.rollbackStatus === undefined))) {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
bindExecutionDefinition(exec, wf, (value) => deps.store.update(value));
|
|
70
|
+
const outcome = await runCompensation(exec, wf, deps.store, deps.emitter, deps.workflows);
|
|
71
|
+
if (outcome === 'ran')
|
|
72
|
+
return true;
|
|
73
|
+
// A live unwind owned by this executor's store is not orphaned. Waiting here
|
|
74
|
+
// would deadlock callers that deliberately hold the handler open until recover()
|
|
75
|
+
// returns, and it would make a health-time recovery call wait for user code.
|
|
76
|
+
if (outcome.sameOwner)
|
|
77
|
+
return false;
|
|
78
|
+
// A force-closed Engine can leave its JavaScript compensation handler alive
|
|
79
|
+
// briefly after its store is closed. A replacement Engine has a different store
|
|
80
|
+
// identity, so it waits for that owner, then re-reads the durable row: it may have
|
|
81
|
+
// finished, or this engine must resume the owed unwind.
|
|
82
|
+
await outcome.settled;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
62
85
|
async function enqueueExecution(exec, queue) {
|
|
63
86
|
const jobData = {
|
|
64
87
|
executionId: exec.id,
|
|
@@ -27,7 +27,7 @@ import { abandonCompensation, runCompensation } from './compensator';
|
|
|
27
27
|
export async function resumeCompensation(deps, executionId) {
|
|
28
28
|
const { exec, wf } = parked(deps, executionId);
|
|
29
29
|
const outcome = await runCompensation(exec, wf, deps.store, deps.emitter, deps.workflows, { retryFailed: true });
|
|
30
|
-
if (outcome
|
|
30
|
+
if (outcome !== 'ran') {
|
|
31
31
|
// Nothing was mutated: `runCompensation` returns this before the unwind begins.
|
|
32
32
|
throw new Error(`execution "${executionId}" is already being rolled back by another driver`);
|
|
33
33
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const DEFAULT_MAX_BACKOFF = 3600000;
|
|
2
|
+
export declare const MAX_TIMELINE_ENTRIES = 20;
|
|
3
|
+
export declare const DEFAULT_LOCK_TTL = 30000;
|
|
4
|
+
export declare const JOB_DEFAULTS: {
|
|
5
|
+
readonly priority: 0;
|
|
6
|
+
readonly maxAttempts: 3;
|
|
7
|
+
readonly backoff: 1000;
|
|
8
|
+
readonly lifo: false;
|
|
9
|
+
readonly removeOnComplete: false;
|
|
10
|
+
readonly removeOnFail: false;
|
|
11
|
+
readonly stackTraceLimit: 10;
|
|
12
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export const DEFAULT_MAX_BACKOFF = 3_600_000;
|
|
2
|
+
export const MAX_TIMELINE_ENTRIES = 20;
|
|
3
|
+
export const DEFAULT_LOCK_TTL = 30_000;
|
|
4
|
+
export const JOB_DEFAULTS = {
|
|
5
|
+
priority: 0,
|
|
6
|
+
maxAttempts: 3,
|
|
7
|
+
backoff: 1000,
|
|
8
|
+
lifo: false,
|
|
9
|
+
removeOnComplete: false,
|
|
10
|
+
removeOnFail: false,
|
|
11
|
+
stackTraceLimit: 10,
|
|
12
|
+
};
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { JOB_DEFAULTS } from './constants';
|
|
2
|
+
import { normalizeJobPayload } from './payload';
|
|
3
|
+
function parseBackoff(input) {
|
|
4
|
+
if (typeof input === 'object') {
|
|
5
|
+
return {
|
|
6
|
+
backoff: input.delay,
|
|
7
|
+
backoffConfig: { type: input.type, delay: input.delay },
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
return { backoff: input ?? JOB_DEFAULTS.backoff, backoffConfig: null };
|
|
11
|
+
}
|
|
12
|
+
function parseRepeatConfig(repeat) {
|
|
13
|
+
if (!repeat)
|
|
14
|
+
return null;
|
|
15
|
+
return {
|
|
16
|
+
every: repeat.every,
|
|
17
|
+
limit: repeat.limit,
|
|
18
|
+
pattern: repeat.pattern,
|
|
19
|
+
count: repeat.count ?? 0,
|
|
20
|
+
startDate: repeat.startDate,
|
|
21
|
+
endDate: repeat.endDate,
|
|
22
|
+
tz: repeat.tz,
|
|
23
|
+
immediately: repeat.immediately,
|
|
24
|
+
prevMillis: repeat.prevMillis,
|
|
25
|
+
offset: repeat.offset,
|
|
26
|
+
jobId: repeat.jobId,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function toBoolean(value, fallback) {
|
|
30
|
+
return value === undefined ? fallback : Boolean(value);
|
|
31
|
+
}
|
|
32
|
+
function parseCoreOptions(input) {
|
|
33
|
+
return {
|
|
34
|
+
priority: input.priority ?? JOB_DEFAULTS.priority,
|
|
35
|
+
lifo: input.lifo ?? JOB_DEFAULTS.lifo,
|
|
36
|
+
maxAttempts: input.maxAttempts ?? JOB_DEFAULTS.maxAttempts,
|
|
37
|
+
removeOnComplete: toBoolean(input.removeOnComplete, JOB_DEFAULTS.removeOnComplete),
|
|
38
|
+
removeOnFail: toBoolean(input.removeOnFail, JOB_DEFAULTS.removeOnFail),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function parseOptionalFields(input) {
|
|
42
|
+
return {
|
|
43
|
+
ttl: input.ttl ?? null,
|
|
44
|
+
timeout: input.timeout ?? null,
|
|
45
|
+
uniqueKey: input.uniqueKey ?? null,
|
|
46
|
+
customId: input.customId ?? null,
|
|
47
|
+
parentId: input.parentId ?? null,
|
|
48
|
+
groupId: input.groupId ?? null,
|
|
49
|
+
stallTimeout: input.stallTimeout ?? null,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function parseBullMQV5Options(input) {
|
|
53
|
+
return {
|
|
54
|
+
stackTraceLimit: input.stackTraceLimit ?? JOB_DEFAULTS.stackTraceLimit,
|
|
55
|
+
keepLogs: input.keepLogs ?? null,
|
|
56
|
+
sizeLimit: input.sizeLimit ?? null,
|
|
57
|
+
failParentOnFailure: input.failParentOnFailure ?? false,
|
|
58
|
+
removeDependencyOnFailure: input.removeDependencyOnFailure ?? false,
|
|
59
|
+
continueParentOnFailure: input.continueParentOnFailure ?? false,
|
|
60
|
+
ignoreDependencyOnFailure: input.ignoreDependencyOnFailure ?? false,
|
|
61
|
+
deduplicationTtl: input.dedup?.ttl ?? null,
|
|
62
|
+
deduplicationExtend: input.dedup?.extend ?? false,
|
|
63
|
+
deduplicationReplace: input.dedup?.replace ?? false,
|
|
64
|
+
debounceId: input.debounceId ?? null,
|
|
65
|
+
debounceTtl: input.debounceTtl ?? null,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
export function createJob(id, queue, input, now = Date.now()) {
|
|
69
|
+
const { backoff, backoffConfig } = parseBackoff(input.backoff);
|
|
70
|
+
const coreOpts = parseCoreOptions(input);
|
|
71
|
+
const optionalFields = parseOptionalFields(input);
|
|
72
|
+
const v5Opts = parseBullMQV5Options(input);
|
|
73
|
+
const createdAt = input.timestamp ?? now;
|
|
74
|
+
const payload = normalizeJobPayload(input);
|
|
75
|
+
return {
|
|
76
|
+
id,
|
|
77
|
+
queue,
|
|
78
|
+
name: payload.name,
|
|
79
|
+
data: payload.data,
|
|
80
|
+
createdAt,
|
|
81
|
+
runAt: createdAt + (input.delay ?? 0),
|
|
82
|
+
startedAt: null,
|
|
83
|
+
completedAt: null,
|
|
84
|
+
attempts: 0,
|
|
85
|
+
backoff,
|
|
86
|
+
backoffConfig,
|
|
87
|
+
dependsOn: input.dependsOn ?? [],
|
|
88
|
+
childrenIds: input.childrenIds ?? [],
|
|
89
|
+
childrenCompleted: 0,
|
|
90
|
+
tags: input.tags ?? [],
|
|
91
|
+
progress: 0,
|
|
92
|
+
progressMessage: null,
|
|
93
|
+
stacktrace: null,
|
|
94
|
+
repeat: parseRepeatConfig(input.repeat),
|
|
95
|
+
durable: input.durable ?? false,
|
|
96
|
+
lastHeartbeat: createdAt,
|
|
97
|
+
stallCount: 0,
|
|
98
|
+
...coreOpts,
|
|
99
|
+
...optionalFields,
|
|
100
|
+
...v5Opts,
|
|
101
|
+
timeline: [],
|
|
102
|
+
};
|
|
103
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { JobId, LockToken } from '../types/jobs/model';
|
|
2
|
+
export declare function jobId(id: string): JobId;
|
|
3
|
+
export declare function generateJobId(): JobId;
|
|
4
|
+
export declare function lockToken(token: string): LockToken;
|
|
5
|
+
export declare function generateLockToken(): LockToken;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { JobId, JobLock } from '../types/jobs/model';
|
|
2
|
+
export declare function createJobLock(jobId: JobId, owner: string, ttl?: number, now?: number): JobLock;
|
|
3
|
+
export declare function isLockExpired(lock: JobLock, now?: number): boolean;
|
|
4
|
+
export declare function renewLock(lock: JobLock, newTtl?: number, now?: number): void;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { DEFAULT_LOCK_TTL } from './constants';
|
|
2
|
+
import { generateLockToken } from './ids';
|
|
3
|
+
export function createJobLock(jobId, owner, ttl = DEFAULT_LOCK_TTL, now = Date.now()) {
|
|
4
|
+
return {
|
|
5
|
+
jobId,
|
|
6
|
+
token: generateLockToken(),
|
|
7
|
+
owner,
|
|
8
|
+
createdAt: now,
|
|
9
|
+
expiresAt: now + ttl,
|
|
10
|
+
lastRenewalAt: now,
|
|
11
|
+
renewalCount: 0,
|
|
12
|
+
ttl,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export function isLockExpired(lock, now = Date.now()) {
|
|
16
|
+
return now >= lock.expiresAt;
|
|
17
|
+
}
|
|
18
|
+
export function renewLock(lock, newTtl, now = Date.now()) {
|
|
19
|
+
const ttl = newTtl ?? lock.ttl;
|
|
20
|
+
lock.expiresAt = now + ttl;
|
|
21
|
+
lock.lastRenewalAt = now;
|
|
22
|
+
lock.renewalCount++;
|
|
23
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface JobPayloadSource {
|
|
2
|
+
readonly name?: unknown;
|
|
3
|
+
readonly data: unknown;
|
|
4
|
+
}
|
|
5
|
+
export interface NormalizedJobPayload {
|
|
6
|
+
readonly name: string;
|
|
7
|
+
readonly data: unknown;
|
|
8
|
+
readonly legacy: boolean;
|
|
9
|
+
}
|
|
10
|
+
/** Return the stable public validation error for an invalid job name. */
|
|
11
|
+
export declare function validateJobName(name: unknown): string | null;
|
|
12
|
+
/**
|
|
13
|
+
* Resolve a modern payload. A missing explicit name defaults without inspecting
|
|
14
|
+
* `data`, so direct QueueManager callers can use `data.name` as an ordinary key.
|
|
15
|
+
*/
|
|
16
|
+
export declare function normalizeJobPayload(source: JobPayloadSource, fallback?: string): NormalizedJobPayload;
|
|
17
|
+
/** Decode a pre-2.8.56 wire or persistence envelope at a known legacy boundary. */
|
|
18
|
+
export declare function normalizeLegacyJobPayload(source: JobPayloadSource, fallback?: string): NormalizedJobPayload;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
const DEFAULT_JOB_NAME = 'default';
|
|
2
|
+
const MAX_JOB_NAME_LENGTH = 256;
|
|
3
|
+
function legacyEnvelope(data) {
|
|
4
|
+
if (typeof data !== 'object' || data === null || Array.isArray(data))
|
|
5
|
+
return null;
|
|
6
|
+
const record = data;
|
|
7
|
+
if (typeof record.name !== 'string')
|
|
8
|
+
return null;
|
|
9
|
+
const { name, ...userData } = record;
|
|
10
|
+
return { name, data: userData };
|
|
11
|
+
}
|
|
12
|
+
/** Return the stable public validation error for an invalid job name. */
|
|
13
|
+
export function validateJobName(name) {
|
|
14
|
+
if (typeof name !== 'string' || name.length === 0 || name.length > MAX_JOB_NAME_LENGTH) {
|
|
15
|
+
return 'Job name must be a non-empty string of at most 256 characters';
|
|
16
|
+
}
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
function checkedName(name) {
|
|
20
|
+
const error = validateJobName(name);
|
|
21
|
+
if (error)
|
|
22
|
+
throw new Error(error);
|
|
23
|
+
return name;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Resolve a modern payload. A missing explicit name defaults without inspecting
|
|
27
|
+
* `data`, so direct QueueManager callers can use `data.name` as an ordinary key.
|
|
28
|
+
*/
|
|
29
|
+
export function normalizeJobPayload(source, fallback = DEFAULT_JOB_NAME) {
|
|
30
|
+
if (source.name !== undefined) {
|
|
31
|
+
return { name: checkedName(source.name), data: source.data, legacy: false };
|
|
32
|
+
}
|
|
33
|
+
return { name: checkedName(fallback), data: source.data, legacy: false };
|
|
34
|
+
}
|
|
35
|
+
/** Decode a pre-2.8.56 wire or persistence envelope at a known legacy boundary. */
|
|
36
|
+
export function normalizeLegacyJobPayload(source, fallback = DEFAULT_JOB_NAME) {
|
|
37
|
+
if (source.name !== undefined)
|
|
38
|
+
return normalizeJobPayload(source, fallback);
|
|
39
|
+
const legacy = legacyEnvelope(source.data);
|
|
40
|
+
if (legacy)
|
|
41
|
+
return { name: checkedName(legacy.name), data: legacy.data, legacy: true };
|
|
42
|
+
return { name: checkedName(fallback), data: source.data, legacy: false };
|
|
43
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Job } from '../types/jobs/model';
|
|
2
|
+
export declare function normalizeStacktrace(lines: readonly unknown[] | undefined, limit: number): string[] | null;
|
|
3
|
+
export declare function isDelayed(job: Job, now?: number): boolean;
|
|
4
|
+
export declare function isReady(job: Job, now?: number): boolean;
|
|
5
|
+
export declare function isExpired(job: Job, now?: number): boolean;
|
|
6
|
+
export declare function isTimedOut(job: Job, now?: number): boolean;
|
|
7
|
+
export declare function calculateBackoff(job: Job): number;
|
|
8
|
+
export declare function canRetry(job: Job): boolean;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { DEFAULT_MAX_BACKOFF } from './constants';
|
|
2
|
+
export function normalizeStacktrace(lines, limit) {
|
|
3
|
+
if (!lines || lines.length === 0)
|
|
4
|
+
return null;
|
|
5
|
+
const out = [];
|
|
6
|
+
for (const line of lines) {
|
|
7
|
+
if (out.length >= limit)
|
|
8
|
+
break;
|
|
9
|
+
if (typeof line !== 'string')
|
|
10
|
+
continue;
|
|
11
|
+
const trimmed = line.trim();
|
|
12
|
+
if (trimmed)
|
|
13
|
+
out.push(trimmed);
|
|
14
|
+
}
|
|
15
|
+
return out.length > 0 ? out : null;
|
|
16
|
+
}
|
|
17
|
+
export function isDelayed(job, now = Date.now()) {
|
|
18
|
+
return job.runAt > now;
|
|
19
|
+
}
|
|
20
|
+
export function isReady(job, now = Date.now()) {
|
|
21
|
+
return job.runAt <= now;
|
|
22
|
+
}
|
|
23
|
+
export function isExpired(job, now = Date.now()) {
|
|
24
|
+
if (job.ttl === null)
|
|
25
|
+
return false;
|
|
26
|
+
return now > job.createdAt + job.ttl;
|
|
27
|
+
}
|
|
28
|
+
export function isTimedOut(job, now = Date.now()) {
|
|
29
|
+
if (job.timeout === null || job.startedAt === null)
|
|
30
|
+
return false;
|
|
31
|
+
return now > job.startedAt + job.timeout;
|
|
32
|
+
}
|
|
33
|
+
export function calculateBackoff(job) {
|
|
34
|
+
const maxDelay = job.backoffConfig?.maxDelay ?? DEFAULT_MAX_BACKOFF;
|
|
35
|
+
if (job.backoffConfig) {
|
|
36
|
+
if (job.backoffConfig.type === 'fixed') {
|
|
37
|
+
const base = job.backoffConfig.delay;
|
|
38
|
+
const jittered = base * (0.8 + Math.random() * 0.4);
|
|
39
|
+
return Math.min(jittered, maxDelay);
|
|
40
|
+
}
|
|
41
|
+
const base = job.backoffConfig.delay * Math.pow(2, job.attempts);
|
|
42
|
+
const jittered = base * (0.5 + Math.random());
|
|
43
|
+
return Math.min(jittered, maxDelay);
|
|
44
|
+
}
|
|
45
|
+
const base = job.backoff * Math.pow(2, job.attempts);
|
|
46
|
+
const jittered = base * (0.5 + Math.random());
|
|
47
|
+
return Math.min(jittered, maxDelay);
|
|
48
|
+
}
|
|
49
|
+
export function canRetry(job) {
|
|
50
|
+
return job.attempts < job.maxAttempts;
|
|
51
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Return the most recent persisted processor failure for a job. */
|
|
2
|
+
export function lastFailedReason(job) {
|
|
3
|
+
for (let index = job.timeline.length - 1; index >= 0; index--) {
|
|
4
|
+
const entry = job.timeline[index];
|
|
5
|
+
if (entry.state === 'failed' && entry.error)
|
|
6
|
+
return entry.error;
|
|
7
|
+
}
|
|
8
|
+
return undefined;
|
|
9
|
+
}
|
|
@@ -9,6 +9,7 @@ import type { StallConfig } from '../types/stall';
|
|
|
9
9
|
export interface DlqStatsCallback {
|
|
10
10
|
incrementDlq(): void;
|
|
11
11
|
decrementDlq(count?: number): void;
|
|
12
|
+
onEvict?(entry: DlqEntry): void;
|
|
12
13
|
}
|
|
13
14
|
/**
|
|
14
15
|
* Manages Dead Letter Queue operations for a shard
|
|
@@ -57,4 +58,5 @@ export declare class DlqShard {
|
|
|
57
58
|
getQueueNames(): string[];
|
|
58
59
|
/** Delete queue data */
|
|
59
60
|
deleteQueue(queue: string): number;
|
|
61
|
+
private evictUntil;
|
|
60
62
|
}
|