bunqueue 2.8.54 → 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 -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/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/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/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 +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/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 +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
|
@@ -1,315 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
*/
|
|
5
|
-
import { readFileSync } from 'node:fs';
|
|
6
|
-
import { FrameParser, FrameSizeError } from '../../infrastructure/server/protocol';
|
|
7
|
-
/**
|
|
8
|
-
* Map client TLS options to the `tls` value accepted by Bun.connect.
|
|
9
|
-
* Returns undefined when TLS is disabled (plaintext, the default).
|
|
10
|
-
*
|
|
11
|
-
* The CA is read into bytes (not passed as a `Bun.file` handle): Bun computes
|
|
12
|
-
* the peer's `authorizationError` from this `ca`, and we enforce it in the
|
|
13
|
-
* `handshake` handler (see `tlsRequiresVerification` / #109) — Bun.connect
|
|
14
|
-
* itself never rejects an unauthorized peer on the client side.
|
|
15
|
-
*/
|
|
16
|
-
export function buildClientTls(tls) {
|
|
17
|
-
if (!tls)
|
|
18
|
-
return undefined;
|
|
19
|
-
if (tls === true)
|
|
20
|
-
return true;
|
|
21
|
-
return {
|
|
22
|
-
...(tls.rejectUnauthorized !== undefined && { rejectUnauthorized: tls.rejectUnauthorized }),
|
|
23
|
-
...(tls.caFile !== undefined && { ca: readFileSync(tls.caFile) }),
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Whether the caller asked us to authenticate the server certificate.
|
|
28
|
-
* Verification is the default for any TLS connection; only an explicit
|
|
29
|
-
* `rejectUnauthorized: false` opts out (encryption-only). #109
|
|
30
|
-
*/
|
|
31
|
-
export function tlsRequiresVerification(tls) {
|
|
32
|
-
if (!tls)
|
|
33
|
-
return false;
|
|
34
|
-
if (tls === true)
|
|
35
|
-
return true;
|
|
36
|
-
return tls.rejectUnauthorized !== false;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Establish TCP connection to server
|
|
40
|
-
*/
|
|
41
|
-
export async function createConnection(target, connectTimeout, events) {
|
|
42
|
-
return new Promise((resolve, reject) => {
|
|
43
|
-
const socketData = {
|
|
44
|
-
write: () => { },
|
|
45
|
-
end: () => { },
|
|
46
|
-
frameParser: new FrameParser(),
|
|
47
|
-
};
|
|
48
|
-
let connectionResolved = false;
|
|
49
|
-
let timeoutId = null;
|
|
50
|
-
// TLS server-certificate verification. Bun.connect never rejects an
|
|
51
|
-
// unauthorized peer on the client side, but it DOES compute the peer's
|
|
52
|
-
// authorizationError and hand it to the `handshake` callback — so we gate
|
|
53
|
-
// the connection on it ourselves. #109
|
|
54
|
-
//
|
|
55
|
-
// Crucially, once a `handshake` handler is registered, Bun fires `open`
|
|
56
|
-
// BEFORE the TLS handshake completes (without it, `open` fires only after).
|
|
57
|
-
// So for EVERY TLS connection we must resolve on `handshake`, not `open` —
|
|
58
|
-
// otherwise the pool writes its first command onto a socket whose handshake
|
|
59
|
-
// is still in flight and the bytes are lost. Plaintext has no handshake
|
|
60
|
-
// event, so it still resolves in `open`.
|
|
61
|
-
const tlsValue = buildClientTls(target.tls);
|
|
62
|
-
const isTls = tlsValue !== undefined;
|
|
63
|
-
const verifyTls = tlsRequiresVerification(target.tls);
|
|
64
|
-
let opened = false;
|
|
65
|
-
let handshakeOk = !isTls; // plaintext: nothing to wait for; TLS: wait for handshake
|
|
66
|
-
const maybeResolveOpen = () => {
|
|
67
|
-
if (opened && handshakeOk && !connectionResolved) {
|
|
68
|
-
connectionResolved = true;
|
|
69
|
-
// Clear the connect timeout only now that we are actually resolving.
|
|
70
|
-
// For TLS, `open` fires BEFORE `handshake`, so clearing the timeout in
|
|
71
|
-
// `open` would leave the handshake phase unbounded — a stalled/malicious
|
|
72
|
-
// peer that completes TCP but never drives the TLS handshake (no error,
|
|
73
|
-
// no close) would hang this promise forever. Keeping the timeout armed
|
|
74
|
-
// until resolve preserves connectTimeout as a bound over the handshake.
|
|
75
|
-
cleanup();
|
|
76
|
-
resolve({ socket: socketData, cleanup });
|
|
77
|
-
}
|
|
78
|
-
};
|
|
79
|
-
const cleanup = () => {
|
|
80
|
-
if (timeoutId) {
|
|
81
|
-
clearTimeout(timeoutId);
|
|
82
|
-
timeoutId = null;
|
|
83
|
-
}
|
|
84
|
-
};
|
|
85
|
-
const targetDesc = `${target.host}:${target.port}`;
|
|
86
|
-
// Socket handlers
|
|
87
|
-
const socketHandlers = {
|
|
88
|
-
data(_sock, data) {
|
|
89
|
-
let frames;
|
|
90
|
-
try {
|
|
91
|
-
// `data` (Bun Buffer) is copied into addData's own buffer synchronously
|
|
92
|
-
// and never retained, so the `new Uint8Array(data)` wrapper was a
|
|
93
|
-
// redundant full copy per read on the client response path.
|
|
94
|
-
frames = socketData.frameParser.addData(data);
|
|
95
|
-
}
|
|
96
|
-
catch (err) {
|
|
97
|
-
if (err instanceof FrameSizeError) {
|
|
98
|
-
events.onError(new Error(`Frame too large: ${err.requestedSize} bytes exceeds maximum ${err.maxSize}`));
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
throw err;
|
|
102
|
-
}
|
|
103
|
-
for (const frame of frames) {
|
|
104
|
-
events.onData(frame);
|
|
105
|
-
}
|
|
106
|
-
},
|
|
107
|
-
open(sock) {
|
|
108
|
-
// NB: do NOT clear the connect timeout here. For TLS, `open` precedes
|
|
109
|
-
// `handshake`; the timeout must stay armed until `maybeResolveOpen`
|
|
110
|
-
// actually resolves (or a stalled handshake could hang forever). #109
|
|
111
|
-
// Enable TCP keepalive so the OS probes idle connections and surfaces a
|
|
112
|
-
// dead peer (suspended host, NAT/LB drop) via an error/close event,
|
|
113
|
-
// instead of a half-open socket lingering until tcp_retries2 (~15 min).
|
|
114
|
-
// Best-effort: not all platforms honor the delay, and older Bun builds
|
|
115
|
-
// may lack the method — never let it abort connection setup. See #94.
|
|
116
|
-
try {
|
|
117
|
-
sock.setKeepAlive?.(true, 15000);
|
|
118
|
-
}
|
|
119
|
-
catch {
|
|
120
|
-
/* keepalive unsupported on this platform/runtime */
|
|
121
|
-
}
|
|
122
|
-
socketData.write = (d) => sock.write(d);
|
|
123
|
-
socketData.end = () => sock.end();
|
|
124
|
-
opened = true;
|
|
125
|
-
maybeResolveOpen();
|
|
126
|
-
},
|
|
127
|
-
handshake(sock, success, authorizationError) {
|
|
128
|
-
// Fires only for TLS. When verification is required, a failed handshake
|
|
129
|
-
// or any authorizationError (wrong/absent CA, self-signed, host
|
|
130
|
-
// mismatch) must abort — otherwise TLS is encryption-only and an active
|
|
131
|
-
// MITM can impersonate the broker and harvest the auth token. #109
|
|
132
|
-
if (verifyTls && (!success || authorizationError)) {
|
|
133
|
-
if (!connectionResolved) {
|
|
134
|
-
connectionResolved = true;
|
|
135
|
-
cleanup();
|
|
136
|
-
const why = authorizationError?.message ?? 'handshake failed';
|
|
137
|
-
reject(new Error(`TLS verification failed for ${targetDesc}: ${why}`));
|
|
138
|
-
}
|
|
139
|
-
try {
|
|
140
|
-
sock.end();
|
|
141
|
-
}
|
|
142
|
-
catch {
|
|
143
|
-
/* already closing */
|
|
144
|
-
}
|
|
145
|
-
return;
|
|
146
|
-
}
|
|
147
|
-
handshakeOk = true;
|
|
148
|
-
maybeResolveOpen();
|
|
149
|
-
},
|
|
150
|
-
close() {
|
|
151
|
-
if (!connectionResolved) {
|
|
152
|
-
connectionResolved = true;
|
|
153
|
-
cleanup();
|
|
154
|
-
reject(new Error('Connection closed'));
|
|
155
|
-
}
|
|
156
|
-
events.onClose();
|
|
157
|
-
},
|
|
158
|
-
error(_sock, error) {
|
|
159
|
-
if (!connectionResolved) {
|
|
160
|
-
connectionResolved = true;
|
|
161
|
-
cleanup();
|
|
162
|
-
reject(new Error(`Connection error: ${error.message}`));
|
|
163
|
-
}
|
|
164
|
-
events.onError(error);
|
|
165
|
-
},
|
|
166
|
-
connectError(_sock, error) {
|
|
167
|
-
if (!connectionResolved) {
|
|
168
|
-
connectionResolved = true;
|
|
169
|
-
cleanup();
|
|
170
|
-
reject(new Error(`Failed to connect to ${targetDesc}: ${error.message}`));
|
|
171
|
-
}
|
|
172
|
-
},
|
|
173
|
-
};
|
|
174
|
-
// Connect via TCP (optionally wrapped in TLS — protocol is unchanged).
|
|
175
|
-
// `tlsValue`/`isTls` were computed above to drive handshake-gated resolve.
|
|
176
|
-
void Bun.connect({
|
|
177
|
-
hostname: target.host ?? 'localhost',
|
|
178
|
-
port: target.port ?? 6789,
|
|
179
|
-
...(tlsValue !== undefined && { tls: tlsValue }),
|
|
180
|
-
socket: socketHandlers,
|
|
181
|
-
}).catch((error) => {
|
|
182
|
-
// Bun.connect rejects (instead of firing connectError) for some failure
|
|
183
|
-
// modes, e.g. a TLS handshake refused synchronously. Route it through the
|
|
184
|
-
// same rejection path so callers never hang until the connect timeout.
|
|
185
|
-
if (!connectionResolved) {
|
|
186
|
-
connectionResolved = true;
|
|
187
|
-
cleanup();
|
|
188
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
189
|
-
reject(new Error(`Failed to connect to ${targetDesc}: ${message}`));
|
|
190
|
-
}
|
|
191
|
-
});
|
|
192
|
-
timeoutId = setTimeout(() => {
|
|
193
|
-
if (!connectionResolved) {
|
|
194
|
-
connectionResolved = true;
|
|
195
|
-
reject(new Error(`Connection timeout to ${targetDesc}`));
|
|
196
|
-
}
|
|
197
|
-
}, connectTimeout);
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
/**
|
|
201
|
-
* Command queue for managing pending commands
|
|
202
|
-
* Supports both legacy single-command mode and pipelining mode with reqId tracking
|
|
203
|
-
*/
|
|
204
|
-
export class CommandQueue {
|
|
205
|
-
pendingCommands = new Map();
|
|
206
|
-
pendingQueue = [];
|
|
207
|
-
currentCommand = null;
|
|
208
|
-
commandIdCounter = 0;
|
|
209
|
-
/** In-flight commands tracked by reqId for pipelining */
|
|
210
|
-
inFlightByReqId = new Map();
|
|
211
|
-
/** Get current command being processed (legacy mode) */
|
|
212
|
-
getCurrentCommand() {
|
|
213
|
-
return this.currentCommand;
|
|
214
|
-
}
|
|
215
|
-
/** Set current command (legacy mode) */
|
|
216
|
-
setCurrentCommand(cmd) {
|
|
217
|
-
this.currentCommand = cmd;
|
|
218
|
-
}
|
|
219
|
-
/** Check if has pending commands in queue */
|
|
220
|
-
hasPending() {
|
|
221
|
-
return this.pendingCommands.size > 0;
|
|
222
|
-
}
|
|
223
|
-
/** Get number of in-flight commands */
|
|
224
|
-
getInFlightCount() {
|
|
225
|
-
return this.inFlightByReqId.size;
|
|
226
|
-
}
|
|
227
|
-
/** Check if can send more commands (pipelining backpressure) */
|
|
228
|
-
canSendMore(maxInFlight) {
|
|
229
|
-
return this.inFlightByReqId.size < maxInFlight;
|
|
230
|
-
}
|
|
231
|
-
/** Add command to in-flight tracking by reqId */
|
|
232
|
-
addInFlight(command) {
|
|
233
|
-
this.inFlightByReqId.set(command.reqId, command);
|
|
234
|
-
}
|
|
235
|
-
/** Get in-flight command by reqId */
|
|
236
|
-
getByReqId(reqId) {
|
|
237
|
-
return this.inFlightByReqId.get(reqId);
|
|
238
|
-
}
|
|
239
|
-
/** Remove in-flight command by reqId */
|
|
240
|
-
removeByReqId(reqId) {
|
|
241
|
-
const cmd = this.inFlightByReqId.get(reqId);
|
|
242
|
-
if (cmd) {
|
|
243
|
-
this.inFlightByReqId.delete(reqId);
|
|
244
|
-
}
|
|
245
|
-
return cmd;
|
|
246
|
-
}
|
|
247
|
-
/** Add command to queue */
|
|
248
|
-
enqueue(command) {
|
|
249
|
-
this.pendingCommands.set(command.id, command);
|
|
250
|
-
this.pendingQueue.push(command.id);
|
|
251
|
-
}
|
|
252
|
-
/** Get next command ID */
|
|
253
|
-
nextId() {
|
|
254
|
-
return ++this.commandIdCounter;
|
|
255
|
-
}
|
|
256
|
-
/** Dequeue next command */
|
|
257
|
-
dequeue() {
|
|
258
|
-
const nextId = this.pendingQueue.shift();
|
|
259
|
-
if (nextId === undefined)
|
|
260
|
-
return null;
|
|
261
|
-
const next = this.pendingCommands.get(nextId);
|
|
262
|
-
if (!next)
|
|
263
|
-
return null;
|
|
264
|
-
this.pendingCommands.delete(nextId);
|
|
265
|
-
return next;
|
|
266
|
-
}
|
|
267
|
-
/** Remove command by ID */
|
|
268
|
-
remove(id) {
|
|
269
|
-
if (!this.pendingCommands.has(id))
|
|
270
|
-
return false;
|
|
271
|
-
this.pendingCommands.delete(id);
|
|
272
|
-
const queueIdx = this.pendingQueue.indexOf(id);
|
|
273
|
-
if (queueIdx !== -1) {
|
|
274
|
-
this.pendingQueue.splice(queueIdx, 1);
|
|
275
|
-
}
|
|
276
|
-
return true;
|
|
277
|
-
}
|
|
278
|
-
/** Reject all pending and in-flight commands */
|
|
279
|
-
rejectAll(error) {
|
|
280
|
-
// Reject queued commands. Attach a silent .catch BEFORE rejecting so that
|
|
281
|
-
// callers without a .catch in place (fire-and-forget heartbeats, polling
|
|
282
|
-
// loops mid-await on intentional close) don't surface as unhandled
|
|
283
|
-
// rejections and force non-zero process exit.
|
|
284
|
-
for (const cmd of this.pendingCommands.values()) {
|
|
285
|
-
clearTimeout(cmd.timeout);
|
|
286
|
-
cmd.promise?.catch(() => { });
|
|
287
|
-
cmd.reject(error);
|
|
288
|
-
}
|
|
289
|
-
this.pendingCommands.clear();
|
|
290
|
-
this.pendingQueue = [];
|
|
291
|
-
// Reject in-flight commands (pipelining)
|
|
292
|
-
for (const cmd of this.inFlightByReqId.values()) {
|
|
293
|
-
clearTimeout(cmd.timeout);
|
|
294
|
-
cmd.promise?.catch(() => { });
|
|
295
|
-
cmd.reject(error);
|
|
296
|
-
}
|
|
297
|
-
this.inFlightByReqId.clear();
|
|
298
|
-
// Reject current command (legacy)
|
|
299
|
-
if (this.currentCommand) {
|
|
300
|
-
clearTimeout(this.currentCommand.timeout);
|
|
301
|
-
this.currentCommand.reject(error);
|
|
302
|
-
this.currentCommand = null;
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
/** Clear current command with optional rejection (legacy mode) */
|
|
306
|
-
clearCurrent(error) {
|
|
307
|
-
if (this.currentCommand) {
|
|
308
|
-
clearTimeout(this.currentCommand.timeout);
|
|
309
|
-
if (error) {
|
|
310
|
-
this.currentCommand.reject(error);
|
|
311
|
-
}
|
|
312
|
-
this.currentCommand = null;
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
}
|
|
1
|
+
/** Stable low-level TCP connection import surface. */
|
|
2
|
+
export { CommandQueue } from './commandQueue';
|
|
3
|
+
export { buildClientTls, createConnection, tlsRequiresVerification, } from './transport';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Synthetic rejection issued when a client closes with commands pending. */
|
|
2
|
+
export declare class ClientClosedError extends Error {
|
|
3
|
+
constructor(message?: string);
|
|
4
|
+
}
|
|
5
|
+
/** Install the one-time process filter for synthetic close rejections. */
|
|
6
|
+
export declare function installClientClosedFilter(): void;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Synthetic rejection issued when a client closes with commands pending. */
|
|
2
|
+
export class ClientClosedError extends Error {
|
|
3
|
+
constructor(message = 'Client closed') {
|
|
4
|
+
super(message);
|
|
5
|
+
this.name = 'ClientClosedError';
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
let clientClosedFilterInstalled = false;
|
|
9
|
+
/** Install the one-time process filter for synthetic close rejections. */
|
|
10
|
+
export function installClientClosedFilter() {
|
|
11
|
+
if (clientClosedFilterInstalled)
|
|
12
|
+
return;
|
|
13
|
+
clientClosedFilterInstalled = true;
|
|
14
|
+
process.on('unhandledRejection', (reason) => {
|
|
15
|
+
if (reason instanceof ClientClosedError)
|
|
16
|
+
return;
|
|
17
|
+
});
|
|
18
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { HelloResponse } from '../../../domain/types/response';
|
|
2
|
+
import { TcpClientHealth } from './health';
|
|
3
|
+
/** Command framing, queueing, pipelining, and timeout handling. */
|
|
4
|
+
export declare abstract class TcpClientCommands extends TcpClientHealth {
|
|
5
|
+
hello(): Promise<HelloResponse>;
|
|
6
|
+
protected sendDirect(command: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
7
|
+
protected processQueue(): void;
|
|
8
|
+
send(command: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { FrameParser } from '../../../infrastructure/server/protocol';
|
|
2
|
+
import { PROTOCOL_CAPABILITIES, PROTOCOL_VERSION } from '../../../domain/types/protocol';
|
|
3
|
+
import { encodeMessagePack } from '../../../shared/msgpack';
|
|
4
|
+
import { TcpClientHealth } from './health';
|
|
5
|
+
/** Command framing, queueing, pipelining, and timeout handling. */
|
|
6
|
+
export class TcpClientCommands extends TcpClientHealth {
|
|
7
|
+
async hello() {
|
|
8
|
+
const response = await this.send({
|
|
9
|
+
cmd: 'Hello',
|
|
10
|
+
protocolVersion: PROTOCOL_VERSION,
|
|
11
|
+
capabilities: [...PROTOCOL_CAPABILITIES],
|
|
12
|
+
});
|
|
13
|
+
if (response.ok !== true) {
|
|
14
|
+
const message = typeof response.error === 'string' ? response.error : 'Hello failed';
|
|
15
|
+
throw new Error(message);
|
|
16
|
+
}
|
|
17
|
+
return response;
|
|
18
|
+
}
|
|
19
|
+
sendDirect(command) {
|
|
20
|
+
if (!this.socket)
|
|
21
|
+
return Promise.reject(new Error('Not connected'));
|
|
22
|
+
const startTime = Date.now();
|
|
23
|
+
this.health.recordCommandSent();
|
|
24
|
+
const reqId = this.generateReqId();
|
|
25
|
+
const commandWithReqId = { ...command, reqId };
|
|
26
|
+
let pendingRef;
|
|
27
|
+
const promise = new Promise((resolve, reject) => {
|
|
28
|
+
const timeout = setTimeout(() => {
|
|
29
|
+
const removed = this.commands.removeByReqId(reqId);
|
|
30
|
+
if (removed) {
|
|
31
|
+
this.health.recordError();
|
|
32
|
+
reject(new Error('Command timeout'));
|
|
33
|
+
}
|
|
34
|
+
}, this.options.commandTimeout);
|
|
35
|
+
pendingRef = {
|
|
36
|
+
id: 0,
|
|
37
|
+
reqId,
|
|
38
|
+
command: commandWithReqId,
|
|
39
|
+
resolve: (result) => {
|
|
40
|
+
this.health.recordSuccess(Date.now() - startTime);
|
|
41
|
+
resolve(result);
|
|
42
|
+
},
|
|
43
|
+
reject: (error) => {
|
|
44
|
+
this.health.recordError();
|
|
45
|
+
reject(error);
|
|
46
|
+
},
|
|
47
|
+
timeout,
|
|
48
|
+
};
|
|
49
|
+
});
|
|
50
|
+
pendingRef.promise = promise;
|
|
51
|
+
this.commands.addInFlight(pendingRef);
|
|
52
|
+
this.socket.write(FrameParser.frame(encodeMessagePack(commandWithReqId)));
|
|
53
|
+
return promise;
|
|
54
|
+
}
|
|
55
|
+
processQueue() {
|
|
56
|
+
if (!this.connected || !this.socket)
|
|
57
|
+
return;
|
|
58
|
+
while (this.commands.hasPending() && this.commands.canSendMore(this.options.maxInFlight)) {
|
|
59
|
+
const next = this.commands.dequeue();
|
|
60
|
+
if (!next)
|
|
61
|
+
break;
|
|
62
|
+
clearTimeout(next.timeout);
|
|
63
|
+
const newTimeout = setTimeout(() => {
|
|
64
|
+
const removed = this.commands.removeByReqId(next.reqId);
|
|
65
|
+
if (removed) {
|
|
66
|
+
this.health.recordError();
|
|
67
|
+
next.reject(new Error('Command timeout'));
|
|
68
|
+
this.handleCommandTimeout();
|
|
69
|
+
}
|
|
70
|
+
}, this.options.commandTimeout);
|
|
71
|
+
next.timeout = newTimeout;
|
|
72
|
+
this.commands.addInFlight(next);
|
|
73
|
+
this.socket.write(FrameParser.frame(encodeMessagePack(next.command)));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
send(command) {
|
|
77
|
+
const startTime = Date.now();
|
|
78
|
+
this.health.recordCommandSent();
|
|
79
|
+
const reqId = this.generateReqId();
|
|
80
|
+
const commandWithReqId = { ...command, reqId };
|
|
81
|
+
const id = this.commands.nextId();
|
|
82
|
+
let pendingRef;
|
|
83
|
+
const promise = new Promise((resolve, reject) => {
|
|
84
|
+
const timeout = setTimeout(() => {
|
|
85
|
+
if (this.commands.remove(id)) {
|
|
86
|
+
this.health.recordError();
|
|
87
|
+
reject(new Error('Command timeout'));
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const removed = this.commands.removeByReqId(reqId);
|
|
91
|
+
if (removed) {
|
|
92
|
+
this.health.recordError();
|
|
93
|
+
reject(new Error('Command timeout'));
|
|
94
|
+
this.handleCommandTimeout();
|
|
95
|
+
}
|
|
96
|
+
}, this.options.commandTimeout);
|
|
97
|
+
pendingRef = {
|
|
98
|
+
id,
|
|
99
|
+
reqId,
|
|
100
|
+
command: commandWithReqId,
|
|
101
|
+
resolve: (result) => {
|
|
102
|
+
this.health.recordSuccess(Date.now() - startTime);
|
|
103
|
+
resolve(result);
|
|
104
|
+
},
|
|
105
|
+
reject: (error) => {
|
|
106
|
+
this.health.recordError();
|
|
107
|
+
reject(error);
|
|
108
|
+
},
|
|
109
|
+
timeout,
|
|
110
|
+
};
|
|
111
|
+
});
|
|
112
|
+
pendingRef.promise = promise;
|
|
113
|
+
this.commands.enqueue(pendingRef);
|
|
114
|
+
if (!this.connected && !this.connecting) {
|
|
115
|
+
this.connect().catch(() => {
|
|
116
|
+
// The queued command owns timeout and rejection reporting.
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
else if (this.connected) {
|
|
120
|
+
this.processQueue();
|
|
121
|
+
}
|
|
122
|
+
return promise;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { TcpClientState } from './state';
|
|
2
|
+
/** Connection establishment and authentication lifecycle. */
|
|
3
|
+
export declare abstract class TcpClientConnectivity extends TcpClientState {
|
|
4
|
+
protected abstract handleData(frame: Uint8Array): void;
|
|
5
|
+
protected abstract handleClose(): void;
|
|
6
|
+
protected abstract processQueue(): void;
|
|
7
|
+
protected abstract sendDirect(command: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
8
|
+
connect(): Promise<void>;
|
|
9
|
+
protected abstract ping(): Promise<boolean>;
|
|
10
|
+
private waitForConnection;
|
|
11
|
+
private doConnect;
|
|
12
|
+
private authenticate;
|
|
13
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { createConnection } from '../connection';
|
|
2
|
+
import { TcpClientState } from './state';
|
|
3
|
+
/** Connection establishment and authentication lifecycle. */
|
|
4
|
+
export class TcpClientConnectivity extends TcpClientState {
|
|
5
|
+
async connect() {
|
|
6
|
+
if (this.connected)
|
|
7
|
+
return;
|
|
8
|
+
if (this.connecting)
|
|
9
|
+
return this.waitForConnection();
|
|
10
|
+
this.connecting = true;
|
|
11
|
+
this.reconnect.setClosed(false);
|
|
12
|
+
try {
|
|
13
|
+
await this.doConnect();
|
|
14
|
+
this.reconnect.reset();
|
|
15
|
+
this.emit('connected');
|
|
16
|
+
this.health.startPing(async () => {
|
|
17
|
+
await this.ping();
|
|
18
|
+
});
|
|
19
|
+
this.processQueue();
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
this.connecting = false;
|
|
23
|
+
if (this.reconnect.canReconnect()) {
|
|
24
|
+
this.reconnect.scheduleReconnect(() => this.connect());
|
|
25
|
+
}
|
|
26
|
+
throw error;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
waitForConnection() {
|
|
30
|
+
return new Promise((resolve, reject) => {
|
|
31
|
+
const onConnect = () => {
|
|
32
|
+
this.off('error', onError);
|
|
33
|
+
resolve();
|
|
34
|
+
};
|
|
35
|
+
const onError = (error) => {
|
|
36
|
+
this.off('connected', onConnect);
|
|
37
|
+
reject(error);
|
|
38
|
+
};
|
|
39
|
+
this.once('connected', onConnect);
|
|
40
|
+
this.once('error', onError);
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
async doConnect() {
|
|
44
|
+
const { socket } = await createConnection({
|
|
45
|
+
host: this.options.host,
|
|
46
|
+
port: this.options.port,
|
|
47
|
+
tls: this.options.tls,
|
|
48
|
+
}, this.options.connectTimeout, {
|
|
49
|
+
onData: (frame) => {
|
|
50
|
+
this.handleData(frame);
|
|
51
|
+
},
|
|
52
|
+
onClose: () => {
|
|
53
|
+
this.handleClose();
|
|
54
|
+
},
|
|
55
|
+
onError: (error) => this.emit('error', error),
|
|
56
|
+
});
|
|
57
|
+
this.socket = socket;
|
|
58
|
+
if (this.options.token) {
|
|
59
|
+
try {
|
|
60
|
+
await this.authenticate();
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
this.socket.end();
|
|
64
|
+
this.socket = null;
|
|
65
|
+
throw error;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
this.connected = true;
|
|
69
|
+
this.connecting = false;
|
|
70
|
+
this.health.recordConnected();
|
|
71
|
+
}
|
|
72
|
+
async authenticate() {
|
|
73
|
+
const response = await this.sendDirect({ cmd: 'Auth', token: this.options.token });
|
|
74
|
+
if (!response.ok)
|
|
75
|
+
throw new Error('Authentication failed');
|
|
76
|
+
}
|
|
77
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { TcpClientConnectivity } from './connectivity';
|
|
2
|
+
/** Response dispatch, health tracking, and reconnect decisions. */
|
|
3
|
+
export declare abstract class TcpClientHealth extends TcpClientConnectivity {
|
|
4
|
+
protected handleData(frame: Uint8Array): void;
|
|
5
|
+
protected handleClose(): void;
|
|
6
|
+
ping(): Promise<boolean>;
|
|
7
|
+
protected abstract send(command: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
8
|
+
private handlePingFailure;
|
|
9
|
+
protected handleCommandTimeout(): void;
|
|
10
|
+
private forceReconnect;
|
|
11
|
+
getHealth(): import("..").ConnectionHealth;
|
|
12
|
+
protected abstract getState(): 'connected' | 'connecting' | 'disconnected' | 'closed';
|
|
13
|
+
protected generateReqId(): string;
|
|
14
|
+
}
|