bunqueue 2.8.53 → 2.8.56
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/application/background/dlq.d.ts +2 -0
- package/dist/application/background/dlq.js +26 -0
- package/dist/application/background/lifecycle.d.ts +4 -0
- package/dist/application/background/lifecycle.js +90 -0
- package/dist/application/background/recovery/active.d.ts +4 -0
- package/dist/application/background/recovery/active.js +69 -0
- package/dist/application/background/recovery/index.d.ts +2 -0
- package/dist/application/background/recovery/index.js +22 -0
- package/dist/application/background/recovery/pending.d.ts +3 -0
- package/dist/application/background/recovery/pending.js +69 -0
- package/dist/application/background/recovery/restore.d.ts +5 -0
- package/dist/application/background/recovery/restore.js +58 -0
- package/dist/application/background/recovery/shared.d.ts +6 -0
- package/dist/application/background/recovery/shared.js +15 -0
- package/dist/application/background/timeouts.d.ts +25 -0
- package/dist/application/background/timeouts.js +191 -0
- package/dist/application/backgroundTasks.d.ts +7 -31
- package/dist/application/backgroundTasks.js +6 -438
- package/dist/application/cleanupTasks.js +2 -1
- package/dist/application/clientTracking.js +3 -1
- package/dist/application/contextFactory.d.ts +13 -90
- package/dist/application/contextFactory.js +9 -0
- package/dist/application/dependencyResultTracker.d.ts +1 -0
- package/dist/application/dependencyResultTracker.js +3 -0
- package/dist/application/dlqManager.d.ts +9 -9
- package/dist/application/dlqManager.js +49 -167
- package/dist/application/dlqRetry.d.ts +12 -0
- package/dist/application/dlqRetry.js +97 -0
- package/dist/application/lockManager.js +24 -4
- package/dist/application/lockOperations.js +16 -3
- package/dist/application/operations/ack/batch.d.ts +8 -0
- package/dist/application/operations/ack/batch.js +64 -0
- package/dist/application/operations/ack/completion.d.ts +3 -0
- package/dist/application/operations/ack/completion.js +74 -0
- package/dist/application/operations/ack/failure.d.ts +3 -0
- package/dist/application/operations/ack/failure.js +160 -0
- package/dist/application/operations/ack.d.ts +5 -79
- package/dist/application/operations/ack.js +4 -319
- package/dist/application/operations/ackHelpers.d.ts +3 -52
- package/dist/application/operations/ackHelpers.js +11 -4
- package/dist/application/operations/customId.d.ts +18 -5
- package/dist/application/operations/customId.js +36 -25
- package/dist/application/operations/flowValidation.js +9 -4
- package/dist/application/operations/jobManagement.js +50 -11
- package/dist/application/operations/jobMoveOperations.js +3 -3
- package/dist/application/operations/jobStateTransitions.d.ts +1 -1
- package/dist/application/operations/jobStateTransitions.js +16 -2
- package/dist/application/operations/parentLink.d.ts +36 -0
- package/dist/application/operations/parentLink.js +153 -0
- package/dist/application/operations/parentLinkInput.d.ts +8 -0
- package/dist/application/operations/parentLinkInput.js +23 -0
- package/dist/application/operations/push.d.ts +5 -44
- package/dist/application/operations/push.js +62 -152
- package/dist/application/operations/pushAdmission.d.ts +32 -0
- package/dist/application/operations/pushAdmission.js +38 -0
- package/dist/application/operations/pushBatch.d.ts +4 -0
- package/dist/application/operations/pushBatch.js +136 -0
- package/dist/application/operations/pushContext.d.ts +39 -0
- package/dist/application/operations/pushContext.js +1 -0
- package/dist/application/operations/pushDeduplication.d.ts +42 -0
- package/dist/application/operations/pushDeduplication.js +131 -0
- package/dist/application/operations/pushInsert.d.ts +13 -1
- package/dist/application/operations/pushInsert.js +33 -17
- package/dist/application/operations/pushLocks.js +13 -9
- package/dist/application/operations/query/collect.d.ts +12 -0
- package/dist/application/operations/query/collect.js +118 -0
- package/dist/application/operations/query/jobLookup.d.ts +9 -0
- package/dist/application/operations/query/jobLookup.js +110 -0
- package/dist/application/operations/query/pagination.d.ts +8 -0
- package/dist/application/operations/query/pagination.js +90 -0
- package/dist/application/operations/query/state.d.ts +4 -0
- package/dist/application/operations/query/state.js +63 -0
- package/dist/application/operations/queryOperations.d.ts +5 -50
- package/dist/application/operations/queryOperations.js +4 -474
- package/dist/application/queue-manager/ack.d.ts +23 -0
- package/dist/application/queue-manager/ack.js +242 -0
- package/dist/application/queue-manager/configuration.d.ts +27 -0
- package/dist/application/queue-manager/configuration.js +84 -0
- package/dist/application/queue-manager/context.d.ts +5 -0
- package/dist/application/queue-manager/context.js +61 -0
- package/dist/application/queue-manager/control.d.ts +17 -0
- package/dist/application/queue-manager/control.js +133 -0
- package/dist/application/queue-manager/delivery.d.ts +32 -0
- package/dist/application/queue-manager/delivery.js +143 -0
- package/dist/application/queue-manager/dependencies.d.ts +8 -0
- package/dist/application/queue-manager/dependencies.js +127 -0
- package/dist/application/queue-manager/dependency-runtime.d.ts +8 -0
- package/dist/application/queue-manager/dependency-runtime.js +40 -0
- package/dist/application/queue-manager/flow-failures.d.ts +18 -0
- package/dist/application/queue-manager/flow-failures.js +107 -0
- package/dist/application/queue-manager/flow-options.d.ts +8 -0
- package/dist/application/queue-manager/flow-options.js +129 -0
- package/dist/application/queue-manager/job-management.d.ts +17 -0
- package/dist/application/queue-manager/job-management.js +100 -0
- package/dist/application/queue-manager/lifecycle.d.ts +4 -0
- package/dist/application/queue-manager/lifecycle.js +41 -0
- package/dist/application/queue-manager/limits.d.ts +41 -0
- package/dist/application/queue-manager/limits.js +108 -0
- package/dist/application/queue-manager/locks.d.ts +21 -0
- package/dist/application/queue-manager/locks.js +59 -0
- package/dist/application/queue-manager/observability.d.ts +16 -0
- package/dist/application/queue-manager/observability.js +44 -0
- package/dist/application/queue-manager/queries.d.ts +17 -0
- package/dist/application/queue-manager/queries.js +118 -0
- package/dist/application/queue-manager/repeat.d.ts +4 -0
- package/dist/application/queue-manager/repeat.js +26 -0
- package/dist/application/queue-manager/services.d.ts +19 -0
- package/dist/application/queue-manager/services.js +80 -0
- package/dist/application/queue-manager/state.d.ts +92 -0
- package/dist/application/queue-manager/state.js +144 -0
- package/dist/application/queue-manager/stats.d.ts +28 -0
- package/dist/application/queue-manager/stats.js +52 -0
- package/dist/application/queueManager.d.ts +4 -380
- package/dist/application/queueManager.js +3 -1880
- package/dist/application/queueTelemetryJournal.d.ts +20 -0
- package/dist/application/queueTelemetryJournal.js +133 -0
- package/dist/application/repeatJobs.d.ts +7 -0
- package/dist/application/repeatJobs.js +132 -0
- package/dist/application/stallDetection.js +9 -4
- package/dist/application/types/ack.d.ts +132 -0
- package/dist/application/types/ack.js +1 -0
- package/dist/application/types/background.d.ts +18 -0
- package/dist/application/types/background.js +1 -0
- package/dist/application/types/config.d.ts +37 -0
- package/dist/application/types/config.js +15 -0
- package/dist/application/types/contextFactory.d.ts +83 -0
- package/dist/application/types/contextFactory.js +1 -0
- package/dist/application/types/contexts.d.ts +110 -0
- package/dist/application/types/contexts.js +1 -0
- package/dist/application/types/index.d.ts +7 -0
- package/dist/application/types/index.js +1 -0
- package/dist/application/types/query.d.ts +23 -0
- package/dist/application/types/query.js +1 -0
- package/dist/application/types/queueManager.d.ts +94 -0
- package/dist/application/types/queueManager.js +1 -0
- package/dist/cli/commandRouter.d.ts +1 -1
- package/dist/cli/commands/core.js +1 -0
- package/dist/cli/output/collections.d.ts +8 -0
- package/dist/cli/output/collections.js +131 -0
- package/dist/cli/output/jobs.d.ts +2 -0
- package/dist/cli/output/jobs.js +61 -0
- package/dist/cli/output/style.d.ts +14 -0
- package/dist/cli/output/style.js +28 -0
- package/dist/cli/output/success.d.ts +1 -0
- package/dist/cli/output/success.js +108 -0
- package/dist/cli/output.d.ts +1 -6
- package/dist/cli/output.js +7 -395
- package/dist/client/bunqueue/dlqRateLimit.d.ts +8 -0
- package/dist/client/bunqueue/dlqRateLimit.js +24 -0
- package/dist/client/bunqueue/runtime.d.ts +35 -0
- package/dist/client/bunqueue/runtime.js +138 -0
- package/dist/client/bunqueue.d.ts +19 -34
- package/dist/client/bunqueue.js +45 -166
- package/dist/client/dlqConversion.d.ts +5 -0
- package/dist/client/dlqConversion.js +28 -0
- package/dist/client/events.d.ts +7 -56
- package/dist/client/events.js +38 -15
- package/dist/client/flow.d.ts +6 -12
- package/dist/client/flow.js +16 -34
- package/dist/client/flowJobDependencies.js +3 -1
- package/dist/client/flowJobFactory.d.ts +9 -1
- package/dist/client/flowJobFactory.js +25 -9
- package/dist/client/flowJobMoveMethods.d.ts +5 -5
- package/dist/client/flowJobMoveMethods.js +37 -17
- package/dist/client/flowLegacyPlan.js +22 -8
- package/dist/client/flowOptions.d.ts +1 -1
- package/dist/client/flowOptions.js +2 -1
- package/dist/client/flowPlan.js +2 -3
- package/dist/client/flowPush.d.ts +1 -0
- package/dist/client/flowPush.js +5 -1
- package/dist/client/flowReader.js +5 -5
- package/dist/client/flowResults.d.ts +11 -0
- package/dist/client/flowResults.js +42 -0
- package/dist/client/index.d.ts +3 -1
- package/dist/client/jobConversion.d.ts +3 -7
- package/dist/client/jobConversion.js +36 -33
- package/dist/client/jobConversionHelpers.d.ts +19 -3
- package/dist/client/jobConversionHelpers.js +20 -16
- package/dist/client/jobConversionTypes.d.ts +8 -0
- package/dist/client/jobDeduplication.d.ts +6 -0
- package/dist/client/jobDeduplication.js +14 -0
- package/dist/client/jobHelpers.d.ts +7 -2
- package/dist/client/jobHelpers.js +16 -8
- package/dist/client/queue/bullmqCompat.d.ts +18 -8
- package/dist/client/queue/bullmqCompat.js +39 -71
- package/dist/client/queue/deduplication.d.ts +2 -0
- package/dist/client/queue/deduplication.js +20 -11
- package/dist/client/queue/dlq.d.ts +11 -6
- package/dist/client/queue/dlq.js +57 -16
- package/dist/client/queue/dlqJobMethods.d.ts +9 -0
- package/dist/client/queue/dlqJobMethods.js +177 -0
- package/dist/client/queue/dlqOps.d.ts +2 -1
- package/dist/client/queue/dlqOps.js +4 -10
- package/dist/client/queue/dlqStats.d.ts +3 -0
- package/dist/client/queue/dlqStats.js +21 -0
- package/dist/client/queue/job-proxy/dependencies.d.ts +9 -0
- package/dist/client/queue/job-proxy/dependencies.js +67 -0
- package/dist/client/queue/job-proxy/reflection.d.ts +2 -0
- package/dist/client/queue/job-proxy/reflection.js +18 -0
- package/dist/client/queue/job-proxy/simple.d.ts +3 -0
- package/dist/client/queue/job-proxy/simple.js +316 -0
- package/dist/client/queue/job-proxy/tcp.d.ts +4 -0
- package/dist/client/queue/job-proxy/tcp.js +191 -0
- package/dist/client/queue/jobMetadata.d.ts +10 -0
- package/dist/client/queue/jobMetadata.js +24 -0
- package/dist/client/queue/jobMove.d.ts +4 -4
- package/dist/client/queue/jobMove.js +87 -24
- package/dist/client/queue/jobProxy.d.ts +4 -50
- package/dist/client/queue/jobProxy.js +3 -511
- package/dist/client/queue/operations/add/bulk.d.ts +7 -0
- package/dist/client/queue/operations/add/bulk.js +129 -0
- package/dist/client/queue/operations/add/payload.d.ts +24 -0
- package/dist/client/queue/operations/add/payload.js +85 -0
- package/dist/client/queue/operations/add/single.d.ts +3 -0
- package/dist/client/queue/operations/add/single.js +107 -0
- package/dist/client/queue/operations/add.d.ts +2 -47
- package/dist/client/queue/operations/add.js +2 -347
- package/dist/client/queue/operations/index.d.ts +1 -0
- package/dist/client/queue/operations/index.js +1 -0
- package/dist/client/queue/operations/management.d.ts +0 -4
- package/dist/client/queue/operations/management.js +35 -6
- package/dist/client/queue/operations/query.d.ts +1 -20
- package/dist/client/queue/operations/query.js +38 -116
- package/dist/client/queue/operations/queryStates.d.ts +13 -0
- package/dist/client/queue/operations/queryStates.js +32 -0
- package/dist/client/queue/operations/queryTcpPages.d.ts +14 -0
- package/dist/client/queue/operations/queryTcpPages.js +40 -0
- package/dist/client/queue/queue.d.ts +6 -189
- package/dist/client/queue/queue.js +6 -547
- package/dist/client/queue/rateLimit.d.ts +4 -4
- package/dist/client/queue/rateLimit.js +17 -8
- package/dist/client/queue/runtime/compatibility.d.ts +13 -0
- package/dist/client/queue/runtime/compatibility.js +38 -0
- package/dist/client/queue/runtime/configuration.d.ts +42 -0
- package/dist/client/queue/runtime/configuration.js +109 -0
- package/dist/client/queue/runtime/connection.d.ts +6 -0
- package/dist/client/queue/runtime/connection.js +16 -0
- package/dist/client/queue/runtime/control.d.ts +41 -0
- package/dist/client/queue/runtime/control.js +87 -0
- package/dist/client/queue/runtime/queries.d.ts +48 -0
- package/dist/client/queue/runtime/queries.js +95 -0
- package/dist/client/queue/runtime/scheduling.d.ts +33 -0
- package/dist/client/queue/runtime/scheduling.js +56 -0
- package/dist/client/queue/runtime/state.d.ts +96 -0
- package/dist/client/queue/runtime/state.js +149 -0
- package/dist/client/queue/scheduler.d.ts +2 -5
- package/dist/client/queue/scheduler.js +25 -23
- package/dist/client/queue/schedulerPagination.d.ts +7 -0
- package/dist/client/queue/schedulerPagination.js +10 -0
- package/dist/client/queue/types/add.d.ts +40 -0
- package/dist/client/queue/types/add.js +1 -0
- package/dist/client/queue/types/contexts.d.ts +33 -0
- package/dist/client/queue/types/contexts.js +5 -0
- package/dist/client/queue/types/index.d.ts +3 -0
- package/dist/client/queue/types/index.js +1 -0
- package/dist/client/queue/types/job.d.ts +50 -0
- package/dist/client/queue/types/job.js +1 -0
- package/dist/client/queue/types/runtime.d.ts +35 -0
- package/dist/client/queue/types/runtime.js +1 -0
- package/dist/client/queue/workers.d.ts +16 -8
- package/dist/client/queue/workers.js +42 -16
- package/dist/client/queue-events/tcpSubscription.d.ts +23 -0
- package/dist/client/queue-events/tcpSubscription.js +99 -0
- package/dist/client/queueGroup.d.ts +11 -0
- package/dist/client/queueGroup.js +28 -1
- package/dist/client/sandboxed/queueOps.d.ts +2 -2
- package/dist/client/sandboxed/queueOps.js +32 -5
- package/dist/client/sandboxed/runtime/dispatch.d.ts +13 -0
- package/dist/client/sandboxed/runtime/dispatch.js +186 -0
- package/dist/client/sandboxed/runtime/lifecycle.d.ts +20 -0
- package/dist/client/sandboxed/runtime/lifecycle.js +95 -0
- package/dist/client/sandboxed/runtime/log.d.ts +1 -0
- package/dist/client/sandboxed/runtime/log.js +15 -0
- package/dist/client/sandboxed/runtime/pool.d.ts +11 -0
- package/dist/client/sandboxed/runtime/pool.js +121 -0
- package/dist/client/sandboxed/runtime/recovery.d.ts +11 -0
- package/dist/client/sandboxed/runtime/recovery.js +122 -0
- package/dist/client/sandboxed/runtime/state.d.ts +39 -0
- package/dist/client/sandboxed/runtime/state.js +59 -0
- package/dist/client/sandboxed/types/index.d.ts +2 -0
- package/dist/client/sandboxed/types/index.js +1 -0
- package/dist/client/sandboxed/types/options.d.ts +27 -0
- package/dist/client/sandboxed/types/options.js +1 -0
- package/dist/client/sandboxed/types/process.d.ts +30 -0
- package/dist/client/sandboxed/types/process.js +1 -0
- package/dist/client/sandboxed/worker.d.ts +3 -85
- package/dist/client/sandboxed/worker.js +3 -557
- package/dist/client/sandboxed/wrapper.js +1 -0
- package/dist/client/tcp/client.d.ts +5 -112
- package/dist/client/tcp/client.js +5 -481
- package/dist/client/tcp/commandQueue.d.ts +23 -0
- package/dist/client/tcp/commandQueue.js +89 -0
- package/dist/client/tcp/connection.d.ts +4 -85
- package/dist/client/tcp/connection.js +3 -315
- package/dist/client/tcp/errors.d.ts +6 -0
- package/dist/client/tcp/errors.js +18 -0
- package/dist/client/tcp/runtime/commands.d.ts +9 -0
- package/dist/client/tcp/runtime/commands.js +124 -0
- package/dist/client/tcp/runtime/connectivity.d.ts +13 -0
- package/dist/client/tcp/runtime/connectivity.js +77 -0
- package/dist/client/tcp/runtime/health.d.ts +14 -0
- package/dist/client/tcp/runtime/health.js +127 -0
- package/dist/client/tcp/runtime/lifecycle.d.ts +8 -0
- package/dist/client/tcp/runtime/lifecycle.js +32 -0
- package/dist/client/tcp/runtime/state.d.ts +50 -0
- package/dist/client/tcp/runtime/state.js +45 -0
- package/dist/client/tcp/transport.d.ts +18 -0
- package/dist/client/tcp/transport.js +158 -0
- package/dist/client/tcp/types/command.d.ts +9 -0
- package/dist/client/tcp/types/command.js +1 -0
- package/dist/client/tcp/types/connection.d.ts +31 -0
- package/dist/client/tcp/types/connection.js +17 -0
- package/dist/client/tcp/types/index.d.ts +5 -0
- package/dist/client/tcp/types/index.js +1 -0
- package/dist/client/tcp/types/socket.d.ts +8 -0
- package/dist/client/tcp/types/socket.js +1 -0
- package/dist/client/tcp/types/tls.d.ts +4 -0
- package/dist/client/tcp/types/tls.js +1 -0
- package/dist/client/tcp/types.d.ts +2 -106
- package/dist/client/tcp/types.js +2 -22
- package/dist/client/types/connection.d.ts +29 -0
- package/dist/client/types/connection.js +1 -0
- package/dist/client/types/dlq.d.ts +45 -0
- package/dist/client/types/dlq.js +1 -0
- package/dist/client/types/events.d.ts +54 -0
- package/dist/client/types/events.js +1 -0
- package/dist/client/types/flow.d.ts +10 -0
- package/dist/client/types/flow.js +1 -0
- package/dist/client/types/index.d.ts +10 -0
- package/dist/client/types/index.js +1 -0
- package/dist/client/types/job.d.ts +127 -0
- package/dist/client/types/job.js +1 -0
- package/dist/client/types/metrics.d.ts +1 -0
- package/dist/client/types/metrics.js +1 -0
- package/dist/client/types/options.d.ts +62 -0
- package/dist/client/types/options.js +1 -0
- package/dist/client/types/worker.d.ts +38 -0
- package/dist/client/types/worker.js +1 -0
- package/dist/client/types.d.ts +2 -583
- package/dist/client/types.js +2 -6
- package/dist/client/worker/ackBatcher.d.ts +1 -1
- package/dist/client/worker/ackBatcher.js +17 -5
- package/dist/client/worker/ackOutcome.d.ts +8 -0
- package/dist/client/worker/ackOutcome.js +58 -0
- package/dist/client/worker/constants.d.ts +7 -0
- package/dist/client/worker/constants.js +7 -0
- package/dist/client/worker/groupConcurrency.js +3 -0
- package/dist/client/worker/handlers/completion.d.ts +28 -0
- package/dist/client/worker/handlers/completion.js +68 -0
- package/dist/client/worker/handlers/dependencies.d.ts +11 -0
- package/dist/client/worker/handlers/dependencies.js +107 -0
- package/dist/client/worker/handlers/mutations.d.ts +23 -0
- package/dist/client/worker/handlers/mutations.js +211 -0
- package/dist/client/worker/handlers/queries.d.ts +15 -0
- package/dist/client/worker/handlers/queries.js +100 -0
- package/dist/client/worker/index.d.ts +2 -2
- package/dist/client/worker/index.js +1 -1
- package/dist/client/worker/jobParser.js +4 -2
- package/dist/client/worker/processor.d.ts +2 -15
- package/dist/client/worker/processor.js +68 -125
- package/dist/client/worker/processorHandlers.d.ts +4 -65
- package/dist/client/worker/processorHandlers.js +4 -400
- package/dist/client/worker/processorOutcome.d.ts +14 -0
- package/dist/client/worker/processorOutcome.js +125 -0
- package/dist/client/worker/runtime/buffer.d.ts +8 -0
- package/dist/client/worker/runtime/buffer.js +50 -0
- package/dist/client/worker/runtime/control.d.ts +26 -0
- package/dist/client/worker/runtime/control.js +175 -0
- package/dist/client/worker/runtime/execution.d.ts +11 -0
- package/dist/client/worker/runtime/execution.js +123 -0
- package/dist/client/worker/runtime/lifecycle.d.ts +7 -0
- package/dist/client/worker/runtime/lifecycle.js +114 -0
- package/dist/client/worker/runtime/manual.d.ts +10 -0
- package/dist/client/worker/runtime/manual.js +137 -0
- package/dist/client/worker/runtime/options.d.ts +5 -0
- package/dist/client/worker/runtime/options.js +39 -0
- package/dist/client/worker/runtime/polling.d.ts +12 -0
- package/dist/client/worker/runtime/polling.js +123 -0
- package/dist/client/worker/runtime/state.d.ts +110 -0
- package/dist/client/worker/runtime/state.js +156 -0
- package/dist/client/worker/types/index.d.ts +5 -0
- package/dist/client/worker/types/index.js +1 -0
- package/dist/client/worker/types/manual.d.ts +7 -0
- package/dist/client/worker/types/manual.js +1 -0
- package/dist/client/worker/types/options.d.ts +24 -0
- package/dist/client/worker/types/options.js +1 -0
- package/dist/client/worker/types/outcome.d.ts +23 -0
- package/dist/client/worker/types/outcome.js +1 -0
- package/dist/client/worker/types/processor.d.ts +22 -0
- package/dist/client/worker/types/processor.js +1 -0
- package/dist/client/worker/types/transport.d.ts +11 -0
- package/dist/client/worker/types/transport.js +1 -0
- package/dist/client/worker/worker.d.ts +3 -160
- package/dist/client/worker/worker.js +3 -904
- package/dist/client/worker/workerRateLimiter.d.ts +5 -1
- package/dist/client/worker/workerRateLimiter.js +40 -20
- package/dist/client/worker.d.ts +1 -0
- package/dist/client/workflow/compensationChild.d.ts +2 -1
- package/dist/client/workflow/compensationChild.js +1 -1
- package/dist/client/workflow/compensationClaim.d.ts +11 -0
- package/dist/client/workflow/compensationClaim.js +30 -0
- package/dist/client/workflow/compensator.d.ts +7 -2
- package/dist/client/workflow/compensator.js +5 -11
- package/dist/client/workflow/recovery.js +25 -2
- package/dist/client/workflow/rollbackControl.js +1 -1
- package/dist/domain/job/constants.d.ts +12 -0
- package/dist/domain/job/constants.js +12 -0
- package/dist/domain/job/create.d.ts +2 -0
- package/dist/domain/job/create.js +103 -0
- package/dist/domain/job/ids.d.ts +5 -0
- package/dist/domain/job/ids.js +12 -0
- package/dist/domain/job/locks.d.ts +4 -0
- package/dist/domain/job/locks.js +23 -0
- package/dist/domain/job/payload.d.ts +18 -0
- package/dist/domain/job/payload.js +43 -0
- package/dist/domain/job/state.d.ts +8 -0
- package/dist/domain/job/state.js +51 -0
- package/dist/domain/job/terminal.d.ts +3 -0
- package/dist/domain/job/terminal.js +9 -0
- package/dist/domain/queue/dlqShard.d.ts +2 -0
- package/dist/domain/queue/dlqShard.js +34 -9
- package/dist/domain/queue/limiterManager.d.ts +11 -0
- package/dist/domain/queue/limiterManager.js +28 -0
- package/dist/domain/queue/priorityQueue.js +3 -39
- package/dist/domain/queue/priorityQueueOrder.d.ts +3 -0
- package/dist/domain/queue/priorityQueueOrder.js +21 -0
- package/dist/domain/queue/shard/dependencies.d.ts +11 -0
- package/dist/domain/queue/shard/dependencies.js +22 -0
- package/dist/domain/queue/shard/dlq.d.ts +25 -0
- package/dist/domain/queue/shard/dlq.js +71 -0
- package/dist/domain/queue/shard/keys.d.ts +18 -0
- package/dist/domain/queue/shard/keys.js +45 -0
- package/dist/domain/queue/shard/lifecycle.d.ts +10 -0
- package/dist/domain/queue/shard/lifecycle.js +43 -0
- package/dist/domain/queue/shard/limits.d.ts +24 -0
- package/dist/domain/queue/shard/limits.js +57 -0
- package/dist/domain/queue/shard/metrics.d.ts +32 -0
- package/dist/domain/queue/shard/metrics.js +72 -0
- package/dist/domain/queue/shard/state.d.ts +34 -0
- package/dist/domain/queue/shard/state.js +80 -0
- package/dist/domain/queue/shard.d.ts +5 -137
- package/dist/domain/queue/shard.js +4 -390
- package/dist/domain/queue/uniqueKeyManager.d.ts +3 -1
- package/dist/domain/queue/uniqueKeyManager.js +9 -1
- package/dist/domain/response/builders.d.ts +15 -0
- package/dist/domain/response/builders.js +39 -0
- package/dist/domain/types/command.d.ts +2 -522
- package/dist/domain/types/command.js +2 -5
- package/dist/domain/types/commands/base.d.ts +5 -0
- package/dist/domain/types/commands/base.js +1 -0
- package/dist/domain/types/commands/core.d.ts +106 -0
- package/dist/domain/types/commands/core.js +1 -0
- package/dist/domain/types/commands/cron.d.ts +36 -0
- package/dist/domain/types/commands/cron.js +1 -0
- package/dist/domain/types/commands/dashboard.d.ts +13 -0
- package/dist/domain/types/commands/dashboard.js +1 -0
- package/dist/domain/types/commands/dlq.d.ts +39 -0
- package/dist/domain/types/commands/dlq.js +1 -0
- package/dist/domain/types/commands/extended.d.ts +63 -0
- package/dist/domain/types/commands/extended.js +1 -0
- package/dist/domain/types/commands/index.d.ts +12 -0
- package/dist/domain/types/commands/index.js +12 -0
- package/dist/domain/types/commands/limits.d.ts +54 -0
- package/dist/domain/types/commands/limits.js +1 -0
- package/dist/domain/types/commands/management.d.ts +73 -0
- package/dist/domain/types/commands/management.js +1 -0
- package/dist/domain/types/commands/monitoring.d.ts +49 -0
- package/dist/domain/types/commands/monitoring.js +1 -0
- package/dist/domain/types/commands/protocol.d.ts +20 -0
- package/dist/domain/types/commands/protocol.js +1 -0
- package/dist/domain/types/commands/query.d.ts +46 -0
- package/dist/domain/types/commands/query.js +1 -0
- package/dist/domain/types/commands/union.d.ts +13 -0
- package/dist/domain/types/commands/union.js +1 -0
- package/dist/domain/types/commands/workers.d.ts +39 -0
- package/dist/domain/types/commands/workers.js +1 -0
- package/dist/domain/types/cron.d.ts +4 -2
- package/dist/domain/types/cron.js +3 -0
- package/dist/domain/types/dlq.d.ts +17 -0
- package/dist/domain/types/dlq.js +70 -14
- package/dist/domain/types/index.d.ts +2 -0
- package/dist/domain/types/index.js +1 -0
- package/dist/domain/types/job.d.ts +8 -269
- package/dist/domain/types/job.js +8 -234
- package/dist/domain/types/jobs/model.d.ts +152 -0
- package/dist/domain/types/jobs/model.js +1 -0
- package/dist/domain/types/metrics.d.ts +16 -0
- package/dist/domain/types/metrics.js +1 -0
- package/dist/domain/types/priorityQueue.d.ts +12 -0
- package/dist/domain/types/priorityQueue.js +1 -0
- package/dist/domain/types/protocol.d.ts +5 -0
- package/dist/domain/types/protocol.js +4 -0
- package/dist/domain/types/queue.d.ts +7 -0
- package/dist/domain/types/queue.js +13 -0
- package/dist/domain/types/response.d.ts +3 -192
- package/dist/domain/types/response.js +3 -101
- package/dist/domain/types/responses/model.d.ts +152 -0
- package/dist/domain/types/responses/model.js +1 -0
- package/dist/domain/types/shard.d.ts +4 -0
- package/dist/domain/types/shard.js +1 -0
- package/dist/infrastructure/cloud/cloudAgent.js +6 -0
- package/dist/infrastructure/cloud/commandHandler.d.ts +2 -41
- package/dist/infrastructure/cloud/commandHandler.js +1 -1
- package/dist/infrastructure/cloud/commands/integrations.d.ts +2 -0
- package/dist/infrastructure/cloud/commands/integrations.js +31 -0
- package/dist/infrastructure/cloud/commands/jobMapper.d.ts +56 -0
- package/dist/infrastructure/cloud/commands/jobMapper.js +72 -0
- package/dist/infrastructure/cloud/commands/jobs.d.ts +2 -0
- package/dist/infrastructure/cloud/commands/jobs.js +111 -0
- package/dist/infrastructure/cloud/commands/queues.d.ts +2 -0
- package/dist/infrastructure/cloud/commands/queues.js +126 -0
- package/dist/infrastructure/cloud/commands.d.ts +3 -10
- package/dist/infrastructure/cloud/commands.js +7 -344
- package/dist/infrastructure/cloud/snapshot/analytics.d.ts +16 -0
- package/dist/infrastructure/cloud/snapshot/analytics.js +132 -0
- package/dist/infrastructure/cloud/snapshot/collector.d.ts +24 -0
- package/dist/infrastructure/cloud/snapshot/collector.js +105 -0
- package/dist/infrastructure/cloud/snapshot/config.d.ts +5 -0
- package/dist/infrastructure/cloud/snapshot/config.js +86 -0
- package/dist/infrastructure/cloud/snapshot/jobs.d.ts +5 -0
- package/dist/infrastructure/cloud/snapshot/jobs.js +148 -0
- package/dist/infrastructure/cloud/snapshot/stalls.d.ts +3 -0
- package/dist/infrastructure/cloud/snapshot/stalls.js +34 -0
- package/dist/infrastructure/cloud/snapshotCollector.d.ts +2 -53
- package/dist/infrastructure/cloud/snapshotCollector.js +5 -107
- package/dist/infrastructure/cloud/snapshotHelpers.d.ts +5 -45
- package/dist/infrastructure/cloud/snapshotHelpers.js +4 -426
- package/dist/infrastructure/cloud/types/collector.d.ts +54 -0
- package/dist/infrastructure/cloud/types/collector.js +1 -0
- package/dist/infrastructure/cloud/types/command.d.ts +44 -0
- package/dist/infrastructure/cloud/types/command.js +1 -0
- package/dist/infrastructure/cloud/types/config.d.ts +18 -0
- package/dist/infrastructure/cloud/types/config.js +1 -0
- package/dist/infrastructure/cloud/types/event.d.ts +14 -0
- package/dist/infrastructure/cloud/types/event.js +1 -0
- package/dist/infrastructure/cloud/types/redact.d.ts +4 -0
- package/dist/infrastructure/cloud/types/redact.js +1 -0
- package/dist/infrastructure/cloud/types/snapshot.d.ts +52 -0
- package/dist/infrastructure/cloud/types/snapshot.js +1 -0
- package/dist/infrastructure/cloud/types/snapshotCore.d.ts +125 -0
- package/dist/infrastructure/cloud/types/snapshotCore.js +1 -0
- package/dist/infrastructure/cloud/types/snapshotJobs.d.ts +124 -0
- package/dist/infrastructure/cloud/types/snapshotJobs.js +1 -0
- package/dist/infrastructure/cloud/types/snapshotTelemetry.d.ts +100 -0
- package/dist/infrastructure/cloud/types/snapshotTelemetry.js +1 -0
- package/dist/infrastructure/cloud/types.d.ts +3 -445
- package/dist/infrastructure/cloud/types.js +0 -4
- package/dist/infrastructure/persistence/batchInsert.d.ts +13 -0
- package/dist/infrastructure/persistence/batchInsert.js +96 -0
- package/dist/infrastructure/persistence/jobOptionsBlob.d.ts +18 -0
- package/dist/infrastructure/persistence/jobOptionsBlob.js +56 -0
- package/dist/infrastructure/persistence/legacyNameMigration.d.ts +5 -0
- package/dist/infrastructure/persistence/legacyNameMigration.js +42 -0
- package/dist/infrastructure/persistence/migrations.d.ts +3 -0
- package/dist/infrastructure/persistence/migrations.js +120 -0
- package/dist/infrastructure/persistence/schema.d.ts +3 -5
- package/dist/infrastructure/persistence/schema.js +40 -136
- package/dist/infrastructure/persistence/sqlite/admission.d.ts +9 -0
- package/dist/infrastructure/persistence/sqlite/admission.js +34 -0
- package/dist/infrastructure/persistence/sqlite/control.d.ts +32 -0
- package/dist/infrastructure/persistence/sqlite/control.js +90 -0
- package/dist/infrastructure/persistence/sqlite/flows.d.ts +26 -0
- package/dist/infrastructure/persistence/sqlite/flows.js +167 -0
- package/dist/infrastructure/persistence/sqlite/jobs.d.ts +23 -0
- package/dist/infrastructure/persistence/sqlite/jobs.js +166 -0
- package/dist/infrastructure/persistence/sqlite/lifecycle.d.ts +6 -0
- package/dist/infrastructure/persistence/sqlite/lifecycle.js +30 -0
- package/dist/infrastructure/persistence/sqlite/mutations.d.ts +20 -0
- package/dist/infrastructure/persistence/sqlite/mutations.js +149 -0
- package/dist/infrastructure/persistence/sqlite/queries.d.ts +23 -0
- package/dist/infrastructure/persistence/sqlite/queries.js +89 -0
- package/dist/infrastructure/persistence/sqlite/records.d.ts +24 -0
- package/dist/infrastructure/persistence/sqlite/records.js +115 -0
- package/dist/infrastructure/persistence/sqlite/state.d.ts +36 -0
- package/dist/infrastructure/persistence/sqlite/state.js +207 -0
- package/dist/infrastructure/persistence/sqlite/telemetry.d.ts +16 -0
- package/dist/infrastructure/persistence/sqlite/telemetry.js +126 -0
- package/dist/infrastructure/persistence/sqlite.d.ts +5 -276
- package/dist/infrastructure/persistence/sqlite.js +3 -997
- package/dist/infrastructure/persistence/sqliteBatch.d.ts +4 -121
- package/dist/infrastructure/persistence/sqliteBatch.js +3 -422
- package/dist/infrastructure/persistence/sqliteSerializer.d.ts +6 -1
- package/dist/infrastructure/persistence/sqliteSerializer.js +33 -11
- package/dist/infrastructure/persistence/statements.d.ts +5 -1
- package/dist/infrastructure/persistence/statements.js +14 -9
- package/dist/infrastructure/persistence/types/admission.d.ts +8 -0
- package/dist/infrastructure/persistence/types/admission.js +1 -0
- package/dist/infrastructure/persistence/types/batch.d.ts +12 -0
- package/dist/infrastructure/persistence/types/batch.js +1 -0
- package/dist/infrastructure/persistence/types/sqlite.d.ts +17 -0
- package/dist/infrastructure/persistence/types/sqlite.js +1 -0
- package/dist/infrastructure/persistence/writeBuffer.d.ts +38 -0
- package/dist/infrastructure/persistence/writeBuffer.js +221 -0
- package/dist/infrastructure/scheduler/cron/execution.d.ts +12 -0
- package/dist/infrastructure/scheduler/cron/execution.js +150 -0
- package/dist/infrastructure/scheduler/cron/runtime.d.ts +31 -0
- package/dist/infrastructure/scheduler/cron/runtime.js +143 -0
- package/dist/infrastructure/scheduler/cronScheduler.d.ts +4 -117
- package/dist/infrastructure/scheduler/cronScheduler.js +3 -436
- package/dist/infrastructure/scheduler/types/cronScheduler.d.ts +16 -0
- package/dist/infrastructure/scheduler/types/cronScheduler.js +1 -0
- package/dist/infrastructure/server/bootstrap.js +3 -0
- package/dist/infrastructure/server/handler-routes/control.d.ts +8 -0
- package/dist/infrastructure/server/handler-routes/control.js +82 -0
- package/dist/infrastructure/server/handler-routes/jobs.d.ts +6 -0
- package/dist/infrastructure/server/handler-routes/jobs.js +110 -0
- package/dist/infrastructure/server/handler-routes/monitoring.d.ts +5 -0
- package/dist/infrastructure/server/handler-routes/monitoring.js +65 -0
- package/dist/infrastructure/server/handlerRoutes.d.ts +3 -26
- package/dist/infrastructure/server/handlerRoutes.js +3 -257
- package/dist/infrastructure/server/handlers/advanced/configNumbers.d.ts +2 -0
- package/dist/infrastructure/server/handlers/advanced/configNumbers.js +26 -0
- package/dist/infrastructure/server/handlers/advanced/dependencies.d.ts +15 -0
- package/dist/infrastructure/server/handlers/advanced/dependencies.js +38 -0
- package/dist/infrastructure/server/handlers/advanced/jobs.d.ts +33 -0
- package/dist/infrastructure/server/handlers/advanced/jobs.js +136 -0
- package/dist/infrastructure/server/handlers/advanced/queue.d.ts +42 -0
- package/dist/infrastructure/server/handlers/advanced/queue.js +111 -0
- package/dist/infrastructure/server/handlers/advanced.d.ts +3 -121
- package/dist/infrastructure/server/handlers/advanced.js +3 -336
- package/dist/infrastructure/server/handlers/core.d.ts +1 -4
- package/dist/infrastructure/server/handlers/core.js +37 -20
- package/dist/infrastructure/server/handlers/cron.js +9 -1
- package/dist/infrastructure/server/handlers/dlq.d.ts +3 -0
- package/dist/infrastructure/server/handlers/dlq.js +18 -4
- package/dist/infrastructure/server/handlers/flow.js +6 -1
- package/dist/infrastructure/server/handlers/introspection.d.ts +19 -0
- package/dist/infrastructure/server/handlers/introspection.js +21 -0
- package/dist/infrastructure/server/handlers/management.d.ts +8 -0
- package/dist/infrastructure/server/handlers/management.js +30 -0
- package/dist/infrastructure/server/handlers/monitoring/health.d.ts +13 -0
- package/dist/infrastructure/server/handlers/monitoring/health.js +61 -0
- package/dist/infrastructure/server/handlers/monitoring/operations.d.ts +8 -0
- package/dist/infrastructure/server/handlers/monitoring/operations.js +28 -0
- package/dist/infrastructure/server/handlers/monitoring/webhooks.d.ts +7 -0
- package/dist/infrastructure/server/handlers/monitoring/webhooks.js +56 -0
- package/dist/infrastructure/server/handlers/monitoring/workers.d.ts +6 -0
- package/dist/infrastructure/server/handlers/monitoring/workers.js +57 -0
- package/dist/infrastructure/server/handlers/monitoring.d.ts +4 -30
- package/dist/infrastructure/server/handlers/monitoring.js +4 -222
- package/dist/infrastructure/server/handlers/pushBatchValidation.d.ts +1 -1
- package/dist/infrastructure/server/handlers/pushBatchValidation.js +7 -0
- package/dist/infrastructure/server/handlers/query.js +13 -4
- package/dist/infrastructure/server/http-routes/jobAdvanced.d.ts +2 -0
- package/dist/infrastructure/server/http-routes/jobAdvanced.js +106 -0
- package/dist/infrastructure/server/http-routes/jobManagement.d.ts +2 -0
- package/dist/infrastructure/server/http-routes/jobManagement.js +74 -0
- package/dist/infrastructure/server/http-routes/queueJobs.d.ts +2 -0
- package/dist/infrastructure/server/http-routes/queueJobs.js +108 -0
- package/dist/infrastructure/server/httpRouteJobs.d.ts +1 -8
- package/dist/infrastructure/server/httpRouteJobs.js +33 -222
- package/dist/infrastructure/server/httpRouteQueues.d.ts +1 -6
- package/dist/infrastructure/server/httpRouteQueues.js +51 -217
- package/dist/infrastructure/server/httpRouteResources.js +1 -0
- package/dist/infrastructure/server/protocol/commands.d.ts +8 -0
- package/dist/infrastructure/server/protocol/commands.js +31 -0
- package/dist/infrastructure/server/protocol/frameParser.d.ts +16 -0
- package/dist/infrastructure/server/protocol/frameParser.js +65 -0
- package/dist/infrastructure/server/protocol/lineBuffer.d.ts +6 -0
- package/dist/infrastructure/server/protocol/lineBuffer.js +21 -0
- package/dist/infrastructure/server/protocol/validation.d.ts +9 -0
- package/dist/infrastructure/server/protocol/validation.js +75 -0
- package/dist/infrastructure/server/protocol.d.ts +5 -77
- package/dist/infrastructure/server/protocol.js +4 -265
- package/dist/infrastructure/server/rateLimiter.js +1 -0
- package/dist/infrastructure/server/socketWriteQueue.d.ts +1 -1
- package/dist/infrastructure/server/socketWriteQueue.js +8 -5
- package/dist/infrastructure/server/sse/constants.d.ts +5 -0
- package/dist/infrastructure/server/sse/constants.js +5 -0
- package/dist/infrastructure/server/sse/eventBuffer.d.ts +3 -0
- package/dist/infrastructure/server/sse/eventBuffer.js +21 -0
- package/dist/infrastructure/server/sseHandler.d.ts +2 -6
- package/dist/infrastructure/server/sseHandler.js +20 -96
- package/dist/infrastructure/server/tcp/clientRelease.d.ts +2 -0
- package/dist/infrastructure/server/tcp/clientRelease.js +18 -0
- package/dist/infrastructure/server/tcp/connections.d.ts +24 -0
- package/dist/infrastructure/server/tcp/connections.js +162 -0
- package/dist/infrastructure/server/tcp/constants.d.ts +3 -0
- package/dist/infrastructure/server/tcp/constants.js +3 -0
- package/dist/infrastructure/server/tcp/eventSubscriptions.d.ts +10 -0
- package/dist/infrastructure/server/tcp/eventSubscriptions.js +17 -0
- package/dist/infrastructure/server/tcp/responses.d.ts +3 -0
- package/dist/infrastructure/server/tcp/responses.js +8 -0
- package/dist/infrastructure/server/tcp.d.ts +10 -68
- package/dist/infrastructure/server/tcp.js +47 -256
- package/dist/infrastructure/server/types/protocol.d.ts +4 -0
- package/dist/infrastructure/server/types/protocol.js +1 -0
- package/dist/infrastructure/server/types/sse.d.ts +11 -0
- package/dist/infrastructure/server/types/sse.js +1 -0
- package/dist/infrastructure/server/types/tcpServer.d.ts +25 -0
- package/dist/infrastructure/server/types/tcpServer.js +1 -0
- package/dist/infrastructure/server/types/ws.d.ts +6 -0
- package/dist/infrastructure/server/types/ws.js +1 -0
- package/dist/infrastructure/server/ws/constants.d.ts +6 -0
- package/dist/infrastructure/server/ws/constants.js +130 -0
- package/dist/infrastructure/server/ws/snapshots.d.ts +4 -0
- package/dist/infrastructure/server/ws/snapshots.js +52 -0
- package/dist/infrastructure/server/ws/subscriptions.d.ts +10 -0
- package/dist/infrastructure/server/ws/subscriptions.js +39 -0
- package/dist/infrastructure/server/wsHandler.d.ts +2 -10
- package/dist/infrastructure/server/wsHandler.js +12 -237
- package/dist/mcp/adapter.d.ts +5 -403
- package/dist/mcp/adapter.js +6 -778
- package/dist/mcp/backend/embedded/base.d.ts +7 -0
- package/dist/mcp/backend/embedded/base.js +15 -0
- package/dist/mcp/backend/embedded/index.d.ts +14 -0
- package/dist/mcp/backend/embedded/index.js +22 -0
- package/dist/mcp/backend/embedded/jobs.d.ts +44 -0
- package/dist/mcp/backend/embedded/jobs.js +98 -0
- package/dist/mcp/backend/embedded/queues.d.ts +27 -0
- package/dist/mcp/backend/embedded/queues.js +84 -0
- package/dist/mcp/backend/embedded/services.d.ts +29 -0
- package/dist/mcp/backend/embedded/services.js +107 -0
- package/dist/mcp/backend/serializers.d.ts +7 -0
- package/dist/mcp/backend/serializers.js +32 -0
- package/dist/mcp/backend/tcp/base.d.ts +19 -0
- package/dist/mcp/backend/tcp/base.js +54 -0
- package/dist/mcp/backend/tcp/index.d.ts +14 -0
- package/dist/mcp/backend/tcp/index.js +20 -0
- package/dist/mcp/backend/tcp/jobs.d.ts +44 -0
- package/dist/mcp/backend/tcp/jobs.js +122 -0
- package/dist/mcp/backend/tcp/queues.d.ts +27 -0
- package/dist/mcp/backend/tcp/queues.js +89 -0
- package/dist/mcp/backend/tcp/services.d.ts +30 -0
- package/dist/mcp/backend/tcp/services.js +161 -0
- package/dist/mcp/types/adapter.d.ts +176 -0
- package/dist/mcp/types/adapter.js +1 -0
- package/dist/shared/asyncLock.d.ts +13 -0
- package/dist/shared/asyncLock.js +65 -0
- package/dist/shared/lock.d.ts +10 -72
- package/dist/shared/lock.js +7 -231
- package/dist/shared/lockError.d.ts +3 -0
- package/dist/shared/lockError.js +6 -0
- package/dist/shared/lockTimeout.d.ts +2 -0
- package/dist/shared/lockTimeout.js +2 -0
- package/dist/shared/rwLock.d.ts +22 -0
- package/dist/shared/rwLock.js +124 -0
- package/dist/shared/serialization.js +1 -0
- package/dist/shared/skipList.d.ts +0 -5
- package/dist/shared/skipList.js +10 -57
- package/dist/shared/skipListNodes.d.ts +6 -0
- package/dist/shared/skipListNodes.js +43 -0
- package/dist/shared/types/lock.d.ts +7 -0
- package/dist/shared/types/lock.js +1 -0
- package/dist/shared/types/skipList.d.ts +4 -0
- package/dist/shared/types/skipList.js +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Command } from '../../../domain/types/command';
|
|
2
|
+
import { type Response } from '../../../domain/types/response';
|
|
3
|
+
import type { ConnectionState } from '../types/protocol';
|
|
4
|
+
export declare function parseCommand(data: string): Command | null;
|
|
5
|
+
export declare function serializeResponse(response: Response): string;
|
|
6
|
+
export declare function parseCommands(data: string): Command[];
|
|
7
|
+
export declare function createConnectionState(clientId: string): ConnectionState;
|
|
8
|
+
export declare function errorResponse(message: string, requestId?: string): string;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { error } from '../../../domain/types/response';
|
|
2
|
+
export function parseCommand(data) {
|
|
3
|
+
try {
|
|
4
|
+
const parsed = JSON.parse(data);
|
|
5
|
+
if (!parsed['cmd'])
|
|
6
|
+
return null;
|
|
7
|
+
return parsed;
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export function serializeResponse(response) {
|
|
14
|
+
return JSON.stringify(response);
|
|
15
|
+
}
|
|
16
|
+
export function parseCommands(data) {
|
|
17
|
+
const lines = data.split('\n').filter((line) => line.trim().length > 0);
|
|
18
|
+
const commands = [];
|
|
19
|
+
for (const line of lines) {
|
|
20
|
+
const command = parseCommand(line);
|
|
21
|
+
if (command)
|
|
22
|
+
commands.push(command);
|
|
23
|
+
}
|
|
24
|
+
return commands;
|
|
25
|
+
}
|
|
26
|
+
export function createConnectionState(clientId) {
|
|
27
|
+
return { authenticated: false, clientId };
|
|
28
|
+
}
|
|
29
|
+
export function errorResponse(message, requestId) {
|
|
30
|
+
return serializeResponse(error(message, requestId));
|
|
31
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const MAX_FRAME_SIZE: number;
|
|
2
|
+
export declare class FrameSizeError extends Error {
|
|
3
|
+
readonly requestedSize: number;
|
|
4
|
+
readonly maxSize: number;
|
|
5
|
+
constructor(requestedSize: number, maxSize: number);
|
|
6
|
+
}
|
|
7
|
+
export declare class FrameParser {
|
|
8
|
+
private buffer;
|
|
9
|
+
private readonly maxFrameSize;
|
|
10
|
+
constructor(maxFrameSize?: number);
|
|
11
|
+
addData(data: Uint8Array): Uint8Array[];
|
|
12
|
+
get bufferedBytes(): number;
|
|
13
|
+
get hasPartialFrame(): boolean;
|
|
14
|
+
clear(): void;
|
|
15
|
+
static frame(data: Uint8Array): Uint8Array;
|
|
16
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
export const MAX_FRAME_SIZE = 64 * 1024 * 1024;
|
|
2
|
+
export class FrameSizeError extends Error {
|
|
3
|
+
requestedSize;
|
|
4
|
+
maxSize;
|
|
5
|
+
constructor(requestedSize, maxSize) {
|
|
6
|
+
super(`Frame size ${requestedSize} exceeds maximum allowed size ${maxSize}`);
|
|
7
|
+
this.requestedSize = requestedSize;
|
|
8
|
+
this.maxSize = maxSize;
|
|
9
|
+
this.name = 'FrameSizeError';
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export class FrameParser {
|
|
13
|
+
buffer = new Uint8Array(0);
|
|
14
|
+
maxFrameSize;
|
|
15
|
+
constructor(maxFrameSize = MAX_FRAME_SIZE) {
|
|
16
|
+
this.maxFrameSize = maxFrameSize;
|
|
17
|
+
}
|
|
18
|
+
addData(data) {
|
|
19
|
+
const buffer = new Uint8Array(this.buffer.length + data.length);
|
|
20
|
+
buffer.set(this.buffer);
|
|
21
|
+
buffer.set(data, this.buffer.length);
|
|
22
|
+
const frames = [];
|
|
23
|
+
let offset = 0;
|
|
24
|
+
while (buffer.length - offset >= 4) {
|
|
25
|
+
const length = ((buffer[offset] << 24) |
|
|
26
|
+
(buffer[offset + 1] << 16) |
|
|
27
|
+
(buffer[offset + 2] << 8) |
|
|
28
|
+
buffer[offset + 3]) >>>
|
|
29
|
+
0;
|
|
30
|
+
if (length > this.maxFrameSize) {
|
|
31
|
+
this.buffer = new Uint8Array(0);
|
|
32
|
+
throw new FrameSizeError(length, this.maxFrameSize);
|
|
33
|
+
}
|
|
34
|
+
if (buffer.length - offset < 4 + length)
|
|
35
|
+
break;
|
|
36
|
+
frames.push(buffer.slice(offset + 4, offset + 4 + length));
|
|
37
|
+
offset += 4 + length;
|
|
38
|
+
}
|
|
39
|
+
if (offset >= buffer.length)
|
|
40
|
+
this.buffer = new Uint8Array(0);
|
|
41
|
+
else if (offset === 0)
|
|
42
|
+
this.buffer = buffer;
|
|
43
|
+
else
|
|
44
|
+
this.buffer = buffer.slice(offset);
|
|
45
|
+
return frames;
|
|
46
|
+
}
|
|
47
|
+
get bufferedBytes() {
|
|
48
|
+
return this.buffer.length;
|
|
49
|
+
}
|
|
50
|
+
get hasPartialFrame() {
|
|
51
|
+
return this.buffer.length > 0;
|
|
52
|
+
}
|
|
53
|
+
clear() {
|
|
54
|
+
this.buffer = new Uint8Array(0);
|
|
55
|
+
}
|
|
56
|
+
static frame(data) {
|
|
57
|
+
const frame = new Uint8Array(4 + data.length);
|
|
58
|
+
frame[0] = (data.length >> 24) & 0xff;
|
|
59
|
+
frame[1] = (data.length >> 16) & 0xff;
|
|
60
|
+
frame[2] = (data.length >> 8) & 0xff;
|
|
61
|
+
frame[3] = data.length & 0xff;
|
|
62
|
+
frame.set(data, 4);
|
|
63
|
+
return frame;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export class LineBuffer {
|
|
2
|
+
buffer = '';
|
|
3
|
+
addData(data) {
|
|
4
|
+
this.buffer += data;
|
|
5
|
+
const lines = [];
|
|
6
|
+
let newlineIndex;
|
|
7
|
+
while ((newlineIndex = this.buffer.indexOf('\n')) !== -1) {
|
|
8
|
+
const line = this.buffer.slice(0, newlineIndex).trim();
|
|
9
|
+
this.buffer = this.buffer.slice(newlineIndex + 1);
|
|
10
|
+
if (line.length > 0)
|
|
11
|
+
lines.push(line);
|
|
12
|
+
}
|
|
13
|
+
return lines;
|
|
14
|
+
}
|
|
15
|
+
getRemaining() {
|
|
16
|
+
return this.buffer;
|
|
17
|
+
}
|
|
18
|
+
clear() {
|
|
19
|
+
this.buffer = '';
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function validateQueueName(name: string): string | null;
|
|
2
|
+
export declare function validateJobData(data: unknown): string | null;
|
|
3
|
+
export declare function validateNumericField(value: unknown, name: string, options?: {
|
|
4
|
+
min?: number;
|
|
5
|
+
max?: number;
|
|
6
|
+
required?: boolean;
|
|
7
|
+
}): string | null;
|
|
8
|
+
export declare function validateBackoffField(value: unknown): string | null;
|
|
9
|
+
export declare function validateJobOptions(options: Record<string, unknown>): string | null;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
export function validateQueueName(name) {
|
|
2
|
+
if (!name || name.length === 0)
|
|
3
|
+
return 'Queue name is required';
|
|
4
|
+
if (name.length > 256)
|
|
5
|
+
return 'Queue name too long (max 256 characters)';
|
|
6
|
+
if (!/^[a-zA-Z0-9_\-.:]+$/.test(name))
|
|
7
|
+
return 'Queue name contains invalid characters';
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
export function validateJobData(data) {
|
|
11
|
+
let json;
|
|
12
|
+
try {
|
|
13
|
+
json = JSON.stringify(data);
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return 'Job data must be JSON serializable';
|
|
17
|
+
}
|
|
18
|
+
if (json !== undefined && json.length > 10 * 1024 * 1024) {
|
|
19
|
+
return 'Job data too large (max 10MB)';
|
|
20
|
+
}
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
export function validateNumericField(value, name, options = {}) {
|
|
24
|
+
const { min = 0, max = Number.MAX_SAFE_INTEGER, required = false } = options;
|
|
25
|
+
if (value === undefined || value === null)
|
|
26
|
+
return required ? `${name} is required` : null;
|
|
27
|
+
if (typeof value !== 'number')
|
|
28
|
+
return `${name} must be a number`;
|
|
29
|
+
if (!Number.isFinite(value))
|
|
30
|
+
return `${name} must be a finite number`;
|
|
31
|
+
if (!Number.isInteger(value) &&
|
|
32
|
+
(name === 'priority' || name === 'attempts' || name === 'maxAttempts')) {
|
|
33
|
+
return `${name} must be an integer`;
|
|
34
|
+
}
|
|
35
|
+
if (value < min)
|
|
36
|
+
return `${name} must be at least ${min}`;
|
|
37
|
+
if (value > max)
|
|
38
|
+
return `${name} must be at most ${max}`;
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
export function validateBackoffField(value) {
|
|
42
|
+
if (value === undefined || value === null)
|
|
43
|
+
return null;
|
|
44
|
+
if (typeof value === 'object') {
|
|
45
|
+
const object = value;
|
|
46
|
+
if (object['type'] !== 'fixed' && object['type'] !== 'exponential') {
|
|
47
|
+
return "backoff.type must be 'fixed' or 'exponential'";
|
|
48
|
+
}
|
|
49
|
+
return validateNumericField(object['delay'], 'backoff.delay', {
|
|
50
|
+
min: 0,
|
|
51
|
+
max: 24 * 60 * 60 * 1000,
|
|
52
|
+
required: true,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return validateNumericField(value, 'backoff', { min: 0, max: 24 * 60 * 60 * 1000 });
|
|
56
|
+
}
|
|
57
|
+
export function validateJobOptions(options) {
|
|
58
|
+
const validations = [
|
|
59
|
+
validateNumericField(options['priority'], 'priority', { min: -1000000, max: 1000000 }),
|
|
60
|
+
validateNumericField(options['delay'], 'delay', { min: 0, max: 365 * 24 * 60 * 60 * 1000 }),
|
|
61
|
+
validateNumericField(options['timeout'], 'timeout', { min: 0, max: 24 * 60 * 60 * 1000 }),
|
|
62
|
+
validateNumericField(options['maxAttempts'], 'maxAttempts', { min: 1, max: 1000 }),
|
|
63
|
+
validateBackoffField(options['backoff']),
|
|
64
|
+
validateNumericField(options['ttl'], 'ttl', { min: 0, max: 365 * 24 * 60 * 60 * 1000 }),
|
|
65
|
+
validateNumericField(options['stallTimeout'], 'stallTimeout', {
|
|
66
|
+
min: 0,
|
|
67
|
+
max: 24 * 60 * 60 * 1000,
|
|
68
|
+
}),
|
|
69
|
+
];
|
|
70
|
+
for (const error of validations) {
|
|
71
|
+
if (error)
|
|
72
|
+
return error;
|
|
73
|
+
}
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
@@ -1,78 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
import { type Response } from '../../domain/types/response';
|
|
7
|
-
/** Parse a command from JSON string */
|
|
8
|
-
export declare function parseCommand(data: string): Command | null;
|
|
9
|
-
/** Serialize response to JSON string */
|
|
10
|
-
export declare function serializeResponse(response: Response): string;
|
|
11
|
-
/** Parse multiple commands from newline-delimited JSON */
|
|
12
|
-
export declare function parseCommands(data: string): Command[];
|
|
13
|
-
/** Validate queue name */
|
|
14
|
-
export declare function validateQueueName(name: string): string | null;
|
|
15
|
-
/** Validate job data size */
|
|
16
|
-
export declare function validateJobData(data: unknown): string | null;
|
|
17
|
-
/** Validate a numeric field is within safe bounds */
|
|
18
|
-
export declare function validateNumericField(value: unknown, name: string, options?: {
|
|
19
|
-
min?: number;
|
|
20
|
-
max?: number;
|
|
21
|
-
required?: boolean;
|
|
22
|
-
}): string | null;
|
|
23
|
-
/**
|
|
24
|
-
* Validate the backoff field, which the public JobOptions type allows in two
|
|
25
|
-
* forms: a plain number (delay ms) or `{ type: 'fixed' | 'exponential', delay
|
|
26
|
-
* }`. Embedded mode already accepts both (domain parseBackoff); the TCP path
|
|
27
|
-
* must too, or the object form throws over the wire while working embedded.
|
|
28
|
-
*/
|
|
29
|
-
export declare function validateBackoffField(value: unknown): string | null;
|
|
30
|
-
/** Validate job options numeric fields */
|
|
31
|
-
export declare function validateJobOptions(options: Record<string, unknown>): string | null;
|
|
32
|
-
/** Re-export from shared module for backward compatibility */
|
|
1
|
+
export { createConnectionState, errorResponse, parseCommand, parseCommands, serializeResponse, } from './protocol/commands';
|
|
2
|
+
export { FrameParser, FrameSizeError, MAX_FRAME_SIZE } from './protocol/frameParser';
|
|
3
|
+
export { LineBuffer } from './protocol/lineBuffer';
|
|
4
|
+
export { validateBackoffField, validateJobData, validateJobOptions, validateNumericField, validateQueueName, } from './protocol/validation';
|
|
5
|
+
export type { ConnectionState } from './types/protocol';
|
|
33
6
|
export { validateWebhookUrl } from '../../shared/webhookValidation';
|
|
34
|
-
/** Connection state */
|
|
35
|
-
export interface ConnectionState {
|
|
36
|
-
authenticated: boolean;
|
|
37
|
-
clientId: string;
|
|
38
|
-
}
|
|
39
|
-
/** Create initial connection state */
|
|
40
|
-
export declare function createConnectionState(clientId: string): ConnectionState;
|
|
41
|
-
/** Error response helper */
|
|
42
|
-
export declare function errorResponse(message: string, reqId?: string): string;
|
|
43
|
-
/** Line buffer for TCP connections */
|
|
44
|
-
export declare class LineBuffer {
|
|
45
|
-
private buffer;
|
|
46
|
-
/** Add data to buffer and extract complete lines */
|
|
47
|
-
addData(data: string): string[];
|
|
48
|
-
/** Get remaining buffer content */
|
|
49
|
-
getRemaining(): string;
|
|
50
|
-
/** Clear buffer */
|
|
51
|
-
clear(): void;
|
|
52
|
-
}
|
|
53
|
-
/** Maximum allowed frame size (64MB) - prevents memory exhaustion DoS */
|
|
54
|
-
export declare const MAX_FRAME_SIZE: number;
|
|
55
|
-
/** Error thrown when frame size exceeds maximum */
|
|
56
|
-
export declare class FrameSizeError extends Error {
|
|
57
|
-
readonly requestedSize: number;
|
|
58
|
-
readonly maxSize: number;
|
|
59
|
-
constructor(requestedSize: number, maxSize: number);
|
|
60
|
-
}
|
|
61
|
-
/** Binary protocol frame parser */
|
|
62
|
-
export declare class FrameParser {
|
|
63
|
-
private buffer;
|
|
64
|
-
private readonly maxFrameSize;
|
|
65
|
-
constructor(maxFrameSize?: number);
|
|
66
|
-
/** Add data and extract complete frames
|
|
67
|
-
* @throws {FrameSizeError} if frame length exceeds maxFrameSize
|
|
68
|
-
*/
|
|
69
|
-
addData(data: Uint8Array): Uint8Array[];
|
|
70
|
-
/** Number of bytes currently buffered awaiting a complete frame. */
|
|
71
|
-
get bufferedBytes(): number;
|
|
72
|
-
/** True while a partial (incomplete) frame is buffered. */
|
|
73
|
-
get hasPartialFrame(): boolean;
|
|
74
|
-
/** Clear the internal buffer */
|
|
75
|
-
clear(): void;
|
|
76
|
-
/** Create a framed message */
|
|
77
|
-
static frame(data: Uint8Array): Uint8Array;
|
|
78
|
-
}
|
|
@@ -1,266 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import { error } from '../../domain/types/response';
|
|
6
|
-
/** Parse a command from JSON string */
|
|
7
|
-
export function parseCommand(data) {
|
|
8
|
-
try {
|
|
9
|
-
const parsed = JSON.parse(data);
|
|
10
|
-
if (!parsed['cmd']) {
|
|
11
|
-
return null;
|
|
12
|
-
}
|
|
13
|
-
return parsed;
|
|
14
|
-
}
|
|
15
|
-
catch {
|
|
16
|
-
return null;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
/** Serialize response to JSON string */
|
|
20
|
-
export function serializeResponse(response) {
|
|
21
|
-
return JSON.stringify(response);
|
|
22
|
-
}
|
|
23
|
-
/** Parse multiple commands from newline-delimited JSON */
|
|
24
|
-
export function parseCommands(data) {
|
|
25
|
-
const lines = data.split('\n').filter((line) => line.trim().length > 0);
|
|
26
|
-
const commands = [];
|
|
27
|
-
for (const line of lines) {
|
|
28
|
-
const cmd = parseCommand(line);
|
|
29
|
-
if (cmd) {
|
|
30
|
-
commands.push(cmd);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
return commands;
|
|
34
|
-
}
|
|
35
|
-
/** Validate queue name */
|
|
36
|
-
export function validateQueueName(name) {
|
|
37
|
-
if (!name || name.length === 0) {
|
|
38
|
-
return 'Queue name is required';
|
|
39
|
-
}
|
|
40
|
-
if (name.length > 256) {
|
|
41
|
-
return 'Queue name too long (max 256 characters)';
|
|
42
|
-
}
|
|
43
|
-
if (!/^[a-zA-Z0-9_\-.:]+$/.test(name)) {
|
|
44
|
-
return 'Queue name contains invalid characters';
|
|
45
|
-
}
|
|
46
|
-
return null;
|
|
47
|
-
}
|
|
48
|
-
/** Validate job data size */
|
|
49
|
-
export function validateJobData(data) {
|
|
50
|
-
const json = JSON.stringify(data);
|
|
51
|
-
if (json.length > 10 * 1024 * 1024) {
|
|
52
|
-
return 'Job data too large (max 10MB)';
|
|
53
|
-
}
|
|
54
|
-
return null;
|
|
55
|
-
}
|
|
56
|
-
/** Validate a numeric field is within safe bounds */
|
|
57
|
-
export function validateNumericField(value, name, options = {}) {
|
|
58
|
-
const { min = 0, max = Number.MAX_SAFE_INTEGER, required = false } = options;
|
|
59
|
-
if (value === undefined || value === null) {
|
|
60
|
-
return required ? `${name} is required` : null;
|
|
61
|
-
}
|
|
62
|
-
if (typeof value !== 'number') {
|
|
63
|
-
return `${name} must be a number`;
|
|
64
|
-
}
|
|
65
|
-
if (!Number.isFinite(value)) {
|
|
66
|
-
return `${name} must be a finite number`;
|
|
67
|
-
}
|
|
68
|
-
if (!Number.isInteger(value) &&
|
|
69
|
-
(name === 'priority' || name === 'attempts' || name === 'maxAttempts')) {
|
|
70
|
-
return `${name} must be an integer`;
|
|
71
|
-
}
|
|
72
|
-
if (value < min) {
|
|
73
|
-
return `${name} must be at least ${min}`;
|
|
74
|
-
}
|
|
75
|
-
if (value > max) {
|
|
76
|
-
return `${name} must be at most ${max}`;
|
|
77
|
-
}
|
|
78
|
-
return null;
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Validate the backoff field, which the public JobOptions type allows in two
|
|
82
|
-
* forms: a plain number (delay ms) or `{ type: 'fixed' | 'exponential', delay
|
|
83
|
-
* }`. Embedded mode already accepts both (domain parseBackoff); the TCP path
|
|
84
|
-
* must too, or the object form throws over the wire while working embedded.
|
|
85
|
-
*/
|
|
86
|
-
export function validateBackoffField(value) {
|
|
87
|
-
if (value === undefined || value === null)
|
|
88
|
-
return null;
|
|
89
|
-
if (typeof value === 'object') {
|
|
90
|
-
const obj = value;
|
|
91
|
-
if (obj['type'] !== 'fixed' && obj['type'] !== 'exponential') {
|
|
92
|
-
return "backoff.type must be 'fixed' or 'exponential'";
|
|
93
|
-
}
|
|
94
|
-
return validateNumericField(obj['delay'], 'backoff.delay', {
|
|
95
|
-
min: 0,
|
|
96
|
-
max: 24 * 60 * 60 * 1000, // max 1 day
|
|
97
|
-
required: true,
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
return validateNumericField(value, 'backoff', { min: 0, max: 24 * 60 * 60 * 1000 }); // max 1 day
|
|
101
|
-
}
|
|
102
|
-
/** Validate job options numeric fields */
|
|
103
|
-
export function validateJobOptions(options) {
|
|
104
|
-
const validations = [
|
|
105
|
-
validateNumericField(options['priority'], 'priority', { min: -1000000, max: 1000000 }),
|
|
106
|
-
validateNumericField(options['delay'], 'delay', { min: 0, max: 365 * 24 * 60 * 60 * 1000 }), // max 1 year
|
|
107
|
-
validateNumericField(options['timeout'], 'timeout', { min: 0, max: 24 * 60 * 60 * 1000 }), // max 1 day
|
|
108
|
-
validateNumericField(options['maxAttempts'], 'maxAttempts', { min: 1, max: 1000 }),
|
|
109
|
-
validateBackoffField(options['backoff']),
|
|
110
|
-
validateNumericField(options['ttl'], 'ttl', { min: 0, max: 365 * 24 * 60 * 60 * 1000 }), // max 1 year
|
|
111
|
-
validateNumericField(options['stallTimeout'], 'stallTimeout', {
|
|
112
|
-
min: 0,
|
|
113
|
-
max: 24 * 60 * 60 * 1000,
|
|
114
|
-
}), // max 1 day
|
|
115
|
-
];
|
|
116
|
-
for (const error of validations) {
|
|
117
|
-
if (error)
|
|
118
|
-
return error;
|
|
119
|
-
}
|
|
120
|
-
return null;
|
|
121
|
-
}
|
|
122
|
-
/** Re-export from shared module for backward compatibility */
|
|
1
|
+
export { createConnectionState, errorResponse, parseCommand, parseCommands, serializeResponse, } from './protocol/commands';
|
|
2
|
+
export { FrameParser, FrameSizeError, MAX_FRAME_SIZE } from './protocol/frameParser';
|
|
3
|
+
export { LineBuffer } from './protocol/lineBuffer';
|
|
4
|
+
export { validateBackoffField, validateJobData, validateJobOptions, validateNumericField, validateQueueName, } from './protocol/validation';
|
|
123
5
|
export { validateWebhookUrl } from '../../shared/webhookValidation';
|
|
124
|
-
/** Create initial connection state */
|
|
125
|
-
export function createConnectionState(clientId) {
|
|
126
|
-
return {
|
|
127
|
-
authenticated: false,
|
|
128
|
-
clientId,
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
/** Error response helper */
|
|
132
|
-
export function errorResponse(message, reqId) {
|
|
133
|
-
return serializeResponse(error(message, reqId));
|
|
134
|
-
}
|
|
135
|
-
/** Line buffer for TCP connections */
|
|
136
|
-
export class LineBuffer {
|
|
137
|
-
buffer = '';
|
|
138
|
-
/** Add data to buffer and extract complete lines */
|
|
139
|
-
addData(data) {
|
|
140
|
-
this.buffer += data;
|
|
141
|
-
const lines = [];
|
|
142
|
-
let newlineIdx;
|
|
143
|
-
while ((newlineIdx = this.buffer.indexOf('\n')) !== -1) {
|
|
144
|
-
const line = this.buffer.slice(0, newlineIdx).trim();
|
|
145
|
-
this.buffer = this.buffer.slice(newlineIdx + 1);
|
|
146
|
-
if (line.length > 0) {
|
|
147
|
-
lines.push(line);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
return lines;
|
|
151
|
-
}
|
|
152
|
-
/** Get remaining buffer content */
|
|
153
|
-
getRemaining() {
|
|
154
|
-
return this.buffer;
|
|
155
|
-
}
|
|
156
|
-
/** Clear buffer */
|
|
157
|
-
clear() {
|
|
158
|
-
this.buffer = '';
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
/** Maximum allowed frame size (64MB) - prevents memory exhaustion DoS */
|
|
162
|
-
export const MAX_FRAME_SIZE = 64 * 1024 * 1024;
|
|
163
|
-
/** Error thrown when frame size exceeds maximum */
|
|
164
|
-
export class FrameSizeError extends Error {
|
|
165
|
-
requestedSize;
|
|
166
|
-
maxSize;
|
|
167
|
-
constructor(requestedSize, maxSize) {
|
|
168
|
-
super(`Frame size ${requestedSize} exceeds maximum allowed size ${maxSize}`);
|
|
169
|
-
this.requestedSize = requestedSize;
|
|
170
|
-
this.maxSize = maxSize;
|
|
171
|
-
this.name = 'FrameSizeError';
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
/** Binary protocol frame parser */
|
|
175
|
-
export class FrameParser {
|
|
176
|
-
buffer = new Uint8Array(0);
|
|
177
|
-
maxFrameSize;
|
|
178
|
-
constructor(maxFrameSize = MAX_FRAME_SIZE) {
|
|
179
|
-
this.maxFrameSize = maxFrameSize;
|
|
180
|
-
}
|
|
181
|
-
/** Add data and extract complete frames
|
|
182
|
-
* @throws {FrameSizeError} if frame length exceeds maxFrameSize
|
|
183
|
-
*/
|
|
184
|
-
addData(data) {
|
|
185
|
-
// Concatenate any buffered partial frame with the new data into a single
|
|
186
|
-
// owned buffer (one copy). `data` is fully copied here and never retained,
|
|
187
|
-
// so the caller may safely reuse its read buffer after this returns.
|
|
188
|
-
const buffer = new Uint8Array(this.buffer.length + data.length);
|
|
189
|
-
buffer.set(this.buffer);
|
|
190
|
-
buffer.set(data, this.buffer.length);
|
|
191
|
-
const frames = [];
|
|
192
|
-
// Read cursor. Previously the tail was resliced with `buffer.slice(4 + len)`
|
|
193
|
-
// after EVERY frame — O(tail) per frame, i.e. O(F²) when F frames arrive
|
|
194
|
-
// coalesced in a single read (deep pipelining / OS segment coalescing). The
|
|
195
|
-
// cursor advances in O(1) per frame, making the whole pass O(total bytes).
|
|
196
|
-
let offset = 0;
|
|
197
|
-
while (buffer.length - offset >= 4) {
|
|
198
|
-
// Read length prefix (big-endian u32) using unsigned right shift to ensure positive value
|
|
199
|
-
// Using >>> 0 at the end converts the result to an unsigned 32-bit integer
|
|
200
|
-
const length = ((buffer[offset] << 24) |
|
|
201
|
-
(buffer[offset + 1] << 16) |
|
|
202
|
-
(buffer[offset + 2] << 8) |
|
|
203
|
-
buffer[offset + 3]) >>>
|
|
204
|
-
0;
|
|
205
|
-
// Validate frame size to prevent memory exhaustion DoS. A single frame's
|
|
206
|
-
// declared length can never exceed maxFrameSize (64MB), so the partial
|
|
207
|
-
// buffer is bounded by maxFrameSize regardless of how it is segmented
|
|
208
|
-
// across TCP reads. Slowloris (a connection that declares a large frame
|
|
209
|
-
// then never completes it) is handled at the transport layer by an idle
|
|
210
|
-
// read timeout in the server, NOT by dropping legal large partial frames.
|
|
211
|
-
if (length > this.maxFrameSize) {
|
|
212
|
-
// Clear buffer to prevent further processing of malicious data
|
|
213
|
-
this.buffer = new Uint8Array(0);
|
|
214
|
-
throw new FrameSizeError(length, this.maxFrameSize);
|
|
215
|
-
}
|
|
216
|
-
if (buffer.length - offset < 4 + length) {
|
|
217
|
-
// Not enough data for this (legal, < maxFrameSize) frame yet. Keep the
|
|
218
|
-
// partial bytes buffered until the rest of the frame arrives across
|
|
219
|
-
// subsequent TCP segments.
|
|
220
|
-
break;
|
|
221
|
-
}
|
|
222
|
-
// Extract frame. The body is copied out (slice) so it never aliases the
|
|
223
|
-
// retained tail buffer.
|
|
224
|
-
frames.push(buffer.slice(offset + 4, offset + 4 + length));
|
|
225
|
-
offset += 4 + length;
|
|
226
|
-
}
|
|
227
|
-
// Retain only the unconsumed tail. Three cases mirror the previous behavior
|
|
228
|
-
// without the per-frame reslice:
|
|
229
|
-
// - fully drained: a fresh empty buffer (do not pin the read's ArrayBuffer)
|
|
230
|
-
// - nothing consumed: keep the concat buffer as-is (no extra copy)
|
|
231
|
-
// - partial leftover after ≥1 frame: copy the small tail (no aliasing)
|
|
232
|
-
if (offset >= buffer.length) {
|
|
233
|
-
this.buffer = new Uint8Array(0);
|
|
234
|
-
}
|
|
235
|
-
else if (offset === 0) {
|
|
236
|
-
this.buffer = buffer;
|
|
237
|
-
}
|
|
238
|
-
else {
|
|
239
|
-
this.buffer = buffer.slice(offset);
|
|
240
|
-
}
|
|
241
|
-
return frames;
|
|
242
|
-
}
|
|
243
|
-
/** Number of bytes currently buffered awaiting a complete frame. */
|
|
244
|
-
get bufferedBytes() {
|
|
245
|
-
return this.buffer.length;
|
|
246
|
-
}
|
|
247
|
-
/** True while a partial (incomplete) frame is buffered. */
|
|
248
|
-
get hasPartialFrame() {
|
|
249
|
-
return this.buffer.length > 0;
|
|
250
|
-
}
|
|
251
|
-
/** Clear the internal buffer */
|
|
252
|
-
clear() {
|
|
253
|
-
this.buffer = new Uint8Array(0);
|
|
254
|
-
}
|
|
255
|
-
/** Create a framed message */
|
|
256
|
-
static frame(data) {
|
|
257
|
-
const frame = new Uint8Array(4 + data.length);
|
|
258
|
-
// Write length prefix (big-endian u32)
|
|
259
|
-
frame[0] = (data.length >> 24) & 0xff;
|
|
260
|
-
frame[1] = (data.length >> 16) & 0xff;
|
|
261
|
-
frame[2] = (data.length >> 8) & 0xff;
|
|
262
|
-
frame[3] = data.length & 0xff;
|
|
263
|
-
frame.set(data, 4);
|
|
264
|
-
return frame;
|
|
265
|
-
}
|
|
266
|
-
}
|
|
@@ -48,7 +48,7 @@ export declare class SocketWriteQueue {
|
|
|
48
48
|
* Call from the socket's `drain` handler. Stops at the first short write,
|
|
49
49
|
* leaving the remainder queued for the next drain.
|
|
50
50
|
*/
|
|
51
|
-
flush(socket: WritableSocket):
|
|
51
|
+
flush(socket: WritableSocket): boolean;
|
|
52
52
|
/** Number of bytes still buffered awaiting drain. */
|
|
53
53
|
get bytesQueued(): number;
|
|
54
54
|
/** Whether there is unwritten data awaiting drain. */
|
|
@@ -84,23 +84,26 @@ export class SocketWriteQueue {
|
|
|
84
84
|
written = socket.write(view);
|
|
85
85
|
}
|
|
86
86
|
catch {
|
|
87
|
-
return;
|
|
87
|
+
return false;
|
|
88
88
|
}
|
|
89
|
-
if (written
|
|
90
|
-
|
|
91
|
-
|
|
89
|
+
if (written < 0)
|
|
90
|
+
return false;
|
|
91
|
+
if (written === 0) {
|
|
92
|
+
// Socket is still backpressured; wait for the next drain.
|
|
93
|
+
return true;
|
|
92
94
|
}
|
|
93
95
|
if (written < view.length) {
|
|
94
96
|
// Still backpressured: advance offset within the current chunk.
|
|
95
97
|
this.offset += written;
|
|
96
98
|
this.queuedBytes -= written;
|
|
97
|
-
return;
|
|
99
|
+
return true;
|
|
98
100
|
}
|
|
99
101
|
// Whole chunk flushed.
|
|
100
102
|
this.queuedBytes -= view.length;
|
|
101
103
|
this.pending.shift();
|
|
102
104
|
this.offset = 0;
|
|
103
105
|
}
|
|
106
|
+
return true;
|
|
104
107
|
}
|
|
105
108
|
/** Number of bytes still buffered awaiting drain. */
|
|
106
109
|
get bytesQueued() {
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { BufferedSseEvent, SseClient } from '../types/sse';
|
|
2
|
+
export declare function bufferSseEvent(buffer: BufferedSseEvent[], event: BufferedSseEvent): void;
|
|
3
|
+
export declare function replaySseEvents(buffer: readonly BufferedSseEvent[], client: SseClient, lastEventId: number): void;
|