@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,183 @@
|
|
|
1
|
+
import type { AuthorizationPolicy, Clock, ContextResolver, OpaqueSessionCookies, SessionResolver, SubscriptionBindings } from "@spine-event-engine/auth";
|
|
2
|
+
import type { TypeRegistryLookup } from "@spine-event-engine/core";
|
|
3
|
+
import type { NodeDiscovery } from "@spine-event-engine/deployment";
|
|
4
|
+
/**
|
|
5
|
+
* Selects exactly one admission mode and binding ownership for a browser host.
|
|
6
|
+
*/
|
|
7
|
+
export type BrowserAdmission = {
|
|
8
|
+
/**
|
|
9
|
+
* Resolves authenticated application sessions from incoming credentials.
|
|
10
|
+
*/
|
|
11
|
+
readonly sessions: SessionResolver;
|
|
12
|
+
/**
|
|
13
|
+
* Excludes intentionally public admission from authenticated mode.
|
|
14
|
+
*/
|
|
15
|
+
readonly publicAccess?: never;
|
|
16
|
+
/**
|
|
17
|
+
* Optionally supplies application-owned authenticated subscription bindings.
|
|
18
|
+
*/
|
|
19
|
+
readonly bindings?: SubscriptionBindings;
|
|
20
|
+
} | {
|
|
21
|
+
/**
|
|
22
|
+
* Excludes session resolution from framework-owned public admission.
|
|
23
|
+
*/
|
|
24
|
+
readonly sessions?: never;
|
|
25
|
+
/**
|
|
26
|
+
* Enables intentionally public admission and framework-owned bindings.
|
|
27
|
+
*/
|
|
28
|
+
readonly publicAccess: true;
|
|
29
|
+
/**
|
|
30
|
+
* Excludes bindings because public admission owns them process-locally.
|
|
31
|
+
*/
|
|
32
|
+
readonly bindings?: never;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Describes one fixed backend or ordered fixed backend set for browser forwarding.
|
|
36
|
+
*/
|
|
37
|
+
export type BrowserBackend = {
|
|
38
|
+
/**
|
|
39
|
+
* Supplies one canonical HTTP(S) backend origin.
|
|
40
|
+
*/
|
|
41
|
+
readonly baseUrl: string;
|
|
42
|
+
/**
|
|
43
|
+
* Excludes a multi-backend set when one backend is supplied.
|
|
44
|
+
*/
|
|
45
|
+
readonly baseUrls?: never;
|
|
46
|
+
} | {
|
|
47
|
+
/**
|
|
48
|
+
* Excludes a single backend when a fixed backend set is supplied.
|
|
49
|
+
*/
|
|
50
|
+
readonly baseUrl?: never;
|
|
51
|
+
/**
|
|
52
|
+
* Supplies a non-empty ordered set of canonical HTTP(S) backend origins.
|
|
53
|
+
*/
|
|
54
|
+
readonly baseUrls: readonly [string, ...string[]];
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Collects collaborators and listener settings for a browser gateway.
|
|
58
|
+
*/
|
|
59
|
+
export interface BrowserServerCollaborators {
|
|
60
|
+
/**
|
|
61
|
+
* Public listener host; defaults to local loopback.
|
|
62
|
+
*/
|
|
63
|
+
readonly host?: string;
|
|
64
|
+
/**
|
|
65
|
+
* Public listener port; defaults to an ephemeral port.
|
|
66
|
+
*/
|
|
67
|
+
readonly port?: number;
|
|
68
|
+
/**
|
|
69
|
+
* Maximum accepted request bytes; defaults to 4 MiB.
|
|
70
|
+
*/
|
|
71
|
+
readonly readMaxBytes?: number;
|
|
72
|
+
/**
|
|
73
|
+
* Maximum emitted response or auth callback bytes; defaults to 4 MiB.
|
|
74
|
+
*/
|
|
75
|
+
readonly writeMaxBytes?: number;
|
|
76
|
+
/**
|
|
77
|
+
* Fixed canonical HTTP(S) backends for standalone forwarding.
|
|
78
|
+
*/
|
|
79
|
+
readonly backend?: BrowserBackend;
|
|
80
|
+
/**
|
|
81
|
+
* Complete-snapshot backend discovery for standalone forwarding.
|
|
82
|
+
*/
|
|
83
|
+
readonly discovery?: NodeDiscovery;
|
|
84
|
+
/**
|
|
85
|
+
* Exact, bounded application auth callbacks; never a general router.
|
|
86
|
+
*/
|
|
87
|
+
readonly authRoutes?: readonly BrowserAuthRoute[];
|
|
88
|
+
/**
|
|
89
|
+
* Maximum concurrently admitted auth callbacks; defaults to 64.
|
|
90
|
+
*/
|
|
91
|
+
readonly maxActiveAuthRequests?: number;
|
|
92
|
+
/**
|
|
93
|
+
* Exact canonical HTTP(S) origins permitted to call Spine RPCs.
|
|
94
|
+
*/
|
|
95
|
+
readonly origins: readonly string[];
|
|
96
|
+
/**
|
|
97
|
+
* Registry used to decode requests before authorization.
|
|
98
|
+
*/
|
|
99
|
+
readonly registry?: TypeRegistryLookup;
|
|
100
|
+
/**
|
|
101
|
+
* Authorizes every decoded operation after admission.
|
|
102
|
+
*/
|
|
103
|
+
readonly authorize: AuthorizationPolicy["authorize"];
|
|
104
|
+
/**
|
|
105
|
+
* Rebuilds trusted actor and tenant facts independently of browser input.
|
|
106
|
+
*/
|
|
107
|
+
readonly contexts: ContextResolver;
|
|
108
|
+
/**
|
|
109
|
+
* Trusted clock for gateway and durable-subscription decisions.
|
|
110
|
+
*/
|
|
111
|
+
readonly clock: Clock;
|
|
112
|
+
/**
|
|
113
|
+
* Strict opaque-cookie extraction alongside exact bearer credentials.
|
|
114
|
+
*/
|
|
115
|
+
readonly cookies?: OpaqueSessionCookies;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Supplies options for a combined loopback-native browser host or a standalone gateway.
|
|
119
|
+
*/
|
|
120
|
+
export type BrowserServerOptions = BrowserServerCollaborators & BrowserAdmission;
|
|
121
|
+
/**
|
|
122
|
+
* Browser options for a gateway that does not wrap a local native server.
|
|
123
|
+
*
|
|
124
|
+
* A standalone gateway must forward to fixed backends or discovery; it can
|
|
125
|
+
* never expose an empty routing surface.
|
|
126
|
+
*/
|
|
127
|
+
export type StandaloneBrowserServerOptions = BrowserServerOptions & ({
|
|
128
|
+
/**
|
|
129
|
+
* Supplies fixed backends when discovery is optional.
|
|
130
|
+
*/
|
|
131
|
+
readonly backend: BrowserBackend;
|
|
132
|
+
/**
|
|
133
|
+
* Optionally supplements the fixed backend set with discovery.
|
|
134
|
+
*/
|
|
135
|
+
readonly discovery?: NodeDiscovery;
|
|
136
|
+
} | {
|
|
137
|
+
/**
|
|
138
|
+
* Optionally supplies fixed backends alongside required discovery.
|
|
139
|
+
*/
|
|
140
|
+
readonly backend?: BrowserBackend;
|
|
141
|
+
/**
|
|
142
|
+
* Supplies required discovery when no fixed backend is configured.
|
|
143
|
+
*/
|
|
144
|
+
readonly discovery: NodeDiscovery;
|
|
145
|
+
});
|
|
146
|
+
/**
|
|
147
|
+
* Defines one bounded application authentication callback exposed by a browser gateway.
|
|
148
|
+
*/
|
|
149
|
+
export interface BrowserAuthRoute {
|
|
150
|
+
/**
|
|
151
|
+
* Accepted method; auth routes only support GET or POST.
|
|
152
|
+
*/
|
|
153
|
+
readonly method: "GET" | "POST";
|
|
154
|
+
/**
|
|
155
|
+
* Exact canonical non-root path; reserved Spine RPC paths are forbidden.
|
|
156
|
+
*/
|
|
157
|
+
readonly path: string;
|
|
158
|
+
/**
|
|
159
|
+
* Exact canonical origins allowed for this callback.
|
|
160
|
+
*/
|
|
161
|
+
readonly origins: readonly string[];
|
|
162
|
+
/**
|
|
163
|
+
* Permits an origin-less OAuth callback only when explicitly enabled.
|
|
164
|
+
*/
|
|
165
|
+
readonly allowMissingOrigin?: boolean;
|
|
166
|
+
/**
|
|
167
|
+
* Positive request-body limit, capped at the transport bound.
|
|
168
|
+
*/
|
|
169
|
+
readonly maxRequestBytes: number;
|
|
170
|
+
/**
|
|
171
|
+
* Positive callback deadline in milliseconds.
|
|
172
|
+
*/
|
|
173
|
+
readonly timeoutMs: number;
|
|
174
|
+
/**
|
|
175
|
+
* Invokes the bounded callback only after origin and body admission.
|
|
176
|
+
*
|
|
177
|
+
* @param request Admitted callback request.
|
|
178
|
+
* @param signal Aborts when the callback deadline expires or the client disconnects.
|
|
179
|
+
* @returns A bounded callback response.
|
|
180
|
+
*/
|
|
181
|
+
readonly onRequest: (request: Request, signal: AbortSignal) => Response | Promise<Response>;
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/browser/options.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
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
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/browser/options.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { type Command } from "@spine-event-engine/proto";
|
|
2
|
+
import type { CommandDispatcher } from "./command-dispatcher.js";
|
|
3
|
+
interface CommandBusAccess {
|
|
4
|
+
postInternal(commandBus: CommandBus, command: Command): Promise<void>;
|
|
5
|
+
postInternalFollowUp(commandBus: CommandBus, command: Command): Promise<void>;
|
|
6
|
+
beginClose(commandBus: CommandBus): void;
|
|
7
|
+
drain(commandBus: CommandBus): Promise<void>;
|
|
8
|
+
finishClose(commandBus: CommandBus): Promise<void>;
|
|
9
|
+
abortClose(commandBus: CommandBus): void;
|
|
10
|
+
acceptedWorkCount(commandBus: CommandBus): number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Small single-process unicast command bus.
|
|
14
|
+
*
|
|
15
|
+
* Commands are accepted asynchronously through `post()` and routed by enclosed
|
|
16
|
+
* message type URL to exactly one registered dispatcher.
|
|
17
|
+
*/
|
|
18
|
+
export declare class CommandBus {
|
|
19
|
+
#private;
|
|
20
|
+
/**
|
|
21
|
+
* Creates a bus and registers its initial dispatchers.
|
|
22
|
+
*
|
|
23
|
+
* @param dispatchers the dispatchers to register.
|
|
24
|
+
*/
|
|
25
|
+
constructor(dispatchers?: Iterable<CommandDispatcher>);
|
|
26
|
+
/**
|
|
27
|
+
* Registers a dispatcher.
|
|
28
|
+
*
|
|
29
|
+
* @param dispatcher the dispatcher to register.
|
|
30
|
+
* @returns the registered dispatcher.
|
|
31
|
+
*/
|
|
32
|
+
register<Dispatcher extends CommandDispatcher>(dispatcher: Dispatcher): Dispatcher;
|
|
33
|
+
/**
|
|
34
|
+
* Lists command type URLs accepted by registered dispatchers.
|
|
35
|
+
*
|
|
36
|
+
* @returns the accepted command type URLs.
|
|
37
|
+
*/
|
|
38
|
+
acceptedCommandTypes(): readonly string[];
|
|
39
|
+
/**
|
|
40
|
+
* Posts a command for asynchronous dispatch.
|
|
41
|
+
*
|
|
42
|
+
* @param command the command envelope to post.
|
|
43
|
+
* @returns A promise that settles after queued command dispatch completes and may reject.
|
|
44
|
+
*/
|
|
45
|
+
post(command: Command): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Stops accepting new command work and waits for accepted work to settle.
|
|
48
|
+
*
|
|
49
|
+
* Close is idempotent and returns the same close outcome on repeated calls.
|
|
50
|
+
* Runtime close failures reject the returned promise.
|
|
51
|
+
* @returns A promise that settles after the command bus closes.
|
|
52
|
+
*
|
|
53
|
+
*/
|
|
54
|
+
close(): Promise<void>;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Provides framework-owned command posting and coordinated close access.
|
|
58
|
+
*
|
|
59
|
+
* @internal
|
|
60
|
+
*/
|
|
61
|
+
export declare const commandBusAccess: CommandBusAccess;
|
|
62
|
+
export {};
|
|
63
|
+
//# sourceMappingURL=command-bus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-bus.d.ts","sourceRoot":"","sources":["../../src/bus/command-bus.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAUxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAUjE,UAAU,gBAAgB;IACxB,YAAY,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,oBAAoB,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,UAAU,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IACzC,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,WAAW,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,UAAU,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IACzC,iBAAiB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAAC;CACnD;AAID;;;;;GAKG;AACH,qBAAa,UAAU;;IAQrB;;;;OAIG;gBACS,WAAW,GAAE,QAAQ,CAAC,iBAAiB,CAAM;IAqBzD;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,SAAS,iBAAiB,EAAE,UAAU,EAAE,UAAU,GAAG,UAAU;IAKlF;;;;OAIG;IACH,oBAAoB,IAAI,SAAS,MAAM,EAAE;IAIzC;;;;;OAKG;IACH,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAUrC;;;;;;;OAOG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CA8FvB;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,gBAoE7B,CAAC"}
|
|
@@ -0,0 +1,236 @@
|
|
|
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 { clone } from "@bufbuild/protobuf";
|
|
15
|
+
import { ValidationException, Validate, AnyMessages } from "@spine-event-engine/core";
|
|
16
|
+
import { CommandSchema } from "@spine-event-engine/proto";
|
|
17
|
+
import { runtimeAccess, ServerRuntimeStateError, SingleProcessServerRuntime, } from "../runtime/runtime.js";
|
|
18
|
+
import { CommandValidationError } from "./command-errors.js";
|
|
19
|
+
import { ImplicitRequiredIds } from "../entity/implicit-required-id.js";
|
|
20
|
+
import { CommandDispatcherRegistry } from "./command-dispatcher-registry.js";
|
|
21
|
+
const internalCommandPosters = new WeakMap();
|
|
22
|
+
const commandFollowUpPosters = new WeakMap();
|
|
23
|
+
const commandBusCloseStarters = new WeakMap();
|
|
24
|
+
const commandBusDrainers = new WeakMap();
|
|
25
|
+
const commandBusCloseFinishers = new WeakMap();
|
|
26
|
+
const commandBusAborters = new WeakMap();
|
|
27
|
+
const commandBusWorkCounters = new WeakMap();
|
|
28
|
+
/**
|
|
29
|
+
* Small single-process unicast command bus.
|
|
30
|
+
*
|
|
31
|
+
* Commands are accepted asynchronously through `post()` and routed by enclosed
|
|
32
|
+
* message type URL to exactly one registered dispatcher.
|
|
33
|
+
*/
|
|
34
|
+
export class CommandBus {
|
|
35
|
+
#registry = new CommandDispatcherRegistry();
|
|
36
|
+
#runtime = new SingleProcessServerRuntime();
|
|
37
|
+
#started;
|
|
38
|
+
#intakeState = "open";
|
|
39
|
+
#acceptedWorkCount = 0;
|
|
40
|
+
#closed;
|
|
41
|
+
/**
|
|
42
|
+
* Creates a bus and registers its initial dispatchers.
|
|
43
|
+
*
|
|
44
|
+
* @param dispatchers the dispatchers to register.
|
|
45
|
+
*/
|
|
46
|
+
constructor(dispatchers = []) {
|
|
47
|
+
this.#started = this.#runtime.start();
|
|
48
|
+
internalCommandPosters.set(this, (command) => this.#postInternal(command));
|
|
49
|
+
commandFollowUpPosters.set(this, (command) => this.#postInternalFollowUp(command));
|
|
50
|
+
commandBusCloseStarters.set(this, () => {
|
|
51
|
+
this.#beginClose();
|
|
52
|
+
});
|
|
53
|
+
commandBusDrainers.set(this, () => {
|
|
54
|
+
return this.#drain();
|
|
55
|
+
});
|
|
56
|
+
commandBusCloseFinishers.set(this, () => this.#finishClose());
|
|
57
|
+
commandBusAborters.set(this, () => {
|
|
58
|
+
this.#abortClose();
|
|
59
|
+
});
|
|
60
|
+
commandBusWorkCounters.set(this, () => this.#acceptedWorkCount);
|
|
61
|
+
for (const dispatcher of dispatchers) {
|
|
62
|
+
this.register(dispatcher);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Registers a dispatcher.
|
|
67
|
+
*
|
|
68
|
+
* @param dispatcher the dispatcher to register.
|
|
69
|
+
* @returns the registered dispatcher.
|
|
70
|
+
*/
|
|
71
|
+
register(dispatcher) {
|
|
72
|
+
this.#registry.register(dispatcher);
|
|
73
|
+
return dispatcher;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Lists command type URLs accepted by registered dispatchers.
|
|
77
|
+
*
|
|
78
|
+
* @returns the accepted command type URLs.
|
|
79
|
+
*/
|
|
80
|
+
acceptedCommandTypes() {
|
|
81
|
+
return this.#registry.acceptedTypeUrls();
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Posts a command for asynchronous dispatch.
|
|
85
|
+
*
|
|
86
|
+
* @param command the command envelope to post.
|
|
87
|
+
* @returns A promise that settles after queued command dispatch completes and may reject.
|
|
88
|
+
*/
|
|
89
|
+
post(command) {
|
|
90
|
+
const accepted = clone(CommandSchema, command);
|
|
91
|
+
if (this.#intakeState !== "open") {
|
|
92
|
+
return Promise.reject(new ServerRuntimeStateError("enqueue", this.#intakeState));
|
|
93
|
+
}
|
|
94
|
+
return this.#enqueueAccepted(accepted);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Stops accepting new command work and waits for accepted work to settle.
|
|
98
|
+
*
|
|
99
|
+
* Close is idempotent and returns the same close outcome on repeated calls.
|
|
100
|
+
* Runtime close failures reject the returned promise.
|
|
101
|
+
* @returns A promise that settles after the command bus closes.
|
|
102
|
+
*
|
|
103
|
+
*/
|
|
104
|
+
close() {
|
|
105
|
+
this.#closed ??= this.#closeOnce();
|
|
106
|
+
return this.#closed;
|
|
107
|
+
}
|
|
108
|
+
#postInternal(command) {
|
|
109
|
+
const accepted = clone(CommandSchema, command);
|
|
110
|
+
if (this.#intakeState === "closed") {
|
|
111
|
+
return Promise.reject(new ServerRuntimeStateError("enqueue", "closed"));
|
|
112
|
+
}
|
|
113
|
+
return this.#enqueueAccepted(accepted);
|
|
114
|
+
}
|
|
115
|
+
#postInternalFollowUp(command) {
|
|
116
|
+
const accepted = clone(CommandSchema, command);
|
|
117
|
+
if (this.#intakeState === "closed") {
|
|
118
|
+
return Promise.reject(new ServerRuntimeStateError("enqueue", "closed"));
|
|
119
|
+
}
|
|
120
|
+
this.#acceptedWorkCount++;
|
|
121
|
+
return this.#started.then(() => runtimeAccess.enqueueFollowUp(this.#runtime, () => this.#dispatch(accepted)));
|
|
122
|
+
}
|
|
123
|
+
#enqueueAccepted(command) {
|
|
124
|
+
this.#acceptedWorkCount++;
|
|
125
|
+
return this.#started.then(() => this.#runtime.enqueue(() => this.#dispatch(command)));
|
|
126
|
+
}
|
|
127
|
+
#beginClose() {
|
|
128
|
+
if (this.#intakeState === "open") {
|
|
129
|
+
this.#intakeState = "closing";
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
#drain() {
|
|
133
|
+
return this.#started.then(() => runtimeAccess.drain(this.#runtime));
|
|
134
|
+
}
|
|
135
|
+
#finishClose() {
|
|
136
|
+
this.#closed ??= this.#closeOnce();
|
|
137
|
+
return this.#closed;
|
|
138
|
+
}
|
|
139
|
+
#abortClose() {
|
|
140
|
+
this.#beginClose();
|
|
141
|
+
void this.#started.then(() => this.#runtime.close()).catch(() => undefined);
|
|
142
|
+
this.#intakeState = "closed";
|
|
143
|
+
}
|
|
144
|
+
async #closeOnce() {
|
|
145
|
+
this.#beginClose();
|
|
146
|
+
await this.#started;
|
|
147
|
+
await this.#runtime.close();
|
|
148
|
+
this.#intakeState = "closed";
|
|
149
|
+
}
|
|
150
|
+
async #dispatch(command) {
|
|
151
|
+
const packed = command.message;
|
|
152
|
+
if (packed === undefined || packed.typeUrl === "") {
|
|
153
|
+
throw new Error("CommandBus requires command.message.typeUrl.");
|
|
154
|
+
}
|
|
155
|
+
const typeUrl = packed.typeUrl;
|
|
156
|
+
const registration = this.#registry.find(typeUrl);
|
|
157
|
+
if (registration === undefined) {
|
|
158
|
+
throw new Error(`No command dispatcher registered for "${typeUrl}".`);
|
|
159
|
+
}
|
|
160
|
+
const message = AnyMessages.unpack(packed, registration.schema);
|
|
161
|
+
if (message === undefined) {
|
|
162
|
+
throw CommandValidationError.invalidPayload();
|
|
163
|
+
}
|
|
164
|
+
try {
|
|
165
|
+
Validate.check(registration.schema, message);
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
if (error instanceof ValidationException) {
|
|
169
|
+
throw new CommandValidationError(error.asMessage());
|
|
170
|
+
}
|
|
171
|
+
throw error;
|
|
172
|
+
}
|
|
173
|
+
const implicitId = ImplicitRequiredIds.validateCommand(registration.schema, message);
|
|
174
|
+
if (!implicitId.valid) {
|
|
175
|
+
throw new CommandValidationError(implicitId.error);
|
|
176
|
+
}
|
|
177
|
+
await registration.dispatcher.dispatch(clone(CommandSchema, command));
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Provides framework-owned command posting and coordinated close access.
|
|
182
|
+
*
|
|
183
|
+
* @internal
|
|
184
|
+
*/
|
|
185
|
+
export const commandBusAccess = Object.freeze({
|
|
186
|
+
postInternal(commandBus, command) {
|
|
187
|
+
const postInternal = internalCommandPosters.get(commandBus);
|
|
188
|
+
if (postInternal === undefined) {
|
|
189
|
+
throw new TypeError("Internal command post requires a CommandBus instance.");
|
|
190
|
+
}
|
|
191
|
+
return postInternal(command);
|
|
192
|
+
},
|
|
193
|
+
postInternalFollowUp(commandBus, command) {
|
|
194
|
+
const post = commandFollowUpPosters.get(commandBus);
|
|
195
|
+
if (post === undefined) {
|
|
196
|
+
throw new TypeError("Internal command follow-up requires a CommandBus instance.");
|
|
197
|
+
}
|
|
198
|
+
return post(command);
|
|
199
|
+
},
|
|
200
|
+
beginClose(commandBus) {
|
|
201
|
+
const beginClose = commandBusCloseStarters.get(commandBus);
|
|
202
|
+
if (beginClose === undefined) {
|
|
203
|
+
throw new TypeError("Command-bus close coordination requires a CommandBus instance.");
|
|
204
|
+
}
|
|
205
|
+
beginClose();
|
|
206
|
+
},
|
|
207
|
+
drain(commandBus) {
|
|
208
|
+
const drain = commandBusDrainers.get(commandBus);
|
|
209
|
+
if (drain === undefined) {
|
|
210
|
+
throw new TypeError("Command-bus drain requires a CommandBus instance.");
|
|
211
|
+
}
|
|
212
|
+
return drain();
|
|
213
|
+
},
|
|
214
|
+
finishClose(commandBus) {
|
|
215
|
+
const finishClose = commandBusCloseFinishers.get(commandBus);
|
|
216
|
+
if (finishClose === undefined) {
|
|
217
|
+
throw new TypeError("Command-bus close completion requires a CommandBus instance.");
|
|
218
|
+
}
|
|
219
|
+
return finishClose();
|
|
220
|
+
},
|
|
221
|
+
abortClose(commandBus) {
|
|
222
|
+
const abortClose = commandBusAborters.get(commandBus);
|
|
223
|
+
if (abortClose === undefined) {
|
|
224
|
+
throw new TypeError("Command-bus close coordination requires a CommandBus instance.");
|
|
225
|
+
}
|
|
226
|
+
abortClose();
|
|
227
|
+
},
|
|
228
|
+
acceptedWorkCount(commandBus) {
|
|
229
|
+
const acceptedWorkCount = commandBusWorkCounters.get(commandBus);
|
|
230
|
+
if (acceptedWorkCount === undefined) {
|
|
231
|
+
throw new TypeError("Command-bus work counting requires a CommandBus instance.");
|
|
232
|
+
}
|
|
233
|
+
return acceptedWorkCount();
|
|
234
|
+
},
|
|
235
|
+
});
|
|
236
|
+
//# sourceMappingURL=command-bus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-bus.js","sourceRoot":"","sources":["../../src/bus/command-bus.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type MessageSchema } from "@spine-event-engine/core";
|
|
2
|
+
import type { CommandDispatcher } from "./command-dispatcher.js";
|
|
3
|
+
interface RegisteredCommandDispatcher {
|
|
4
|
+
readonly dispatcher: CommandDispatcher;
|
|
5
|
+
readonly schema: MessageSchema;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Internal unicast registry keyed by canonical Spine command type URL.
|
|
9
|
+
*/
|
|
10
|
+
export declare class CommandDispatcherRegistry {
|
|
11
|
+
#private;
|
|
12
|
+
/**
|
|
13
|
+
* Registers a dispatcher and all of its distinct command schemas.
|
|
14
|
+
*
|
|
15
|
+
* @param dispatcher the dispatcher to register.
|
|
16
|
+
*/
|
|
17
|
+
register(dispatcher: CommandDispatcher): void;
|
|
18
|
+
/**
|
|
19
|
+
* Finds the dispatcher registered for a canonical command type URL.
|
|
20
|
+
*
|
|
21
|
+
* @param typeUrl the canonical command type URL.
|
|
22
|
+
* @returns the registration, when one exists.
|
|
23
|
+
*/
|
|
24
|
+
find(typeUrl: string): RegisteredCommandDispatcher | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Lists the canonical command type URLs accepted by this registry.
|
|
27
|
+
*
|
|
28
|
+
* @returns the registered type URLs.
|
|
29
|
+
*/
|
|
30
|
+
acceptedTypeUrls(): readonly string[];
|
|
31
|
+
}
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=command-dispatcher-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-dispatcher-registry.d.ts","sourceRoot":"","sources":["../../src/bus/command-dispatcher-registry.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,KAAK,aAAa,EAAY,MAAM,0BAA0B,CAAC;AAExE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,UAAU,2BAA2B;IACnC,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;CAChC;AAED;;GAEG;AACH,qBAAa,yBAAyB;;IAIpC;;;;OAIG;IACH,QAAQ,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI;IAyB7C;;;;;OAKG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,2BAA2B,GAAG,SAAS;IAI9D;;;;OAIG;IACH,gBAAgB,IAAI,SAAS,MAAM,EAAE;CAoBtC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
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 { TypeUrls } from "@spine-event-engine/core";
|
|
15
|
+
/**
|
|
16
|
+
* Internal unicast registry keyed by canonical Spine command type URL.
|
|
17
|
+
*/
|
|
18
|
+
export class CommandDispatcherRegistry {
|
|
19
|
+
#dispatchers = new Set();
|
|
20
|
+
#byTypeUrl = new Map();
|
|
21
|
+
/**
|
|
22
|
+
* Registers a dispatcher and all of its distinct command schemas.
|
|
23
|
+
*
|
|
24
|
+
* @param dispatcher the dispatcher to register.
|
|
25
|
+
*/
|
|
26
|
+
register(dispatcher) {
|
|
27
|
+
if (this.#dispatchers.has(dispatcher)) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const registrations = CommandDispatcherRegistry.#registrations(dispatcher);
|
|
31
|
+
for (const registration of registrations) {
|
|
32
|
+
const registered = this.#byTypeUrl.get(registration.typeUrl);
|
|
33
|
+
if (registered !== undefined && registered.dispatcher !== dispatcher) {
|
|
34
|
+
throw new Error(`Duplicate command dispatcher for "${registration.typeUrl}".`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
this.#dispatchers.add(dispatcher);
|
|
38
|
+
for (const registration of registrations) {
|
|
39
|
+
this.#byTypeUrl.set(registration.typeUrl, {
|
|
40
|
+
dispatcher,
|
|
41
|
+
schema: registration.schema,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Finds the dispatcher registered for a canonical command type URL.
|
|
47
|
+
*
|
|
48
|
+
* @param typeUrl the canonical command type URL.
|
|
49
|
+
* @returns the registration, when one exists.
|
|
50
|
+
*/
|
|
51
|
+
find(typeUrl) {
|
|
52
|
+
return this.#byTypeUrl.get(typeUrl);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Lists the canonical command type URLs accepted by this registry.
|
|
56
|
+
*
|
|
57
|
+
* @returns the registered type URLs.
|
|
58
|
+
*/
|
|
59
|
+
acceptedTypeUrls() {
|
|
60
|
+
return Object.freeze([...this.#byTypeUrl.keys()]);
|
|
61
|
+
}
|
|
62
|
+
static #registrations(dispatcher) {
|
|
63
|
+
const registrations = [];
|
|
64
|
+
const seen = new Set();
|
|
65
|
+
for (const schema of dispatcher.messageSchemas()) {
|
|
66
|
+
const typeUrl = TypeUrls.derive(schema);
|
|
67
|
+
if (!seen.has(typeUrl)) {
|
|
68
|
+
seen.add(typeUrl);
|
|
69
|
+
registrations.push({ typeUrl, schema });
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return Object.freeze(registrations);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=command-dispatcher-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-dispatcher-registry.js","sourceRoot":"","sources":["../../src/bus/command-dispatcher-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAsB,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AASxE;;GAEG;AACH,MAAM,OAAO,yBAAyB;IAC3B,YAAY,GAAG,IAAI,GAAG,EAAqB,CAAC;IAC5C,UAAU,GAAG,IAAI,GAAG,EAAuC,CAAC;IAErE;;;;OAIG;IACH,QAAQ,CAAC,UAA6B;QACpC,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YACtC,OAAO;QACT,CAAC;QAED,MAAM,aAAa,GAAG,yBAAyB,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAE3E,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;YACzC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAE7D,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;gBACrE,MAAM,IAAI,KAAK,CAAC,qCAAqC,YAAY,CAAC,OAAO,IAAI,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAElC,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;YACzC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE;gBACxC,UAAU;gBACV,MAAM,EAAE,YAAY,CAAC,MAAM;aAC5B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,IAAI,CAAC,OAAe;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAED;;;;OAIG;IACH,gBAAgB;QACd,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,CAAC,cAAc,CACnB,UAA6B;QAE7B,MAAM,aAAa,GAAiD,EAAE,CAAC;QACvE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAE/B,KAAK,MAAM,MAAM,IAAI,UAAU,CAAC,cAAc,EAAE,EAAE,CAAC;YACjD,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAExC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAClB,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACtC,CAAC;CACF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Command } from "@spine-event-engine/proto";
|
|
2
|
+
import type { MessageSchema } from "@spine-event-engine/core";
|
|
3
|
+
/**
|
|
4
|
+
* Small unicast command-dispatch seam for bus and repository adapters.
|
|
5
|
+
*
|
|
6
|
+
* Dispatchers declare the command message schemas they accept and perform
|
|
7
|
+
* handling behind the bus seam. Repository-backed adapters own entity loading
|
|
8
|
+
* and method invocation; the bus only routes accepted command envelopes.
|
|
9
|
+
*/
|
|
10
|
+
export interface CommandDispatcher {
|
|
11
|
+
/**
|
|
12
|
+
* Lists generated command message schemas accepted by this dispatcher.
|
|
13
|
+
*
|
|
14
|
+
* @returns the accepted message schemas.
|
|
15
|
+
*/
|
|
16
|
+
messageSchemas(): readonly MessageSchema[];
|
|
17
|
+
/**
|
|
18
|
+
* Dispatches one generated Spine command envelope.
|
|
19
|
+
*
|
|
20
|
+
* @param command the command envelope to dispatch.
|
|
21
|
+
* @returns A promise that resolves after the command is dispatched.
|
|
22
|
+
*/
|
|
23
|
+
dispatch(command: Command): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=command-dispatcher.d.ts.map
|