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
|
@@ -1,905 +1,4 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
*/
|
|
5
|
-
import { EventEmitter } from 'events';
|
|
6
|
-
import { hostname } from 'os';
|
|
7
|
-
import { getSharedManager } from '../manager';
|
|
8
|
-
import { TcpConnectionPool } from '../tcpPool';
|
|
9
|
-
import { jobId } from '../../domain/types/job';
|
|
10
|
-
import { FORCE_EMBEDDED, WORKER_CONSTANTS } from './types';
|
|
11
|
-
import { AckBatcher } from './ackBatcher';
|
|
12
|
-
import { parseJobFromResponse } from './jobParser';
|
|
13
|
-
import { processJob } from './processor';
|
|
14
|
-
import { WorkerRateLimiter } from './workerRateLimiter';
|
|
15
|
-
import { GroupConcurrencyLimiter } from './groupConcurrency';
|
|
16
|
-
import { startHeartbeat, sendHeartbeat } from './workerHeartbeat';
|
|
17
|
-
import { pullEmbedded, pullTcp } from './workerPull';
|
|
18
|
-
import { resolveToken } from '../resolveToken';
|
|
19
|
-
/** Resolve WorkerOptions into ExtendedWorkerOptions with defaults */
|
|
20
|
-
function resolveWorkerOptions(opts, embedded) {
|
|
21
|
-
return {
|
|
22
|
-
concurrency: opts.concurrency ?? 1,
|
|
23
|
-
autorun: opts.autorun ?? true,
|
|
24
|
-
heartbeatInterval: opts.heartbeatInterval ?? 10000,
|
|
25
|
-
batchSize: Math.min(opts.batchSize ?? 10, 1000),
|
|
26
|
-
pollTimeout: Math.min(opts.pollTimeout ?? 0, WORKER_CONSTANTS.MAX_POLL_TIMEOUT),
|
|
27
|
-
embedded,
|
|
28
|
-
useLocks: opts.useLocks ?? true,
|
|
29
|
-
skipLockRenewal: opts.skipLockRenewal ?? false,
|
|
30
|
-
skipStalledCheck: opts.skipStalledCheck ?? false,
|
|
31
|
-
drainDelay: opts.drainDelay ?? 50,
|
|
32
|
-
lockDuration: opts.lockDuration ?? 30000,
|
|
33
|
-
maxStalledCount: opts.maxStalledCount ?? 1,
|
|
34
|
-
removeOnComplete: opts.removeOnComplete,
|
|
35
|
-
removeOnFail: opts.removeOnFail,
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
/** Create TCP connection pool from options */
|
|
39
|
-
function createTcpPool(opts, concurrency) {
|
|
40
|
-
const connOpts = opts.connection ?? {};
|
|
41
|
-
const poolSize = connOpts.poolSize ?? Math.min(concurrency, 8);
|
|
42
|
-
const token = resolveToken(connOpts.token);
|
|
43
|
-
return new TcpConnectionPool({
|
|
44
|
-
host: connOpts.host ?? 'localhost',
|
|
45
|
-
port: connOpts.port ?? 6789,
|
|
46
|
-
token,
|
|
47
|
-
tls: connOpts.tls,
|
|
48
|
-
poolSize,
|
|
49
|
-
pingInterval: connOpts.pingInterval,
|
|
50
|
-
commandTimeout: connOpts.commandTimeout,
|
|
51
|
-
maxCommandTimeouts: connOpts.maxCommandTimeouts,
|
|
52
|
-
pipelining: connOpts.pipelining,
|
|
53
|
-
maxInFlight: connOpts.maxInFlight,
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Worker class for processing jobs
|
|
58
|
-
*/
|
|
59
|
-
export class Worker extends EventEmitter {
|
|
60
|
-
name;
|
|
61
|
-
/**
|
|
62
|
-
* Server-side queue key. Equals `name` unless `prefixKey` is set, in which
|
|
63
|
-
* case it is `prefixKey + name`. All broker pulls/registrations route
|
|
64
|
-
* through this key so a Worker only sees jobs from its own namespace.
|
|
65
|
-
*/
|
|
66
|
-
queueKey;
|
|
67
|
-
opts;
|
|
68
|
-
processor;
|
|
69
|
-
embedded;
|
|
70
|
-
tcp;
|
|
71
|
-
tcpPool;
|
|
72
|
-
ackBatcher;
|
|
73
|
-
rateLimiter;
|
|
74
|
-
groupLimiter;
|
|
75
|
-
running = false;
|
|
76
|
-
paused = false;
|
|
77
|
-
_closing = false;
|
|
78
|
-
// Set when a force close is requested — allows close(true) to pre-empt an
|
|
79
|
-
// in-progress graceful close(false) by breaking out of its drain loop.
|
|
80
|
-
_forceClose = false;
|
|
81
|
-
_closingPromise = null;
|
|
82
|
-
closed = false;
|
|
83
|
-
activeJobs = 0;
|
|
84
|
-
pollTimer = null;
|
|
85
|
-
consecutiveErrors = 0;
|
|
86
|
-
// Heartbeat tracking with lock tokens (BullMQ-style ownership)
|
|
87
|
-
// Track ALL pulled jobs (both active and buffered) for heartbeat
|
|
88
|
-
activeJobIds = new Set();
|
|
89
|
-
pulledJobIds = new Set(); // All pulled jobs (for heartbeat)
|
|
90
|
-
jobTokens = new Map(); // jobId -> lockToken
|
|
91
|
-
cancelledJobs = new Set(); // Jobs marked for cancellation
|
|
92
|
-
heartbeatTimer = null;
|
|
93
|
-
// Worker registration tracking
|
|
94
|
-
workerHeartbeatTimer = null;
|
|
95
|
-
processedCount = 0;
|
|
96
|
-
failedCount = 0;
|
|
97
|
-
startedAt;
|
|
98
|
-
registered = false;
|
|
99
|
-
// Unique worker ID for lock ownership
|
|
100
|
-
workerId;
|
|
101
|
-
// Job buffer for batch pulls (with tokens)
|
|
102
|
-
pendingJobs = [];
|
|
103
|
-
pendingJobsHead = 0;
|
|
104
|
-
processingScheduled = false; // Prevent multiple setImmediate calls
|
|
105
|
-
// Slots reserved by in-flight doPullBatch() calls (Issue #98). Subtracted from
|
|
106
|
-
// free slots so overlapping pulls see each other and do not over-lease.
|
|
107
|
-
pendingPull = 0;
|
|
108
|
-
// Drained event tracking
|
|
109
|
-
lastDrainedEmit = 0;
|
|
110
|
-
// Stalled event subscription (BullMQ v5 compatible)
|
|
111
|
-
stalledUnsubscribe = null;
|
|
112
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
113
|
-
on(event, listener) {
|
|
114
|
-
return super.on(event, listener);
|
|
115
|
-
}
|
|
116
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
117
|
-
once(event, listener) {
|
|
118
|
-
return super.once(event, listener);
|
|
119
|
-
}
|
|
120
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
121
|
-
off(event, listener) {
|
|
122
|
-
return super.off(event, listener);
|
|
123
|
-
}
|
|
124
|
-
constructor(name, processor, opts = {}) {
|
|
125
|
-
super();
|
|
126
|
-
this.name = name;
|
|
127
|
-
this.queueKey = (opts.prefixKey ?? '') + name;
|
|
128
|
-
this.processor = processor;
|
|
129
|
-
this.embedded = opts.embedded ?? FORCE_EMBEDDED;
|
|
130
|
-
this.startedAt = Date.now();
|
|
131
|
-
this.workerId = `worker-${this.queueKey}-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
|
|
132
|
-
this.opts = resolveWorkerOptions(opts, this.embedded);
|
|
133
|
-
this.rateLimiter = new WorkerRateLimiter(opts.limiter?.groupKey ? null : (opts.limiter ?? null));
|
|
134
|
-
this.groupLimiter = GroupConcurrencyLimiter.fromOptions(opts.limiter);
|
|
135
|
-
this.ackBatcher = new AckBatcher({
|
|
136
|
-
batchSize: opts.batchSize ?? 10,
|
|
137
|
-
interval: WORKER_CONSTANTS.DEFAULT_ACK_INTERVAL,
|
|
138
|
-
embedded: this.embedded,
|
|
139
|
-
});
|
|
140
|
-
if (this.embedded) {
|
|
141
|
-
getSharedManager(opts.dataPath);
|
|
142
|
-
this.tcp = null;
|
|
143
|
-
this.tcpPool = null;
|
|
144
|
-
}
|
|
145
|
-
else {
|
|
146
|
-
this.tcpPool = createTcpPool(opts, this.opts.concurrency);
|
|
147
|
-
this.tcp = this.tcpPool;
|
|
148
|
-
this.ackBatcher.setTcp(this.tcp);
|
|
149
|
-
// The server drops worker registration when the registering connection
|
|
150
|
-
// closes, and each pooled reconnect gets a fresh server clientId. Re-send
|
|
151
|
-
// RegisterWorker on reconnect so the worker stays visible in
|
|
152
|
-
// WorkerManager (ListWorkers / getForQueue / skipIfNoWorker) while it
|
|
153
|
-
// keeps consuming jobs. Only acts once we were actually registered.
|
|
154
|
-
this.tcpPool.onReconnect(() => {
|
|
155
|
-
if (this.closed || this._closing || !this.registered)
|
|
156
|
-
return;
|
|
157
|
-
this.registered = false;
|
|
158
|
-
this.registerWithServer();
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
if (this.opts.autorun)
|
|
162
|
-
this.run();
|
|
163
|
-
}
|
|
164
|
-
/** Start processing */
|
|
165
|
-
run() {
|
|
166
|
-
if (this.running || this.closed)
|
|
167
|
-
return;
|
|
168
|
-
this.running = true;
|
|
169
|
-
this.paused = false;
|
|
170
|
-
this._closing = false;
|
|
171
|
-
this._forceClose = false;
|
|
172
|
-
this._closingPromise = null;
|
|
173
|
-
// Defer the 'ready' emit so listeners attached synchronously after
|
|
174
|
-
// construction (e.g. `new Worker(...).on('ready', ...)`) still receive it.
|
|
175
|
-
// run() is called from the constructor when autorun is true (the default),
|
|
176
|
-
// at which point chained or post-construction listeners haven't been
|
|
177
|
-
// registered yet. See issue #76.
|
|
178
|
-
queueMicrotask(() => {
|
|
179
|
-
if (!this.closed)
|
|
180
|
-
this.emit('ready');
|
|
181
|
-
});
|
|
182
|
-
// Subscribe to stalled events in embedded mode (BullMQ v5)
|
|
183
|
-
if (this.embedded && !this.stalledUnsubscribe && !this.opts.skipStalledCheck) {
|
|
184
|
-
this.subscribeToStalledEvents();
|
|
185
|
-
}
|
|
186
|
-
// Register worker with server (TCP only)
|
|
187
|
-
if (!this.embedded && this.tcp && !this.registered) {
|
|
188
|
-
this.registerWithServer();
|
|
189
|
-
}
|
|
190
|
-
if (this.opts.heartbeatInterval > 0 && !this.opts.skipLockRenewal) {
|
|
191
|
-
if (this.embedded) {
|
|
192
|
-
this.heartbeatTimer = setInterval(() => {
|
|
193
|
-
const manager = getSharedManager();
|
|
194
|
-
for (const id of this.pulledJobIds) {
|
|
195
|
-
manager.jobHeartbeat(jobId(id));
|
|
196
|
-
}
|
|
197
|
-
}, this.opts.heartbeatInterval);
|
|
198
|
-
}
|
|
199
|
-
else {
|
|
200
|
-
const deps = this.getHeartbeatDeps();
|
|
201
|
-
this.heartbeatTimer = startHeartbeat(deps, this.opts.heartbeatInterval);
|
|
202
|
-
// Worker-level heartbeat (separate from job heartbeat)
|
|
203
|
-
this.startWorkerHeartbeat();
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
this.poll();
|
|
207
|
-
}
|
|
208
|
-
/** Subscribe to stalled events from QueueManager (BullMQ v5 compatible) */
|
|
209
|
-
subscribeToStalledEvents() {
|
|
210
|
-
if (!this.embedded)
|
|
211
|
-
return;
|
|
212
|
-
const manager = getSharedManager();
|
|
213
|
-
this.stalledUnsubscribe = manager.subscribe((event) => {
|
|
214
|
-
// Events carry the prefixed server-side queue key, so we must compare
|
|
215
|
-
// against `queueKey` (not the logical `name`) to scope correctly.
|
|
216
|
-
if (event.queue !== this.queueKey)
|
|
217
|
-
return;
|
|
218
|
-
if (event.eventType === "stalled" /* EventType.Stalled */) {
|
|
219
|
-
this.emit('stalled', event.jobId, 'active');
|
|
220
|
-
}
|
|
221
|
-
});
|
|
222
|
-
}
|
|
223
|
-
/** Pause processing */
|
|
224
|
-
pause() {
|
|
225
|
-
if (!this.running)
|
|
226
|
-
return;
|
|
227
|
-
this.running = false;
|
|
228
|
-
this.paused = true;
|
|
229
|
-
if (this.pollTimer) {
|
|
230
|
-
clearTimeout(this.pollTimer);
|
|
231
|
-
this.pollTimer = null;
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
/** Resume processing */
|
|
235
|
-
resume() {
|
|
236
|
-
if (this.closed)
|
|
237
|
-
return;
|
|
238
|
-
this.paused = false;
|
|
239
|
-
this.run();
|
|
240
|
-
}
|
|
241
|
-
isRunning() {
|
|
242
|
-
return this.running;
|
|
243
|
-
}
|
|
244
|
-
isPaused() {
|
|
245
|
-
return this.paused && !this.closed;
|
|
246
|
-
}
|
|
247
|
-
isClosed() {
|
|
248
|
-
return this.closed;
|
|
249
|
-
}
|
|
250
|
-
/** Get current concurrency */
|
|
251
|
-
get concurrency() {
|
|
252
|
-
return this.opts.concurrency;
|
|
253
|
-
}
|
|
254
|
-
/** Set concurrency at runtime (BullMQ v5 compatible) */
|
|
255
|
-
set concurrency(val) {
|
|
256
|
-
const clamped = Math.max(1, val);
|
|
257
|
-
const prev = this.opts.concurrency;
|
|
258
|
-
this.opts.concurrency = clamped;
|
|
259
|
-
if (clamped > prev && this.running && !this._closing) {
|
|
260
|
-
this.poll();
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
/** Promise that resolves when close() finishes (BullMQ v5 compatible) */
|
|
264
|
-
get closing() {
|
|
265
|
-
return this._closingPromise;
|
|
266
|
-
}
|
|
267
|
-
async waitUntilReady() {
|
|
268
|
-
if (this.embedded)
|
|
269
|
-
return;
|
|
270
|
-
if (this.tcpPool) {
|
|
271
|
-
await this.tcpPool.send({ cmd: 'Ping' });
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
cancelJob(jobId, reason) {
|
|
275
|
-
if (this.activeJobIds.has(jobId)) {
|
|
276
|
-
this.cancelledJobs.add(jobId);
|
|
277
|
-
this.emit('cancelled', { jobId, reason: reason ?? 'Job cancelled by worker' });
|
|
278
|
-
return true;
|
|
279
|
-
}
|
|
280
|
-
return false;
|
|
281
|
-
}
|
|
282
|
-
cancelAllJobs(reason) {
|
|
283
|
-
for (const jobId of this.activeJobIds) {
|
|
284
|
-
this.cancelledJobs.add(jobId);
|
|
285
|
-
this.emit('cancelled', { jobId, reason: reason ?? 'All jobs cancelled' });
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
isJobCancelled(jobId) {
|
|
289
|
-
return this.cancelledJobs.has(jobId);
|
|
290
|
-
}
|
|
291
|
-
// ============ Rate Limiter (delegated) ============
|
|
292
|
-
getRateLimiterInfo() {
|
|
293
|
-
return this.rateLimiter.getRateLimiterInfo();
|
|
294
|
-
}
|
|
295
|
-
rateLimit(expireTimeMs) {
|
|
296
|
-
this.rateLimiter.rateLimit(expireTimeMs);
|
|
297
|
-
}
|
|
298
|
-
isRateLimited() {
|
|
299
|
-
return this.rateLimiter.isRateLimited();
|
|
300
|
-
}
|
|
301
|
-
// ============ BullMQ v5 Compatibility ============
|
|
302
|
-
async startStalledCheckTimer() {
|
|
303
|
-
// No-op for API compatibility - stall detection is automatic
|
|
304
|
-
}
|
|
305
|
-
async delay(milliseconds = 0, abortController) {
|
|
306
|
-
if (milliseconds <= 0)
|
|
307
|
-
return;
|
|
308
|
-
return new Promise((resolve, reject) => {
|
|
309
|
-
const timeout = setTimeout(resolve, milliseconds);
|
|
310
|
-
if (abortController) {
|
|
311
|
-
abortController.signal.addEventListener('abort', () => {
|
|
312
|
-
clearTimeout(timeout);
|
|
313
|
-
reject(new Error('Delay aborted'));
|
|
314
|
-
});
|
|
315
|
-
}
|
|
316
|
-
});
|
|
317
|
-
}
|
|
318
|
-
// ============ Manual Job Control ============
|
|
319
|
-
async getNextJob(token, _opts) {
|
|
320
|
-
if (this.closed)
|
|
321
|
-
return undefined;
|
|
322
|
-
if (this.embedded) {
|
|
323
|
-
const manager = getSharedManager();
|
|
324
|
-
if (this.opts.useLocks) {
|
|
325
|
-
// Forward the configured lock duration; without it pullWithLock falls
|
|
326
|
-
// back to the server default and a custom `lockDuration` is silently
|
|
327
|
-
// ignored on this manual-acquire path (same class as #111). The main
|
|
328
|
-
// run-loop path (workerPull.ts) already forwards it.
|
|
329
|
-
const { job, token: lockToken } = await manager.pullWithLock(this.queueKey, this.workerId, 0, this.opts.lockDuration);
|
|
330
|
-
if (job && lockToken) {
|
|
331
|
-
const jobIdStr = String(job.id);
|
|
332
|
-
this.pulledJobIds.add(jobIdStr);
|
|
333
|
-
this.jobTokens.set(jobIdStr, lockToken);
|
|
334
|
-
}
|
|
335
|
-
return job ?? undefined;
|
|
336
|
-
}
|
|
337
|
-
const job = await manager.pull(this.queueKey, 0);
|
|
338
|
-
if (job) {
|
|
339
|
-
this.pulledJobIds.add(String(job.id));
|
|
340
|
-
}
|
|
341
|
-
return job ?? undefined;
|
|
342
|
-
}
|
|
343
|
-
// TCP mode
|
|
344
|
-
if (!this.tcp)
|
|
345
|
-
return undefined;
|
|
346
|
-
const cmd = {
|
|
347
|
-
cmd: 'PULL',
|
|
348
|
-
queue: this.queueKey,
|
|
349
|
-
timeout: 0,
|
|
350
|
-
};
|
|
351
|
-
if (this.opts.useLocks) {
|
|
352
|
-
cmd.owner = this.workerId;
|
|
353
|
-
// Forward the configured lock TTL (mirrors workerPull.ts); otherwise the
|
|
354
|
-
// server applies its 30s default and a custom lockDuration is dropped.
|
|
355
|
-
if (this.opts.lockDuration !== undefined)
|
|
356
|
-
cmd.lockTtl = this.opts.lockDuration;
|
|
357
|
-
if (token)
|
|
358
|
-
cmd.token = token;
|
|
359
|
-
}
|
|
360
|
-
const response = await this.tcp.send(cmd);
|
|
361
|
-
if (!response.ok || !response.job)
|
|
362
|
-
return undefined;
|
|
363
|
-
const job = parseJobFromResponse(response.job, this.queueKey);
|
|
364
|
-
const jobIdStr = String(job.id);
|
|
365
|
-
this.pulledJobIds.add(jobIdStr);
|
|
366
|
-
if (this.opts.useLocks && response.token) {
|
|
367
|
-
this.jobTokens.set(jobIdStr, response.token);
|
|
368
|
-
}
|
|
369
|
-
return job;
|
|
370
|
-
}
|
|
371
|
-
async processJobManually(job, token, fetchNextCallback) {
|
|
372
|
-
if (this.closed)
|
|
373
|
-
return undefined;
|
|
374
|
-
const jobIdStr = String(job.id);
|
|
375
|
-
this.activeJobs++;
|
|
376
|
-
this.activeJobIds.add(jobIdStr);
|
|
377
|
-
this.pulledJobIds.add(jobIdStr);
|
|
378
|
-
if (this.opts.useLocks && token) {
|
|
379
|
-
this.jobTokens.set(jobIdStr, token);
|
|
380
|
-
}
|
|
381
|
-
try {
|
|
382
|
-
await processJob(job, {
|
|
383
|
-
name: this.queueKey,
|
|
384
|
-
processor: this.processor,
|
|
385
|
-
embedded: this.embedded,
|
|
386
|
-
tcp: this.tcp,
|
|
387
|
-
ackBatcher: this.ackBatcher,
|
|
388
|
-
emitter: this,
|
|
389
|
-
token: this.opts.useLocks ? token : undefined,
|
|
390
|
-
});
|
|
391
|
-
if (fetchNextCallback) {
|
|
392
|
-
return await fetchNextCallback();
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
finally {
|
|
396
|
-
this.activeJobs--;
|
|
397
|
-
this.activeJobIds.delete(jobIdStr);
|
|
398
|
-
this.pulledJobIds.delete(jobIdStr);
|
|
399
|
-
this.cancelledJobs.delete(jobIdStr);
|
|
400
|
-
if (this.opts.useLocks) {
|
|
401
|
-
this.jobTokens.delete(jobIdStr);
|
|
402
|
-
}
|
|
403
|
-
this.rateLimiter.recordJobForLimiter();
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
async extendJobLocks(jobIds, tokens, duration) {
|
|
407
|
-
if (this.closed || jobIds.length === 0)
|
|
408
|
-
return 0;
|
|
409
|
-
if (jobIds.length !== tokens.length) {
|
|
410
|
-
throw new Error('jobIds and tokens arrays must have the same length');
|
|
411
|
-
}
|
|
412
|
-
if (this.embedded) {
|
|
413
|
-
const manager = getSharedManager();
|
|
414
|
-
let extended = 0;
|
|
415
|
-
for (let i = 0; i < jobIds.length; i++) {
|
|
416
|
-
const success = await manager.extendLock(jobIds[i], tokens[i], duration);
|
|
417
|
-
if (success)
|
|
418
|
-
extended++;
|
|
419
|
-
}
|
|
420
|
-
return extended;
|
|
421
|
-
}
|
|
422
|
-
if (!this.tcp)
|
|
423
|
-
return 0;
|
|
424
|
-
const response = await this.tcp.send({
|
|
425
|
-
cmd: 'ExtendLocks',
|
|
426
|
-
ids: jobIds,
|
|
427
|
-
tokens,
|
|
428
|
-
// Protocol expects a per-id `durations` array, and the handler returns
|
|
429
|
-
// `count` (not `extended`). Sending `duration`/reading `extended` made
|
|
430
|
-
// batch lock renewal silently keep the old TTL.
|
|
431
|
-
durations: jobIds.map(() => duration),
|
|
432
|
-
});
|
|
433
|
-
const extended = response.count;
|
|
434
|
-
return extended ?? 0;
|
|
435
|
-
}
|
|
436
|
-
// ============ Lifecycle ============
|
|
437
|
-
async close(force = false) {
|
|
438
|
-
if (this.closed)
|
|
439
|
-
return;
|
|
440
|
-
// A force close must be able to pre-empt an in-progress graceful close:
|
|
441
|
-
// the graceful drain only waits on genuinely in-flight jobs, but a caller
|
|
442
|
-
// asking to force-close wants to stop waiting now. Flip the force flag so
|
|
443
|
-
// the running _doClose's drain loop exits, and return the same promise.
|
|
444
|
-
if (this._closingPromise) {
|
|
445
|
-
if (force)
|
|
446
|
-
this._forceClose = true;
|
|
447
|
-
return this._closingPromise;
|
|
448
|
-
}
|
|
449
|
-
this._forceClose = force;
|
|
450
|
-
this._closingPromise = this._doClose(force);
|
|
451
|
-
return this._closingPromise;
|
|
452
|
-
}
|
|
453
|
-
async _doClose(force) {
|
|
454
|
-
this._closing = true;
|
|
455
|
-
this.running = false;
|
|
456
|
-
this.paused = false;
|
|
457
|
-
if (this.pollTimer) {
|
|
458
|
-
clearTimeout(this.pollTimer);
|
|
459
|
-
this.pollTimer = null;
|
|
460
|
-
}
|
|
461
|
-
if (this.heartbeatTimer) {
|
|
462
|
-
clearInterval(this.heartbeatTimer);
|
|
463
|
-
this.heartbeatTimer = null;
|
|
464
|
-
}
|
|
465
|
-
if (this.workerHeartbeatTimer) {
|
|
466
|
-
clearInterval(this.workerHeartbeatTimer);
|
|
467
|
-
this.workerHeartbeatTimer = null;
|
|
468
|
-
}
|
|
469
|
-
// Release buffered pulled-but-unstarted jobs back to the queue. During
|
|
470
|
-
// _closing every code path that would advance the buffer (poll/tryProcess/
|
|
471
|
-
// the startJob().finally re-poll) early-returns, so a buffered job is never
|
|
472
|
-
// started — yet it holds a server-side lock and sits in `active` state.
|
|
473
|
-
// Without this, a graceful drain that waited on the buffer would hang
|
|
474
|
-
// forever (e.g. group-limited jobs buffered behind a max:1 limiter). We
|
|
475
|
-
// requeue them (Active -> Waiting) so they are re-pullable and not lost.
|
|
476
|
-
await this.releaseBufferedJobs();
|
|
477
|
-
if (!force) {
|
|
478
|
-
// Wait only on genuinely in-flight jobs. The buffer was released above,
|
|
479
|
-
// so it must NOT be part of the drain condition. A concurrent force
|
|
480
|
-
// close (this._forceClose) breaks out immediately.
|
|
481
|
-
while (this.activeJobs > 0 && !this._forceClose) {
|
|
482
|
-
await Bun.sleep(50);
|
|
483
|
-
}
|
|
484
|
-
}
|
|
485
|
-
await this.ackBatcher.flush();
|
|
486
|
-
await this.ackBatcher.waitForInFlight();
|
|
487
|
-
this.ackBatcher.stop();
|
|
488
|
-
// Unregister from server before closing connection
|
|
489
|
-
if (!this.embedded && this.tcp && this.registered) {
|
|
490
|
-
try {
|
|
491
|
-
await this.tcp.send({ cmd: 'UnregisterWorker', workerId: this.workerId });
|
|
492
|
-
}
|
|
493
|
-
catch {
|
|
494
|
-
// Best-effort unregister — server will cleanup via stale timeout
|
|
495
|
-
}
|
|
496
|
-
this.registered = false;
|
|
497
|
-
}
|
|
498
|
-
await Bun.sleep(100);
|
|
499
|
-
if (this.stalledUnsubscribe) {
|
|
500
|
-
this.stalledUnsubscribe();
|
|
501
|
-
this.stalledUnsubscribe = null;
|
|
502
|
-
}
|
|
503
|
-
this.activeJobIds.clear();
|
|
504
|
-
this.pulledJobIds.clear();
|
|
505
|
-
this.jobTokens.clear();
|
|
506
|
-
this.cancelledJobs.clear();
|
|
507
|
-
this.pendingJobs = [];
|
|
508
|
-
this.pendingJobsHead = 0;
|
|
509
|
-
if (this.groupLimiter)
|
|
510
|
-
this.groupLimiter.clear();
|
|
511
|
-
if (this.tcpPool)
|
|
512
|
-
this.tcpPool.close();
|
|
513
|
-
this.closed = true;
|
|
514
|
-
this._closing = false;
|
|
515
|
-
this.emit('closed');
|
|
516
|
-
}
|
|
517
|
-
/**
|
|
518
|
-
* Release all buffered (pulled-but-unstarted) jobs back to the queue on close.
|
|
519
|
-
* These jobs are `active` server-side holding a lock; moving them back to
|
|
520
|
-
* `waiting` makes them re-pullable so nothing is lost, and removes them from
|
|
521
|
-
* the close drain (which would otherwise hang on a buffer that can never be
|
|
522
|
-
* advanced while `_closing` is set). Best-effort: a job that can't be
|
|
523
|
-
* released (e.g. already completed/stall-retried) is simply dropped from the
|
|
524
|
-
* local buffer — its server-side lock will expire and requeue it.
|
|
525
|
-
*/
|
|
526
|
-
async releaseBufferedJobs() {
|
|
527
|
-
const buffered = this.pendingJobs.slice(this.pendingJobsHead);
|
|
528
|
-
this.pendingJobs = [];
|
|
529
|
-
this.pendingJobsHead = 0;
|
|
530
|
-
if (buffered.length === 0)
|
|
531
|
-
return;
|
|
532
|
-
for (const { job, token } of buffered) {
|
|
533
|
-
const id = String(job.id);
|
|
534
|
-
try {
|
|
535
|
-
if (this.embedded) {
|
|
536
|
-
const manager = getSharedManager();
|
|
537
|
-
await manager.moveActiveToWait(jobId(id));
|
|
538
|
-
// moveActiveToWait re-queues the job (active -> waiting); release the
|
|
539
|
-
// lock token we still hold so it is fully owner-free and re-pullable.
|
|
540
|
-
if (this.opts.useLocks)
|
|
541
|
-
manager.releaseLock(jobId(id), token ?? undefined);
|
|
542
|
-
}
|
|
543
|
-
else if (this.tcp) {
|
|
544
|
-
await this.tcp.send({ cmd: 'MoveToWait', id });
|
|
545
|
-
}
|
|
546
|
-
}
|
|
547
|
-
catch {
|
|
548
|
-
// Best-effort: lock expiration will requeue anything we couldn't release.
|
|
549
|
-
}
|
|
550
|
-
finally {
|
|
551
|
-
this.pulledJobIds.delete(id);
|
|
552
|
-
this.jobTokens.delete(id);
|
|
553
|
-
}
|
|
554
|
-
}
|
|
555
|
-
}
|
|
556
|
-
// ============ Processing Pipeline ============
|
|
557
|
-
poll() {
|
|
558
|
-
if (!this.running || this._closing)
|
|
559
|
-
return;
|
|
560
|
-
if (this.activeJobs >= this.opts.concurrency) {
|
|
561
|
-
this.pollTimer = setTimeout(() => {
|
|
562
|
-
this.poll();
|
|
563
|
-
}, 10);
|
|
564
|
-
return;
|
|
565
|
-
}
|
|
566
|
-
// Check rate limiter
|
|
567
|
-
if (!this.rateLimiter.canProcessWithinLimit()) {
|
|
568
|
-
const waitTime = this.rateLimiter.getTimeUntilNextSlot();
|
|
569
|
-
this.pollTimer = setTimeout(() => {
|
|
570
|
-
this.poll();
|
|
571
|
-
}, Math.max(waitTime, 10));
|
|
572
|
-
return;
|
|
573
|
-
}
|
|
574
|
-
void this.tryProcess();
|
|
575
|
-
}
|
|
576
|
-
async tryProcess() {
|
|
577
|
-
if (!this.running || this._closing)
|
|
578
|
-
return;
|
|
579
|
-
try {
|
|
580
|
-
let item = this.getNextEligibleJob();
|
|
581
|
-
if (!item) {
|
|
582
|
-
const items = await this.doPullBatch();
|
|
583
|
-
// Re-check state after async operation (can be modified during await)
|
|
584
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
585
|
-
if (!this.running || this._closing)
|
|
586
|
-
return;
|
|
587
|
-
if (items.length > 0) {
|
|
588
|
-
this.registerPulledJobs(items);
|
|
589
|
-
// Add all items to buffer, then find eligible one
|
|
590
|
-
if (this.pendingJobsHead >= this.pendingJobs.length) {
|
|
591
|
-
this.pendingJobs = items;
|
|
592
|
-
this.pendingJobsHead = 0;
|
|
593
|
-
}
|
|
594
|
-
else {
|
|
595
|
-
this.pendingJobs = this.pendingJobs.slice(this.pendingJobsHead).concat(items);
|
|
596
|
-
this.pendingJobsHead = 0;
|
|
597
|
-
}
|
|
598
|
-
item = this.getNextEligibleJob();
|
|
599
|
-
}
|
|
600
|
-
}
|
|
601
|
-
if (item) {
|
|
602
|
-
// Issue #96: re-check the concurrency gate before starting. poll()
|
|
603
|
-
// checked it, but `await doPullBatch()` above — or a setImmediate path
|
|
604
|
-
// that bypasses poll() — may have filled the slots since. This check is
|
|
605
|
-
// atomic with startJob()'s activeJobs++ (no await between here and the
|
|
606
|
-
// increment), so it cannot overshoot. If full, requeue the job (we still
|
|
607
|
-
// own it via pulledJobIds/jobTokens) and let a freed slot pick it up.
|
|
608
|
-
if (this.activeJobs >= this.opts.concurrency) {
|
|
609
|
-
this.requeueItem(item);
|
|
610
|
-
this.pollTimer = setTimeout(() => {
|
|
611
|
-
this.poll();
|
|
612
|
-
}, 10);
|
|
613
|
-
return;
|
|
614
|
-
}
|
|
615
|
-
this.consecutiveErrors = 0;
|
|
616
|
-
this.startJob(item.job, item.token);
|
|
617
|
-
}
|
|
618
|
-
else {
|
|
619
|
-
// Check if we have buffered jobs but all are group-limited
|
|
620
|
-
const hasBuffered = this.pendingJobsHead < this.pendingJobs.length;
|
|
621
|
-
if (hasBuffered && this.groupLimiter) {
|
|
622
|
-
// Retry shortly - a running job may finish and free a group slot
|
|
623
|
-
this.pollTimer = setTimeout(() => {
|
|
624
|
-
this.poll();
|
|
625
|
-
}, 10);
|
|
626
|
-
return;
|
|
627
|
-
}
|
|
628
|
-
const now = Date.now();
|
|
629
|
-
if (now - this.lastDrainedEmit > 1000) {
|
|
630
|
-
this.lastDrainedEmit = now;
|
|
631
|
-
this.emit('drained');
|
|
632
|
-
}
|
|
633
|
-
const waitTime = this.opts.pollTimeout > 0 ? 10 : this.opts.drainDelay;
|
|
634
|
-
this.pollTimer = setTimeout(() => {
|
|
635
|
-
this.poll();
|
|
636
|
-
}, waitTime);
|
|
637
|
-
}
|
|
638
|
-
}
|
|
639
|
-
catch (err) {
|
|
640
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
641
|
-
if (!this.running)
|
|
642
|
-
return;
|
|
643
|
-
this.handlePullError(err);
|
|
644
|
-
}
|
|
645
|
-
}
|
|
646
|
-
registerPulledJobs(items) {
|
|
647
|
-
for (const pulledItem of items) {
|
|
648
|
-
const jobIdStr = String(pulledItem.job.id);
|
|
649
|
-
this.pulledJobIds.add(jobIdStr);
|
|
650
|
-
if (this.opts.useLocks && pulledItem.token) {
|
|
651
|
-
this.jobTokens.set(jobIdStr, pulledItem.token);
|
|
652
|
-
}
|
|
653
|
-
}
|
|
654
|
-
// Renew the just-pulled locks immediately (fire-and-forget). With a pooled
|
|
655
|
-
// client (poolSize > 1), the PULL and subsequent heartbeats travel on
|
|
656
|
-
// different connections; the server only releases an in-flight job on
|
|
657
|
-
// connection drop if its lock was never renewed (renewalCount === 0). The
|
|
658
|
-
// periodic heartbeat timer does not fire until one interval later, leaving a
|
|
659
|
-
// window where a dropped pulling-socket would re-dispatch a job the worker
|
|
660
|
-
// is actively running. An immediate renew closes that window. Only needed
|
|
661
|
-
// for multi-connection lock-based workers (poolSize 1 keeps pull+heartbeat
|
|
662
|
-
// on the same socket, so there is nothing to protect against).
|
|
663
|
-
if (this.opts.useLocks && items.length > 0 && this.tcpPool && this.tcpPool.getPoolSize() > 1) {
|
|
664
|
-
void sendHeartbeat(this.getHeartbeatDeps());
|
|
665
|
-
}
|
|
666
|
-
}
|
|
667
|
-
getBufferedJob() {
|
|
668
|
-
if (this.pendingJobsHead >= this.pendingJobs.length)
|
|
669
|
-
return null;
|
|
670
|
-
const item = this.pendingJobs[this.pendingJobsHead++];
|
|
671
|
-
if (this.pendingJobsHead > 500 && this.pendingJobsHead >= this.pendingJobs.length / 2) {
|
|
672
|
-
this.pendingJobs = this.pendingJobs.slice(this.pendingJobsHead);
|
|
673
|
-
this.pendingJobsHead = 0;
|
|
674
|
-
}
|
|
675
|
-
return item;
|
|
676
|
-
}
|
|
677
|
-
/** Put an item back at the front of the pending buffer (Issue #96). */
|
|
678
|
-
requeueItem(item) {
|
|
679
|
-
if (this.pendingJobsHead > 0) {
|
|
680
|
-
this.pendingJobs[--this.pendingJobsHead] = item;
|
|
681
|
-
}
|
|
682
|
-
else {
|
|
683
|
-
this.pendingJobs.unshift(item);
|
|
684
|
-
}
|
|
685
|
-
}
|
|
686
|
-
/**
|
|
687
|
-
* Get the next buffered job eligible for processing.
|
|
688
|
-
* When group concurrency is enabled, skips jobs whose group is at capacity
|
|
689
|
-
* and leaves them in the buffer for later processing.
|
|
690
|
-
*/
|
|
691
|
-
getNextEligibleJob() {
|
|
692
|
-
if (this.pendingJobsHead >= this.pendingJobs.length)
|
|
693
|
-
return null;
|
|
694
|
-
// No group limiter - just return the next buffered job
|
|
695
|
-
if (!this.groupLimiter) {
|
|
696
|
-
return this.getBufferedJob();
|
|
697
|
-
}
|
|
698
|
-
// Scan buffer for a job whose group has capacity
|
|
699
|
-
const start = this.pendingJobsHead;
|
|
700
|
-
const end = this.pendingJobs.length;
|
|
701
|
-
for (let i = start; i < end; i++) {
|
|
702
|
-
const item = this.pendingJobs[i];
|
|
703
|
-
if (this.groupLimiter.canProcess(item.job)) {
|
|
704
|
-
// Remove this item from the buffer by swapping with the head
|
|
705
|
-
this.pendingJobs[i] = this.pendingJobs[this.pendingJobsHead];
|
|
706
|
-
this.pendingJobsHead++;
|
|
707
|
-
if (this.pendingJobsHead > 500 && this.pendingJobsHead >= this.pendingJobs.length / 2) {
|
|
708
|
-
this.pendingJobs = this.pendingJobs.slice(this.pendingJobsHead);
|
|
709
|
-
this.pendingJobsHead = 0;
|
|
710
|
-
}
|
|
711
|
-
return item;
|
|
712
|
-
}
|
|
713
|
-
}
|
|
714
|
-
return null;
|
|
715
|
-
}
|
|
716
|
-
async doPullBatch() {
|
|
717
|
-
// Issue #98: cap the LEASED count (running + buffered + in-flight pulls) at
|
|
718
|
-
// `concurrency`, not just the running count. The old `concurrency - activeJobs`
|
|
719
|
-
// was read once and the pull leases jobs on the broker across an await, so:
|
|
720
|
-
// 1. several concurrent finally->poll->tryProcess runs each read the same
|
|
721
|
-
// stale count and each pull a full batch, and
|
|
722
|
-
// 2. a job just pulled by one run sits in `pendingJobs` (leased, counted by
|
|
723
|
-
// the heartbeat) but not yet in `activeJobs`, so an overlapping pull does
|
|
724
|
-
// not see it.
|
|
725
|
-
// Both leak: with concurrency=3 the worker ends up holding 5-6 jobs leased.
|
|
726
|
-
// `pulledJobIds.size` is the true leased count (active + buffered; a job is
|
|
727
|
-
// removed only on completion), and `pendingPull` reserves slots for pulls
|
|
728
|
-
// still in flight whose jobs are not yet registered.
|
|
729
|
-
//
|
|
730
|
-
// Exception — group pull-ahead: when a group limiter is set AND the buffer is
|
|
731
|
-
// non-empty here (this branch is reached only after getNextEligibleJob() found
|
|
732
|
-
// nothing runnable, so those buffered jobs are group-blocked), the worker must
|
|
733
|
-
// pull ahead to discover jobs from other, runnable groups — otherwise it would
|
|
734
|
-
// wedge on a buffer full of one blocked group. In that case the blocked
|
|
735
|
-
// buffered jobs are not counted (only the running ones are). This preserves the
|
|
736
|
-
// existing group behavior; the reported over-pull (no group limiter) always
|
|
737
|
-
// uses the strict leased cap.
|
|
738
|
-
const groupBlockedBuffer = this.groupLimiter !== null && this.pendingJobsHead < this.pendingJobs.length;
|
|
739
|
-
const leased = groupBlockedBuffer ? this.activeJobs : this.pulledJobIds.size;
|
|
740
|
-
const slots = this.opts.concurrency - leased - this.pendingPull;
|
|
741
|
-
const batchSize = Math.min(this.opts.batchSize, slots, 1000);
|
|
742
|
-
if (batchSize <= 0)
|
|
743
|
-
return [];
|
|
744
|
-
const config = this.getPullConfig();
|
|
745
|
-
this.pendingPull += batchSize;
|
|
746
|
-
try {
|
|
747
|
-
return this.embedded
|
|
748
|
-
? await pullEmbedded(config, batchSize)
|
|
749
|
-
: await pullTcp(config, this.tcp, batchSize, this._closing);
|
|
750
|
-
}
|
|
751
|
-
finally {
|
|
752
|
-
// Release the reservation. The pulled jobs are now registered/buffered (or
|
|
753
|
-
// the pull failed); either way the reservation has served its purpose for
|
|
754
|
-
// the duration of the in-flight pull.
|
|
755
|
-
this.pendingPull -= batchSize;
|
|
756
|
-
}
|
|
757
|
-
}
|
|
758
|
-
startJob(job, token) {
|
|
759
|
-
const jobIdStr = String(job.id);
|
|
760
|
-
// Dedup: skip if this job is already being processed (Issue #33)
|
|
761
|
-
// This happens when stall detection retries a job while the worker
|
|
762
|
-
// is still processing it, and the worker's other concurrency slot
|
|
763
|
-
// pulls the retried job from the queue.
|
|
764
|
-
if (this.activeJobIds.has(jobIdStr)) {
|
|
765
|
-
return;
|
|
766
|
-
}
|
|
767
|
-
this.activeJobs++;
|
|
768
|
-
this.activeJobIds.add(jobIdStr);
|
|
769
|
-
// Apply worker-level removeOnComplete/removeOnFail defaults to the job
|
|
770
|
-
this.applyRemoveDefaults(job);
|
|
771
|
-
// Track group concurrency
|
|
772
|
-
if (this.groupLimiter) {
|
|
773
|
-
this.groupLimiter.increment(job);
|
|
774
|
-
}
|
|
775
|
-
if (this.opts.useLocks && token && !this.jobTokens.has(jobIdStr)) {
|
|
776
|
-
this.jobTokens.set(jobIdStr, token);
|
|
777
|
-
}
|
|
778
|
-
this.pulledJobIds.add(jobIdStr);
|
|
779
|
-
const tokenForProcess = this.opts.useLocks ? token : undefined;
|
|
780
|
-
void processJob(job, {
|
|
781
|
-
name: this.queueKey,
|
|
782
|
-
processor: this.processor,
|
|
783
|
-
embedded: this.embedded,
|
|
784
|
-
tcp: this.tcp,
|
|
785
|
-
ackBatcher: this.ackBatcher,
|
|
786
|
-
emitter: this,
|
|
787
|
-
token: tokenForProcess,
|
|
788
|
-
onOutcome: (ok) => {
|
|
789
|
-
if (ok)
|
|
790
|
-
this.processedCount++;
|
|
791
|
-
else
|
|
792
|
-
this.failedCount++;
|
|
793
|
-
},
|
|
794
|
-
}).finally(() => {
|
|
795
|
-
this.activeJobs--;
|
|
796
|
-
this.activeJobIds.delete(jobIdStr);
|
|
797
|
-
this.pulledJobIds.delete(jobIdStr);
|
|
798
|
-
this.cancelledJobs.delete(jobIdStr);
|
|
799
|
-
if (this.opts.useLocks) {
|
|
800
|
-
this.jobTokens.delete(jobIdStr);
|
|
801
|
-
}
|
|
802
|
-
// Release group concurrency slot
|
|
803
|
-
if (this.groupLimiter) {
|
|
804
|
-
this.groupLimiter.decrement(job);
|
|
805
|
-
}
|
|
806
|
-
this.rateLimiter.recordJobForLimiter();
|
|
807
|
-
if (this.running && !this._closing)
|
|
808
|
-
this.poll();
|
|
809
|
-
});
|
|
810
|
-
if (this.activeJobs < this.opts.concurrency && !this._closing && !this.processingScheduled) {
|
|
811
|
-
this.processingScheduled = true;
|
|
812
|
-
setImmediate(() => {
|
|
813
|
-
this.processingScheduled = false;
|
|
814
|
-
void this.tryProcess();
|
|
815
|
-
});
|
|
816
|
-
}
|
|
817
|
-
}
|
|
818
|
-
handlePullError(err) {
|
|
819
|
-
this.consecutiveErrors++;
|
|
820
|
-
const error = err instanceof Error ? err : new Error(String(err));
|
|
821
|
-
this.emit('error', Object.assign(error, {
|
|
822
|
-
queue: this.name,
|
|
823
|
-
consecutiveErrors: this.consecutiveErrors,
|
|
824
|
-
context: 'pull',
|
|
825
|
-
}));
|
|
826
|
-
const backoffMs = Math.min(WORKER_CONSTANTS.BASE_BACKOFF_MS * Math.pow(2, this.consecutiveErrors - 1), WORKER_CONSTANTS.MAX_BACKOFF_MS);
|
|
827
|
-
this.pollTimer = setTimeout(() => {
|
|
828
|
-
this.poll();
|
|
829
|
-
}, backoffMs);
|
|
830
|
-
}
|
|
831
|
-
// ============ Private Helpers ============
|
|
832
|
-
/** Register this worker with the server (TCP only, fire-and-forget) */
|
|
833
|
-
registerWithServer() {
|
|
834
|
-
if (!this.tcp || this.registered)
|
|
835
|
-
return;
|
|
836
|
-
void this.tcp
|
|
837
|
-
.send({
|
|
838
|
-
cmd: 'RegisterWorker',
|
|
839
|
-
name: this.queueKey,
|
|
840
|
-
queues: [this.queueKey],
|
|
841
|
-
concurrency: this.opts.concurrency,
|
|
842
|
-
workerId: this.workerId,
|
|
843
|
-
hostname: hostname(),
|
|
844
|
-
pid: process.pid,
|
|
845
|
-
startedAt: this.startedAt,
|
|
846
|
-
})
|
|
847
|
-
.then(() => {
|
|
848
|
-
this.registered = true;
|
|
849
|
-
})
|
|
850
|
-
.catch((err) => {
|
|
851
|
-
const error = err instanceof Error ? err : new Error(String(err));
|
|
852
|
-
this.emit('error', Object.assign(error, { context: 'worker-register' }));
|
|
853
|
-
});
|
|
854
|
-
}
|
|
855
|
-
/** Start periodic worker-level heartbeat (separate from job heartbeat) */
|
|
856
|
-
startWorkerHeartbeat() {
|
|
857
|
-
if (this.workerHeartbeatTimer || !this.tcp)
|
|
858
|
-
return;
|
|
859
|
-
this.workerHeartbeatTimer = setInterval(() => {
|
|
860
|
-
if (!this.tcp || !this.registered)
|
|
861
|
-
return;
|
|
862
|
-
void this.tcp
|
|
863
|
-
.send({
|
|
864
|
-
cmd: 'Heartbeat',
|
|
865
|
-
id: this.workerId,
|
|
866
|
-
activeJobs: this.activeJobs,
|
|
867
|
-
processed: this.processedCount,
|
|
868
|
-
failed: this.failedCount,
|
|
869
|
-
})
|
|
870
|
-
.catch((err) => {
|
|
871
|
-
const error = err instanceof Error ? err : new Error(String(err));
|
|
872
|
-
this.emit('error', Object.assign(error, { context: 'worker-heartbeat' }));
|
|
873
|
-
});
|
|
874
|
-
}, this.opts.heartbeatInterval);
|
|
875
|
-
}
|
|
876
|
-
getHeartbeatDeps() {
|
|
877
|
-
return {
|
|
878
|
-
pulledJobIds: this.pulledJobIds,
|
|
879
|
-
jobTokens: this.jobTokens,
|
|
880
|
-
tcp: this.tcp,
|
|
881
|
-
useLocks: this.opts.useLocks,
|
|
882
|
-
emitter: this,
|
|
883
|
-
};
|
|
884
|
-
}
|
|
885
|
-
getPullConfig() {
|
|
886
|
-
return {
|
|
887
|
-
name: this.queueKey,
|
|
888
|
-
workerId: this.workerId,
|
|
889
|
-
useLocks: this.opts.useLocks,
|
|
890
|
-
pollTimeout: this.opts.pollTimeout,
|
|
891
|
-
lockDuration: this.opts.lockDuration,
|
|
892
|
-
};
|
|
893
|
-
}
|
|
894
|
-
/** Apply worker-level removeOnComplete/removeOnFail defaults to a job */
|
|
895
|
-
applyRemoveDefaults(job) {
|
|
896
|
-
if (this.opts.removeOnComplete !== undefined && !job.removeOnComplete) {
|
|
897
|
-
const val = this.opts.removeOnComplete;
|
|
898
|
-
job.removeOnComplete = val === true;
|
|
899
|
-
}
|
|
900
|
-
if (this.opts.removeOnFail !== undefined && !job.removeOnFail) {
|
|
901
|
-
const val = this.opts.removeOnFail;
|
|
902
|
-
job.removeOnFail = val === true;
|
|
903
|
-
}
|
|
904
|
-
}
|
|
1
|
+
/** Public Worker façade. Runtime implementation lives in worker/runtime/. */
|
|
2
|
+
import { WorkerExecution } from './runtime/execution';
|
|
3
|
+
export class Worker extends WorkerExecution {
|
|
905
4
|
}
|