@spine-event-engine/server 2.0.0-snapshot.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +569 -0
- package/REFERENCE.md +488 -0
- package/dist/bus/command-bus.d.ts +61 -0
- package/dist/bus/command-bus.d.ts.map +1 -0
- package/dist/bus/command-bus.js +201 -0
- package/dist/bus/command-bus.js.map +1 -0
- package/dist/bus/command-dispatcher-registry.d.ts +33 -0
- package/dist/bus/command-dispatcher-registry.d.ts.map +1 -0
- package/dist/bus/command-dispatcher-registry.js +75 -0
- package/dist/bus/command-dispatcher-registry.js.map +1 -0
- package/dist/bus/command-dispatcher.d.ts +25 -0
- package/dist/bus/command-dispatcher.d.ts.map +1 -0
- package/dist/bus/command-dispatcher.js +15 -0
- package/dist/bus/command-dispatcher.js.map +1 -0
- package/dist/bus/command-errors.d.ts +23 -0
- package/dist/bus/command-errors.d.ts.map +1 -0
- package/dist/bus/command-errors.js +52 -0
- package/dist/bus/command-errors.js.map +1 -0
- package/dist/bus/event-bus.d.ts +113 -0
- package/dist/bus/event-bus.d.ts.map +1 -0
- package/dist/bus/event-bus.js +518 -0
- package/dist/bus/event-bus.js.map +1 -0
- package/dist/bus/event-dispatcher-origin-schemas.d.ts +17 -0
- package/dist/bus/event-dispatcher-origin-schemas.d.ts.map +1 -0
- package/dist/bus/event-dispatcher-origin-schemas.js +32 -0
- package/dist/bus/event-dispatcher-origin-schemas.js.map +1 -0
- package/dist/bus/event-dispatcher-registry.d.ts +48 -0
- package/dist/bus/event-dispatcher-registry.d.ts.map +1 -0
- package/dist/bus/event-dispatcher-registry.js +176 -0
- package/dist/bus/event-dispatcher-registry.js.map +1 -0
- package/dist/bus/event-dispatcher.d.ts +48 -0
- package/dist/bus/event-dispatcher.d.ts.map +1 -0
- package/dist/bus/event-dispatcher.js +15 -0
- package/dist/bus/event-dispatcher.js.map +1 -0
- package/dist/context/bounded-context.d.ts +606 -0
- package/dist/context/bounded-context.d.ts.map +1 -0
- package/dist/context/bounded-context.js +1780 -0
- package/dist/context/bounded-context.js.map +1 -0
- package/dist/context/entity-inbox.d.ts +63 -0
- package/dist/context/entity-inbox.d.ts.map +1 -0
- package/dist/context/entity-inbox.js +380 -0
- package/dist/context/entity-inbox.js.map +1 -0
- package/dist/context/local-inbox-handoff.d.ts +244 -0
- package/dist/context/local-inbox-handoff.d.ts.map +1 -0
- package/dist/context/local-inbox-handoff.js +334 -0
- package/dist/context/local-inbox-handoff.js.map +1 -0
- package/dist/context/projection-handoff.d.ts +46 -0
- package/dist/context/projection-handoff.d.ts.map +1 -0
- package/dist/context/projection-handoff.js +172 -0
- package/dist/context/projection-handoff.js.map +1 -0
- package/dist/context/tenant-index.d.ts +41 -0
- package/dist/context/tenant-index.d.ts.map +1 -0
- package/dist/context/tenant-index.js +92 -0
- package/dist/context/tenant-index.js.map +1 -0
- package/dist/delivery/conditional-pickup.d.ts +25 -0
- package/dist/delivery/conditional-pickup.d.ts.map +1 -0
- package/dist/delivery/conditional-pickup.js +26 -0
- package/dist/delivery/conditional-pickup.js.map +1 -0
- package/dist/delivery/delivery-builder.d.ts +216 -0
- package/dist/delivery/delivery-builder.d.ts.map +1 -0
- package/dist/delivery/delivery-builder.js +323 -0
- package/dist/delivery/delivery-builder.js.map +1 -0
- package/dist/delivery/delivery-lease.d.ts +15 -0
- package/dist/delivery/delivery-lease.d.ts.map +1 -0
- package/dist/delivery/delivery-lease.js +44 -0
- package/dist/delivery/delivery-lease.js.map +1 -0
- package/dist/delivery/delivery-loop.d.ts +113 -0
- package/dist/delivery/delivery-loop.d.ts.map +1 -0
- package/dist/delivery/delivery-loop.js +119 -0
- package/dist/delivery/delivery-loop.js.map +1 -0
- package/dist/delivery/delivery-monitor.d.ts +165 -0
- package/dist/delivery/delivery-monitor.d.ts.map +1 -0
- package/dist/delivery/delivery-monitor.js +168 -0
- package/dist/delivery/delivery-monitor.js.map +1 -0
- package/dist/delivery/delivery-ports.d.ts +141 -0
- package/dist/delivery/delivery-ports.d.ts.map +1 -0
- package/dist/delivery/delivery-ports.js +15 -0
- package/dist/delivery/delivery-ports.js.map +1 -0
- package/dist/delivery/delivery-run-control.d.ts +50 -0
- package/dist/delivery/delivery-run-control.d.ts.map +1 -0
- package/dist/delivery/delivery-run-control.js +66 -0
- package/dist/delivery/delivery-run-control.js.map +1 -0
- package/dist/delivery/delivery-run-coordinator.d.ts +218 -0
- package/dist/delivery/delivery-run-coordinator.d.ts.map +1 -0
- package/dist/delivery/delivery-run-coordinator.js +609 -0
- package/dist/delivery/delivery-run-coordinator.js.map +1 -0
- package/dist/delivery/delivery-storage-error.d.ts +13 -0
- package/dist/delivery/delivery-storage-error.d.ts.map +1 -0
- package/dist/delivery/delivery-storage-error.js +30 -0
- package/dist/delivery/delivery-storage-error.js.map +1 -0
- package/dist/delivery/delivery-supervisor.d.ts +175 -0
- package/dist/delivery/delivery-supervisor.d.ts.map +1 -0
- package/dist/delivery/delivery-supervisor.js +469 -0
- package/dist/delivery/delivery-supervisor.js.map +1 -0
- package/dist/delivery/delivery-worker.d.ts +180 -0
- package/dist/delivery/delivery-worker.d.ts.map +1 -0
- package/dist/delivery/delivery-worker.js +232 -0
- package/dist/delivery/delivery-worker.js.map +1 -0
- package/dist/delivery/delivery.d.ts +238 -0
- package/dist/delivery/delivery.d.ts.map +1 -0
- package/dist/delivery/delivery.js +400 -0
- package/dist/delivery/delivery.js.map +1 -0
- package/dist/delivery/inbox-records.d.ts +19 -0
- package/dist/delivery/inbox-records.d.ts.map +1 -0
- package/dist/delivery/inbox-records.js +291 -0
- package/dist/delivery/inbox-records.js.map +1 -0
- package/dist/delivery/inbox-storage.d.ts +81 -0
- package/dist/delivery/inbox-storage.d.ts.map +1 -0
- package/dist/delivery/inbox-storage.js +353 -0
- package/dist/delivery/inbox-storage.js.map +1 -0
- package/dist/delivery/inbox.d.ts +263 -0
- package/dist/delivery/inbox.d.ts.map +1 -0
- package/dist/delivery/inbox.js +172 -0
- package/dist/delivery/inbox.js.map +1 -0
- package/dist/delivery/parked-delivery-obligations.d.ts +182 -0
- package/dist/delivery/parked-delivery-obligations.d.ts.map +1 -0
- package/dist/delivery/parked-delivery-obligations.js +390 -0
- package/dist/delivery/parked-delivery-obligations.js.map +1 -0
- package/dist/delivery/shard-index.d.ts +41 -0
- package/dist/delivery/shard-index.d.ts.map +1 -0
- package/dist/delivery/shard-index.js +67 -0
- package/dist/delivery/shard-index.js.map +1 -0
- package/dist/delivery/sharded-work-registry.d.ts +114 -0
- package/dist/delivery/sharded-work-registry.d.ts.map +1 -0
- package/dist/delivery/sharded-work-registry.js +360 -0
- package/dist/delivery/sharded-work-registry.js.map +1 -0
- package/dist/entity/entity-metadata.d.ts +173 -0
- package/dist/entity/entity-metadata.d.ts.map +1 -0
- package/dist/entity/entity-metadata.js +187 -0
- package/dist/entity/entity-metadata.js.map +1 -0
- package/dist/entity/entity-storage-descriptor.d.ts +64 -0
- package/dist/entity/entity-storage-descriptor.d.ts.map +1 -0
- package/dist/entity/entity-storage-descriptor.js +227 -0
- package/dist/entity/entity-storage-descriptor.js.map +1 -0
- package/dist/entity/entity-transaction.d.ts +372 -0
- package/dist/entity/entity-transaction.d.ts.map +1 -0
- package/dist/entity/entity-transaction.js +413 -0
- package/dist/entity/entity-transaction.js.map +1 -0
- package/dist/entity/entity-transition-validation.d.ts +47 -0
- package/dist/entity/entity-transition-validation.d.ts.map +1 -0
- package/dist/entity/entity-transition-validation.js +327 -0
- package/dist/entity/entity-transition-validation.js.map +1 -0
- package/dist/entity/entity.d.ts +499 -0
- package/dist/entity/entity.d.ts.map +1 -0
- package/dist/entity/entity.js +829 -0
- package/dist/entity/entity.js.map +1 -0
- package/dist/entity/implicit-required-id.d.ts +15 -0
- package/dist/entity/implicit-required-id.d.ts.map +1 -0
- package/dist/entity/implicit-required-id.js +123 -0
- package/dist/entity/implicit-required-id.js.map +1 -0
- package/dist/entity/spec-scanner.d.ts +14 -0
- package/dist/entity/spec-scanner.d.ts.map +1 -0
- package/dist/entity/spec-scanner.js +37 -0
- package/dist/entity/spec-scanner.js.map +1 -0
- package/dist/handler/build-time-handler-analyzer.d.ts +150 -0
- package/dist/handler/build-time-handler-analyzer.d.ts.map +1 -0
- package/dist/handler/build-time-handler-analyzer.js +1101 -0
- package/dist/handler/build-time-handler-analyzer.js.map +1 -0
- package/dist/handler/command-registration-readiness.d.ts +99 -0
- package/dist/handler/command-registration-readiness.d.ts.map +1 -0
- package/dist/handler/command-registration-readiness.js +118 -0
- package/dist/handler/command-registration-readiness.js.map +1 -0
- package/dist/handler/event-handler-filter.d.ts +43 -0
- package/dist/handler/event-handler-filter.d.ts.map +1 -0
- package/dist/handler/event-handler-filter.js +128 -0
- package/dist/handler/event-handler-filter.js.map +1 -0
- package/dist/handler/event-registration-readiness.d.ts +196 -0
- package/dist/handler/event-registration-readiness.d.ts.map +1 -0
- package/dist/handler/event-registration-readiness.js +187 -0
- package/dist/handler/event-registration-readiness.js.map +1 -0
- package/dist/handler/external.d.ts +10 -0
- package/dist/handler/external.d.ts.map +1 -0
- package/dist/handler/external.js +15 -0
- package/dist/handler/external.js.map +1 -0
- package/dist/handler/generated-handler-registry.d.ts +154 -0
- package/dist/handler/generated-handler-registry.d.ts.map +1 -0
- package/dist/handler/generated-handler-registry.js +223 -0
- package/dist/handler/generated-handler-registry.js.map +1 -0
- package/dist/handler/generated-registry-discovery.d.ts +94 -0
- package/dist/handler/generated-registry-discovery.d.ts.map +1 -0
- package/dist/handler/generated-registry-discovery.js +228 -0
- package/dist/handler/generated-registry-discovery.js.map +1 -0
- package/dist/handler/generated-registry-writer.d.ts +58 -0
- package/dist/handler/generated-registry-writer.d.ts.map +1 -0
- package/dist/handler/generated-registry-writer.js +458 -0
- package/dist/handler/generated-registry-writer.js.map +1 -0
- package/dist/handler/handler-codegen.d.ts +48 -0
- package/dist/handler/handler-codegen.d.ts.map +1 -0
- package/dist/handler/handler-codegen.js +214 -0
- package/dist/handler/handler-codegen.js.map +1 -0
- package/dist/handler/handler-decorators.d.ts +134 -0
- package/dist/handler/handler-decorators.d.ts.map +1 -0
- package/dist/handler/handler-decorators.js +239 -0
- package/dist/handler/handler-decorators.js.map +1 -0
- package/dist/handler/handler-metadata.d.ts +510 -0
- package/dist/handler/handler-metadata.d.ts.map +1 -0
- package/dist/handler/handler-metadata.js +391 -0
- package/dist/handler/handler-metadata.js.map +1 -0
- package/dist/handler/registration-readiness-metadata.d.ts +68 -0
- package/dist/handler/registration-readiness-metadata.d.ts.map +1 -0
- package/dist/handler/registration-readiness-metadata.js +170 -0
- package/dist/handler/registration-readiness-metadata.js.map +1 -0
- package/dist/handler/rejection-source.d.ts +11 -0
- package/dist/handler/rejection-source.d.ts.map +1 -0
- package/dist/handler/rejection-source.js +25 -0
- package/dist/handler/rejection-source.js.map +1 -0
- package/dist/index.d.ts +46 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +54 -0
- package/dist/index.js.map +1 -0
- package/dist/integration/external-messages.d.ts +49 -0
- package/dist/integration/external-messages.d.ts.map +1 -0
- package/dist/integration/external-messages.js +112 -0
- package/dist/integration/external-messages.js.map +1 -0
- package/dist/integration/integration-broker.d.ts +74 -0
- package/dist/integration/integration-broker.d.ts.map +1 -0
- package/dist/integration/integration-broker.js +444 -0
- package/dist/integration/integration-broker.js.map +1 -0
- package/dist/integration/third-party-context.d.ts +56 -0
- package/dist/integration/third-party-context.d.ts.map +1 -0
- package/dist/integration/third-party-context.js +130 -0
- package/dist/integration/third-party-context.js.map +1 -0
- package/dist/repository/command-errors.d.ts +25 -0
- package/dist/repository/command-errors.d.ts.map +1 -0
- package/dist/repository/command-errors.js +43 -0
- package/dist/repository/command-errors.js.map +1 -0
- package/dist/repository/command-routing.d.ts +72 -0
- package/dist/repository/command-routing.d.ts.map +1 -0
- package/dist/repository/command-routing.js +98 -0
- package/dist/repository/command-routing.js.map +1 -0
- package/dist/repository/commit-fence.d.ts +22 -0
- package/dist/repository/commit-fence.d.ts.map +1 -0
- package/dist/repository/commit-fence.js +37 -0
- package/dist/repository/commit-fence.js.map +1 -0
- package/dist/repository/event-routing.d.ts +71 -0
- package/dist/repository/event-routing.d.ts.map +1 -0
- package/dist/repository/event-routing.js +96 -0
- package/dist/repository/event-routing.js.map +1 -0
- package/dist/repository/primitive-id.d.ts +86 -0
- package/dist/repository/primitive-id.d.ts.map +1 -0
- package/dist/repository/primitive-id.js +110 -0
- package/dist/repository/primitive-id.js.map +1 -0
- package/dist/repository/repository.d.ts +670 -0
- package/dist/repository/repository.d.ts.map +1 -0
- package/dist/repository/repository.js +3298 -0
- package/dist/repository/repository.js.map +1 -0
- package/dist/repository/routing-declarations.d.ts +75 -0
- package/dist/repository/routing-declarations.d.ts.map +1 -0
- package/dist/repository/routing-declarations.js +101 -0
- package/dist/repository/routing-declarations.js.map +1 -0
- package/dist/repository/state-update-routing.d.ts +66 -0
- package/dist/repository/state-update-routing.d.ts.map +1 -0
- package/dist/repository/state-update-routing.js +91 -0
- package/dist/repository/state-update-routing.js.map +1 -0
- package/dist/runtime/runtime.d.ts +156 -0
- package/dist/runtime/runtime.d.ts.map +1 -0
- package/dist/runtime/runtime.js +215 -0
- package/dist/runtime/runtime.js.map +1 -0
- package/dist/runtime/signal-intake.d.ts +84 -0
- package/dist/runtime/signal-intake.d.ts.map +1 -0
- package/dist/runtime/signal-intake.js +94 -0
- package/dist/runtime/signal-intake.js.map +1 -0
- package/dist/runtime/signal-metadata.d.ts +242 -0
- package/dist/runtime/signal-metadata.d.ts.map +1 -0
- package/dist/runtime/signal-metadata.js +368 -0
- package/dist/runtime/signal-metadata.js.map +1 -0
- package/dist/server/browser-server.d.ts +49 -0
- package/dist/server/browser-server.d.ts.map +1 -0
- package/dist/server/browser-server.js +633 -0
- package/dist/server/browser-server.js.map +1 -0
- package/dist/server/durable-subscription-bindings.d.ts +122 -0
- package/dist/server/durable-subscription-bindings.d.ts.map +1 -0
- package/dist/server/durable-subscription-bindings.js +524 -0
- package/dist/server/durable-subscription-bindings.js.map +1 -0
- package/dist/server/environment-attachment.d.ts +356 -0
- package/dist/server/environment-attachment.d.ts.map +1 -0
- package/dist/server/environment-attachment.js +2061 -0
- package/dist/server/environment-attachment.js.map +1 -0
- package/dist/server/environment-delivery-records.d.ts +77 -0
- package/dist/server/environment-delivery-records.d.ts.map +1 -0
- package/dist/server/environment-delivery-records.js +282 -0
- package/dist/server/environment-delivery-records.js.map +1 -0
- package/dist/server/environment-delivery-worker.d.ts +161 -0
- package/dist/server/environment-delivery-worker.d.ts.map +1 -0
- package/dist/server/environment-delivery-worker.js +664 -0
- package/dist/server/environment-delivery-worker.js.map +1 -0
- package/dist/server/environment.d.ts +43 -0
- package/dist/server/environment.d.ts.map +1 -0
- package/dist/server/environment.js +90 -0
- package/dist/server/environment.js.map +1 -0
- package/dist/server/managed-child-subscription.d.ts +11 -0
- package/dist/server/managed-child-subscription.d.ts.map +1 -0
- package/dist/server/managed-child-subscription.js +44 -0
- package/dist/server/managed-child-subscription.js.map +1 -0
- package/dist/server/managed-server-application.d.ts +324 -0
- package/dist/server/managed-server-application.d.ts.map +1 -0
- package/dist/server/managed-server-application.js +937 -0
- package/dist/server/managed-server-application.js.map +1 -0
- package/dist/server/node-coordinator.d.ts +191 -0
- package/dist/server/node-coordinator.d.ts.map +1 -0
- package/dist/server/node-coordinator.js +552 -0
- package/dist/server/node-coordinator.js.map +1 -0
- package/dist/server/process-server-coordinator.d.ts +15 -0
- package/dist/server/process-server-coordinator.d.ts.map +1 -0
- package/dist/server/process-server-coordinator.js +112 -0
- package/dist/server/process-server-coordinator.js.map +1 -0
- package/dist/server/reserved-spine-rpc-paths.json +8 -0
- package/dist/server/retryable-close.d.ts +28 -0
- package/dist/server/retryable-close.d.ts.map +1 -0
- package/dist/server/retryable-close.js +129 -0
- package/dist/server/retryable-close.js.map +1 -0
- package/dist/server/server-environment.d.ts +180 -0
- package/dist/server/server-environment.d.ts.map +1 -0
- package/dist/server/server-environment.js +418 -0
- package/dist/server/server-environment.js.map +1 -0
- package/dist/server/server-log.d.ts +18 -0
- package/dist/server/server-log.d.ts.map +1 -0
- package/dist/server/server-log.js +96 -0
- package/dist/server/server-log.js.map +1 -0
- package/dist/server/server.d.ts +389 -0
- package/dist/server/server.d.ts.map +1 -0
- package/dist/server/server.js +752 -0
- package/dist/server/server.js.map +1 -0
- package/dist/services/spine-services.d.ts +88 -0
- package/dist/services/spine-services.d.ts.map +1 -0
- package/dist/services/spine-services.js +1586 -0
- package/dist/services/spine-services.js.map +1 -0
- package/dist/stand/stand.d.ts +294 -0
- package/dist/stand/stand.d.ts.map +1 -0
- package/dist/stand/stand.js +680 -0
- package/dist/stand/stand.js.map +1 -0
- package/dist/stand/subscription-observer.d.ts +53 -0
- package/dist/stand/subscription-observer.d.ts.map +1 -0
- package/dist/stand/subscription-observer.js +444 -0
- package/dist/stand/subscription-observer.js.map +1 -0
- package/dist/stand/subscription-records.d.ts +12 -0
- package/dist/stand/subscription-records.d.ts.map +1 -0
- package/dist/stand/subscription-records.js +99 -0
- package/dist/stand/subscription-records.js.map +1 -0
- package/dist/stand/subscription-registry.d.ts +285 -0
- package/dist/stand/subscription-registry.d.ts.map +1 -0
- package/dist/stand/subscription-registry.js +403 -0
- package/dist/stand/subscription-registry.js.map +1 -0
- package/dist/stand/subscription-runtime.d.ts +102 -0
- package/dist/stand/subscription-runtime.d.ts.map +1 -0
- package/dist/stand/subscription-runtime.js +380 -0
- package/dist/stand/subscription-runtime.js.map +1 -0
- package/dist/testing/index.d.ts +14 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +34 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,403 @@
|
|
|
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, ScalarType, toBinary } from "@bufbuild/protobuf";
|
|
15
|
+
import { SUBSCRIPTION_ACTIVATION_HANDSHAKE_MS } from "@spine-event-engine/core/internal/subscription-lifecycle";
|
|
16
|
+
import { SubscriptionIdSchema, SubscriptionSchema, SubscriptionStatus, } from "@spine-event-engine/proto/client";
|
|
17
|
+
import { ColumnTypes, RecordColumn, RecordSpec, } from "@spine-event-engine/storage";
|
|
18
|
+
import { StandSubscriptionRecords } from "./subscription-records.js";
|
|
19
|
+
const cleanupPageSize = 25;
|
|
20
|
+
/**
|
|
21
|
+
* Reports an ID reused with distinct subscription content.
|
|
22
|
+
*/
|
|
23
|
+
export class StandConflictError extends Error {
|
|
24
|
+
id;
|
|
25
|
+
// prettier-ignore
|
|
26
|
+
/**
|
|
27
|
+
* Creates an error for the conflicting subscription ID.
|
|
28
|
+
*
|
|
29
|
+
* @param id Identifies the conflicting subscription.
|
|
30
|
+
*/
|
|
31
|
+
constructor(id) {
|
|
32
|
+
super(`Stand subscription "${id}" already exists with different content.`);
|
|
33
|
+
this.id = id;
|
|
34
|
+
this.name = "StandConflictError";
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Keeps subscription definitions in process memory.
|
|
39
|
+
*/
|
|
40
|
+
export class InMemorySubscriptionRegistry {
|
|
41
|
+
// prettier-ignore
|
|
42
|
+
/**
|
|
43
|
+
* Indicates that in-memory definitions do not survive restart.
|
|
44
|
+
*/
|
|
45
|
+
persistent = false;
|
|
46
|
+
#entries = new Map();
|
|
47
|
+
#closed = false;
|
|
48
|
+
/**
|
|
49
|
+
* Creates or finds one in-memory pending definition.
|
|
50
|
+
*
|
|
51
|
+
* @param subscription Provides the definition to create.
|
|
52
|
+
* @returns Resolves to the creation outcome.
|
|
53
|
+
*/
|
|
54
|
+
async create(subscription) {
|
|
55
|
+
await Promise.resolve();
|
|
56
|
+
this.#open();
|
|
57
|
+
const id = subscriptionId(subscription);
|
|
58
|
+
const existing = this.#entries.get(id);
|
|
59
|
+
if (existing !== undefined) {
|
|
60
|
+
if (!sameSubscription(existing.subscription, subscription))
|
|
61
|
+
throw new StandConflictError(id);
|
|
62
|
+
return Promise.resolve({ kind: "existing", entry: copy(existing) });
|
|
63
|
+
}
|
|
64
|
+
const createdAt = Date.now();
|
|
65
|
+
const entry = freeze({
|
|
66
|
+
subscription: clone(SubscriptionSchema, subscription),
|
|
67
|
+
phase: "pending",
|
|
68
|
+
createdAt,
|
|
69
|
+
pendingUntil: createdAt + SUBSCRIPTION_ACTIVATION_HANDSHAKE_MS,
|
|
70
|
+
});
|
|
71
|
+
this.#entries.set(id, entry);
|
|
72
|
+
return Promise.resolve({ kind: "created", entry: copy(entry) });
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Activates an unexpired in-memory pending definition.
|
|
76
|
+
*
|
|
77
|
+
* @param value Identifies the definition to activate.
|
|
78
|
+
* @returns Resolves to the activation outcome.
|
|
79
|
+
*/
|
|
80
|
+
async activate(value) {
|
|
81
|
+
await Promise.resolve();
|
|
82
|
+
this.#open();
|
|
83
|
+
const id = idValue(value);
|
|
84
|
+
const entry = this.#entries.get(id);
|
|
85
|
+
if (entry === undefined)
|
|
86
|
+
return Promise.resolve({ kind: "missing" });
|
|
87
|
+
if (entry.phase === "active")
|
|
88
|
+
return Promise.resolve({ kind: "active", entry: copy(entry) });
|
|
89
|
+
if (expiresAt(entry) <= Date.now()) {
|
|
90
|
+
this.#entries.delete(id);
|
|
91
|
+
return Promise.resolve({ kind: "expired" });
|
|
92
|
+
}
|
|
93
|
+
const active = freeze({
|
|
94
|
+
subscription: entry.subscription,
|
|
95
|
+
phase: "active",
|
|
96
|
+
createdAt: entry.createdAt,
|
|
97
|
+
});
|
|
98
|
+
this.#entries.set(id, active);
|
|
99
|
+
return Promise.resolve({ kind: "activated", entry: copy(active) });
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Deletes an in-memory definition, when present.
|
|
103
|
+
*
|
|
104
|
+
* @param value Identifies the definition to delete.
|
|
105
|
+
* @returns Resolves to the deletion outcome.
|
|
106
|
+
*/
|
|
107
|
+
async delete(value) {
|
|
108
|
+
await Promise.resolve();
|
|
109
|
+
this.#open();
|
|
110
|
+
return Promise.resolve(this.#entries.delete(idValue(value)) ? "deleted" : "missing");
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Gets an isolated in-memory definition, when present.
|
|
114
|
+
*
|
|
115
|
+
* @param value Identifies the definition to read.
|
|
116
|
+
* @returns Resolves to the definition when present.
|
|
117
|
+
*/
|
|
118
|
+
async get(value) {
|
|
119
|
+
await Promise.resolve();
|
|
120
|
+
this.#open();
|
|
121
|
+
const entry = this.#entries.get(idValue(value));
|
|
122
|
+
return Promise.resolve(entry === undefined ? undefined : copy(entry));
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Returns isolated in-memory definitions in identifier order.
|
|
126
|
+
*
|
|
127
|
+
* @returns Resolves to the ordered definitions.
|
|
128
|
+
*/
|
|
129
|
+
async snapshot() {
|
|
130
|
+
await Promise.resolve();
|
|
131
|
+
this.#open();
|
|
132
|
+
return Promise.resolve([...this.#entries.entries()]
|
|
133
|
+
.sort(([left], [right]) => left.localeCompare(right))
|
|
134
|
+
.map(([, entry]) => copy(entry)));
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Deletes a bounded page of expired in-memory pending definitions.
|
|
138
|
+
*
|
|
139
|
+
* @returns Resolves to the cleanup result.
|
|
140
|
+
*/
|
|
141
|
+
async cleanup() {
|
|
142
|
+
await Promise.resolve();
|
|
143
|
+
this.#open();
|
|
144
|
+
const candidates = [...this.#entries.entries()]
|
|
145
|
+
.filter(([, entry]) => entry.phase === "pending")
|
|
146
|
+
.sort(([leftId, left], [rightId, right]) => expiresAt(left) - expiresAt(right) || leftId.localeCompare(rightId))
|
|
147
|
+
.slice(0, cleanupPageSize + 1);
|
|
148
|
+
const page = candidates
|
|
149
|
+
.slice(0, cleanupPageSize)
|
|
150
|
+
.filter(([, entry]) => expiresAt(entry) <= Date.now());
|
|
151
|
+
for (const [id] of page)
|
|
152
|
+
this.#entries.delete(id);
|
|
153
|
+
return Promise.resolve({
|
|
154
|
+
scanned: page.length,
|
|
155
|
+
deleted: page.length,
|
|
156
|
+
more: candidates.length > cleanupPageSize &&
|
|
157
|
+
expiresAt(candidates[cleanupPageSize]?.[1] ?? fail("cleanup candidate is missing.")) <=
|
|
158
|
+
Date.now(),
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Closes the in-memory registry and discards its definitions.
|
|
163
|
+
*
|
|
164
|
+
* @returns Resolves after definitions are discarded.
|
|
165
|
+
*/
|
|
166
|
+
async close() {
|
|
167
|
+
await Promise.resolve();
|
|
168
|
+
this.#closed = true;
|
|
169
|
+
this.#entries.clear();
|
|
170
|
+
return Promise.resolve();
|
|
171
|
+
}
|
|
172
|
+
#open() {
|
|
173
|
+
if (this.#closed)
|
|
174
|
+
throw new Error("Stand subscription registry is closed.");
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Stores one approved SubscriptionRecord per explicit subscription ID.
|
|
179
|
+
*/
|
|
180
|
+
export class StorageSubscriptionRegistry {
|
|
181
|
+
// prettier-ignore
|
|
182
|
+
/**
|
|
183
|
+
* Indicates that the backing storage owns durable definitions.
|
|
184
|
+
*/
|
|
185
|
+
persistent = true;
|
|
186
|
+
#storage;
|
|
187
|
+
#closed = false;
|
|
188
|
+
/**
|
|
189
|
+
* Creates a registry backed by one compare-and-set-capable record handle.
|
|
190
|
+
*
|
|
191
|
+
* @param context Identifies the storage namespace.
|
|
192
|
+
* @param storageFactory Creates the registry record handle.
|
|
193
|
+
*/
|
|
194
|
+
constructor(context, storageFactory) {
|
|
195
|
+
this.#storage = storageFactory.createRecordStorage(context, new RecordSpec({
|
|
196
|
+
recordType: StandSubscriptionRecords.schema,
|
|
197
|
+
idSchema: SubscriptionIdSchema,
|
|
198
|
+
extractId: (record) => record.id ?? fail("Stand subscription record is invalid."),
|
|
199
|
+
columns: [
|
|
200
|
+
new RecordColumn("status", ColumnTypes.fromField(StandSubscriptionRecords.schema.field.status), (record) => record.status),
|
|
201
|
+
new RecordColumn("when_activation_expires", ColumnTypes.scalar(ScalarType.INT64), (record) => record.whenActivationExpires === undefined
|
|
202
|
+
? Number.MAX_SAFE_INTEGER
|
|
203
|
+
: time(record.whenActivationExpires)),
|
|
204
|
+
],
|
|
205
|
+
}));
|
|
206
|
+
if (!this.#storage.atomicCompareAndSet) {
|
|
207
|
+
this.#storage.close();
|
|
208
|
+
throw new Error("Stand subscription storage must support atomic compare-and-set.");
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Creates a pending durable definition or finds its identical predecessor.
|
|
213
|
+
*
|
|
214
|
+
* @param subscription Provides the definition to create.
|
|
215
|
+
* @returns Resolves to the creation outcome.
|
|
216
|
+
*/
|
|
217
|
+
async create(subscription) {
|
|
218
|
+
this.#open();
|
|
219
|
+
const value = subscriptionId(subscription);
|
|
220
|
+
const recordId = subscription.id;
|
|
221
|
+
if (recordId === undefined)
|
|
222
|
+
throw new TypeError("Stand subscription ID must be non-blank.");
|
|
223
|
+
for (;;) {
|
|
224
|
+
const current = await this.#storage.read(recordId);
|
|
225
|
+
if (current !== undefined) {
|
|
226
|
+
const entry = StandSubscriptionRecords.read(current, value);
|
|
227
|
+
if (!sameSubscription(entry.subscription, subscription))
|
|
228
|
+
throw new StandConflictError(value);
|
|
229
|
+
return { kind: "existing", entry: copy(entry) };
|
|
230
|
+
}
|
|
231
|
+
const createdAt = Date.now();
|
|
232
|
+
const entry = freeze({
|
|
233
|
+
subscription: clone(SubscriptionSchema, subscription),
|
|
234
|
+
phase: "pending",
|
|
235
|
+
createdAt,
|
|
236
|
+
pendingUntil: createdAt + SUBSCRIPTION_ACTIVATION_HANDSHAKE_MS,
|
|
237
|
+
});
|
|
238
|
+
const next = StandSubscriptionRecords.write(entry);
|
|
239
|
+
try {
|
|
240
|
+
if (await this.#storage.compareAndSet(recordId, undefined, next))
|
|
241
|
+
return { kind: "created", entry: copy(entry) };
|
|
242
|
+
}
|
|
243
|
+
catch (error) {
|
|
244
|
+
const observed = await this.#storage.read(recordId);
|
|
245
|
+
if (observed !== undefined) {
|
|
246
|
+
const observedEntry = StandSubscriptionRecords.read(observed, value);
|
|
247
|
+
if (sameSubscription(observedEntry.subscription, subscription))
|
|
248
|
+
return { kind: "created", entry: copy(observedEntry) };
|
|
249
|
+
}
|
|
250
|
+
throw error;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Activates an unexpired durable pending definition.
|
|
256
|
+
*
|
|
257
|
+
* @param value Identifies the definition to activate.
|
|
258
|
+
* @returns Resolves to the activation outcome.
|
|
259
|
+
*/
|
|
260
|
+
async activate(value) {
|
|
261
|
+
this.#open();
|
|
262
|
+
const id = idValue(value);
|
|
263
|
+
for (;;) {
|
|
264
|
+
const current = await this.#storage.read(value);
|
|
265
|
+
if (current === undefined)
|
|
266
|
+
return { kind: "missing" };
|
|
267
|
+
const entry = StandSubscriptionRecords.read(current, id);
|
|
268
|
+
if (entry.phase === "active")
|
|
269
|
+
return { kind: "active", entry: copy(entry) };
|
|
270
|
+
if (expiresAt(entry) <= Date.now()) {
|
|
271
|
+
if (await this.#storage.compareAndSet(value, current, undefined))
|
|
272
|
+
return { kind: "expired" };
|
|
273
|
+
continue;
|
|
274
|
+
}
|
|
275
|
+
const active = freeze({
|
|
276
|
+
subscription: entry.subscription,
|
|
277
|
+
phase: "active",
|
|
278
|
+
createdAt: entry.createdAt,
|
|
279
|
+
});
|
|
280
|
+
if (await this.#storage.compareAndSet(value, current, StandSubscriptionRecords.write(active)))
|
|
281
|
+
return { kind: "activated", entry: copy(active) };
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Deletes a durable definition after observing its current record.
|
|
286
|
+
*
|
|
287
|
+
* @param value Identifies the definition to delete.
|
|
288
|
+
* @returns Resolves to the deletion outcome.
|
|
289
|
+
*/
|
|
290
|
+
async delete(value) {
|
|
291
|
+
this.#open();
|
|
292
|
+
for (;;) {
|
|
293
|
+
const current = await this.#storage.read(value);
|
|
294
|
+
if (current === undefined)
|
|
295
|
+
return "missing";
|
|
296
|
+
if (await this.#storage.compareAndSet(value, current, undefined))
|
|
297
|
+
return "deleted";
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Gets an isolated durable definition, when present.
|
|
302
|
+
*
|
|
303
|
+
* @param value Identifies the definition to read.
|
|
304
|
+
* @returns Resolves to the definition when present.
|
|
305
|
+
*/
|
|
306
|
+
async get(value) {
|
|
307
|
+
this.#open();
|
|
308
|
+
const id = idValue(value);
|
|
309
|
+
const record = await this.#storage.read(value);
|
|
310
|
+
return record === undefined ? undefined : copy(StandSubscriptionRecords.read(record, id));
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Returns isolated durable definitions in identifier order.
|
|
314
|
+
*
|
|
315
|
+
* @returns Resolves to the ordered definitions.
|
|
316
|
+
*/
|
|
317
|
+
async snapshot() {
|
|
318
|
+
this.#open();
|
|
319
|
+
const rows = await this.#storage.queryEntries({ sort: [{ field: "id" }] });
|
|
320
|
+
return rows.map((row) => copy(StandSubscriptionRecords.read(row.record, idValue(row.id))));
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Deletes a bounded page of expired durable pending definitions.
|
|
324
|
+
*
|
|
325
|
+
* @returns Resolves to the cleanup result.
|
|
326
|
+
*/
|
|
327
|
+
async cleanup() {
|
|
328
|
+
this.#open();
|
|
329
|
+
const rows = await this.#storage.queryEntries({
|
|
330
|
+
filters: [{ column: "status", value: SubscriptionStatus.PENDING }],
|
|
331
|
+
sort: [{ field: "when_activation_expires" }, { field: "id" }],
|
|
332
|
+
limit: cleanupPageSize + 1,
|
|
333
|
+
});
|
|
334
|
+
const candidates = rows.map((row) => ({
|
|
335
|
+
row,
|
|
336
|
+
entry: StandSubscriptionRecords.read(row.record, idValue(row.id)),
|
|
337
|
+
}));
|
|
338
|
+
const page = candidates
|
|
339
|
+
.slice(0, cleanupPageSize)
|
|
340
|
+
.filter((candidate) => expiresAt(candidate.entry) <= Date.now());
|
|
341
|
+
let deleted = 0;
|
|
342
|
+
for (const { row } of page)
|
|
343
|
+
if (await this.#storage.compareAndSet(row.id, row.record, undefined))
|
|
344
|
+
deleted += 1;
|
|
345
|
+
const lookahead = candidates[cleanupPageSize];
|
|
346
|
+
return {
|
|
347
|
+
scanned: page.length,
|
|
348
|
+
deleted,
|
|
349
|
+
more: lookahead !== undefined && expiresAt(lookahead.entry) <= Date.now(),
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Closes the durable storage handle once.
|
|
354
|
+
*
|
|
355
|
+
* @returns Resolves after the handle closes.
|
|
356
|
+
*/
|
|
357
|
+
async close() {
|
|
358
|
+
await Promise.resolve();
|
|
359
|
+
if (!this.#closed) {
|
|
360
|
+
this.#closed = true;
|
|
361
|
+
this.#storage.close();
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
#open() {
|
|
365
|
+
if (this.#closed)
|
|
366
|
+
throw new Error("Stand subscription registry is closed.");
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
function idValue(id) {
|
|
370
|
+
if (typeof id.value !== "string" || id.value.trim() === "")
|
|
371
|
+
throw new TypeError("Stand subscription ID must be non-blank.");
|
|
372
|
+
return id.value;
|
|
373
|
+
}
|
|
374
|
+
function subscriptionId(subscription) {
|
|
375
|
+
const topicId = subscription.topic?.id?.value;
|
|
376
|
+
if (subscription.id === undefined || typeof topicId !== "string" || topicId.trim() === "")
|
|
377
|
+
throw new TypeError("Stand subscription ID and topic ID must be non-blank.");
|
|
378
|
+
return idValue(subscription.id);
|
|
379
|
+
}
|
|
380
|
+
function expiresAt(entry) {
|
|
381
|
+
if (entry.phase !== "pending")
|
|
382
|
+
throw new Error("Stand subscription record is invalid.");
|
|
383
|
+
return entry.pendingUntil;
|
|
384
|
+
}
|
|
385
|
+
function copy(entry) {
|
|
386
|
+
return freeze({ ...entry, subscription: clone(SubscriptionSchema, entry.subscription) });
|
|
387
|
+
}
|
|
388
|
+
function freeze(entry) {
|
|
389
|
+
return Object.freeze(entry);
|
|
390
|
+
}
|
|
391
|
+
function sameSubscription(left, right) {
|
|
392
|
+
const leftBytes = toBinary(SubscriptionSchema, left);
|
|
393
|
+
const rightBytes = toBinary(SubscriptionSchema, right);
|
|
394
|
+
return (leftBytes.length === rightBytes.length &&
|
|
395
|
+
leftBytes.every((value, index) => value === rightBytes[index]));
|
|
396
|
+
}
|
|
397
|
+
function time(value) {
|
|
398
|
+
return Number(value.seconds) * 1000 + Math.floor(value.nanos / 1_000_000);
|
|
399
|
+
}
|
|
400
|
+
function fail(message) {
|
|
401
|
+
throw new Error(message);
|
|
402
|
+
}
|
|
403
|
+
//# sourceMappingURL=subscription-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscription-registry.js","sourceRoot":"","sources":["../../src/stand/subscription-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import type { ILogLayer } from "loglayer";
|
|
2
|
+
import { type SubscriptionUpdate } from "@spine-event-engine/proto/client";
|
|
3
|
+
import type { EventBus } from "../bus/event-bus.js";
|
|
4
|
+
import { type Stand, type StandSubscription } from "./stand.js";
|
|
5
|
+
import type { StandSubscriptionRegistry } from "./subscription-registry.js";
|
|
6
|
+
interface SubscriptionRuntimeAccess {
|
|
7
|
+
installLogger(runtime: SubscriptionRuntime, logger: ILogLayer): void;
|
|
8
|
+
clearLogger(runtime: SubscriptionRuntime): void;
|
|
9
|
+
loggerFor(runtime: SubscriptionRuntime): ILogLayer;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Coordinates the local delivery side of one paired bounded context's durable
|
|
13
|
+
* subscription registry.
|
|
14
|
+
*
|
|
15
|
+
* The runtime owns exactly one registry snapshot loop, timer, attachment map,
|
|
16
|
+
* and consumer map. It classifies a target from domain Stand metadata before
|
|
17
|
+
* attaching it: domain events observe only the domain bus, while entity-state
|
|
18
|
+
* updates observe only the paired System bus. This keeps a subscription ID and
|
|
19
|
+
* attachment identity attached once, while allowing all active service streams to share
|
|
20
|
+
* the same rendered update.
|
|
21
|
+
*
|
|
22
|
+
* @internal
|
|
23
|
+
*/
|
|
24
|
+
export declare class SubscriptionRuntime {
|
|
25
|
+
#private;
|
|
26
|
+
/**
|
|
27
|
+
* Creates an unstarted runtime for a paired domain and System Stand.
|
|
28
|
+
*
|
|
29
|
+
* @param domainStand Supplies authoritative domain state metadata.
|
|
30
|
+
* @param systemStand Retained as the paired state-observer owner boundary.
|
|
31
|
+
* @param domainEventBus Delivers domain-event subscription targets.
|
|
32
|
+
* @param systemEventBus Delivers Entity state and lifecycle subscription targets.
|
|
33
|
+
* @param registry Stores canonical subscription definitions in the domain namespace.
|
|
34
|
+
*/
|
|
35
|
+
constructor(domainStand: Stand, systemStand: Stand, domainEventBus: EventBus, systemEventBus: EventBus, registry: StandSubscriptionRegistry);
|
|
36
|
+
/**
|
|
37
|
+
* Starts immediate and ten-second complete-snapshot reconciliation.
|
|
38
|
+
*/
|
|
39
|
+
start(): void;
|
|
40
|
+
/**
|
|
41
|
+
* Adds a local stream consumer and reconciles before returning its handle.
|
|
42
|
+
*
|
|
43
|
+
* @param id Identifies the durable subscription definition.
|
|
44
|
+
* @param onUpdate Receives rendered subscription updates.
|
|
45
|
+
* @returns Resolves to the consumer removal handle.
|
|
46
|
+
*/
|
|
47
|
+
consume(id: string, onUpdate: (update: SubscriptionUpdate) => void): Promise<StandSubscription>;
|
|
48
|
+
/**
|
|
49
|
+
* Updates local attachments from one complete registry snapshot.
|
|
50
|
+
*
|
|
51
|
+
* @returns Resolves after the accepted snapshot is reconciled.
|
|
52
|
+
*/
|
|
53
|
+
reconcile(): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Removes all local delivery state for one canonical subscription ID.
|
|
56
|
+
*
|
|
57
|
+
* @param id Identifies the durable subscription definition.
|
|
58
|
+
*/
|
|
59
|
+
remove(id: string): void;
|
|
60
|
+
/**
|
|
61
|
+
* Returns the pair-owned durable registry.
|
|
62
|
+
*
|
|
63
|
+
* @returns Returns the durable subscription registry.
|
|
64
|
+
*/
|
|
65
|
+
registry(): StandSubscriptionRegistry;
|
|
66
|
+
/**
|
|
67
|
+
* Marks the runtime terminal and stops its reconciliation timer.
|
|
68
|
+
*/
|
|
69
|
+
beginClose(): void;
|
|
70
|
+
/**
|
|
71
|
+
* Waits for accepted reconciliation and detaches every observer.
|
|
72
|
+
*
|
|
73
|
+
* @returns Resolves after every local observer has been detached.
|
|
74
|
+
*/
|
|
75
|
+
drainClose(): Promise<void>;
|
|
76
|
+
/**
|
|
77
|
+
* Closes the shared registry after observer cleanup.
|
|
78
|
+
*
|
|
79
|
+
* @returns Resolves after the durable registry closes.
|
|
80
|
+
*/
|
|
81
|
+
finishClose(): Promise<void>;
|
|
82
|
+
/**
|
|
83
|
+
* Performs all close phases for direct runtime owners.
|
|
84
|
+
*
|
|
85
|
+
* @returns Resolves after runtime shutdown completes.
|
|
86
|
+
*/
|
|
87
|
+
close(): Promise<void>;
|
|
88
|
+
/**
|
|
89
|
+
* Starts failed-construction cleanup before the context has exposed the runtime.
|
|
90
|
+
*
|
|
91
|
+
* @internal
|
|
92
|
+
*/
|
|
93
|
+
abortClose(): void;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Exposes framework-only subscription-runtime logging metadata installation.
|
|
97
|
+
*
|
|
98
|
+
* @internal
|
|
99
|
+
*/
|
|
100
|
+
export declare const subscriptionRuntimeAccess: SubscriptionRuntimeAccess;
|
|
101
|
+
export {};
|
|
102
|
+
//# sourceMappingURL=subscription-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscription-runtime.d.ts","sourceRoot":"","sources":["../../src/stand/subscription-runtime.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EAAe,KAAK,KAAK,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,KAAK,EAA0B,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAUpG,UAAU,yBAAyB;IACjC,aAAa,CAAC,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IACrE,WAAW,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAChD,SAAS,CAAC,OAAO,EAAE,mBAAmB,GAAG,SAAS,CAAC;CACpD;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,mBAAmB;;IAc9B;;;;;;;;OAQG;gBAED,WAAW,EAAE,KAAK,EAClB,WAAW,EAAE,KAAK,EAClB,cAAc,EAAE,QAAQ,EACxB,cAAc,EAAE,QAAQ,EACxB,QAAQ,EAAE,yBAAyB;IAUrC;;OAEG;IACH,KAAK,IAAI,IAAI;IAYb;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAgB/F;;;;OAIG;IACH,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IA0C1B;;;;OAIG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAYxB;;;;OAIG;IACH,QAAQ,IAAI,yBAAyB;IAIrC;;OAEG;IACH,UAAU,IAAI,IAAI;IAKlB;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAejC;;;;OAIG;IACH,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB5B;;;;OAIG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB;;;;OAIG;IACH,UAAU,IAAI,IAAI;CA8GnB;AAED;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,EAAE,yBAqBtC,CAAC"}
|