@spine-event-engine/server 2.0.0-snapshot.11
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/LICENSE +201 -0
- package/README.md +209 -0
- package/REFERENCE.md +760 -0
- package/dist/browser/browser-server.d.ts +95 -0
- package/dist/browser/browser-server.d.ts.map +1 -0
- package/dist/browser/browser-server.js +719 -0
- package/dist/browser/browser-server.js.map +1 -0
- package/dist/browser/durable-subscription-bindings.d.ts +122 -0
- package/dist/browser/durable-subscription-bindings.d.ts.map +1 -0
- package/dist/browser/durable-subscription-bindings.js +524 -0
- package/dist/browser/durable-subscription-bindings.js.map +1 -0
- package/dist/browser/index.d.ts +12 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +24 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/options.d.ts +183 -0
- package/dist/browser/options.d.ts.map +1 -0
- package/dist/browser/options.js +15 -0
- package/dist/browser/options.js.map +1 -0
- package/dist/bus/command-bus.d.ts +63 -0
- package/dist/bus/command-bus.d.ts.map +1 -0
- package/dist/bus/command-bus.js +236 -0
- package/dist/bus/command-bus.js.map +1 -0
- package/dist/bus/command-dispatcher-registry.d.ts +33 -0
- package/dist/bus/command-dispatcher-registry.d.ts.map +1 -0
- package/dist/bus/command-dispatcher-registry.js +75 -0
- package/dist/bus/command-dispatcher-registry.js.map +1 -0
- package/dist/bus/command-dispatcher.d.ts +25 -0
- package/dist/bus/command-dispatcher.d.ts.map +1 -0
- package/dist/bus/command-dispatcher.js +15 -0
- package/dist/bus/command-dispatcher.js.map +1 -0
- package/dist/bus/command-errors.d.ts +23 -0
- package/dist/bus/command-errors.d.ts.map +1 -0
- package/dist/bus/command-errors.js +52 -0
- package/dist/bus/command-errors.js.map +1 -0
- package/dist/bus/event-bus.d.ts +113 -0
- package/dist/bus/event-bus.d.ts.map +1 -0
- package/dist/bus/event-bus.js +518 -0
- package/dist/bus/event-bus.js.map +1 -0
- package/dist/bus/event-dispatcher-origin-schemas.d.ts +17 -0
- package/dist/bus/event-dispatcher-origin-schemas.d.ts.map +1 -0
- package/dist/bus/event-dispatcher-origin-schemas.js +32 -0
- package/dist/bus/event-dispatcher-origin-schemas.js.map +1 -0
- package/dist/bus/event-dispatcher-registry.d.ts +48 -0
- package/dist/bus/event-dispatcher-registry.d.ts.map +1 -0
- package/dist/bus/event-dispatcher-registry.js +176 -0
- package/dist/bus/event-dispatcher-registry.js.map +1 -0
- package/dist/bus/event-dispatcher.d.ts +48 -0
- package/dist/bus/event-dispatcher.d.ts.map +1 -0
- package/dist/bus/event-dispatcher.js +15 -0
- package/dist/bus/event-dispatcher.js.map +1 -0
- package/dist/context/bounded-context.d.ts +592 -0
- package/dist/context/bounded-context.d.ts.map +1 -0
- package/dist/context/bounded-context.js +1897 -0
- package/dist/context/bounded-context.js.map +1 -0
- package/dist/context/entity-inbox.d.ts +63 -0
- package/dist/context/entity-inbox.d.ts.map +1 -0
- package/dist/context/entity-inbox.js +387 -0
- package/dist/context/entity-inbox.js.map +1 -0
- package/dist/context/local-inbox-handoff.d.ts +248 -0
- package/dist/context/local-inbox-handoff.d.ts.map +1 -0
- package/dist/context/local-inbox-handoff.js +340 -0
- package/dist/context/local-inbox-handoff.js.map +1 -0
- package/dist/context/projection-handoff.d.ts +46 -0
- package/dist/context/projection-handoff.d.ts.map +1 -0
- package/dist/context/projection-handoff.js +177 -0
- package/dist/context/projection-handoff.js.map +1 -0
- package/dist/context/tenant-index.d.ts +41 -0
- package/dist/context/tenant-index.d.ts.map +1 -0
- package/dist/context/tenant-index.js +93 -0
- package/dist/context/tenant-index.js.map +1 -0
- package/dist/delivery/conditional-pickup.d.ts +25 -0
- package/dist/delivery/conditional-pickup.d.ts.map +1 -0
- package/dist/delivery/conditional-pickup.js +26 -0
- package/dist/delivery/conditional-pickup.js.map +1 -0
- package/dist/delivery/delivery-builder.d.ts +216 -0
- package/dist/delivery/delivery-builder.d.ts.map +1 -0
- package/dist/delivery/delivery-builder.js +323 -0
- package/dist/delivery/delivery-builder.js.map +1 -0
- package/dist/delivery/delivery-lease.d.ts +15 -0
- package/dist/delivery/delivery-lease.d.ts.map +1 -0
- package/dist/delivery/delivery-lease.js +44 -0
- package/dist/delivery/delivery-lease.js.map +1 -0
- package/dist/delivery/delivery-loop.d.ts +113 -0
- package/dist/delivery/delivery-loop.d.ts.map +1 -0
- package/dist/delivery/delivery-loop.js +119 -0
- package/dist/delivery/delivery-loop.js.map +1 -0
- package/dist/delivery/delivery-monitor.d.ts +165 -0
- package/dist/delivery/delivery-monitor.d.ts.map +1 -0
- package/dist/delivery/delivery-monitor.js +168 -0
- package/dist/delivery/delivery-monitor.js.map +1 -0
- package/dist/delivery/delivery-ports.d.ts +151 -0
- package/dist/delivery/delivery-ports.d.ts.map +1 -0
- package/dist/delivery/delivery-ports.js +15 -0
- package/dist/delivery/delivery-ports.js.map +1 -0
- package/dist/delivery/delivery-run-control.d.ts +50 -0
- package/dist/delivery/delivery-run-control.d.ts.map +1 -0
- package/dist/delivery/delivery-run-control.js +66 -0
- package/dist/delivery/delivery-run-control.js.map +1 -0
- package/dist/delivery/delivery-run-coordinator.d.ts +218 -0
- package/dist/delivery/delivery-run-coordinator.d.ts.map +1 -0
- package/dist/delivery/delivery-run-coordinator.js +609 -0
- package/dist/delivery/delivery-run-coordinator.js.map +1 -0
- package/dist/delivery/delivery-storage-error.d.ts +13 -0
- package/dist/delivery/delivery-storage-error.d.ts.map +1 -0
- package/dist/delivery/delivery-storage-error.js +30 -0
- package/dist/delivery/delivery-storage-error.js.map +1 -0
- package/dist/delivery/delivery-supervisor.d.ts +175 -0
- package/dist/delivery/delivery-supervisor.d.ts.map +1 -0
- package/dist/delivery/delivery-supervisor.js +469 -0
- package/dist/delivery/delivery-supervisor.js.map +1 -0
- package/dist/delivery/delivery-worker.d.ts +180 -0
- package/dist/delivery/delivery-worker.d.ts.map +1 -0
- package/dist/delivery/delivery-worker.js +232 -0
- package/dist/delivery/delivery-worker.js.map +1 -0
- package/dist/delivery/delivery.d.ts +236 -0
- package/dist/delivery/delivery.d.ts.map +1 -0
- package/dist/delivery/delivery.js +539 -0
- package/dist/delivery/delivery.js.map +1 -0
- package/dist/delivery/inbox-records.d.ts +19 -0
- package/dist/delivery/inbox-records.d.ts.map +1 -0
- package/dist/delivery/inbox-records.js +291 -0
- package/dist/delivery/inbox-records.js.map +1 -0
- package/dist/delivery/inbox-storage.d.ts +83 -0
- package/dist/delivery/inbox-storage.d.ts.map +1 -0
- package/dist/delivery/inbox-storage.js +336 -0
- package/dist/delivery/inbox-storage.js.map +1 -0
- package/dist/delivery/inbox.d.ts +272 -0
- package/dist/delivery/inbox.d.ts.map +1 -0
- package/dist/delivery/inbox.js +183 -0
- package/dist/delivery/inbox.js.map +1 -0
- package/dist/delivery/parked-delivery-obligations.d.ts +182 -0
- package/dist/delivery/parked-delivery-obligations.d.ts.map +1 -0
- package/dist/delivery/parked-delivery-obligations.js +390 -0
- package/dist/delivery/parked-delivery-obligations.js.map +1 -0
- package/dist/delivery/shard-index.d.ts +41 -0
- package/dist/delivery/shard-index.d.ts.map +1 -0
- package/dist/delivery/shard-index.js +67 -0
- package/dist/delivery/shard-index.js.map +1 -0
- package/dist/delivery/sharded-work-registry.d.ts +114 -0
- package/dist/delivery/sharded-work-registry.d.ts.map +1 -0
- package/dist/delivery/sharded-work-registry.js +361 -0
- package/dist/delivery/sharded-work-registry.js.map +1 -0
- package/dist/entity/entity-metadata.d.ts +173 -0
- package/dist/entity/entity-metadata.d.ts.map +1 -0
- package/dist/entity/entity-metadata.js +187 -0
- package/dist/entity/entity-metadata.js.map +1 -0
- package/dist/entity/entity-storage-descriptor.d.ts +64 -0
- package/dist/entity/entity-storage-descriptor.d.ts.map +1 -0
- package/dist/entity/entity-storage-descriptor.js +227 -0
- package/dist/entity/entity-storage-descriptor.js.map +1 -0
- package/dist/entity/entity-transaction.d.ts +372 -0
- package/dist/entity/entity-transaction.d.ts.map +1 -0
- package/dist/entity/entity-transaction.js +413 -0
- package/dist/entity/entity-transaction.js.map +1 -0
- package/dist/entity/entity-transition-validation.d.ts +47 -0
- package/dist/entity/entity-transition-validation.d.ts.map +1 -0
- package/dist/entity/entity-transition-validation.js +327 -0
- package/dist/entity/entity-transition-validation.js.map +1 -0
- package/dist/entity/entity.d.ts +605 -0
- package/dist/entity/entity.d.ts.map +1 -0
- package/dist/entity/entity.js +981 -0
- package/dist/entity/entity.js.map +1 -0
- package/dist/entity/implicit-required-id.d.ts +15 -0
- package/dist/entity/implicit-required-id.d.ts.map +1 -0
- package/dist/entity/implicit-required-id.js +123 -0
- package/dist/entity/implicit-required-id.js.map +1 -0
- package/dist/entity/spec-scanner.d.ts +14 -0
- package/dist/entity/spec-scanner.d.ts.map +1 -0
- package/dist/entity/spec-scanner.js +37 -0
- package/dist/entity/spec-scanner.js.map +1 -0
- package/dist/handler/command-registration-readiness.d.ts +99 -0
- package/dist/handler/command-registration-readiness.d.ts.map +1 -0
- package/dist/handler/command-registration-readiness.js +120 -0
- package/dist/handler/command-registration-readiness.js.map +1 -0
- package/dist/handler/declared-rejections.d.ts +11 -0
- package/dist/handler/declared-rejections.d.ts.map +1 -0
- package/dist/handler/declared-rejections.js +34 -0
- package/dist/handler/declared-rejections.js.map +1 -0
- package/dist/handler/event-handler-filter.d.ts +43 -0
- package/dist/handler/event-handler-filter.d.ts.map +1 -0
- package/dist/handler/event-handler-filter.js +128 -0
- package/dist/handler/event-handler-filter.js.map +1 -0
- package/dist/handler/event-registration-readiness.d.ts +196 -0
- package/dist/handler/event-registration-readiness.d.ts.map +1 -0
- package/dist/handler/event-registration-readiness.js +187 -0
- package/dist/handler/event-registration-readiness.js.map +1 -0
- package/dist/handler/external.d.ts +10 -0
- package/dist/handler/external.d.ts.map +1 -0
- package/dist/handler/external.js +15 -0
- package/dist/handler/external.js.map +1 -0
- package/dist/handler/generated-handler-registry.d.ts +185 -0
- package/dist/handler/generated-handler-registry.d.ts.map +1 -0
- package/dist/handler/generated-handler-registry.js +439 -0
- package/dist/handler/generated-handler-registry.js.map +1 -0
- package/dist/handler/generated-registry-discovery.d.ts +94 -0
- package/dist/handler/generated-registry-discovery.d.ts.map +1 -0
- package/dist/handler/generated-registry-discovery.js +226 -0
- package/dist/handler/generated-registry-discovery.js.map +1 -0
- package/dist/handler/handler-decorators.d.ts +151 -0
- package/dist/handler/handler-decorators.d.ts.map +1 -0
- package/dist/handler/handler-decorators.js +275 -0
- package/dist/handler/handler-decorators.js.map +1 -0
- package/dist/handler/handler-metadata.d.ts +553 -0
- package/dist/handler/handler-metadata.d.ts.map +1 -0
- package/dist/handler/handler-metadata.js +437 -0
- package/dist/handler/handler-metadata.js.map +1 -0
- package/dist/handler/registration-readiness-metadata.d.ts +68 -0
- package/dist/handler/registration-readiness-metadata.d.ts.map +1 -0
- package/dist/handler/registration-readiness-metadata.js +171 -0
- package/dist/handler/registration-readiness-metadata.js.map +1 -0
- package/dist/handler/rejection-source.d.ts +11 -0
- package/dist/handler/rejection-source.d.ts.map +1 -0
- package/dist/handler/rejection-source.js +25 -0
- package/dist/handler/rejection-source.js.map +1 -0
- package/dist/handler/standalone.d.ts +25 -0
- package/dist/handler/standalone.d.ts.map +1 -0
- package/dist/handler/standalone.js +38 -0
- package/dist/handler/standalone.js.map +1 -0
- package/dist/index.d.ts +46 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +54 -0
- package/dist/index.js.map +1 -0
- package/dist/integration/external-messages.d.ts +49 -0
- package/dist/integration/external-messages.d.ts.map +1 -0
- package/dist/integration/external-messages.js +112 -0
- package/dist/integration/external-messages.js.map +1 -0
- package/dist/integration/integration-broker.d.ts +74 -0
- package/dist/integration/integration-broker.d.ts.map +1 -0
- package/dist/integration/integration-broker.js +444 -0
- package/dist/integration/integration-broker.js.map +1 -0
- package/dist/integration/third-party-context.d.ts +56 -0
- package/dist/integration/third-party-context.d.ts.map +1 -0
- package/dist/integration/third-party-context.js +130 -0
- package/dist/integration/third-party-context.js.map +1 -0
- package/dist/repository/command-errors.d.ts +25 -0
- package/dist/repository/command-errors.d.ts.map +1 -0
- package/dist/repository/command-errors.js +43 -0
- package/dist/repository/command-errors.js.map +1 -0
- package/dist/repository/command-routing.d.ts +72 -0
- package/dist/repository/command-routing.d.ts.map +1 -0
- package/dist/repository/command-routing.js +98 -0
- package/dist/repository/command-routing.js.map +1 -0
- package/dist/repository/commit-fence.d.ts +22 -0
- package/dist/repository/commit-fence.d.ts.map +1 -0
- package/dist/repository/commit-fence.js +37 -0
- package/dist/repository/commit-fence.js.map +1 -0
- package/dist/repository/event-routing.d.ts +71 -0
- package/dist/repository/event-routing.d.ts.map +1 -0
- package/dist/repository/event-routing.js +96 -0
- package/dist/repository/event-routing.js.map +1 -0
- package/dist/repository/primitive-id.d.ts +75 -0
- package/dist/repository/primitive-id.d.ts.map +1 -0
- package/dist/repository/primitive-id.js +85 -0
- package/dist/repository/primitive-id.js.map +1 -0
- package/dist/repository/repository.d.ts +667 -0
- package/dist/repository/repository.d.ts.map +1 -0
- package/dist/repository/repository.js +3510 -0
- package/dist/repository/repository.js.map +1 -0
- package/dist/repository/routing-declarations.d.ts +75 -0
- package/dist/repository/routing-declarations.d.ts.map +1 -0
- package/dist/repository/routing-declarations.js +101 -0
- package/dist/repository/routing-declarations.js.map +1 -0
- package/dist/repository/state-update-routing.d.ts +66 -0
- package/dist/repository/state-update-routing.d.ts.map +1 -0
- package/dist/repository/state-update-routing.js +91 -0
- package/dist/repository/state-update-routing.js.map +1 -0
- package/dist/runtime/runtime.d.ts +156 -0
- package/dist/runtime/runtime.d.ts.map +1 -0
- package/dist/runtime/runtime.js +215 -0
- package/dist/runtime/runtime.js.map +1 -0
- package/dist/runtime/signal-intake.d.ts +84 -0
- package/dist/runtime/signal-intake.d.ts.map +1 -0
- package/dist/runtime/signal-intake.js +94 -0
- package/dist/runtime/signal-intake.js.map +1 -0
- package/dist/runtime/signal-metadata.d.ts +217 -0
- package/dist/runtime/signal-metadata.d.ts.map +1 -0
- package/dist/runtime/signal-metadata.js +333 -0
- package/dist/runtime/signal-metadata.js.map +1 -0
- package/dist/runtime/signal-publisher.d.ts +144 -0
- package/dist/runtime/signal-publisher.d.ts.map +1 -0
- package/dist/runtime/signal-publisher.js +248 -0
- package/dist/runtime/signal-publisher.js.map +1 -0
- package/dist/runtime/standalone-handler-runtime.d.ts +114 -0
- package/dist/runtime/standalone-handler-runtime.d.ts.map +1 -0
- package/dist/runtime/standalone-handler-runtime.js +307 -0
- package/dist/runtime/standalone-handler-runtime.js.map +1 -0
- package/dist/server/environment-attachment.d.ts +356 -0
- package/dist/server/environment-attachment.d.ts.map +1 -0
- package/dist/server/environment-attachment.js +2062 -0
- package/dist/server/environment-attachment.js.map +1 -0
- package/dist/server/environment-delivery-records.d.ts +77 -0
- package/dist/server/environment-delivery-records.d.ts.map +1 -0
- package/dist/server/environment-delivery-records.js +282 -0
- package/dist/server/environment-delivery-records.js.map +1 -0
- package/dist/server/environment-delivery-worker.d.ts +161 -0
- package/dist/server/environment-delivery-worker.d.ts.map +1 -0
- package/dist/server/environment-delivery-worker.js +673 -0
- package/dist/server/environment-delivery-worker.js.map +1 -0
- package/dist/server/environment.d.ts +43 -0
- package/dist/server/environment.d.ts.map +1 -0
- package/dist/server/environment.js +90 -0
- package/dist/server/environment.js.map +1 -0
- package/dist/server/managed-child-subscription.d.ts +11 -0
- package/dist/server/managed-child-subscription.d.ts.map +1 -0
- package/dist/server/managed-child-subscription.js +44 -0
- package/dist/server/managed-child-subscription.js.map +1 -0
- package/dist/server/managed-server-application.d.ts +327 -0
- package/dist/server/managed-server-application.d.ts.map +1 -0
- package/dist/server/managed-server-application.js +937 -0
- package/dist/server/managed-server-application.js.map +1 -0
- package/dist/server/node-coordinator.d.ts +191 -0
- package/dist/server/node-coordinator.d.ts.map +1 -0
- package/dist/server/node-coordinator.js +552 -0
- package/dist/server/node-coordinator.js.map +1 -0
- package/dist/server/process-server-coordinator.d.ts +15 -0
- package/dist/server/process-server-coordinator.d.ts.map +1 -0
- package/dist/server/process-server-coordinator.js +112 -0
- package/dist/server/process-server-coordinator.js.map +1 -0
- package/dist/server/reserved-spine-rpc-paths.json +8 -0
- package/dist/server/retryable-close.d.ts +28 -0
- package/dist/server/retryable-close.d.ts.map +1 -0
- package/dist/server/retryable-close.js +129 -0
- package/dist/server/retryable-close.js.map +1 -0
- package/dist/server/server-environment.d.ts +180 -0
- package/dist/server/server-environment.d.ts.map +1 -0
- package/dist/server/server-environment.js +418 -0
- package/dist/server/server-environment.js.map +1 -0
- package/dist/server/server-log.d.ts +18 -0
- package/dist/server/server-log.d.ts.map +1 -0
- package/dist/server/server-log.js +100 -0
- package/dist/server/server-log.js.map +1 -0
- package/dist/server/server.d.ts +221 -0
- package/dist/server/server.d.ts.map +1 -0
- package/dist/server/server.js +704 -0
- package/dist/server/server.js.map +1 -0
- package/dist/services/query-reader.d.ts +19 -0
- package/dist/services/query-reader.d.ts.map +1 -0
- package/dist/services/query-reader.js +43 -0
- package/dist/services/query-reader.js.map +1 -0
- package/dist/services/spine-services.d.ts +88 -0
- package/dist/services/spine-services.d.ts.map +1 -0
- package/dist/services/spine-services.js +1582 -0
- package/dist/services/spine-services.js.map +1 -0
- package/dist/spi/delivery.d.ts +5 -0
- package/dist/spi/delivery.d.ts.map +1 -0
- package/dist/spi/delivery.js +18 -0
- package/dist/spi/delivery.js.map +1 -0
- package/dist/spi/handler-registry.d.ts +8 -0
- package/dist/spi/handler-registry.d.ts.map +1 -0
- package/dist/spi/handler-registry.js +15 -0
- package/dist/spi/handler-registry.js.map +1 -0
- package/dist/stand/stand.d.ts +294 -0
- package/dist/stand/stand.d.ts.map +1 -0
- package/dist/stand/stand.js +681 -0
- package/dist/stand/stand.js.map +1 -0
- package/dist/stand/subscription-observer.d.ts +53 -0
- package/dist/stand/subscription-observer.d.ts.map +1 -0
- package/dist/stand/subscription-observer.js +444 -0
- package/dist/stand/subscription-observer.js.map +1 -0
- package/dist/stand/subscription-records.d.ts +12 -0
- package/dist/stand/subscription-records.d.ts.map +1 -0
- package/dist/stand/subscription-records.js +99 -0
- package/dist/stand/subscription-records.js.map +1 -0
- package/dist/stand/subscription-registry.d.ts +285 -0
- package/dist/stand/subscription-registry.d.ts.map +1 -0
- package/dist/stand/subscription-registry.js +403 -0
- package/dist/stand/subscription-registry.js.map +1 -0
- package/dist/stand/subscription-runtime.d.ts +102 -0
- package/dist/stand/subscription-runtime.d.ts.map +1 -0
- package/dist/stand/subscription-runtime.js +380 -0
- package/dist/stand/subscription-runtime.js.map +1 -0
- package/dist/testing/index.d.ts +36 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +54 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +76 -0
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2026, CodeMatters. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
|
5
|
+
* in compliance with the License. You may obtain a copy of the License at
|
|
6
|
+
*
|
|
7
|
+
* https://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
*
|
|
9
|
+
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
|
10
|
+
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
|
11
|
+
* or implied. See the License for the specific language governing permissions and limitations under
|
|
12
|
+
* the License.
|
|
13
|
+
*/
|
|
14
|
+
import { ServerEnvironment } from "../server/server-environment.js";
|
|
15
|
+
import { Delivery as CoreDelivery } from "./delivery.js";
|
|
16
|
+
import { DeliveryMonitor } from "./delivery-monitor.js";
|
|
17
|
+
import { InboxTargets } from "./inbox.js";
|
|
18
|
+
import { ShardIndex } from "./shard-index.js";
|
|
19
|
+
import { ShardedWorkRegistry, shardedWorkRegistryAccess } from "./sharded-work-registry.js";
|
|
20
|
+
const defaultContext = Object.freeze({
|
|
21
|
+
name: "__System_Delivery__",
|
|
22
|
+
multitenant: false,
|
|
23
|
+
});
|
|
24
|
+
const defaultPageSize = 100;
|
|
25
|
+
const controlledDeliveryRunners = new WeakMap();
|
|
26
|
+
/**
|
|
27
|
+
* Exposes package-local controls for builder-created deliveries.
|
|
28
|
+
*/
|
|
29
|
+
export const deliveryControls = Object.freeze({
|
|
30
|
+
// prettier-ignore
|
|
31
|
+
/**
|
|
32
|
+
* Finds controlled execution for a builder-created delivery.
|
|
33
|
+
*/
|
|
34
|
+
runner(delivery) {
|
|
35
|
+
return controlledDeliveryRunners.get(delivery);
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
/**
|
|
39
|
+
* Places every target in one local shard.
|
|
40
|
+
*/
|
|
41
|
+
export class UniformAcrossAllShards {
|
|
42
|
+
static #single = new UniformAcrossAllShards(1);
|
|
43
|
+
/**
|
|
44
|
+
* Returns a strategy with the requested positive number of shards.
|
|
45
|
+
*
|
|
46
|
+
* @param shards The number of addressable shards.
|
|
47
|
+
* @returns A uniform shard strategy.
|
|
48
|
+
*/
|
|
49
|
+
static forNumber(shards) {
|
|
50
|
+
return new UniformAcrossAllShards(shards);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Returns the shared single-shard strategy.
|
|
54
|
+
*
|
|
55
|
+
* @returns The shared single-shard strategy.
|
|
56
|
+
*/
|
|
57
|
+
static singleShard() {
|
|
58
|
+
return this.#single;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Number of uniformly distributed shards.
|
|
62
|
+
*/
|
|
63
|
+
shardCount;
|
|
64
|
+
constructor(shards) {
|
|
65
|
+
if (!Number.isSafeInteger(shards) || shards <= 0) {
|
|
66
|
+
throw new Error("Delivery shard count must be a positive safe integer.");
|
|
67
|
+
}
|
|
68
|
+
this.shardCount = shards;
|
|
69
|
+
Object.freeze(this);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Determines a stable shard from a target identity.
|
|
73
|
+
*
|
|
74
|
+
* @param targetId The target identity.
|
|
75
|
+
* @param targetType The target type URL.
|
|
76
|
+
* @returns The stable shard for the target.
|
|
77
|
+
*/
|
|
78
|
+
shardFor(targetId, targetType) {
|
|
79
|
+
if (typeof targetId.typeUrl !== "string" || targetId.typeUrl.length === 0) {
|
|
80
|
+
throw new Error("Delivery target ID must be a non-default Any.");
|
|
81
|
+
}
|
|
82
|
+
if (typeof targetType !== "string" || targetType.length === 0) {
|
|
83
|
+
throw new Error("Delivery target type must be a non-empty string.");
|
|
84
|
+
}
|
|
85
|
+
return new ShardIndex(DeliveryValues.hash(`${targetType}:${InboxTargets.shardKey(targetId)}`) % this.shardCount, this.shardCount);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
export { DeliveryMonitor } from "./delivery-monitor.js";
|
|
89
|
+
/**
|
|
90
|
+
* Configures and snapshots one public {@link Delivery}.
|
|
91
|
+
*/
|
|
92
|
+
export class DeliveryBuilder {
|
|
93
|
+
#context;
|
|
94
|
+
#storageFactory;
|
|
95
|
+
#workRegistry;
|
|
96
|
+
#inbox;
|
|
97
|
+
#strategy;
|
|
98
|
+
#monitor;
|
|
99
|
+
#pageSize;
|
|
100
|
+
#node;
|
|
101
|
+
#worker;
|
|
102
|
+
/**
|
|
103
|
+
* Sets the storage namespace for Inbox and shard records.
|
|
104
|
+
*
|
|
105
|
+
* @param context The delivery storage namespace.
|
|
106
|
+
* @returns This builder.
|
|
107
|
+
*/
|
|
108
|
+
withContext(context) {
|
|
109
|
+
this.#context = DeliveryValues.snapshotContext(context);
|
|
110
|
+
return this;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Sets the storage factory.
|
|
114
|
+
*
|
|
115
|
+
* @param storageFactory The durable storage factory.
|
|
116
|
+
* @returns This builder.
|
|
117
|
+
*/
|
|
118
|
+
withStorageFactory(storageFactory) {
|
|
119
|
+
this.#storageFactory = storageFactory;
|
|
120
|
+
return this;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Sets the registry used for exclusive shard pickup.
|
|
124
|
+
*
|
|
125
|
+
* @param workRegistry The shard work registry.
|
|
126
|
+
* @returns This builder.
|
|
127
|
+
*/
|
|
128
|
+
withWorkRegistry(workRegistry) {
|
|
129
|
+
this.#workRegistry = workRegistry;
|
|
130
|
+
return this;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Sets an inbox port instead of the local durable inbox default.
|
|
134
|
+
*
|
|
135
|
+
* @param inbox The inbox port.
|
|
136
|
+
* @returns This builder.
|
|
137
|
+
*/
|
|
138
|
+
withInbox(inbox) {
|
|
139
|
+
this.#inbox = inbox;
|
|
140
|
+
return this;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Sets the target-to-shard strategy.
|
|
144
|
+
*
|
|
145
|
+
* @param strategy The target strategy.
|
|
146
|
+
* @returns This builder.
|
|
147
|
+
*/
|
|
148
|
+
withStrategy(strategy) {
|
|
149
|
+
this.#strategy = DeliveryValues.requireStrategy(strategy);
|
|
150
|
+
return this;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Sets finite-run observation and cancellation.
|
|
154
|
+
*
|
|
155
|
+
* @param monitor The run monitor.
|
|
156
|
+
* @returns This builder.
|
|
157
|
+
*/
|
|
158
|
+
withMonitor(monitor) {
|
|
159
|
+
this.#monitor = monitor;
|
|
160
|
+
return this;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Sets the positive accepted-work bound for one page.
|
|
164
|
+
*
|
|
165
|
+
* @param pageSize The positive page size.
|
|
166
|
+
* @returns This builder.
|
|
167
|
+
*/
|
|
168
|
+
withPageSize(pageSize) {
|
|
169
|
+
this.#pageSize = DeliveryValues.requireBound("Delivery page size", pageSize, 1_000);
|
|
170
|
+
return this;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Sets the node identity used for shard pickup.
|
|
174
|
+
*
|
|
175
|
+
* @param node The non-empty node identity.
|
|
176
|
+
* @returns This builder.
|
|
177
|
+
*/
|
|
178
|
+
withNode(node) {
|
|
179
|
+
if (typeof node !== "string" || node.length === 0) {
|
|
180
|
+
throw new Error("Delivery node must be a non-empty string.");
|
|
181
|
+
}
|
|
182
|
+
if (this.#worker?.nodeId?.value !== undefined && this.#worker.nodeId.value !== node) {
|
|
183
|
+
throw new Error("Delivery node must match the configured worker node.");
|
|
184
|
+
}
|
|
185
|
+
this.#node = node;
|
|
186
|
+
return this;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Sets the complete opaque worker identity used for shard ownership.
|
|
190
|
+
*
|
|
191
|
+
* @param worker The generated worker identity for this delivery lifetime.
|
|
192
|
+
* @returns This builder.
|
|
193
|
+
*/
|
|
194
|
+
withWorker(worker) {
|
|
195
|
+
if (worker.nodeId === undefined ||
|
|
196
|
+
worker.nodeId.value.trim() === "" ||
|
|
197
|
+
worker.value.trim() === "") {
|
|
198
|
+
throw new Error("Delivery worker must contain non-blank node and value.");
|
|
199
|
+
}
|
|
200
|
+
if (this.#node !== undefined && this.#node !== worker.nodeId.value) {
|
|
201
|
+
throw new Error("Delivery worker node must match the configured delivery node.");
|
|
202
|
+
}
|
|
203
|
+
this.#worker = DeliveryValues.snapshotWorker(worker);
|
|
204
|
+
return this;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Creates one immutable delivery from the current builder configuration.
|
|
208
|
+
*
|
|
209
|
+
* @returns The configured delivery.
|
|
210
|
+
*/
|
|
211
|
+
build() {
|
|
212
|
+
const context = this.#context ?? defaultContext;
|
|
213
|
+
const strategy = DeliveryValues.snapshotStrategy(this.#strategy ?? UniformAcrossAllShards.singleShard());
|
|
214
|
+
let storageFactory = this.#storageFactory;
|
|
215
|
+
let node = this.#node;
|
|
216
|
+
if (storageFactory === undefined || node === undefined) {
|
|
217
|
+
const environment = ServerEnvironment.instance();
|
|
218
|
+
storageFactory ??= environment.storageFactory;
|
|
219
|
+
node ??= this.#worker?.nodeId?.value ?? environment.nodeId;
|
|
220
|
+
}
|
|
221
|
+
if (this.#workRegistry instanceof ShardedWorkRegistry &&
|
|
222
|
+
!shardedWorkRegistryAccess.matches(this.#workRegistry, context, storageFactory)) {
|
|
223
|
+
throw new Error("Delivery work registry must use the delivery storage context and factory.");
|
|
224
|
+
}
|
|
225
|
+
const workRegistry = this.#workRegistry ?? new ShardedWorkRegistry({ context, storageFactory });
|
|
226
|
+
const inboxSessionKind = this.#inbox?.sessionKind ?? "LEASED";
|
|
227
|
+
if (inboxSessionKind !== workRegistry.sessionKind)
|
|
228
|
+
throw new Error("Delivery inbox and work registry session kinds must match.");
|
|
229
|
+
const core = new CoreDelivery({
|
|
230
|
+
context,
|
|
231
|
+
storageFactory,
|
|
232
|
+
workRegistry,
|
|
233
|
+
...(this.#inbox === undefined ? {} : { inbox: this.#inbox }),
|
|
234
|
+
strategy,
|
|
235
|
+
...(this.#monitor === undefined ? {} : { monitor: this.#monitor }),
|
|
236
|
+
pageSize: this.#pageSize ?? defaultPageSize,
|
|
237
|
+
node,
|
|
238
|
+
...(this.#worker === undefined ? {} : { worker: this.#worker }),
|
|
239
|
+
});
|
|
240
|
+
return new BuiltDelivery(core);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
class BuiltDelivery {
|
|
244
|
+
context;
|
|
245
|
+
storageFactory;
|
|
246
|
+
strategy;
|
|
247
|
+
node;
|
|
248
|
+
worker;
|
|
249
|
+
pageSize;
|
|
250
|
+
inbox;
|
|
251
|
+
#core;
|
|
252
|
+
constructor(core) {
|
|
253
|
+
this.#core = core;
|
|
254
|
+
this.context = core.context;
|
|
255
|
+
this.storageFactory = core.storageFactory;
|
|
256
|
+
this.strategy = core.strategy;
|
|
257
|
+
this.node = core.node;
|
|
258
|
+
this.worker = core.worker;
|
|
259
|
+
this.pageSize = core.pageSize;
|
|
260
|
+
this.inbox = core.inbox;
|
|
261
|
+
controlledDeliveryRunners.set(this, (options) => core.runControlled(options));
|
|
262
|
+
Object.freeze(this);
|
|
263
|
+
}
|
|
264
|
+
run(options) {
|
|
265
|
+
return this.#core.run(options);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Groups immutable delivery configuration operations.
|
|
270
|
+
*/
|
|
271
|
+
const DeliveryValues = Object.freeze({
|
|
272
|
+
requireStrategy(strategy) {
|
|
273
|
+
if (!Number.isSafeInteger(strategy.shardCount) || strategy.shardCount <= 0) {
|
|
274
|
+
throw new Error("Delivery strategy shard count must be a positive safe integer.");
|
|
275
|
+
}
|
|
276
|
+
return strategy;
|
|
277
|
+
},
|
|
278
|
+
snapshotStrategy(strategy) {
|
|
279
|
+
const shardCount = this.requireStrategy(strategy).shardCount;
|
|
280
|
+
return Object.freeze({
|
|
281
|
+
shardCount,
|
|
282
|
+
shardFor(targetId, targetType) {
|
|
283
|
+
const shard = strategy.shardFor(InboxTargets.clone(targetId), targetType);
|
|
284
|
+
if (shard.ofTotal !== shardCount) {
|
|
285
|
+
throw new Error("Delivery strategy shard total must equal its resolved shard count.");
|
|
286
|
+
}
|
|
287
|
+
return shard;
|
|
288
|
+
},
|
|
289
|
+
});
|
|
290
|
+
},
|
|
291
|
+
hash(value) {
|
|
292
|
+
let result = 0;
|
|
293
|
+
for (const character of value) {
|
|
294
|
+
result = (result * 31 + character.charCodeAt(0)) >>> 0;
|
|
295
|
+
}
|
|
296
|
+
return result;
|
|
297
|
+
},
|
|
298
|
+
requireBound(name, value, max) {
|
|
299
|
+
if (!Number.isSafeInteger(value) || value <= 0) {
|
|
300
|
+
throw new Error(`${name} must be a positive safe integer.`);
|
|
301
|
+
}
|
|
302
|
+
if (value > max) {
|
|
303
|
+
throw new Error(`${name} must be at most ${String(max)}.`);
|
|
304
|
+
}
|
|
305
|
+
return value;
|
|
306
|
+
},
|
|
307
|
+
snapshotContext(context) {
|
|
308
|
+
if (typeof context.name !== "string" || context.name.length === 0) {
|
|
309
|
+
throw new Error("Delivery storage context name must be a non-empty string.");
|
|
310
|
+
}
|
|
311
|
+
return Object.freeze({ ...context });
|
|
312
|
+
},
|
|
313
|
+
snapshotWorker(worker) {
|
|
314
|
+
const nodeId = worker.nodeId;
|
|
315
|
+
if (nodeId === undefined)
|
|
316
|
+
throw new Error("Delivery worker must include a node identifier.");
|
|
317
|
+
return Object.freeze({
|
|
318
|
+
nodeId: Object.freeze({ value: nodeId.value }),
|
|
319
|
+
value: worker.value,
|
|
320
|
+
});
|
|
321
|
+
},
|
|
322
|
+
});
|
|
323
|
+
//# sourceMappingURL=delivery-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delivery-builder.js","sourceRoot":"","sources":["../../src/delivery/delivery-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Smallest supported worker and shard lease duration in milliseconds.
|
|
3
|
+
*/
|
|
4
|
+
export declare const minDeliveryLeaseMs = 1000;
|
|
5
|
+
/**
|
|
6
|
+
* Largest supported worker and shard lease duration in milliseconds.
|
|
7
|
+
*/
|
|
8
|
+
export declare const maxDeliveryLeaseMs = 2147483647;
|
|
9
|
+
/**
|
|
10
|
+
* Validates delivery and shard lease durations.
|
|
11
|
+
*/
|
|
12
|
+
export declare const DeliveryLeases: Readonly<{
|
|
13
|
+
requireMs(owner: "Delivery" | "ShardedWorkRegistry", value: unknown): number;
|
|
14
|
+
}>;
|
|
15
|
+
//# sourceMappingURL=delivery-lease.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delivery-lease.d.ts","sourceRoot":"","sources":["../../src/delivery/delivery-lease.ts"],"names":[],"mappings":"AAcA;;GAEG;AACH,eAAO,MAAM,kBAAkB,OAAQ,CAAC;AAExC;;GAEG;AACH,eAAO,MAAM,kBAAkB,aAAgB,CAAC;AAEhD;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC;IACpC,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,qBAAqB,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;CAC9E,CAwBC,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2026, CodeMatters. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
|
5
|
+
* in compliance with the License. You may obtain a copy of the License at
|
|
6
|
+
*
|
|
7
|
+
* https://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
*
|
|
9
|
+
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
|
10
|
+
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
|
11
|
+
* or implied. See the License for the specific language governing permissions and limitations under
|
|
12
|
+
* the License.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Smallest supported worker and shard lease duration in milliseconds.
|
|
16
|
+
*/
|
|
17
|
+
export const minDeliveryLeaseMs = 1_000;
|
|
18
|
+
/**
|
|
19
|
+
* Largest supported worker and shard lease duration in milliseconds.
|
|
20
|
+
*/
|
|
21
|
+
export const maxDeliveryLeaseMs = 2_147_483_647;
|
|
22
|
+
/**
|
|
23
|
+
* Validates delivery and shard lease durations.
|
|
24
|
+
*/
|
|
25
|
+
export const DeliveryLeases = Object.freeze({
|
|
26
|
+
// prettier-ignore
|
|
27
|
+
/**
|
|
28
|
+
* Validates one delivery or shard lease duration.
|
|
29
|
+
*
|
|
30
|
+
* @param owner Names the component that owns the lease.
|
|
31
|
+
* @param value Supplies the requested lease duration.
|
|
32
|
+
* @returns The validated lease duration in milliseconds.
|
|
33
|
+
*/
|
|
34
|
+
requireMs(owner, value) {
|
|
35
|
+
if (!Number.isSafeInteger(value) || value < minDeliveryLeaseMs) {
|
|
36
|
+
throw new Error(`${owner} leaseMs must be a positive safe integer at least ${String(minDeliveryLeaseMs)}.`);
|
|
37
|
+
}
|
|
38
|
+
if (value > maxDeliveryLeaseMs) {
|
|
39
|
+
throw new Error(`${owner} leaseMs must be a positive safe integer at most ${String(maxDeliveryLeaseMs)}.`);
|
|
40
|
+
}
|
|
41
|
+
return value;
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
//# sourceMappingURL=delivery-lease.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delivery-lease.js","sourceRoot":"","sources":["../../src/delivery/delivery-lease.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAExC;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,aAAa,CAAC;AAEhD;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAEtB,MAAM,CAAC,MAAM,CAAC;IACjB,kBAAkB;IAElB;;;;;;OAMG;IACH,SAAS,CAAC,KAAyC,EAAE,KAAc;QACjE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAK,KAAgB,GAAG,kBAAkB,EAAE,CAAC;YAC3E,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,qDAAqD,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAC3F,CAAC;QACJ,CAAC;QACD,IAAK,KAAgB,GAAG,kBAAkB,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,oDAAoD,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAC1F,CAAC;QACJ,CAAC;QAED,OAAO,KAAe,CAAC;IACzB,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import type { Delivery, OnDeliveryMessage } from "./delivery.js";
|
|
2
|
+
import type { DeliveryOperationOptions } from "./delivery-ports.js";
|
|
3
|
+
import { ShardIndex } from "./shard-index.js";
|
|
4
|
+
/**
|
|
5
|
+
* Runs one finite direct delivery drain at a time.
|
|
6
|
+
*/
|
|
7
|
+
export declare class DeliveryLoop {
|
|
8
|
+
#private;
|
|
9
|
+
/**
|
|
10
|
+
* Creates a loop for one selected shard.
|
|
11
|
+
*
|
|
12
|
+
* @param options The immutable drain configuration.
|
|
13
|
+
*/
|
|
14
|
+
constructor(options: DeliveryLoopOptions);
|
|
15
|
+
/**
|
|
16
|
+
* Stops admission of later loop runs.
|
|
17
|
+
*/
|
|
18
|
+
stop(): void;
|
|
19
|
+
/**
|
|
20
|
+
* Stops the loop and waits for its active drain to settle.
|
|
21
|
+
*
|
|
22
|
+
* @returns A promise that settles after the active drain, if any.
|
|
23
|
+
*/
|
|
24
|
+
close(): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Executes one finite direct delivery drain.
|
|
27
|
+
*
|
|
28
|
+
* @returns The terminal loop result.
|
|
29
|
+
*/
|
|
30
|
+
run(): Promise<DeliveryLoopRun>;
|
|
31
|
+
/**
|
|
32
|
+
* Returns the latest immutable loop progress.
|
|
33
|
+
*
|
|
34
|
+
* @returns The latest terminal progress.
|
|
35
|
+
*/
|
|
36
|
+
progress(): DeliveryLoopProgress;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Configures one finite direct delivery loop.
|
|
40
|
+
*/
|
|
41
|
+
export interface DeliveryLoopOptions {
|
|
42
|
+
/**
|
|
43
|
+
* Supplies the direct delivery runtime.
|
|
44
|
+
*/
|
|
45
|
+
readonly delivery: Delivery;
|
|
46
|
+
/**
|
|
47
|
+
* Selects the shard to drain.
|
|
48
|
+
*/
|
|
49
|
+
readonly shard: ShardIndex;
|
|
50
|
+
/**
|
|
51
|
+
* Dispatches one supported Inbox message.
|
|
52
|
+
*/
|
|
53
|
+
readonly onMessage: OnDeliveryMessage;
|
|
54
|
+
/**
|
|
55
|
+
* Propagates cancellation and deadline information.
|
|
56
|
+
*/
|
|
57
|
+
readonly operation?: DeliveryOperationOptions;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Identifies the terminal state of a finite loop.
|
|
61
|
+
*/
|
|
62
|
+
export type DeliveryLoopStatus = "IDLE" | "SKIPPED" | "STOPPED" | "FAILED";
|
|
63
|
+
/**
|
|
64
|
+
* Combines loop progress with its terminal state.
|
|
65
|
+
*/
|
|
66
|
+
export interface DeliveryLoopRun extends DeliveryLoopProgress {
|
|
67
|
+
/**
|
|
68
|
+
* Identifies why the loop ended.
|
|
69
|
+
*/
|
|
70
|
+
readonly status: DeliveryLoopStatus;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Counts work observed by one finite loop.
|
|
74
|
+
*/
|
|
75
|
+
export interface DeliveryLoopProgress {
|
|
76
|
+
/**
|
|
77
|
+
* Counts finite drains started by the loop.
|
|
78
|
+
*/
|
|
79
|
+
readonly runs: number;
|
|
80
|
+
/**
|
|
81
|
+
* Counts messages considered for dispatch.
|
|
82
|
+
*/
|
|
83
|
+
readonly processed: number;
|
|
84
|
+
/**
|
|
85
|
+
* Counts messages whose endpoint callback ran.
|
|
86
|
+
*/
|
|
87
|
+
readonly accepted: number;
|
|
88
|
+
/**
|
|
89
|
+
* Counts messages acknowledged as delivered.
|
|
90
|
+
*/
|
|
91
|
+
readonly delivered: number;
|
|
92
|
+
/**
|
|
93
|
+
* Counts dispatch or acknowledgement failures.
|
|
94
|
+
*/
|
|
95
|
+
readonly failed: number;
|
|
96
|
+
/**
|
|
97
|
+
* Lists retained ephemeral failure facts.
|
|
98
|
+
*/
|
|
99
|
+
readonly failures: readonly import("./delivery.js").DeliveryFailure[];
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Exposes package-local loop progress for retained integrations.
|
|
103
|
+
*/
|
|
104
|
+
export declare const deliveryLoopAccess: Readonly<{
|
|
105
|
+
/**
|
|
106
|
+
* Returns the current progress for one loop.
|
|
107
|
+
*
|
|
108
|
+
* @param loop The loop to inspect.
|
|
109
|
+
* @returns The loop's immutable progress.
|
|
110
|
+
*/
|
|
111
|
+
progress(loop: DeliveryLoop): DeliveryLoopProgress;
|
|
112
|
+
}>;
|
|
113
|
+
//# sourceMappingURL=delivery-loop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delivery-loop.d.ts","sourceRoot":"","sources":["../../src/delivery/delivery-loop.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,QAAQ,EAAe,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC9E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;GAEG;AACH,qBAAa,YAAY;;IAMvB;;;;OAIG;gBACS,OAAO,EAAE,mBAAmB;IAWxC;;OAEG;IACH,IAAI,IAAI,IAAI;IAIZ;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;;;OAIG;IACH,GAAG,IAAI,OAAO,CAAC,eAAe,CAAC;IAiB/B;;;;OAIG;IACH,QAAQ,IAAI,oBAAoB;CAmBjC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAGlC;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAE5B;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAE3B;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IAEtC;;OAEG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,wBAAwB,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE3E;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,oBAAoB;IAG3D;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IAGnC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,eAAe,EAAE,eAAe,EAAE,CAAC;CACvE;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC;IAGxC;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,oBAAoB,CAAC;CACpD,CAIC,CAAC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2026, CodeMatters. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
|
5
|
+
* in compliance with the License. You may obtain a copy of the License at
|
|
6
|
+
*
|
|
7
|
+
* https://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
*
|
|
9
|
+
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
|
10
|
+
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
|
11
|
+
* or implied. See the License for the specific language governing permissions and limitations under
|
|
12
|
+
* the License.
|
|
13
|
+
*/
|
|
14
|
+
import { ShardIndex } from "./shard-index.js";
|
|
15
|
+
/**
|
|
16
|
+
* Runs one finite direct delivery drain at a time.
|
|
17
|
+
*/
|
|
18
|
+
export class DeliveryLoop {
|
|
19
|
+
#options;
|
|
20
|
+
#stopped = false;
|
|
21
|
+
#progress = empty();
|
|
22
|
+
#running;
|
|
23
|
+
/**
|
|
24
|
+
* Creates a loop for one selected shard.
|
|
25
|
+
*
|
|
26
|
+
* @param options The immutable drain configuration.
|
|
27
|
+
*/
|
|
28
|
+
constructor(options) {
|
|
29
|
+
this.#options = Object.freeze({
|
|
30
|
+
delivery: options.delivery,
|
|
31
|
+
shard: new ShardIndex(options.shard.index, options.shard.ofTotal),
|
|
32
|
+
onMessage: options.onMessage,
|
|
33
|
+
...(options.operation === undefined
|
|
34
|
+
? {}
|
|
35
|
+
: { operation: Object.freeze({ ...options.operation }) }),
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Stops admission of later loop runs.
|
|
40
|
+
*/
|
|
41
|
+
stop() {
|
|
42
|
+
this.#stopped = true;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Stops the loop and waits for its active drain to settle.
|
|
46
|
+
*
|
|
47
|
+
* @returns A promise that settles after the active drain, if any.
|
|
48
|
+
*/
|
|
49
|
+
async close() {
|
|
50
|
+
this.stop();
|
|
51
|
+
await this.#running;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Executes one finite direct delivery drain.
|
|
55
|
+
*
|
|
56
|
+
* @returns The terminal loop result.
|
|
57
|
+
*/
|
|
58
|
+
run() {
|
|
59
|
+
if (this.#running !== undefined)
|
|
60
|
+
return Promise.reject(new Error("DeliveryLoop is already running."));
|
|
61
|
+
if (this.#stopped)
|
|
62
|
+
return Promise.resolve(this.#stoppedRun());
|
|
63
|
+
const running = this.#options.delivery
|
|
64
|
+
.drain(this.#options.shard, {
|
|
65
|
+
onMessage: this.#options.onMessage,
|
|
66
|
+
...(this.#options.operation === undefined ? {} : { operation: this.#options.operation }),
|
|
67
|
+
})
|
|
68
|
+
.then((run) => this.#finish(map(run.status), run))
|
|
69
|
+
.finally(() => {
|
|
70
|
+
this.#running = undefined;
|
|
71
|
+
});
|
|
72
|
+
this.#running = running;
|
|
73
|
+
return running;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Returns the latest immutable loop progress.
|
|
77
|
+
*
|
|
78
|
+
* @returns The latest terminal progress.
|
|
79
|
+
*/
|
|
80
|
+
progress() {
|
|
81
|
+
return this.#progress;
|
|
82
|
+
}
|
|
83
|
+
#finish(status, run) {
|
|
84
|
+
this.#progress = Object.freeze({
|
|
85
|
+
runs: 1,
|
|
86
|
+
processed: run.processed,
|
|
87
|
+
accepted: run.accepted,
|
|
88
|
+
delivered: run.delivered,
|
|
89
|
+
failed: run.failed,
|
|
90
|
+
failures: run.failures,
|
|
91
|
+
});
|
|
92
|
+
return Object.freeze({ status, ...this.#progress });
|
|
93
|
+
}
|
|
94
|
+
#stoppedRun() {
|
|
95
|
+
return Object.freeze({ status: "STOPPED", ...this.#progress });
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Exposes package-local loop progress for retained integrations.
|
|
100
|
+
*/
|
|
101
|
+
export const deliveryLoopAccess = Object.freeze({
|
|
102
|
+
progress(loop) {
|
|
103
|
+
return loop.progress();
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
function empty() {
|
|
107
|
+
return Object.freeze({
|
|
108
|
+
runs: 0,
|
|
109
|
+
processed: 0,
|
|
110
|
+
accepted: 0,
|
|
111
|
+
delivered: 0,
|
|
112
|
+
failed: 0,
|
|
113
|
+
failures: Object.freeze([]),
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
function map(status) {
|
|
117
|
+
return status === "DRAINED" ? "IDLE" : status;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=delivery-loop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delivery-loop.js","sourceRoot":"","sources":["../../src/delivery/delivery-loop.ts"],"names":[],"mappings":"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"}
|