@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,336 @@
|
|
|
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, create, toBinary } from "@bufbuild/protobuf";
|
|
15
|
+
import { TimestampSchema } from "@bufbuild/protobuf/wkt";
|
|
16
|
+
import { TenantIdSchema } from "@spine-event-engine/proto";
|
|
17
|
+
import { InboxMessageIdSchema } from "@spine-event-engine/proto/delivery";
|
|
18
|
+
import { ShardIndexSchema, ShardSessionRecordSchema } from "@spine-event-engine/proto/delivery";
|
|
19
|
+
import { DeliveryCleanupStorageFactories } from "@spine-event-engine/storage/provider";
|
|
20
|
+
import { InboxMessageError, } from "./inbox.js";
|
|
21
|
+
import { InboxRecords, inboxRecordSpec } from "./inbox-records.js";
|
|
22
|
+
import { ShardIndex } from "./shard-index.js";
|
|
23
|
+
import { shardSessionRecordSpec } from "./sharded-work-registry.js";
|
|
24
|
+
const defaultReadLimit = 100;
|
|
25
|
+
const maxReadLimit = 1_000;
|
|
26
|
+
/**
|
|
27
|
+
* Stores direct generated inbox records in the configured durable family.
|
|
28
|
+
*/
|
|
29
|
+
export class InboxStorage {
|
|
30
|
+
#context;
|
|
31
|
+
#storageFactory;
|
|
32
|
+
#now;
|
|
33
|
+
/**
|
|
34
|
+
* Opens direct inbox storage.
|
|
35
|
+
*
|
|
36
|
+
* @param options Configures the storage context, factory, and optional clock.
|
|
37
|
+
*/
|
|
38
|
+
constructor(options) {
|
|
39
|
+
this.#context = Values.snapshotContext(options.context);
|
|
40
|
+
this.#storageFactory = options.storageFactory;
|
|
41
|
+
this.#now = options.now ?? (() => new Date());
|
|
42
|
+
Object.freeze(this);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Reads ordered direct inbox rows from one shard.
|
|
46
|
+
*
|
|
47
|
+
* @param shard Identifies the shard to query.
|
|
48
|
+
* @param options Filters and bounds the returned page.
|
|
49
|
+
* @returns The matching durable inbox messages.
|
|
50
|
+
*/
|
|
51
|
+
async read(shard, options = {}) {
|
|
52
|
+
const requested = Values.shard(shard);
|
|
53
|
+
const limit = Values.limit(options.limit ?? defaultReadLimit);
|
|
54
|
+
const offset = Values.offset(options.offset);
|
|
55
|
+
const after = Values.after(options.after, requested);
|
|
56
|
+
const storage = this.#storage();
|
|
57
|
+
try {
|
|
58
|
+
const rows = await storage.queryEntries({
|
|
59
|
+
filters: [
|
|
60
|
+
{ column: "shard_index", value: requested.index },
|
|
61
|
+
{ column: "shard_total", value: requested.ofTotal },
|
|
62
|
+
...(options.statuses === undefined
|
|
63
|
+
? []
|
|
64
|
+
: [{ column: "status", value: options.statuses.map(Values.status) }]),
|
|
65
|
+
],
|
|
66
|
+
sort: [{ field: "when_received" }, { field: "version" }, { field: "message_id" }],
|
|
67
|
+
limit,
|
|
68
|
+
...(offset === undefined ? {} : { offset }),
|
|
69
|
+
...(after === undefined ? {} : { after }),
|
|
70
|
+
});
|
|
71
|
+
return Object.freeze(rows.map((row) => InboxRecords.read(row.record, row.id)));
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
storage.close();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Reads one exact direct inbox row.
|
|
79
|
+
*
|
|
80
|
+
* @param id Identifies the message and shard.
|
|
81
|
+
* @returns The durable message, or `undefined` when it is absent.
|
|
82
|
+
*/
|
|
83
|
+
async readMessage(id) {
|
|
84
|
+
const wireId = Values.id(id);
|
|
85
|
+
const storage = this.#storage();
|
|
86
|
+
try {
|
|
87
|
+
const record = await storage.read(wireId);
|
|
88
|
+
return record === undefined ? undefined : InboxRecords.read(record, wireId);
|
|
89
|
+
}
|
|
90
|
+
finally {
|
|
91
|
+
storage.close();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Writes one direct inbox row without overwriting a collision.
|
|
96
|
+
*
|
|
97
|
+
* @param message Supplies the message to persist.
|
|
98
|
+
* @returns Whether the row was written or matched an existing duplicate.
|
|
99
|
+
*/
|
|
100
|
+
async write(message) {
|
|
101
|
+
const record = InboxRecords.write(message);
|
|
102
|
+
const id = Values.wireId(record);
|
|
103
|
+
const storage = this.#storage();
|
|
104
|
+
try {
|
|
105
|
+
Values.atomic(storage);
|
|
106
|
+
if (await storage.compareAndSet(id, undefined, record)) {
|
|
107
|
+
return Object.freeze({ outcome: "WRITTEN", message: InboxRecords.read(record, id) });
|
|
108
|
+
}
|
|
109
|
+
const existing = await storage.read(id);
|
|
110
|
+
if (existing !== undefined && Values.same(existing, record)) {
|
|
111
|
+
return Object.freeze({ outcome: "DUPLICATE", message: InboxRecords.read(existing, id) });
|
|
112
|
+
}
|
|
113
|
+
throw new InboxMessageError("Inbox message ID already exists.");
|
|
114
|
+
}
|
|
115
|
+
finally {
|
|
116
|
+
storage.close();
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Marks one exact pending row delivered.
|
|
121
|
+
*
|
|
122
|
+
* @param message Supplies the expected pending snapshot.
|
|
123
|
+
* @returns The delivered row, or `undefined` when the snapshot no longer matches.
|
|
124
|
+
*/
|
|
125
|
+
async markDelivered(message) {
|
|
126
|
+
const expected = InboxRecords.write(message);
|
|
127
|
+
const id = Values.wireId(expected);
|
|
128
|
+
const storage = this.#storage();
|
|
129
|
+
try {
|
|
130
|
+
Values.atomic(storage);
|
|
131
|
+
const current = await storage.read(id);
|
|
132
|
+
if (current === undefined)
|
|
133
|
+
return undefined;
|
|
134
|
+
const decoded = InboxRecords.read(current, id);
|
|
135
|
+
if (decoded.status === "DELIVERED") {
|
|
136
|
+
return Values.same(current, InboxRecords.write({ ...message, status: "DELIVERED" }))
|
|
137
|
+
? decoded
|
|
138
|
+
: undefined;
|
|
139
|
+
}
|
|
140
|
+
if (decoded.status !== "TO_DELIVER" || !Values.same(current, expected))
|
|
141
|
+
return undefined;
|
|
142
|
+
const delivered = InboxRecords.write({ ...decoded, status: "DELIVERED" });
|
|
143
|
+
if (await storage.compareAndSet(id, current, delivered))
|
|
144
|
+
return InboxRecords.read(delivered, id);
|
|
145
|
+
const successor = await storage.read(id);
|
|
146
|
+
return successor !== undefined && Values.same(successor, delivered)
|
|
147
|
+
? InboxRecords.read(successor, id)
|
|
148
|
+
: undefined;
|
|
149
|
+
}
|
|
150
|
+
finally {
|
|
151
|
+
storage.close();
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Removes one eligible delivered row when the leased session remains current.
|
|
156
|
+
*
|
|
157
|
+
* @param message Supplies the exact delivered snapshot to remove.
|
|
158
|
+
* @param session Supplies the leased session that owns the message shard.
|
|
159
|
+
* @param options Propagates cancellation and a delivery deadline.
|
|
160
|
+
* @returns Whether the provider atomically removed the exact durable row.
|
|
161
|
+
*/
|
|
162
|
+
async removeDelivered(message, session, options) {
|
|
163
|
+
if (message.status !== "DELIVERED" ||
|
|
164
|
+
(message.keepUntil !== undefined && message.keepUntil.getTime() > Values.now(this.#now)))
|
|
165
|
+
return false;
|
|
166
|
+
return this.#remove(message, session, options);
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Removes one exact pending duplicate while its leased session remains current.
|
|
170
|
+
*
|
|
171
|
+
* @param message Supplies the expected pending snapshot.
|
|
172
|
+
* @param session Supplies the session that holds the message shard.
|
|
173
|
+
* @param options Propagates cancellation and a delivery deadline.
|
|
174
|
+
* @returns Whether the provider atomically removed the exact pending snapshot.
|
|
175
|
+
*/
|
|
176
|
+
async removeDuplicate(message, session, options) {
|
|
177
|
+
if (message.status !== "TO_DELIVER")
|
|
178
|
+
return false;
|
|
179
|
+
return this.#remove(message, session, options);
|
|
180
|
+
}
|
|
181
|
+
async #remove(message, session, options) {
|
|
182
|
+
const isActive = this.#activeOperation(options);
|
|
183
|
+
if (isActive === undefined ||
|
|
184
|
+
!isActive() ||
|
|
185
|
+
session.kind !== "LEASED" ||
|
|
186
|
+
!this.#matchesSession(message, session))
|
|
187
|
+
return false;
|
|
188
|
+
return this.#removeCurrent(message, session, options, isActive);
|
|
189
|
+
}
|
|
190
|
+
#activeOperation(options) {
|
|
191
|
+
if (options?.timeoutMs !== undefined &&
|
|
192
|
+
(!Number.isSafeInteger(options.timeoutMs) || options.timeoutMs < 0))
|
|
193
|
+
return undefined;
|
|
194
|
+
const deadline = options?.timeoutMs === undefined ? undefined : Values.now(this.#now) + options.timeoutMs;
|
|
195
|
+
return () => !options?.signal?.aborted && (deadline === undefined || Values.now(this.#now) < deadline);
|
|
196
|
+
}
|
|
197
|
+
#matchesSession(message, session) {
|
|
198
|
+
return session.kind === "LEASED" && session.shard.key() === message.shard.key();
|
|
199
|
+
}
|
|
200
|
+
async #removeCurrent(message, session, options, isActive) {
|
|
201
|
+
const expected = InboxRecords.write(message);
|
|
202
|
+
const cleanup = DeliveryCleanupStorageFactories.create(this.#storageFactory);
|
|
203
|
+
try {
|
|
204
|
+
return await cleanup.remove({
|
|
205
|
+
context: Values.context(this.#context),
|
|
206
|
+
...(options === undefined ? {} : { operation: { ...options, isActive } }),
|
|
207
|
+
inbox: { spec: inboxRecordSpec, id: Values.wireId(expected), expected },
|
|
208
|
+
session: {
|
|
209
|
+
spec: shardSessionRecordSpec,
|
|
210
|
+
id: create(ShardIndexSchema, {
|
|
211
|
+
index: session.shard.index,
|
|
212
|
+
ofTotal: session.shard.ofTotal,
|
|
213
|
+
}),
|
|
214
|
+
expected: Values.session(session),
|
|
215
|
+
isCurrent: (current) => Values.sessionCurrent(current, session, Values.now(this.#now)),
|
|
216
|
+
},
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
finally {
|
|
220
|
+
cleanup.close();
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
#storage() {
|
|
224
|
+
return this.#storageFactory.createRecordStorage(Values.context(this.#context), inboxRecordSpec);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
const Values = Object.freeze({
|
|
228
|
+
snapshotContext(context) {
|
|
229
|
+
return context.multitenant
|
|
230
|
+
? {
|
|
231
|
+
name: context.name,
|
|
232
|
+
multitenant: true,
|
|
233
|
+
tenantId: clone(TenantIdSchema, context.tenantId),
|
|
234
|
+
}
|
|
235
|
+
: { name: context.name, multitenant: false };
|
|
236
|
+
},
|
|
237
|
+
status(value) {
|
|
238
|
+
return { TO_DELIVER: 1, SCHEDULED: 2, DELIVERED: 3, TO_CATCH_UP: 4 }[value];
|
|
239
|
+
},
|
|
240
|
+
id(value) {
|
|
241
|
+
return create(InboxMessageIdSchema, {
|
|
242
|
+
uuid: value.value,
|
|
243
|
+
index: { index: value.shard.index, ofTotal: value.shard.ofTotal },
|
|
244
|
+
});
|
|
245
|
+
},
|
|
246
|
+
wireId(value) {
|
|
247
|
+
if (value.id === undefined)
|
|
248
|
+
throw new InboxMessageError("Inbox message ID is invalid.");
|
|
249
|
+
return value.id;
|
|
250
|
+
},
|
|
251
|
+
same(left, right) {
|
|
252
|
+
return Buffer.from(toBinary(inboxRecordSpec.recordType, left)).equals(Buffer.from(toBinary(inboxRecordSpec.recordType, right)));
|
|
253
|
+
},
|
|
254
|
+
shard(value) {
|
|
255
|
+
if (!(value instanceof ShardIndex))
|
|
256
|
+
throw new InboxMessageError("Inbox shard is invalid.");
|
|
257
|
+
return value;
|
|
258
|
+
},
|
|
259
|
+
limit(value) {
|
|
260
|
+
if (!Number.isSafeInteger(value) ||
|
|
261
|
+
typeof value !== "number" ||
|
|
262
|
+
value <= 0 ||
|
|
263
|
+
value > maxReadLimit) {
|
|
264
|
+
throw new InboxMessageError(`Inbox read limit must be a positive safe integer at most ${String(maxReadLimit)}.`);
|
|
265
|
+
}
|
|
266
|
+
return value;
|
|
267
|
+
},
|
|
268
|
+
offset(value) {
|
|
269
|
+
if (value === undefined)
|
|
270
|
+
return undefined;
|
|
271
|
+
if (typeof value !== "number" || !Number.isSafeInteger(value) || value < 0)
|
|
272
|
+
throw new InboxMessageError("Inbox read offset must be a non-negative safe integer.");
|
|
273
|
+
return value;
|
|
274
|
+
},
|
|
275
|
+
after(value, shard) {
|
|
276
|
+
if (value === undefined)
|
|
277
|
+
return undefined;
|
|
278
|
+
if (typeof value.messageId !== "string" ||
|
|
279
|
+
value.messageId.trim().length === 0 ||
|
|
280
|
+
!(value.whenReceived instanceof Date) ||
|
|
281
|
+
!Number.isFinite(value.whenReceived.getTime()) ||
|
|
282
|
+
typeof value.version !== "bigint" ||
|
|
283
|
+
value.version < 0n ||
|
|
284
|
+
value.version > BigInt(0x7fffffff))
|
|
285
|
+
throw new InboxMessageError("Inbox read continuation is invalid.");
|
|
286
|
+
return {
|
|
287
|
+
values: [
|
|
288
|
+
{ field: "when_received", value: Values.timestamp(value.whenReceived.getTime()) },
|
|
289
|
+
{ field: "version", value: Number(value.version) },
|
|
290
|
+
{ field: "message_id", value: value.messageId },
|
|
291
|
+
],
|
|
292
|
+
id: Values.id({ value: value.messageId, shard }),
|
|
293
|
+
};
|
|
294
|
+
},
|
|
295
|
+
timestamp(ms) {
|
|
296
|
+
const seconds = Math.floor(ms / 1_000);
|
|
297
|
+
return create(TimestampSchema, {
|
|
298
|
+
seconds: BigInt(seconds),
|
|
299
|
+
nanos: (ms - seconds * 1_000) * 1_000_000,
|
|
300
|
+
});
|
|
301
|
+
},
|
|
302
|
+
atomic(storage) {
|
|
303
|
+
if (!storage.atomicCompareAndSet)
|
|
304
|
+
throw new InboxMessageError("Inbox storage requires atomic compare-and-set.");
|
|
305
|
+
},
|
|
306
|
+
now(clock) {
|
|
307
|
+
const value = clock();
|
|
308
|
+
if (!(value instanceof Date) || !Number.isFinite(value.getTime()))
|
|
309
|
+
throw new InboxMessageError("Inbox storage clock returned an invalid time.");
|
|
310
|
+
return value.getTime();
|
|
311
|
+
},
|
|
312
|
+
context(context) {
|
|
313
|
+
return context.multitenant
|
|
314
|
+
? {
|
|
315
|
+
name: `${context.name}.delivery.inbox`,
|
|
316
|
+
multitenant: true,
|
|
317
|
+
tenantId: clone(TenantIdSchema, context.tenantId),
|
|
318
|
+
}
|
|
319
|
+
: { name: `${context.name}.delivery.inbox`, multitenant: false };
|
|
320
|
+
},
|
|
321
|
+
session(value) {
|
|
322
|
+
return create(ShardSessionRecordSchema, {
|
|
323
|
+
index: { index: value.shard.index, ofTotal: value.shard.ofTotal },
|
|
324
|
+
whenLastPicked: Values.timestamp(value.pickedUpAt.getTime()),
|
|
325
|
+
worker: value.worker,
|
|
326
|
+
});
|
|
327
|
+
},
|
|
328
|
+
sessionCurrent(value, expected, now) {
|
|
329
|
+
return (value.index?.index === expected.shard.index &&
|
|
330
|
+
value.index.ofTotal === expected.shard.ofTotal &&
|
|
331
|
+
value.worker?.nodeId?.value === expected.worker?.nodeId?.value &&
|
|
332
|
+
value.worker?.value === expected.worker?.value &&
|
|
333
|
+
expected.expiresAt.getTime() > now);
|
|
334
|
+
},
|
|
335
|
+
});
|
|
336
|
+
//# sourceMappingURL=inbox-storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbox-storage.js","sourceRoot":"","sources":["../../src/delivery/inbox-storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import { type Any } from "@bufbuild/protobuf/wkt";
|
|
2
|
+
import type { InboxStorage } from "./inbox-storage.js";
|
|
3
|
+
import type { DeliveryOperationOptions, DeliveryWorkSession } from "./delivery-ports.js";
|
|
4
|
+
import type { ShardIndex } from "./shard-index.js";
|
|
5
|
+
/**
|
|
6
|
+
* Small JVM-style inbox facade over durable storage.
|
|
7
|
+
*/
|
|
8
|
+
export declare class Inbox {
|
|
9
|
+
#private;
|
|
10
|
+
/**
|
|
11
|
+
* Local inbox work is admitted only under a renewable leased session.
|
|
12
|
+
*/
|
|
13
|
+
readonly sessionKind: "LEASED";
|
|
14
|
+
/**
|
|
15
|
+
* Intentional low-level escape hatch for storage-focused tests and integrations.
|
|
16
|
+
*/
|
|
17
|
+
readonly storage: InboxStorage;
|
|
18
|
+
/**
|
|
19
|
+
* Opens an inbox over durable inbox storage.
|
|
20
|
+
*
|
|
21
|
+
* @param storage Stores pending and delivered inbox rows directly.
|
|
22
|
+
*/
|
|
23
|
+
constructor(storage: InboxStorage);
|
|
24
|
+
/**
|
|
25
|
+
* Stores one message in durable inbox storage.
|
|
26
|
+
*
|
|
27
|
+
* @param input Describes the message to make durable.
|
|
28
|
+
* @returns The write or deduplication outcome.
|
|
29
|
+
*/
|
|
30
|
+
receive(input: InboxMessageInput): Promise<InboxWriteResult>;
|
|
31
|
+
/**
|
|
32
|
+
* Reads ordered messages for one shard.
|
|
33
|
+
*
|
|
34
|
+
* @param shard Selects the shard to inspect.
|
|
35
|
+
* @param options Filters and bounds the ordered page.
|
|
36
|
+
* @returns The matching durable messages.
|
|
37
|
+
*/
|
|
38
|
+
read(shard: ShardIndex, options?: InboxReadOptions): Promise<readonly InboxMessage[]>;
|
|
39
|
+
/**
|
|
40
|
+
* Reads one exact durable inbox message by ID.
|
|
41
|
+
*
|
|
42
|
+
* @param id Identifies the durable message.
|
|
43
|
+
* @returns The message when it remains durable.
|
|
44
|
+
*/
|
|
45
|
+
readMessage(id: InboxMessageId): Promise<InboxMessage | undefined>;
|
|
46
|
+
/**
|
|
47
|
+
* Updates one pending message to delivered when its snapshot still matches.
|
|
48
|
+
*
|
|
49
|
+
* @param message Supplies the pending message snapshot.
|
|
50
|
+
* @returns The delivered message, or `undefined` when the durable row is missing,
|
|
51
|
+
* not pending, or no longer matches the snapshot. Matching delivered rows return
|
|
52
|
+
* idempotently so concurrent workers converge without re-dispatching.
|
|
53
|
+
*/
|
|
54
|
+
markDelivered(message: InboxMessage): Promise<InboxMessage | undefined>;
|
|
55
|
+
/**
|
|
56
|
+
* Removes one exact pending duplicate while its shard session remains current.
|
|
57
|
+
*
|
|
58
|
+
* @param message Supplies the pending duplicate snapshot.
|
|
59
|
+
* @param session Supplies the session that holds the message shard.
|
|
60
|
+
* @param options Propagates cancellation and a delivery deadline.
|
|
61
|
+
* @returns Whether storage atomically removed the exact pending snapshot.
|
|
62
|
+
*/
|
|
63
|
+
removeDuplicate(message: InboxMessage, session: DeliveryWorkSession, options?: DeliveryOperationOptions): Promise<boolean>;
|
|
64
|
+
/**
|
|
65
|
+
* Removes one delivered message only when direct provider cleanup can prove
|
|
66
|
+
* current ownership and the exact durable snapshot in one atomic operation.
|
|
67
|
+
*
|
|
68
|
+
* @param message Supplies the exact delivered snapshot to remove.
|
|
69
|
+
* @param session Supplies the leased session that owns the message shard.
|
|
70
|
+
* @param options Propagates cancellation and a delivery deadline.
|
|
71
|
+
* @returns Whether the provider atomically removed the exact durable row.
|
|
72
|
+
*/
|
|
73
|
+
removeDelivered(message: InboxMessage, session: DeliveryWorkSession, options?: DeliveryOperationOptions): Promise<boolean>;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Durable target inbox identity.
|
|
77
|
+
*/
|
|
78
|
+
export interface InboxId {
|
|
79
|
+
/**
|
|
80
|
+
* Target Entity ID packed as canonical `Any` type URL and bytes.
|
|
81
|
+
*
|
|
82
|
+
* Durable boundaries snapshot this value. Callers and custom delivery
|
|
83
|
+
* strategies must treat it as typed identity, not as a display string.
|
|
84
|
+
*/
|
|
85
|
+
readonly targetId: Any;
|
|
86
|
+
/**
|
|
87
|
+
* Target entity state type URL.
|
|
88
|
+
*/
|
|
89
|
+
readonly targetTypeUrl: string;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Provides canonical typed Inbox target identity operations.
|
|
93
|
+
*/
|
|
94
|
+
export declare const InboxTargets: Readonly<{
|
|
95
|
+
clone(value: Any): Any;
|
|
96
|
+
key(value: Any): string;
|
|
97
|
+
shardKey(value: Any): string;
|
|
98
|
+
equal(left: Any, right: Any): boolean;
|
|
99
|
+
}>;
|
|
100
|
+
/**
|
|
101
|
+
* Durable inbox message identity.
|
|
102
|
+
*/
|
|
103
|
+
export interface InboxMessageId {
|
|
104
|
+
/**
|
|
105
|
+
* Message UUID within one shard.
|
|
106
|
+
*/
|
|
107
|
+
readonly value: string;
|
|
108
|
+
/**
|
|
109
|
+
* Shard that owns the message; must match `InboxMessage.shard`.
|
|
110
|
+
*/
|
|
111
|
+
readonly shard: ShardIndex;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Raised by public delivery APIs when a caller provides an invalid inbox
|
|
115
|
+
* message. Corrupt durable delivery rows raise
|
|
116
|
+
* `DeliveryStorageCorruptionError`.
|
|
117
|
+
*/
|
|
118
|
+
export declare class InboxMessageError extends Error {
|
|
119
|
+
/**
|
|
120
|
+
* Creates an error for invalid public inbox input.
|
|
121
|
+
*
|
|
122
|
+
* @param message Describes the invalid input.
|
|
123
|
+
* @param options Optionally preserves the originating failure.
|
|
124
|
+
*/
|
|
125
|
+
constructor(message: string, options?: ErrorOptions);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Delivery destination label.
|
|
129
|
+
*/
|
|
130
|
+
export type DeliveryLabel = "HANDLE_COMMAND" | "UPDATE_SUBSCRIBER" | "REACT_UPON_EVENT" | "CATCH_UP";
|
|
131
|
+
/**
|
|
132
|
+
* Durable delivery state.
|
|
133
|
+
*/
|
|
134
|
+
export type DeliveryStatus = "TO_DELIVER" | "SCHEDULED" | "DELIVERED" | "TO_CATCH_UP";
|
|
135
|
+
/**
|
|
136
|
+
* One durable inbox message.
|
|
137
|
+
*/
|
|
138
|
+
export interface InboxMessage {
|
|
139
|
+
/**
|
|
140
|
+
* Durable record identity.
|
|
141
|
+
*/
|
|
142
|
+
readonly id: InboxMessageId;
|
|
143
|
+
/**
|
|
144
|
+
* Target inbox identity.
|
|
145
|
+
*/
|
|
146
|
+
readonly inboxId: InboxId;
|
|
147
|
+
/**
|
|
148
|
+
* Original signal identity used for delivery deduplication.
|
|
149
|
+
*/
|
|
150
|
+
readonly signalId: string;
|
|
151
|
+
/**
|
|
152
|
+
* Optional packed signal payload.
|
|
153
|
+
*/
|
|
154
|
+
readonly signal?: Any;
|
|
155
|
+
/**
|
|
156
|
+
* Delivery destination label.
|
|
157
|
+
*/
|
|
158
|
+
readonly label: DeliveryLabel;
|
|
159
|
+
/**
|
|
160
|
+
* Current delivery status.
|
|
161
|
+
*/
|
|
162
|
+
readonly status: DeliveryStatus;
|
|
163
|
+
/**
|
|
164
|
+
* Shard responsible for delivery; must match `id.shard`.
|
|
165
|
+
*/
|
|
166
|
+
readonly shard: ShardIndex;
|
|
167
|
+
/**
|
|
168
|
+
* Durable receive time.
|
|
169
|
+
*/
|
|
170
|
+
readonly whenReceived: Date;
|
|
171
|
+
/**
|
|
172
|
+
* Ordering tie-breaker for equal receive times.
|
|
173
|
+
*/
|
|
174
|
+
readonly version: bigint;
|
|
175
|
+
/**
|
|
176
|
+
* Optional deduplication retention deadline.
|
|
177
|
+
*/
|
|
178
|
+
readonly keepUntil?: Date;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Write request for one new inbox message.
|
|
182
|
+
*/
|
|
183
|
+
export interface InboxMessageInput {
|
|
184
|
+
/**
|
|
185
|
+
* Target inbox identity.
|
|
186
|
+
*/
|
|
187
|
+
readonly inboxId: InboxId;
|
|
188
|
+
/**
|
|
189
|
+
* Original signal identity used for delivery deduplication.
|
|
190
|
+
*/
|
|
191
|
+
readonly signalId: string;
|
|
192
|
+
/**
|
|
193
|
+
* Optional packed signal payload.
|
|
194
|
+
*/
|
|
195
|
+
readonly signal?: Any;
|
|
196
|
+
/**
|
|
197
|
+
* Delivery destination label.
|
|
198
|
+
*/
|
|
199
|
+
readonly label: DeliveryLabel;
|
|
200
|
+
/**
|
|
201
|
+
* Current delivery status.
|
|
202
|
+
*/
|
|
203
|
+
readonly status: DeliveryStatus;
|
|
204
|
+
/**
|
|
205
|
+
* Shard responsible for delivery.
|
|
206
|
+
*/
|
|
207
|
+
readonly shard: ShardIndex;
|
|
208
|
+
/**
|
|
209
|
+
* Durable receive time.
|
|
210
|
+
*/
|
|
211
|
+
readonly whenReceived: Date;
|
|
212
|
+
/**
|
|
213
|
+
* Ordering tie-breaker for equal receive times.
|
|
214
|
+
*/
|
|
215
|
+
readonly version: bigint;
|
|
216
|
+
/**
|
|
217
|
+
* Optional deduplication retention deadline.
|
|
218
|
+
*/
|
|
219
|
+
readonly keepUntil?: Date;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Read filter for one shard page.
|
|
223
|
+
*/
|
|
224
|
+
export interface InboxReadOptions {
|
|
225
|
+
/**
|
|
226
|
+
* Optional delivery statuses to keep.
|
|
227
|
+
*/
|
|
228
|
+
readonly statuses?: readonly DeliveryStatus[];
|
|
229
|
+
/**
|
|
230
|
+
* Optional page limit for one ordered page; must be positive and at most 1000.
|
|
231
|
+
*/
|
|
232
|
+
readonly limit?: number;
|
|
233
|
+
/**
|
|
234
|
+
* Optional stable inbox row key after which the ordered read should continue.
|
|
235
|
+
*/
|
|
236
|
+
readonly after?: InboxReadContinuation;
|
|
237
|
+
/**
|
|
238
|
+
* Optional non-negative page offset in inbox order; defaults to the first row.
|
|
239
|
+
*/
|
|
240
|
+
readonly offset?: number;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Stable ordered inbox row key used to continue an ordered read.
|
|
244
|
+
*/
|
|
245
|
+
export interface InboxReadContinuation {
|
|
246
|
+
/**
|
|
247
|
+
* Inbox message UUID from the last row of the previous page.
|
|
248
|
+
*/
|
|
249
|
+
readonly messageId: string;
|
|
250
|
+
/**
|
|
251
|
+
* Receive time from the last row of the previous page.
|
|
252
|
+
*/
|
|
253
|
+
readonly whenReceived: Date;
|
|
254
|
+
/**
|
|
255
|
+
* Version from the last row of the previous page.
|
|
256
|
+
*/
|
|
257
|
+
readonly version: bigint;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Durable inbox write outcome.
|
|
261
|
+
*/
|
|
262
|
+
export interface InboxWriteResult {
|
|
263
|
+
/**
|
|
264
|
+
* Whether the message was written or matched an existing dedup key.
|
|
265
|
+
*/
|
|
266
|
+
readonly outcome: "WRITTEN" | "DUPLICATE";
|
|
267
|
+
/**
|
|
268
|
+
* Stored message selected for the outcome.
|
|
269
|
+
*/
|
|
270
|
+
readonly message: InboxMessage;
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=inbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../src/delivery/inbox.ts"],"names":[],"mappings":"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"}
|