bunqueue 2.8.54 → 2.8.57
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 -442
- package/dist/application/cleanupTasks.js +1 -0
- package/dist/application/clientTracking.js +2 -0
- package/dist/application/contextFactory.d.ts +13 -90
- package/dist/application/contextFactory.js +8 -0
- package/dist/application/dependencyResultTracker.d.ts +1 -0
- package/dist/application/dependencyResultTracker.js +3 -0
- package/dist/application/dlqManager.d.ts +2 -8
- package/dist/application/dlqManager.js +33 -162
- package/dist/application/dlqRetry.d.ts +12 -0
- package/dist/application/dlqRetry.js +97 -0
- package/dist/application/lockManager.js +21 -1
- 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 +10 -3
- 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 +44 -7
- 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 -400
- package/dist/application/queueManager.js +3 -1922
- 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 +6 -1
- 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.js → types/config.js} +3 -4
- 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/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 +31 -16
- 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 +0 -4
- package/dist/client/jobConversion.js +32 -33
- package/dist/client/jobConversionHelpers.d.ts +18 -2
- package/dist/client/jobConversionHelpers.js +17 -10
- package/dist/client/jobConversionTypes.d.ts +5 -1
- package/dist/client/jobHelpers.d.ts +7 -2
- package/dist/client/jobHelpers.js +16 -8
- package/dist/client/queue/dlq.js +12 -14
- package/dist/client/queue/dlqJobMethods.js +11 -10
- package/dist/client/queue/dlqOps.js +2 -8
- 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 +82 -24
- package/dist/client/queue/jobProxy.d.ts +4 -50
- package/dist/client/queue/jobProxy.js +3 -516
- 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 -364
- package/dist/client/queue/operations/management.js +2 -1
- package/dist/client/queue/operations/query.js +20 -63
- package/dist/client/queue/queue.d.ts +6 -192
- package/dist/client/queue/queue.js +6 -559
- 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/{queueTypes.d.ts → types/contexts.d.ts} +2 -2
- 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 +4 -8
- package/dist/client/queue/workers.js +22 -14
- package/dist/client/queue-events/tcpSubscription.d.ts +23 -0
- package/dist/client/queue-events/tcpSubscription.js +99 -0
- 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/{types.js → constants.js} +0 -6
- 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 +67 -124
- package/dist/client/worker/processorHandlers.d.ts +4 -61
- package/dist/client/worker/processorHandlers.js +4 -398
- 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 -928
- 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/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 -145
- package/dist/domain/queue/shard.js +4 -409
- 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 -555
- 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 +2 -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 -280
- package/dist/infrastructure/persistence/sqlite.js +3 -1013
- 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 -270
- 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/flow.js +6 -1
- package/dist/infrastructure/server/handlers/introspection.js +1 -1
- 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 +12 -3
- 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
- package/dist/application/types.d.ts +0 -148
- package/dist/client/sandboxed/types.d.ts +0 -79
- package/dist/client/sandboxed/types.js +0 -5
- package/dist/client/worker/types.d.ts +0 -50
- /package/dist/client/queue/{queueTypes.js → types/contexts.js} +0 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { withReadLock } from '../../../shared/lock';
|
|
2
|
+
function resolveStateFromStorage(jobId, storage) {
|
|
3
|
+
if (!storage)
|
|
4
|
+
return 'unknown';
|
|
5
|
+
if (storage.hasDlqEntry(jobId))
|
|
6
|
+
return "failed" /* JobState.Failed */;
|
|
7
|
+
const persisted = storage.getJobStateRaw(jobId);
|
|
8
|
+
if (persisted === 'completed')
|
|
9
|
+
return "completed" /* JobState.Completed */;
|
|
10
|
+
if (persisted === 'active')
|
|
11
|
+
return "active" /* JobState.Active */;
|
|
12
|
+
if (persisted !== 'waiting' && persisted !== 'delayed')
|
|
13
|
+
return 'unknown';
|
|
14
|
+
const row = storage.getJob(jobId);
|
|
15
|
+
if (!row)
|
|
16
|
+
return 'unknown';
|
|
17
|
+
if (row.runAt > Date.now())
|
|
18
|
+
return "delayed" /* JobState.Delayed */;
|
|
19
|
+
return row.priority > 0 ? "prioritized" /* JobState.Prioritized */ : "waiting" /* JobState.Waiting */;
|
|
20
|
+
}
|
|
21
|
+
export async function getJobState(jobId, ctx) {
|
|
22
|
+
for (let pass = 0; pass < 4; pass++) {
|
|
23
|
+
const location = ctx.jobIndex.get(jobId);
|
|
24
|
+
if (ctx.completedJobs.has(jobId))
|
|
25
|
+
return "completed" /* JobState.Completed */;
|
|
26
|
+
if (!location)
|
|
27
|
+
return resolveStateFromStorage(jobId, ctx.storage);
|
|
28
|
+
switch (location.type) {
|
|
29
|
+
case 'queue': {
|
|
30
|
+
const result = await withReadLock(ctx.shardLocks[location.shardIdx], () => {
|
|
31
|
+
const shard = ctx.shards[location.shardIdx];
|
|
32
|
+
const queueJob = shard.getQueue(location.queueName).find(jobId);
|
|
33
|
+
if (queueJob)
|
|
34
|
+
return { job: queueJob, waitingDeps: false, waitingChildren: false };
|
|
35
|
+
const depsJob = shard.waitingDeps.get(jobId);
|
|
36
|
+
if (depsJob)
|
|
37
|
+
return { job: depsJob, waitingDeps: true, waitingChildren: false };
|
|
38
|
+
const childrenJob = shard.waitingChildren.get(jobId);
|
|
39
|
+
if (childrenJob)
|
|
40
|
+
return { job: childrenJob, waitingDeps: false, waitingChildren: true };
|
|
41
|
+
return null;
|
|
42
|
+
});
|
|
43
|
+
if (!result) {
|
|
44
|
+
if (ctx.jobIndex.get(jobId) === location)
|
|
45
|
+
return 'unknown';
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
if (result.waitingDeps || result.waitingChildren)
|
|
49
|
+
return 'waiting-children';
|
|
50
|
+
if (result.job.runAt > Date.now())
|
|
51
|
+
return "delayed" /* JobState.Delayed */;
|
|
52
|
+
return result.job.priority > 0 ? "prioritized" /* JobState.Prioritized */ : "waiting" /* JobState.Waiting */;
|
|
53
|
+
}
|
|
54
|
+
case 'processing':
|
|
55
|
+
return "active" /* JobState.Active */;
|
|
56
|
+
case 'completed':
|
|
57
|
+
return "completed" /* JobState.Completed */;
|
|
58
|
+
case 'dlq':
|
|
59
|
+
return "failed" /* JobState.Failed */;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return 'unknown';
|
|
63
|
+
}
|
|
@@ -1,50 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
import { JobState } from '../../domain/types/job';
|
|
7
|
-
import type { JobLocation } from '../../domain/types/queue';
|
|
8
|
-
import type { Shard } from '../../domain/queue/shard';
|
|
9
|
-
import type { SqliteStorage } from '../../infrastructure/persistence/sqlite';
|
|
10
|
-
import { type RWLock } from '../../shared/lock';
|
|
11
|
-
import type { SetLike, MapLike } from '../../shared/lru';
|
|
12
|
-
import type { DependencyResultTracker } from '../dependencyResultTracker';
|
|
13
|
-
/** Context for query operations */
|
|
14
|
-
export interface QueryContext {
|
|
15
|
-
storage: SqliteStorage | null;
|
|
16
|
-
shards: Shard[];
|
|
17
|
-
shardLocks: RWLock[];
|
|
18
|
-
processingShards: Map<JobId, Job>[];
|
|
19
|
-
processingLocks: RWLock[];
|
|
20
|
-
jobIndex: Map<JobId, JobLocation>;
|
|
21
|
-
completedJobs: SetLike<JobId>;
|
|
22
|
-
completedJobsData: MapLike<JobId, Job>;
|
|
23
|
-
jobResults: MapLike<JobId, unknown>;
|
|
24
|
-
dependencyResults: DependencyResultTracker;
|
|
25
|
-
customIdMap: MapLike<string, JobId>;
|
|
26
|
-
}
|
|
27
|
-
/** Get job by ID */
|
|
28
|
-
export declare function getJob(jobId: JobId, ctx: QueryContext): Promise<Job | null>;
|
|
29
|
-
/** Get job result */
|
|
30
|
-
export declare function getJobResult(jobId: JobId, ctx: QueryContext): unknown;
|
|
31
|
-
/** Get job by custom ID */
|
|
32
|
-
export declare function getJobByCustomId(customId: string, ctx: QueryContext): Job | null;
|
|
33
|
-
/** Get job progress */
|
|
34
|
-
export declare function getJobProgress(jobId: JobId, ctx: QueryContext): {
|
|
35
|
-
progress: number;
|
|
36
|
-
message: string | null;
|
|
37
|
-
} | null;
|
|
38
|
-
/** Extended context for getJobs (needs SHARD_COUNT) */
|
|
39
|
-
export interface GetJobsContext extends QueryContext {
|
|
40
|
-
shardCount: number;
|
|
41
|
-
}
|
|
42
|
-
/** Get job state by ID */
|
|
43
|
-
export declare function getJobState(jobId: JobId, ctx: QueryContext): Promise<JobState | 'unknown'>;
|
|
44
|
-
/** Get jobs from queue with filters */
|
|
45
|
-
export declare function getJobs(queue: string, shardIdx: number, options: {
|
|
46
|
-
state?: string | string[];
|
|
47
|
-
start?: number;
|
|
48
|
-
end?: number;
|
|
49
|
-
asc?: boolean;
|
|
50
|
-
}, ctx: GetJobsContext): Job[];
|
|
1
|
+
/** Stable query-operation import surface. */
|
|
2
|
+
export { getJob, getJobByCustomId, getJobProgress, getJobResult } from './query/jobLookup';
|
|
3
|
+
export { getJobs } from './query/pagination';
|
|
4
|
+
export { getJobState } from './query/state';
|
|
5
|
+
export type { GetJobsContext, QueryContext } from '../types/query';
|
|
@@ -1,474 +1,4 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import { withReadLock } from '../../shared/lock';
|
|
6
|
-
import { shardIndex } from '../../shared/hash';
|
|
7
|
-
/** Get job by ID */
|
|
8
|
-
export async function getJob(jobId, ctx) {
|
|
9
|
-
// The location snapshot is only valid until the first await: while this
|
|
10
|
-
// reader waits on the shard read lock (writers have priority), a concurrent
|
|
11
|
-
// pull can pop the job and move it queue -> processing. The pull updates
|
|
12
|
-
// jobIndex atomically with the pop (tryDequeueNextJob), so on a miss the
|
|
13
|
-
// index re-read below is authoritative: an identity change means the job
|
|
14
|
-
// MOVED, and we chase the new location instead of returning a false null
|
|
15
|
-
// for a job that still exists (getJob(id) === null must be permanent for
|
|
16
|
-
// never-reused uuidv7 ids). Bounded: every extra pass requires a further
|
|
17
|
-
// state transition of this very job (queue -> active -> completed/removed),
|
|
18
|
-
// so 4 passes cover any realistic chase; index entries are always replaced
|
|
19
|
-
// (never mutated), which makes the identity comparison exact.
|
|
20
|
-
for (let pass = 0; pass < 4; pass++) {
|
|
21
|
-
const location = ctx.jobIndex.get(jobId);
|
|
22
|
-
if (!location) {
|
|
23
|
-
// Fallback: jobIndex may not be populated after restart for completed/DLQ jobs.
|
|
24
|
-
// Consult SQLite directly so getJob survives recovery.
|
|
25
|
-
if (ctx.storage) {
|
|
26
|
-
const job = ctx.storage.getJob(jobId);
|
|
27
|
-
if (job)
|
|
28
|
-
return job;
|
|
29
|
-
const dlqEntry = ctx.storage.getDlqEntry(jobId);
|
|
30
|
-
if (dlqEntry)
|
|
31
|
-
return dlqEntry.job;
|
|
32
|
-
}
|
|
33
|
-
return ctx.completedJobsData.get(jobId) ?? null;
|
|
34
|
-
}
|
|
35
|
-
let found = null;
|
|
36
|
-
switch (location.type) {
|
|
37
|
-
case 'queue': {
|
|
38
|
-
found = await withReadLock(ctx.shardLocks[location.shardIdx], () => {
|
|
39
|
-
const shard = ctx.shards[location.shardIdx];
|
|
40
|
-
return (shard.getQueue(location.queueName).find(jobId) ??
|
|
41
|
-
shard.waitingDeps.get(jobId) ??
|
|
42
|
-
shard.waitingChildren.get(jobId) ??
|
|
43
|
-
null);
|
|
44
|
-
});
|
|
45
|
-
break;
|
|
46
|
-
}
|
|
47
|
-
case 'processing': {
|
|
48
|
-
found = await withReadLock(ctx.processingLocks[location.shardIdx], () => {
|
|
49
|
-
return ctx.processingShards[location.shardIdx].get(jobId) ?? null;
|
|
50
|
-
});
|
|
51
|
-
break;
|
|
52
|
-
}
|
|
53
|
-
case 'completed':
|
|
54
|
-
found = ctx.storage?.getJob(jobId) ?? ctx.completedJobsData.get(jobId) ?? null;
|
|
55
|
-
break;
|
|
56
|
-
case 'dlq': {
|
|
57
|
-
if (ctx.storage) {
|
|
58
|
-
const dlqEntry = ctx.storage.getDlqEntry(jobId);
|
|
59
|
-
if (dlqEntry)
|
|
60
|
-
return dlqEntry.job;
|
|
61
|
-
const job = ctx.storage.getJob(jobId);
|
|
62
|
-
if (job)
|
|
63
|
-
return job;
|
|
64
|
-
}
|
|
65
|
-
const dlqShardIdx = shardIndex(location.queueName);
|
|
66
|
-
const dlqJobs = ctx.shards[dlqShardIdx].getDlq(location.queueName);
|
|
67
|
-
found = dlqJobs.find((j) => j.id === jobId) ?? null;
|
|
68
|
-
break;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
if (found)
|
|
72
|
-
return found;
|
|
73
|
-
if (ctx.jobIndex.get(jobId) === location)
|
|
74
|
-
return null; // no move: genuine miss
|
|
75
|
-
// The job moved while we held the stale snapshot: chase it.
|
|
76
|
-
}
|
|
77
|
-
return null;
|
|
78
|
-
}
|
|
79
|
-
/** Get job result */
|
|
80
|
-
export function getJobResult(jobId, ctx) {
|
|
81
|
-
if (ctx.jobResults.has(jobId))
|
|
82
|
-
return ctx.jobResults.get(jobId);
|
|
83
|
-
if (ctx.dependencyResults.has(jobId))
|
|
84
|
-
return ctx.dependencyResults.get(jobId);
|
|
85
|
-
return ctx.storage?.getResult(jobId);
|
|
86
|
-
}
|
|
87
|
-
/** Get job by custom ID */
|
|
88
|
-
export function getJobByCustomId(customId, ctx) {
|
|
89
|
-
const jobId = ctx.customIdMap.get(customId);
|
|
90
|
-
if (!jobId)
|
|
91
|
-
return null;
|
|
92
|
-
const location = ctx.jobIndex.get(jobId);
|
|
93
|
-
if (!location)
|
|
94
|
-
return null;
|
|
95
|
-
if (location.type === 'queue') {
|
|
96
|
-
const shard = ctx.shards[location.shardIdx];
|
|
97
|
-
return (shard.getQueue(location.queueName).find(jobId) ??
|
|
98
|
-
shard.waitingDeps.get(jobId) ??
|
|
99
|
-
shard.waitingChildren.get(jobId) ??
|
|
100
|
-
null);
|
|
101
|
-
}
|
|
102
|
-
if (location.type === 'processing') {
|
|
103
|
-
return ctx.processingShards[location.shardIdx].get(jobId) ?? null;
|
|
104
|
-
}
|
|
105
|
-
if (location.type === 'completed') {
|
|
106
|
-
return ctx.storage?.getJob(jobId) ?? ctx.completedJobsData.get(jobId) ?? null;
|
|
107
|
-
}
|
|
108
|
-
if (location.type === 'dlq') {
|
|
109
|
-
if (ctx.storage) {
|
|
110
|
-
const job = ctx.storage.getJob(jobId);
|
|
111
|
-
if (job)
|
|
112
|
-
return job;
|
|
113
|
-
}
|
|
114
|
-
const dlqShardIdx = shardIndex(location.queueName);
|
|
115
|
-
const dlqJobs = ctx.shards[dlqShardIdx].getDlq(location.queueName);
|
|
116
|
-
return dlqJobs.find((j) => j.id === jobId) ?? null;
|
|
117
|
-
}
|
|
118
|
-
return null;
|
|
119
|
-
}
|
|
120
|
-
/** Get job progress */
|
|
121
|
-
export function getJobProgress(jobId, ctx) {
|
|
122
|
-
const location = ctx.jobIndex.get(jobId);
|
|
123
|
-
if (location?.type !== 'processing')
|
|
124
|
-
return null;
|
|
125
|
-
const job = ctx.processingShards[location.shardIdx].get(jobId);
|
|
126
|
-
if (!job)
|
|
127
|
-
return null;
|
|
128
|
-
return { progress: job.progress, message: job.progressMessage };
|
|
129
|
-
}
|
|
130
|
-
/** Stable total order used by both in-memory collection and SQL queries. */
|
|
131
|
-
function compareJobsByCreatedAt(a, b, asc) {
|
|
132
|
-
if (a.createdAt !== b.createdAt) {
|
|
133
|
-
return asc ? a.createdAt - b.createdAt : b.createdAt - a.createdAt;
|
|
134
|
-
}
|
|
135
|
-
if (a.id === b.id)
|
|
136
|
-
return 0;
|
|
137
|
-
if (asc)
|
|
138
|
-
return a.id < b.id ? -1 : 1;
|
|
139
|
-
return a.id > b.id ? -1 : 1;
|
|
140
|
-
}
|
|
141
|
-
/** Resolve job state from SQLite when jobIndex has no entry (post-restart recovery). */
|
|
142
|
-
function resolveStateFromStorage(jobId, storage) {
|
|
143
|
-
if (!storage)
|
|
144
|
-
return 'unknown';
|
|
145
|
-
if (storage.hasDlqEntry(jobId))
|
|
146
|
-
return "failed" /* JobState.Failed */;
|
|
147
|
-
const persisted = storage.getJobStateRaw(jobId);
|
|
148
|
-
if (persisted === 'completed')
|
|
149
|
-
return "completed" /* JobState.Completed */;
|
|
150
|
-
if (persisted === 'active')
|
|
151
|
-
return "active" /* JobState.Active */;
|
|
152
|
-
if (persisted !== 'waiting' && persisted !== 'delayed')
|
|
153
|
-
return 'unknown';
|
|
154
|
-
const row = storage.getJob(jobId);
|
|
155
|
-
if (!row)
|
|
156
|
-
return 'unknown';
|
|
157
|
-
if (row.runAt > Date.now())
|
|
158
|
-
return "delayed" /* JobState.Delayed */;
|
|
159
|
-
return row.priority > 0 ? "prioritized" /* JobState.Prioritized */ : "waiting" /* JobState.Waiting */;
|
|
160
|
-
}
|
|
161
|
-
/** Get job state by ID */
|
|
162
|
-
export async function getJobState(jobId, ctx) {
|
|
163
|
-
// Same stale-snapshot chase as getJob: a 'queue' location read before the
|
|
164
|
-
// read-lock await may be outdated by a concurrent pull (queue -> processing)
|
|
165
|
-
// by the time the lookup runs. On a miss with a changed index entry, retry
|
|
166
|
-
// with the fresh location instead of reporting a false 'unknown'.
|
|
167
|
-
for (let pass = 0; pass < 4; pass++) {
|
|
168
|
-
const location = ctx.jobIndex.get(jobId);
|
|
169
|
-
// Check completed set first (fast path)
|
|
170
|
-
if (ctx.completedJobs.has(jobId)) {
|
|
171
|
-
return "completed" /* JobState.Completed */;
|
|
172
|
-
}
|
|
173
|
-
if (!location) {
|
|
174
|
-
return resolveStateFromStorage(jobId, ctx.storage);
|
|
175
|
-
}
|
|
176
|
-
switch (location.type) {
|
|
177
|
-
case 'queue': {
|
|
178
|
-
// Check if job is delayed, waiting, or waiting for children/deps
|
|
179
|
-
const result = await withReadLock(ctx.shardLocks[location.shardIdx], () => {
|
|
180
|
-
const shard = ctx.shards[location.shardIdx];
|
|
181
|
-
const queueJob = shard.getQueue(location.queueName).find(jobId);
|
|
182
|
-
if (queueJob)
|
|
183
|
-
return { job: queueJob, waitingDeps: false, waitingChildren: false };
|
|
184
|
-
const depsJob = shard.waitingDeps.get(jobId);
|
|
185
|
-
if (depsJob)
|
|
186
|
-
return { job: depsJob, waitingDeps: true, waitingChildren: false };
|
|
187
|
-
const childrenJob = shard.waitingChildren.get(jobId);
|
|
188
|
-
if (childrenJob)
|
|
189
|
-
return { job: childrenJob, waitingDeps: false, waitingChildren: true };
|
|
190
|
-
return null;
|
|
191
|
-
});
|
|
192
|
-
if (!result) {
|
|
193
|
-
if (ctx.jobIndex.get(jobId) === location)
|
|
194
|
-
return 'unknown'; // no move
|
|
195
|
-
break; // moved mid-lookup: chase the new location
|
|
196
|
-
}
|
|
197
|
-
if (result.waitingDeps || result.waitingChildren)
|
|
198
|
-
return 'waiting-children';
|
|
199
|
-
const now = Date.now();
|
|
200
|
-
if (result.job.runAt > now)
|
|
201
|
-
return "delayed" /* JobState.Delayed */;
|
|
202
|
-
return result.job.priority > 0 ? "prioritized" /* JobState.Prioritized */ : "waiting" /* JobState.Waiting */;
|
|
203
|
-
}
|
|
204
|
-
case 'processing':
|
|
205
|
-
return "active" /* JobState.Active */;
|
|
206
|
-
case 'completed':
|
|
207
|
-
return "completed" /* JobState.Completed */;
|
|
208
|
-
case 'dlq':
|
|
209
|
-
return "failed" /* JobState.Failed */;
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
return 'unknown';
|
|
213
|
-
}
|
|
214
|
-
/** Collect completed jobs for a queue from index + storage */
|
|
215
|
-
function collectCompletedJobs(queue, ctx) {
|
|
216
|
-
const jobs = [];
|
|
217
|
-
for (const [jId, location] of ctx.jobIndex) {
|
|
218
|
-
if (location.type === 'completed' && location.queueName === queue) {
|
|
219
|
-
const job = ctx.storage?.getJob(jId) ?? ctx.completedJobsData?.get(jId) ?? null;
|
|
220
|
-
if (job) {
|
|
221
|
-
jobs.push(job);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
return jobs;
|
|
226
|
-
}
|
|
227
|
-
/** Collect active jobs for a queue across all processing shards */
|
|
228
|
-
function collectActiveJobs(queue, shardIdx, ctx) {
|
|
229
|
-
const jobs = [];
|
|
230
|
-
// Own shard first (most likely location)
|
|
231
|
-
for (const job of ctx.processingShards[shardIdx].values()) {
|
|
232
|
-
if (job.queue === queue)
|
|
233
|
-
jobs.push(job);
|
|
234
|
-
}
|
|
235
|
-
// Other shards
|
|
236
|
-
for (let i = 0; i < ctx.shardCount; i++) {
|
|
237
|
-
if (i === shardIdx)
|
|
238
|
-
continue;
|
|
239
|
-
for (const job of ctx.processingShards[i].values()) {
|
|
240
|
-
if (job.queue === queue)
|
|
241
|
-
jobs.push(job);
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
return jobs;
|
|
245
|
-
}
|
|
246
|
-
/** Collect waiting/delayed/prioritized jobs in a single pass */
|
|
247
|
-
function collectTemporalJobs(shard, queue, needs, now = Date.now()) {
|
|
248
|
-
const { waiting: needWaiting, prioritized: needPrioritized, delayed: needDelayed } = needs;
|
|
249
|
-
const jobs = [];
|
|
250
|
-
for (const j of shard.getQueue(queue).values()) {
|
|
251
|
-
const isDelayed = j.runAt > now;
|
|
252
|
-
if (isDelayed && needDelayed) {
|
|
253
|
-
jobs.push(j);
|
|
254
|
-
}
|
|
255
|
-
else if (!isDelayed) {
|
|
256
|
-
// BullMQ v5: priority>0 → "prioritized", priority=0 → "waiting"
|
|
257
|
-
if (j.priority > 0 ? needPrioritized : needWaiting) {
|
|
258
|
-
jobs.push(j);
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
return jobs;
|
|
263
|
-
}
|
|
264
|
-
/** Collect jobs from in-memory structures by state filter */
|
|
265
|
-
function tagState(jobs, state) {
|
|
266
|
-
for (const j of jobs)
|
|
267
|
-
j._state = state;
|
|
268
|
-
return jobs;
|
|
269
|
-
}
|
|
270
|
-
/** Tag temporal jobs with their actual state based on runAt/priority */
|
|
271
|
-
function tagTemporalState(jobs, now = Date.now()) {
|
|
272
|
-
for (const j of jobs) {
|
|
273
|
-
const isDelayed = j.runAt > now;
|
|
274
|
-
j._state = isDelayed
|
|
275
|
-
? 'delayed'
|
|
276
|
-
: j.priority > 0
|
|
277
|
-
? 'prioritized'
|
|
278
|
-
: 'waiting';
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
/** Collect waiting-children jobs from deps and children maps */
|
|
282
|
-
function collectWaitingChildrenFromShard(shard, queue) {
|
|
283
|
-
const wcJobs = [];
|
|
284
|
-
for (const job of shard.waitingDeps.values()) {
|
|
285
|
-
if (job.queue === queue)
|
|
286
|
-
wcJobs.push(job);
|
|
287
|
-
}
|
|
288
|
-
for (const job of shard.waitingChildren.values()) {
|
|
289
|
-
if (job.queue === queue)
|
|
290
|
-
wcJobs.push(job);
|
|
291
|
-
}
|
|
292
|
-
return wcJobs;
|
|
293
|
-
}
|
|
294
|
-
/**
|
|
295
|
-
* Resolve which sources to collect for a state filter.
|
|
296
|
-
*
|
|
297
|
-
* When the queue is paused, an EXPLICIT waiting/prioritized query returns nothing:
|
|
298
|
-
* those jobs are reported under 'paused' instead (BullMQ semantics, #92). An
|
|
299
|
-
* unfiltered query (states === null) still lists them by their temporal state.
|
|
300
|
-
*/
|
|
301
|
-
function resolveStateNeeds(states, paused) {
|
|
302
|
-
const want = (s) => !states || states.includes(s);
|
|
303
|
-
const suppressReady = !!states && paused;
|
|
304
|
-
return {
|
|
305
|
-
waiting: want('waiting') && !suppressReady,
|
|
306
|
-
prioritized: want('prioritized') && !suppressReady,
|
|
307
|
-
delayed: want('delayed'),
|
|
308
|
-
paused: !!states && states.includes('paused') && paused,
|
|
309
|
-
active: want('active'),
|
|
310
|
-
failed: want('failed'),
|
|
311
|
-
completed: want('completed'),
|
|
312
|
-
waitingChildren: want('waiting-children'),
|
|
313
|
-
};
|
|
314
|
-
}
|
|
315
|
-
/** When paused, the queue's ready jobs (waiting + prioritized) ARE the paused set (#92). */
|
|
316
|
-
function collectPausedJobs(shard, queue, now) {
|
|
317
|
-
const pausedJobs = collectTemporalJobs(shard, queue, { waiting: true, prioritized: true, delayed: false }, now);
|
|
318
|
-
return tagState(pausedJobs, 'paused');
|
|
319
|
-
}
|
|
320
|
-
function collectJobsByState(queue, shardIdx, states, ctx, now = Date.now()) {
|
|
321
|
-
const shard = ctx.shards[shardIdx];
|
|
322
|
-
const jobs = [];
|
|
323
|
-
const need = resolveStateNeeds(states, shard.getState(queue).paused);
|
|
324
|
-
if (need.waiting || need.prioritized || need.delayed) {
|
|
325
|
-
const temporal = collectTemporalJobs(shard, queue, { waiting: need.waiting, prioritized: need.prioritized, delayed: need.delayed }, now);
|
|
326
|
-
tagTemporalState(temporal, now);
|
|
327
|
-
jobs.push(...temporal);
|
|
328
|
-
}
|
|
329
|
-
if (need.paused) {
|
|
330
|
-
jobs.push(...collectPausedJobs(shard, queue, now));
|
|
331
|
-
}
|
|
332
|
-
if (need.active) {
|
|
333
|
-
jobs.push(...tagState(collectActiveJobs(queue, shardIdx, ctx), 'active'));
|
|
334
|
-
}
|
|
335
|
-
if (need.failed) {
|
|
336
|
-
jobs.push(...tagState(shard.getDlq(queue), 'failed'));
|
|
337
|
-
}
|
|
338
|
-
if (need.completed) {
|
|
339
|
-
jobs.push(...tagState(collectCompletedJobs(queue, ctx), 'completed'));
|
|
340
|
-
}
|
|
341
|
-
if (need.waitingChildren) {
|
|
342
|
-
jobs.push(...tagState(collectWaitingChildrenFromShard(shard, queue), 'waiting-children'));
|
|
343
|
-
}
|
|
344
|
-
return jobs;
|
|
345
|
-
}
|
|
346
|
-
/** Collect waiting-children jobs from in-memory shard maps */
|
|
347
|
-
function collectWaitingChildrenJobs(shard, queue) {
|
|
348
|
-
const jobs = [];
|
|
349
|
-
for (const job of shard.waitingDeps.values()) {
|
|
350
|
-
if (job.queue === queue)
|
|
351
|
-
jobs.push(job);
|
|
352
|
-
}
|
|
353
|
-
for (const job of shard.waitingChildren.values()) {
|
|
354
|
-
if (job.queue === queue)
|
|
355
|
-
jobs.push(job);
|
|
356
|
-
}
|
|
357
|
-
return jobs;
|
|
358
|
-
}
|
|
359
|
-
/** Query SQLite after translating persisted pending rows to their logical state. */
|
|
360
|
-
function querySqliteByLogicalState(storage, queue, sqlFilteredStates, opts) {
|
|
361
|
-
if (opts.excludedIds.size === 0) {
|
|
362
|
-
return storage.queryJobsByLogicalStates(queue, sqlFilteredStates, opts);
|
|
363
|
-
}
|
|
364
|
-
// Legacy waitingDeps/waitingChildren rows may be persisted as waiting/delayed,
|
|
365
|
-
// while current inserts retain waiting-children. Fetch enough rows to account
|
|
366
|
-
// for every possible exclusion, then paginate the logical result so parked
|
|
367
|
-
// jobs cannot create short or shifted pages.
|
|
368
|
-
const pageEnd = opts.offset + opts.limit;
|
|
369
|
-
const jobs = storage.queryJobsByLogicalStates(queue, sqlFilteredStates, {
|
|
370
|
-
limit: pageEnd + opts.excludedIds.size,
|
|
371
|
-
offset: 0,
|
|
372
|
-
asc: opts.asc,
|
|
373
|
-
now: opts.now,
|
|
374
|
-
});
|
|
375
|
-
return jobs.filter((job) => !opts.excludedIds.has(job.id)).slice(opts.offset, pageEnd);
|
|
376
|
-
}
|
|
377
|
-
/** Merge SQL rows with in-memory extras (each gathered from index 0), sort by
|
|
378
|
-
* createdAt, and paginate [start, end) once — so offset-unaware extras don't
|
|
379
|
-
* duplicate or drop rows across pages (#92). */
|
|
380
|
-
function mergePage(sqlJobs, extras, start, end, asc) {
|
|
381
|
-
const byId = new Map();
|
|
382
|
-
for (const job of sqlJobs)
|
|
383
|
-
byId.set(job.id, job);
|
|
384
|
-
for (const job of extras)
|
|
385
|
-
byId.set(job.id, job);
|
|
386
|
-
const merged = Array.from(byId.values());
|
|
387
|
-
merged.sort((a, b) => compareJobsByCreatedAt(a, b, asc));
|
|
388
|
-
return merged.slice(start, end);
|
|
389
|
-
}
|
|
390
|
-
/** Get jobs from queue with filters */
|
|
391
|
-
export function getJobs(queue, shardIdx, options, ctx) {
|
|
392
|
-
const { state, start = 0, end = 100, asc = true } = options;
|
|
393
|
-
const states = !state
|
|
394
|
-
? null
|
|
395
|
-
: Array.isArray(state)
|
|
396
|
-
? state.length === 0
|
|
397
|
-
? null
|
|
398
|
-
: state
|
|
399
|
-
: [state];
|
|
400
|
-
const limit = end - start;
|
|
401
|
-
const now = Date.now();
|
|
402
|
-
if (ctx.storage) {
|
|
403
|
-
const shard = ctx.shards[shardIdx];
|
|
404
|
-
const isPaused = shard.getState(queue).paused;
|
|
405
|
-
// Derived sources are NOT offset-aware (the DLQ and the paused/waiting-children
|
|
406
|
-
// views come from in-memory maps). When any contributes, we must gather [0, end)
|
|
407
|
-
// from EVERY source, merge, sort, then slice [start, end) exactly once — pushing
|
|
408
|
-
// `offset` into the SQL query would drop rows and duplicate across pages (#92).
|
|
409
|
-
if (!states) {
|
|
410
|
-
const dlq = tagState(shard.getDlq(queue), 'failed');
|
|
411
|
-
if (dlq.length === 0) {
|
|
412
|
-
return ctx.storage.queryJobs(queue, { limit, offset: start, asc });
|
|
413
|
-
}
|
|
414
|
-
const all = ctx.storage.queryJobs(queue, { limit: end, offset: 0, asc });
|
|
415
|
-
return mergePage(all, dlq, start, end, asc);
|
|
416
|
-
}
|
|
417
|
-
// jobs-table states. A paused queue reports its waiting/prioritized jobs under
|
|
418
|
-
// 'paused', so they must not also surface in the waiting/prioritized lists (#92).
|
|
419
|
-
const sqlFilteredStates = states.filter((s) => s !== 'failed' &&
|
|
420
|
-
s !== 'waiting-children' &&
|
|
421
|
-
s !== 'paused' &&
|
|
422
|
-
!(isPaused && (s === 'waiting' || s === 'prioritized')));
|
|
423
|
-
// In-memory parked state is authoritative over the persisted row. Current
|
|
424
|
-
// inserts retain waiting-children; legacy rows may still be waiting/delayed,
|
|
425
|
-
// while parents moved after a pull can still be stored as active.
|
|
426
|
-
const parkedJobs = states.includes('waiting-children') || sqlFilteredStates.length > 0
|
|
427
|
-
? collectWaitingChildrenJobs(shard, queue)
|
|
428
|
-
: [];
|
|
429
|
-
const parkedIds = new Set(parkedJobs.map((job) => job.id));
|
|
430
|
-
// States with no jobs-table row are collected from in-memory sources:
|
|
431
|
-
// - 'failed' -> DLQ (the failed job lives in the dlq table) (#92)
|
|
432
|
-
// - 'waiting-children' -> deps/children maps
|
|
433
|
-
// - 'paused' -> when paused, the would-be-waiting jobs ARE the paused set (#92)
|
|
434
|
-
const extras = [];
|
|
435
|
-
if (states.includes('failed')) {
|
|
436
|
-
extras.push(...tagState(shard.getDlq(queue), 'failed'));
|
|
437
|
-
}
|
|
438
|
-
if (states.includes('waiting-children')) {
|
|
439
|
-
extras.push(...tagState(parkedJobs, 'waiting-children'));
|
|
440
|
-
}
|
|
441
|
-
if (states.includes('paused') && isPaused) {
|
|
442
|
-
const pausedJobs = collectTemporalJobs(shard, queue, { waiting: true, prioritized: true, delayed: false }, now);
|
|
443
|
-
extras.push(...tagState(pausedJobs, 'paused'));
|
|
444
|
-
}
|
|
445
|
-
// Fast path: only jobs-table states, no derived sources — SQL paginates directly.
|
|
446
|
-
if (extras.length === 0) {
|
|
447
|
-
return sqlFilteredStates.length > 0
|
|
448
|
-
? querySqliteByLogicalState(ctx.storage, queue, sqlFilteredStates, {
|
|
449
|
-
limit,
|
|
450
|
-
offset: start,
|
|
451
|
-
asc,
|
|
452
|
-
now,
|
|
453
|
-
excludedIds: parkedIds,
|
|
454
|
-
})
|
|
455
|
-
: [];
|
|
456
|
-
}
|
|
457
|
-
const sqlJobs = sqlFilteredStates.length > 0
|
|
458
|
-
? querySqliteByLogicalState(ctx.storage, queue, sqlFilteredStates, {
|
|
459
|
-
limit: end,
|
|
460
|
-
offset: 0,
|
|
461
|
-
asc,
|
|
462
|
-
now,
|
|
463
|
-
excludedIds: parkedIds,
|
|
464
|
-
})
|
|
465
|
-
: [];
|
|
466
|
-
return mergePage(sqlJobs, extras, start, end, asc);
|
|
467
|
-
}
|
|
468
|
-
// In-memory path (embedded mode only)
|
|
469
|
-
// Every source must be filtered before the global order is applied. Limiting
|
|
470
|
-
// an insertion-ordered Map here loses newer rows on descending pages.
|
|
471
|
-
const jobs = collectJobsByState(queue, shardIdx, states, ctx, now);
|
|
472
|
-
jobs.sort((a, b) => compareJobsByCreatedAt(a, b, asc));
|
|
473
|
-
return jobs.slice(start, end);
|
|
474
|
-
}
|
|
1
|
+
/** Stable query-operation import surface. */
|
|
2
|
+
export { getJob, getJobByCustomId, getJobProgress, getJobResult } from './query/jobLookup';
|
|
3
|
+
export { getJobs } from './query/pagination';
|
|
4
|
+
export { getJobState } from './query/state';
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { JobId } from '../../domain/types/job';
|
|
2
|
+
import { FailureReason } from '../../domain/types/dlq';
|
|
3
|
+
import type { AckBatchOutcome, AckOutcome, CompletionOptions } from '../types/ack';
|
|
4
|
+
import { QueueManagerDelivery } from './delivery';
|
|
5
|
+
export declare class QueueManagerAck extends QueueManagerDelivery {
|
|
6
|
+
ack(jobId: JobId, result?: unknown, token?: string, options?: CompletionOptions): Promise<AckOutcome>;
|
|
7
|
+
ackBatch(jobIds: JobId[], tokens?: string[]): Promise<AckBatchOutcome>;
|
|
8
|
+
ackBatchWithResults(items: Array<{
|
|
9
|
+
id: JobId;
|
|
10
|
+
result: unknown;
|
|
11
|
+
token?: string;
|
|
12
|
+
} & CompletionOptions>): Promise<AckBatchOutcome>;
|
|
13
|
+
fail(jobId: JobId, error?: string, token?: string, unrecoverable?: boolean, stack?: string[], removeOnFail?: boolean): Promise<AckOutcome>;
|
|
14
|
+
failWithReason(jobId: JobId, error: string | undefined, failureReason: FailureReason): Promise<AckOutcome>;
|
|
15
|
+
private isRetiredTimeoutOutcome;
|
|
16
|
+
private isRetiredOutcome;
|
|
17
|
+
private isQueuedTimeoutGeneration;
|
|
18
|
+
private ignoredOutcome;
|
|
19
|
+
private batchOutcome;
|
|
20
|
+
private missingJobError;
|
|
21
|
+
private retireTimedOutGeneration;
|
|
22
|
+
private failWithOptions;
|
|
23
|
+
}
|