@spine-event-engine/server 2.0.0-snapshot.2
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 +569 -0
- package/REFERENCE.md +488 -0
- package/dist/bus/command-bus.d.ts +61 -0
- package/dist/bus/command-bus.d.ts.map +1 -0
- package/dist/bus/command-bus.js +201 -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 +606 -0
- package/dist/context/bounded-context.d.ts.map +1 -0
- package/dist/context/bounded-context.js +1780 -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 +380 -0
- package/dist/context/entity-inbox.js.map +1 -0
- package/dist/context/local-inbox-handoff.d.ts +244 -0
- package/dist/context/local-inbox-handoff.d.ts.map +1 -0
- package/dist/context/local-inbox-handoff.js +334 -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 +172 -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 +92 -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 +141 -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 +238 -0
- package/dist/delivery/delivery.d.ts.map +1 -0
- package/dist/delivery/delivery.js +400 -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 +81 -0
- package/dist/delivery/inbox-storage.d.ts.map +1 -0
- package/dist/delivery/inbox-storage.js +353 -0
- package/dist/delivery/inbox-storage.js.map +1 -0
- package/dist/delivery/inbox.d.ts +263 -0
- package/dist/delivery/inbox.d.ts.map +1 -0
- package/dist/delivery/inbox.js +172 -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 +360 -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 +499 -0
- package/dist/entity/entity.d.ts.map +1 -0
- package/dist/entity/entity.js +829 -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/build-time-handler-analyzer.d.ts +150 -0
- package/dist/handler/build-time-handler-analyzer.d.ts.map +1 -0
- package/dist/handler/build-time-handler-analyzer.js +1101 -0
- package/dist/handler/build-time-handler-analyzer.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 +118 -0
- package/dist/handler/command-registration-readiness.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 +154 -0
- package/dist/handler/generated-handler-registry.d.ts.map +1 -0
- package/dist/handler/generated-handler-registry.js +223 -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 +228 -0
- package/dist/handler/generated-registry-discovery.js.map +1 -0
- package/dist/handler/generated-registry-writer.d.ts +58 -0
- package/dist/handler/generated-registry-writer.d.ts.map +1 -0
- package/dist/handler/generated-registry-writer.js +458 -0
- package/dist/handler/generated-registry-writer.js.map +1 -0
- package/dist/handler/handler-codegen.d.ts +48 -0
- package/dist/handler/handler-codegen.d.ts.map +1 -0
- package/dist/handler/handler-codegen.js +214 -0
- package/dist/handler/handler-codegen.js.map +1 -0
- package/dist/handler/handler-decorators.d.ts +134 -0
- package/dist/handler/handler-decorators.d.ts.map +1 -0
- package/dist/handler/handler-decorators.js +239 -0
- package/dist/handler/handler-decorators.js.map +1 -0
- package/dist/handler/handler-metadata.d.ts +510 -0
- package/dist/handler/handler-metadata.d.ts.map +1 -0
- package/dist/handler/handler-metadata.js +391 -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 +170 -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/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 +86 -0
- package/dist/repository/primitive-id.d.ts.map +1 -0
- package/dist/repository/primitive-id.js +110 -0
- package/dist/repository/primitive-id.js.map +1 -0
- package/dist/repository/repository.d.ts +670 -0
- package/dist/repository/repository.d.ts.map +1 -0
- package/dist/repository/repository.js +3298 -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 +242 -0
- package/dist/runtime/signal-metadata.d.ts.map +1 -0
- package/dist/runtime/signal-metadata.js +368 -0
- package/dist/runtime/signal-metadata.js.map +1 -0
- package/dist/server/browser-server.d.ts +49 -0
- package/dist/server/browser-server.d.ts.map +1 -0
- package/dist/server/browser-server.js +633 -0
- package/dist/server/browser-server.js.map +1 -0
- package/dist/server/durable-subscription-bindings.d.ts +122 -0
- package/dist/server/durable-subscription-bindings.d.ts.map +1 -0
- package/dist/server/durable-subscription-bindings.js +524 -0
- package/dist/server/durable-subscription-bindings.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 +2061 -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 +664 -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 +324 -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 +96 -0
- package/dist/server/server-log.js.map +1 -0
- package/dist/server/server.d.ts +389 -0
- package/dist/server/server.d.ts.map +1 -0
- package/dist/server/server.js +752 -0
- package/dist/server/server.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 +1586 -0
- package/dist/services/spine-services.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 +680 -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 +14 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +34 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import type { Any } from "@bufbuild/protobuf/wkt";
|
|
2
|
+
import type { TenantId } from "@spine-event-engine/proto";
|
|
3
|
+
import { Delivery, type DeliveryEndpointMessage } from "../delivery/delivery.js";
|
|
4
|
+
import type { DeliveryInbox, DeliveryWorkRegistry } from "../delivery/delivery-ports.js";
|
|
5
|
+
import type { DeliverySource } from "../delivery/delivery-supervisor.js";
|
|
6
|
+
import { type InboxMessage } from "../delivery/inbox.js";
|
|
7
|
+
import { ShardIndex } from "../delivery/shard-index.js";
|
|
8
|
+
/**
|
|
9
|
+
* Names the delivery labels that local inbox routes can handle.
|
|
10
|
+
*/
|
|
11
|
+
export type SupportedDeliveryLabel = DeliveryEndpointMessage["label"];
|
|
12
|
+
/**
|
|
13
|
+
* Describes one delivery target assigned to a shard.
|
|
14
|
+
*/
|
|
15
|
+
export interface DeliveryEndpoint {
|
|
16
|
+
/**
|
|
17
|
+
* Names the delivery action performed for the target.
|
|
18
|
+
*/
|
|
19
|
+
readonly label: SupportedDeliveryLabel;
|
|
20
|
+
/**
|
|
21
|
+
* Names the target message type.
|
|
22
|
+
*/
|
|
23
|
+
readonly targetTypeUrl: string;
|
|
24
|
+
/**
|
|
25
|
+
* Locates the target within its delivery shard set.
|
|
26
|
+
*/
|
|
27
|
+
readonly shard: ShardIndex;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Describes a delivery route that became eligible after persistence.
|
|
31
|
+
*/
|
|
32
|
+
export interface DeliveryReady extends DeliveryEndpoint {
|
|
33
|
+
/**
|
|
34
|
+
* Identifies the tenant when this route is tenant-scoped.
|
|
35
|
+
*/
|
|
36
|
+
readonly tenantId?: TenantId;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Observes a delivery route that became eligible after persistence.
|
|
40
|
+
*
|
|
41
|
+
* @param ready Describes the route that is ready to drain.
|
|
42
|
+
* @returns Returns an optional asynchronous observation outcome.
|
|
43
|
+
*/
|
|
44
|
+
export type OnDeliveryReady = (ready: DeliveryReady) => unknown;
|
|
45
|
+
/**
|
|
46
|
+
* Groups the inbox and shard registry selected by a server environment.
|
|
47
|
+
*
|
|
48
|
+
* @internal
|
|
49
|
+
*/
|
|
50
|
+
export interface EnvironmentDeliveryPorts {
|
|
51
|
+
/**
|
|
52
|
+
* Persists and reads environment-owned delivery messages.
|
|
53
|
+
*/
|
|
54
|
+
readonly inbox: DeliveryInbox;
|
|
55
|
+
/**
|
|
56
|
+
* Coordinates environment-owned shard work.
|
|
57
|
+
*/
|
|
58
|
+
readonly workRegistry: DeliveryWorkRegistry;
|
|
59
|
+
/**
|
|
60
|
+
* Supplies remote Admin recovery and notification observations when delivery is remote.
|
|
61
|
+
*/
|
|
62
|
+
readonly source?: DeliverySource;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Coordinates readiness notifications while delivery ownership changes hands.
|
|
66
|
+
*/
|
|
67
|
+
export declare class DeliveryReadiness {
|
|
68
|
+
#private;
|
|
69
|
+
/**
|
|
70
|
+
* Creates a readiness coordinator.
|
|
71
|
+
*
|
|
72
|
+
* @param onReady Observes routes made ready before ownership is transferred.
|
|
73
|
+
*/
|
|
74
|
+
constructor(onReady?: OnDeliveryReady);
|
|
75
|
+
/**
|
|
76
|
+
* Sets the observer used before routing takes ownership.
|
|
77
|
+
*
|
|
78
|
+
* @param onReady Observes routes that become ready.
|
|
79
|
+
* @returns Returns a function that removes this observer when still active.
|
|
80
|
+
*/
|
|
81
|
+
onReady(onReady: OnDeliveryReady): () => void;
|
|
82
|
+
/**
|
|
83
|
+
* Acquires readiness ownership for a persisted route.
|
|
84
|
+
*
|
|
85
|
+
* @param ready Describes the route when persistence made it ready.
|
|
86
|
+
* @returns Returns a claim that must be completed or abandoned.
|
|
87
|
+
*/
|
|
88
|
+
claim(ready?: DeliveryReady): DeliveryHandoff;
|
|
89
|
+
/**
|
|
90
|
+
* Routes a context-created delivery through the attached environment ports.
|
|
91
|
+
*
|
|
92
|
+
* Direct local delivery remains unchanged. Once ownership is transferred,
|
|
93
|
+
* inbox writes and workers must use the same environment-owned facility.
|
|
94
|
+
*
|
|
95
|
+
* @param delivery Supplies the context-created delivery configuration.
|
|
96
|
+
* @returns The delivery selected for the current ownership mode.
|
|
97
|
+
* @internal
|
|
98
|
+
*/
|
|
99
|
+
route(delivery: Delivery): Delivery;
|
|
100
|
+
/**
|
|
101
|
+
* Updates readiness ownership to use configured delivery routes.
|
|
102
|
+
*
|
|
103
|
+
* @param scopes Lists the routes that may receive buffered readiness.
|
|
104
|
+
* @param onReady Observes readiness after routed ownership begins.
|
|
105
|
+
* @param options Allows an empty configured route set when `allowEmpty` is true.
|
|
106
|
+
* @returns A promise that resolves after the readiness transition completes.
|
|
107
|
+
*/
|
|
108
|
+
transition(scopes: readonly DeliveryReady[], onReady: OnDeliveryReady, options?: {
|
|
109
|
+
readonly allowEmpty?: boolean;
|
|
110
|
+
readonly ports?: EnvironmentDeliveryPorts;
|
|
111
|
+
}): Promise<void>;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Represents a post-persistence claim held while direct delivery remains active.
|
|
115
|
+
*/
|
|
116
|
+
export interface DeliveryHandoff {
|
|
117
|
+
/**
|
|
118
|
+
* Completes the claim after draining the durable message.
|
|
119
|
+
*
|
|
120
|
+
* @param onDrain Drains the message associated with this claim.
|
|
121
|
+
* @returns A promise that resolves after the claim drains and completes.
|
|
122
|
+
*/
|
|
123
|
+
complete(onDrain: () => Promise<void>): Promise<void>;
|
|
124
|
+
/**
|
|
125
|
+
* Cancels the claim without draining it.
|
|
126
|
+
*/
|
|
127
|
+
abandon(): void;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Configures one bounded attempt to drain a local inbox message.
|
|
131
|
+
*/
|
|
132
|
+
export interface LocalInboxDrainOptions {
|
|
133
|
+
/**
|
|
134
|
+
* Selects the delivery runtime that owns the inbox message.
|
|
135
|
+
*/
|
|
136
|
+
readonly delivery: Delivery;
|
|
137
|
+
/**
|
|
138
|
+
* Identifies the persisted message to drain.
|
|
139
|
+
*/
|
|
140
|
+
readonly received: InboxMessage;
|
|
141
|
+
/**
|
|
142
|
+
* Names the local delivery node acquiring the message.
|
|
143
|
+
*/
|
|
144
|
+
readonly node: string;
|
|
145
|
+
/**
|
|
146
|
+
* Calls target replay after the delivery runtime acquires a message.
|
|
147
|
+
*
|
|
148
|
+
* @param message Contains the acquired inbox message.
|
|
149
|
+
* @returns Resolves after the target replay finishes.
|
|
150
|
+
*/
|
|
151
|
+
readonly onReplay: (message: InboxMessage) => Promise<void> | void;
|
|
152
|
+
/**
|
|
153
|
+
* Determines whether the replay callback owns a message.
|
|
154
|
+
*
|
|
155
|
+
* @param message Contains a pending Inbox message.
|
|
156
|
+
* @returns `true` when the replay callback owns the message.
|
|
157
|
+
* @internal
|
|
158
|
+
*/
|
|
159
|
+
readonly acceptMessage?: (message: InboxMessage) => boolean;
|
|
160
|
+
/**
|
|
161
|
+
* Observes exact durable acknowledgements produced by the same shard drain.
|
|
162
|
+
*
|
|
163
|
+
* @param message Contains the acknowledged Inbox message.
|
|
164
|
+
* @internal
|
|
165
|
+
*/
|
|
166
|
+
readonly onAcknowledged?: (message: InboxMessage) => void;
|
|
167
|
+
/**
|
|
168
|
+
* Explains a replay failure that lacks an Error instance.
|
|
169
|
+
*/
|
|
170
|
+
readonly replayFailureMessage: string;
|
|
171
|
+
/**
|
|
172
|
+
* Explains a delivery skipped before target replay.
|
|
173
|
+
*/
|
|
174
|
+
readonly skippedMessage: string;
|
|
175
|
+
/**
|
|
176
|
+
* Explains exhaustion of local drain attempts.
|
|
177
|
+
*/
|
|
178
|
+
readonly unfinishedMessage: string;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Identifies the fields that deduplicate an in-flight inbox handoff.
|
|
182
|
+
*/
|
|
183
|
+
export interface LocalInboxKeyInput {
|
|
184
|
+
/**
|
|
185
|
+
* Identifies the inbox target receiving the message.
|
|
186
|
+
*/
|
|
187
|
+
readonly inboxId: {
|
|
188
|
+
readonly targetId: Any;
|
|
189
|
+
readonly targetTypeUrl: string;
|
|
190
|
+
};
|
|
191
|
+
/**
|
|
192
|
+
* Identifies the source signal persisted in the inbox.
|
|
193
|
+
*/
|
|
194
|
+
readonly signalId: string;
|
|
195
|
+
/**
|
|
196
|
+
* Names the delivery action for the message.
|
|
197
|
+
*/
|
|
198
|
+
readonly label: InboxMessage["label"];
|
|
199
|
+
/**
|
|
200
|
+
* Locates the message in its delivery shard set.
|
|
201
|
+
*/
|
|
202
|
+
readonly shard: InboxMessage["shard"];
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Coordinates durable local inbox ownership and delivery handoffs.
|
|
206
|
+
*/
|
|
207
|
+
export declare const InboxHandoff: Readonly<{
|
|
208
|
+
ready(endpoint: DeliveryEndpoint, tenantId?: TenantId): DeliveryReady;
|
|
209
|
+
configuredScopes(scopes: readonly DeliveryReady[], allowEmpty: boolean): Map<string, DeliveryReady>;
|
|
210
|
+
readyKey(ready: DeliveryReady): string;
|
|
211
|
+
cloneReady(ready: DeliveryReady): DeliveryReady;
|
|
212
|
+
isPromiseLike(value: unknown): value is PromiseLike<unknown>;
|
|
213
|
+
coordinate(options: {
|
|
214
|
+
readonly handoffs: Map<string, Promise<InboxMessage>>;
|
|
215
|
+
readonly key: string;
|
|
216
|
+
readonly onHandoff: () => Promise<InboxMessage>;
|
|
217
|
+
}): Promise<InboxMessage>;
|
|
218
|
+
drain(options: LocalInboxDrainOptions): Promise<void>;
|
|
219
|
+
runDrain(options: LocalInboxDrainOptions): Promise<void>;
|
|
220
|
+
key(input: LocalInboxKeyInput, tenantId?: TenantId): string;
|
|
221
|
+
sameMessageId(left: {
|
|
222
|
+
readonly value: string;
|
|
223
|
+
readonly shard: {
|
|
224
|
+
readonly index: number;
|
|
225
|
+
readonly ofTotal: number;
|
|
226
|
+
};
|
|
227
|
+
}, right: {
|
|
228
|
+
readonly value: string;
|
|
229
|
+
readonly shard: {
|
|
230
|
+
readonly index: number;
|
|
231
|
+
readonly ofTotal: number;
|
|
232
|
+
};
|
|
233
|
+
}): boolean;
|
|
234
|
+
messageIdKey(message: Pick<InboxMessage, "id">): string;
|
|
235
|
+
endpoint(input: {
|
|
236
|
+
readonly label: SupportedDeliveryLabel;
|
|
237
|
+
readonly inboxId: {
|
|
238
|
+
readonly targetTypeUrl: string;
|
|
239
|
+
};
|
|
240
|
+
readonly shard: ShardIndex;
|
|
241
|
+
}): DeliveryEndpoint;
|
|
242
|
+
configuredEndpoint(message: InboxMessage, endpoints: readonly DeliveryEndpoint[]): DeliveryEndpoint | undefined;
|
|
243
|
+
}>;
|
|
244
|
+
//# sourceMappingURL=local-inbox-handoff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-inbox-handoff.d.ts","sourceRoot":"","sources":["../../src/context/local-inbox-handoff.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,334 @@
|
|
|
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 { TenantBoundary } from "@spine-event-engine/storage";
|
|
15
|
+
import { Delivery } from "../delivery/delivery.js";
|
|
16
|
+
import { InboxTargets } from "../delivery/inbox.js";
|
|
17
|
+
import { ShardIndex } from "../delivery/shard-index.js";
|
|
18
|
+
/**
|
|
19
|
+
* Coordinates readiness notifications while delivery ownership changes hands.
|
|
20
|
+
*/
|
|
21
|
+
export class DeliveryReadiness {
|
|
22
|
+
#onReady;
|
|
23
|
+
#active = new Set();
|
|
24
|
+
#mode = "direct";
|
|
25
|
+
#configured = new Map();
|
|
26
|
+
#buffered = new Map();
|
|
27
|
+
#invalidTransition = false;
|
|
28
|
+
#ports;
|
|
29
|
+
/**
|
|
30
|
+
* Creates a readiness coordinator.
|
|
31
|
+
*
|
|
32
|
+
* @param onReady Observes routes made ready before ownership is transferred.
|
|
33
|
+
*/
|
|
34
|
+
constructor(onReady = () => undefined) {
|
|
35
|
+
this.#onReady = onReady;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Sets the observer used before routing takes ownership.
|
|
39
|
+
*
|
|
40
|
+
* @param onReady Observes routes that become ready.
|
|
41
|
+
* @returns Returns a function that removes this observer when still active.
|
|
42
|
+
*/
|
|
43
|
+
onReady(onReady) {
|
|
44
|
+
if (this.#mode === "routed") {
|
|
45
|
+
return () => undefined;
|
|
46
|
+
}
|
|
47
|
+
this.#onReady = onReady;
|
|
48
|
+
return () => {
|
|
49
|
+
if (this.#onReady === onReady) {
|
|
50
|
+
this.#onReady = () => undefined;
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Acquires readiness ownership for a persisted route.
|
|
56
|
+
*
|
|
57
|
+
* @param ready Describes the route when persistence made it ready.
|
|
58
|
+
* @returns Returns a claim that must be completed or abandoned.
|
|
59
|
+
*/
|
|
60
|
+
claim(ready) {
|
|
61
|
+
if (this.#mode === "direct") {
|
|
62
|
+
const handoff = this.#directHandoff();
|
|
63
|
+
if (ready !== undefined) {
|
|
64
|
+
this.#notify(ready);
|
|
65
|
+
}
|
|
66
|
+
return handoff;
|
|
67
|
+
}
|
|
68
|
+
if (ready !== undefined) {
|
|
69
|
+
if (this.#mode === "transition") {
|
|
70
|
+
const key = InboxHandoff.readyKey(ready);
|
|
71
|
+
if (this.#configured.has(key)) {
|
|
72
|
+
this.#buffered.set(key, InboxHandoff.cloneReady(ready));
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
this.#invalidTransition = true;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
else if (this.#mode === "routed") {
|
|
79
|
+
this.#notify(ready);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return settledHandoff;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Routes a context-created delivery through the attached environment ports.
|
|
86
|
+
*
|
|
87
|
+
* Direct local delivery remains unchanged. Once ownership is transferred,
|
|
88
|
+
* inbox writes and workers must use the same environment-owned facility.
|
|
89
|
+
*
|
|
90
|
+
* @param delivery Supplies the context-created delivery configuration.
|
|
91
|
+
* @returns The delivery selected for the current ownership mode.
|
|
92
|
+
* @internal
|
|
93
|
+
*/
|
|
94
|
+
route(delivery) {
|
|
95
|
+
const ports = this.#ports;
|
|
96
|
+
if (ports === undefined)
|
|
97
|
+
return delivery;
|
|
98
|
+
return new Delivery({
|
|
99
|
+
context: delivery.context,
|
|
100
|
+
storageFactory: delivery.storageFactory,
|
|
101
|
+
strategy: delivery.strategy,
|
|
102
|
+
node: delivery.node,
|
|
103
|
+
pageSize: delivery.pageSize,
|
|
104
|
+
inbox: ports.inbox,
|
|
105
|
+
workRegistry: ports.workRegistry,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Updates readiness ownership to use configured delivery routes.
|
|
110
|
+
*
|
|
111
|
+
* @param scopes Lists the routes that may receive buffered readiness.
|
|
112
|
+
* @param onReady Observes readiness after routed ownership begins.
|
|
113
|
+
* @param options Allows an empty configured route set when `allowEmpty` is true.
|
|
114
|
+
* @returns A promise that resolves after the readiness transition completes.
|
|
115
|
+
*/
|
|
116
|
+
transition(scopes, onReady, options = {}) {
|
|
117
|
+
if (this.#mode !== "direct" && this.#mode !== "failed") {
|
|
118
|
+
return Promise.reject(new Error("Delivery readiness ownership is already transferred."));
|
|
119
|
+
}
|
|
120
|
+
let configured;
|
|
121
|
+
try {
|
|
122
|
+
configured = InboxHandoff.configuredScopes(scopes, options.allowEmpty === true);
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
return Promise.resolve().then(() => {
|
|
126
|
+
throw error;
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
this.#configured = configured;
|
|
130
|
+
this.#buffered.clear();
|
|
131
|
+
this.#invalidTransition = false;
|
|
132
|
+
this.#mode = "transition";
|
|
133
|
+
const admitted = [...this.#active];
|
|
134
|
+
return Promise.allSettled(admitted).then(() => {
|
|
135
|
+
if (this.#invalidTransition) {
|
|
136
|
+
this.#buffered.clear();
|
|
137
|
+
this.#mode = "failed";
|
|
138
|
+
throw new Error("Delivery readiness transition received an unconfigured scope.");
|
|
139
|
+
}
|
|
140
|
+
this.#onReady = onReady;
|
|
141
|
+
this.#ports = options.ports;
|
|
142
|
+
this.#mode = "routed";
|
|
143
|
+
for (const ready of this.#buffered.values()) {
|
|
144
|
+
this.#notify(ready);
|
|
145
|
+
}
|
|
146
|
+
this.#buffered.clear();
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
#directHandoff() {
|
|
150
|
+
const gate = Promise.withResolvers();
|
|
151
|
+
this.#active.add(gate.promise);
|
|
152
|
+
let abandoned = false;
|
|
153
|
+
let completion;
|
|
154
|
+
const finish = () => {
|
|
155
|
+
gate.resolve(undefined);
|
|
156
|
+
this.#active.delete(gate.promise);
|
|
157
|
+
};
|
|
158
|
+
return Object.freeze({
|
|
159
|
+
complete: (onDrain) => {
|
|
160
|
+
if (completion !== undefined) {
|
|
161
|
+
return completion;
|
|
162
|
+
}
|
|
163
|
+
if (abandoned) {
|
|
164
|
+
return settled;
|
|
165
|
+
}
|
|
166
|
+
const shared = Promise.withResolvers();
|
|
167
|
+
completion = shared.promise;
|
|
168
|
+
void completion.then(finish, finish);
|
|
169
|
+
try {
|
|
170
|
+
void Promise.resolve(onDrain()).then(() => {
|
|
171
|
+
shared.resolve(undefined);
|
|
172
|
+
}, shared.reject);
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
shared.reject(error);
|
|
176
|
+
}
|
|
177
|
+
return completion;
|
|
178
|
+
},
|
|
179
|
+
abandon: () => {
|
|
180
|
+
if (completion !== undefined || abandoned) {
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
abandoned = true;
|
|
184
|
+
finish();
|
|
185
|
+
},
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
#notify(ready) {
|
|
189
|
+
try {
|
|
190
|
+
const result = Reflect.apply(this.#onReady, undefined, [ready]);
|
|
191
|
+
if (InboxHandoff.isPromiseLike(result)) {
|
|
192
|
+
void Promise.resolve(result).catch(() => undefined);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
// Readiness observation cannot alter durable receive or exact-drain outcomes.
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
const settled = Promise.resolve();
|
|
201
|
+
const settledHandoff = Object.freeze({
|
|
202
|
+
complete: () => settled,
|
|
203
|
+
abandon: () => undefined,
|
|
204
|
+
});
|
|
205
|
+
const drainLimit = 8;
|
|
206
|
+
/**
|
|
207
|
+
* Coordinates durable local inbox ownership and delivery handoffs.
|
|
208
|
+
*/
|
|
209
|
+
export const InboxHandoff = Object.freeze({
|
|
210
|
+
ready(endpoint, tenantId) {
|
|
211
|
+
return Object.freeze({
|
|
212
|
+
...(tenantId === undefined ? {} : { tenantId }),
|
|
213
|
+
label: endpoint.label,
|
|
214
|
+
targetTypeUrl: endpoint.targetTypeUrl,
|
|
215
|
+
shard: new ShardIndex(endpoint.shard.index, endpoint.shard.ofTotal),
|
|
216
|
+
});
|
|
217
|
+
},
|
|
218
|
+
configuredScopes(scopes, allowEmpty) {
|
|
219
|
+
const configured = new Map();
|
|
220
|
+
for (const scope of scopes) {
|
|
221
|
+
configured.set(InboxHandoff.readyKey(scope), InboxHandoff.cloneReady(scope));
|
|
222
|
+
}
|
|
223
|
+
if (configured.size === 0 && !allowEmpty) {
|
|
224
|
+
throw new Error("Delivery readiness transition requires configured scopes.");
|
|
225
|
+
}
|
|
226
|
+
return configured;
|
|
227
|
+
},
|
|
228
|
+
readyKey(ready) {
|
|
229
|
+
return JSON.stringify([
|
|
230
|
+
tenantKey(ready.tenantId),
|
|
231
|
+
ready.label,
|
|
232
|
+
ready.targetTypeUrl,
|
|
233
|
+
ready.shard.index,
|
|
234
|
+
ready.shard.ofTotal,
|
|
235
|
+
]);
|
|
236
|
+
},
|
|
237
|
+
cloneReady(ready) {
|
|
238
|
+
return InboxHandoff.ready(ready, ready.tenantId);
|
|
239
|
+
},
|
|
240
|
+
isPromiseLike(value) {
|
|
241
|
+
if ((typeof value !== "object" || value === null) && typeof value !== "function") {
|
|
242
|
+
return false;
|
|
243
|
+
}
|
|
244
|
+
return "then" in value && typeof value.then === "function";
|
|
245
|
+
},
|
|
246
|
+
async coordinate(options) {
|
|
247
|
+
const inFlightHandoff = options.handoffs.get(options.key);
|
|
248
|
+
if (inFlightHandoff !== undefined) {
|
|
249
|
+
return await inFlightHandoff;
|
|
250
|
+
}
|
|
251
|
+
const handoff = options.onHandoff();
|
|
252
|
+
options.handoffs.set(options.key, handoff);
|
|
253
|
+
try {
|
|
254
|
+
return await handoff;
|
|
255
|
+
}
|
|
256
|
+
finally {
|
|
257
|
+
if (options.handoffs.get(options.key) === handoff) {
|
|
258
|
+
options.handoffs.delete(options.key);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
},
|
|
262
|
+
async drain(options) {
|
|
263
|
+
await InboxHandoff.runDrain(options);
|
|
264
|
+
},
|
|
265
|
+
async runDrain(options) {
|
|
266
|
+
const { delivery, received, node, onReplay, replayFailureMessage, skippedMessage, unfinishedMessage, } = options;
|
|
267
|
+
for (let attempt = 0; attempt < drainLimit; attempt += 1) {
|
|
268
|
+
const direct = await delivery.drainMessage(received, {
|
|
269
|
+
node,
|
|
270
|
+
onMessage: onReplay,
|
|
271
|
+
...(options.acceptMessage === undefined ? {} : { acceptMessage: options.acceptMessage }),
|
|
272
|
+
...(options.onAcknowledged === undefined ? {} : { onDelivered: options.onAcknowledged }),
|
|
273
|
+
});
|
|
274
|
+
if (direct.acknowledged)
|
|
275
|
+
return;
|
|
276
|
+
const run = direct.run;
|
|
277
|
+
const target = await delivery.inbox.readMessage(received.id);
|
|
278
|
+
if (target?.status === "DELIVERED") {
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
const failure = run.failures.find(({ message }) => InboxHandoff.sameMessageId(message.id, received.id));
|
|
282
|
+
if (failure !== undefined) {
|
|
283
|
+
throw failure.error instanceof Error
|
|
284
|
+
? failure.error
|
|
285
|
+
: new Error(replayFailureMessage, { cause: failure.error });
|
|
286
|
+
}
|
|
287
|
+
if (run.status === "SKIPPED") {
|
|
288
|
+
throw new Error(skippedMessage);
|
|
289
|
+
}
|
|
290
|
+
if (run.accepted === 0 && run.delivered === 0 && run.failed === 0) {
|
|
291
|
+
break;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
throw new Error(unfinishedMessage);
|
|
295
|
+
},
|
|
296
|
+
key(input, deliveryTenantId) {
|
|
297
|
+
return JSON.stringify([
|
|
298
|
+
tenantKey(deliveryTenantId),
|
|
299
|
+
input.label,
|
|
300
|
+
input.signalId,
|
|
301
|
+
input.inboxId.targetTypeUrl,
|
|
302
|
+
InboxTargets.key(input.inboxId.targetId),
|
|
303
|
+
input.shard.index,
|
|
304
|
+
input.shard.ofTotal,
|
|
305
|
+
]);
|
|
306
|
+
},
|
|
307
|
+
sameMessageId(left, right) {
|
|
308
|
+
return (left.value === right.value &&
|
|
309
|
+
left.shard.index === right.shard.index &&
|
|
310
|
+
left.shard.ofTotal === right.shard.ofTotal);
|
|
311
|
+
},
|
|
312
|
+
messageIdKey(message) {
|
|
313
|
+
return JSON.stringify([message.id.value, message.id.shard.index, message.id.shard.ofTotal]);
|
|
314
|
+
},
|
|
315
|
+
endpoint(input) {
|
|
316
|
+
return Object.freeze({
|
|
317
|
+
label: input.label,
|
|
318
|
+
targetTypeUrl: input.inboxId.targetTypeUrl,
|
|
319
|
+
shard: new ShardIndex(input.shard.index, input.shard.ofTotal),
|
|
320
|
+
});
|
|
321
|
+
},
|
|
322
|
+
configuredEndpoint(message, endpoints) {
|
|
323
|
+
if (message.status !== "TO_DELIVER") {
|
|
324
|
+
return undefined;
|
|
325
|
+
}
|
|
326
|
+
return endpoints.find((endpoint) => endpoint.targetTypeUrl === message.inboxId.targetTypeUrl &&
|
|
327
|
+
endpoint.label === message.label &&
|
|
328
|
+
endpoint.shard.key() === message.shard.key());
|
|
329
|
+
},
|
|
330
|
+
});
|
|
331
|
+
function tenantKey(tenantId) {
|
|
332
|
+
return tenantId === undefined ? "" : String(TenantBoundary.from(tenantId).key);
|
|
333
|
+
}
|
|
334
|
+
//# sourceMappingURL=local-inbox-handoff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-inbox-handoff.js","sourceRoot":"","sources":["../../src/context/local-inbox-handoff.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { TenantId } from "@spine-event-engine/proto";
|
|
2
|
+
import { Delivery } from "../delivery/delivery.js";
|
|
3
|
+
import type { InboxMessage } from "../delivery/inbox.js";
|
|
4
|
+
import type { ProjectionInbox, ProjectionInboxTarget } from "../repository/repository.js";
|
|
5
|
+
import { type DeliveryEndpoint, DeliveryReadiness, type OnDeliveryReady } from "./local-inbox-handoff.js";
|
|
6
|
+
/**
|
|
7
|
+
* Persists and replays delivery rows for projection subscribers.
|
|
8
|
+
*/
|
|
9
|
+
export declare class LocalProjectionInbox implements ProjectionInbox {
|
|
10
|
+
#private;
|
|
11
|
+
/**
|
|
12
|
+
* Creates a local projection inbox.
|
|
13
|
+
* @param contextName Names the bounded context that owns this inbox.
|
|
14
|
+
* @param readiness Coordinates delivery readiness after persistence.
|
|
15
|
+
* @param keepTenant Records a tenant before its message is persisted.
|
|
16
|
+
*/
|
|
17
|
+
constructor(contextName: string, readiness?: DeliveryReadiness | OnDeliveryReady, keepTenant?: (tenantId: TenantId) => Promise<void>);
|
|
18
|
+
/**
|
|
19
|
+
* Registers a target that replays projection messages.
|
|
20
|
+
* @param target Handles messages for one projection type.
|
|
21
|
+
*/
|
|
22
|
+
register(target: ProjectionInboxTarget): void;
|
|
23
|
+
/**
|
|
24
|
+
* Lists endpoints registered for projection delivery.
|
|
25
|
+
* @returns Returns immutable endpoint descriptions.
|
|
26
|
+
*/
|
|
27
|
+
endpoints(): readonly DeliveryEndpoint[];
|
|
28
|
+
/**
|
|
29
|
+
* Dispatches a durable inbox row through its projection target.
|
|
30
|
+
* @param message Contains the persisted inbox row to replay.
|
|
31
|
+
* @param deliveryTenantId Identifies the tenant that owns the row when present.
|
|
32
|
+
* @returns A promise that resolves after the inbox row is replayed.
|
|
33
|
+
*/
|
|
34
|
+
replay(message: InboxMessage, deliveryTenantId?: TenantId): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* Persists and drains one projection inbox message.
|
|
37
|
+
* @param delivery Stores and drains the inbox row.
|
|
38
|
+
* @param input Describes the message to persist.
|
|
39
|
+
* @param deliveryTenantId Identifies the tenant that owns the message when present.
|
|
40
|
+
* @returns Resolves to the persisted inbox row.
|
|
41
|
+
*/
|
|
42
|
+
receive(delivery: Delivery, input: ProjectionInput, deliveryTenantId?: TenantId): Promise<InboxMessage>;
|
|
43
|
+
}
|
|
44
|
+
type ProjectionInput = Parameters<ProjectionInbox["receive"]>[1];
|
|
45
|
+
export {};
|
|
46
|
+
//# sourceMappingURL=projection-handoff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projection-handoff.d.ts","sourceRoot":"","sources":["../../src/context/projection-handoff.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAC1F,OAAO,EACL,KAAK,gBAAgB,EACrB,iBAAiB,EAEjB,KAAK,eAAe,EACrB,MAAM,0BAA0B,CAAC;AAIlC;;GAEG;AACH,qBAAa,oBAAqB,YAAW,eAAe;;IAW1D;;;;;OAKG;gBAED,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,iBAAiB,GAAG,eAAyC,EACxE,UAAU,GAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAA2B;IAQ7E;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI;IAc7C;;;OAGG;IACH,SAAS,IAAI,SAAS,gBAAgB,EAAE;IAIxC;;;;;OAKG;IACH,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,gBAAgB,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzE;;;;;;OAMG;IACG,OAAO,CACX,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,eAAe,EACtB,gBAAgB,CAAC,EAAE,QAAQ,GAC1B,OAAO,CAAC,YAAY,CAAC;CAoHzB;AAED,KAAK,eAAe,GAAG,UAAU,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC"}
|