@spine-event-engine/server 2.0.0-snapshot.24 → 2.0.0-snapshot.25
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/README.md +38 -11
- package/REFERENCE.md +201 -130
- package/dist/agent/agent-acceptance-receipts.d.ts +69 -0
- package/dist/agent/agent-acceptance-receipts.d.ts.map +1 -0
- package/dist/agent/agent-acceptance-receipts.js +198 -0
- package/dist/agent/agent-acceptance-receipts.js.map +1 -0
- package/dist/agent/agent-execution-capacity.d.ts +37 -9
- package/dist/agent/agent-execution-capacity.d.ts.map +1 -1
- package/dist/agent/agent-execution-capacity.js +73 -15
- package/dist/agent/agent-execution-capacity.js.map +1 -1
- package/dist/agent/agent-history.d.ts +15 -10
- package/dist/agent/agent-history.d.ts.map +1 -1
- package/dist/agent/agent-history.js +26 -14
- package/dist/agent/agent-history.js.map +1 -1
- package/dist/agent/agent-live-ai-audit.d.ts +95 -0
- package/dist/agent/agent-live-ai-audit.d.ts.map +1 -0
- package/dist/agent/agent-live-ai-audit.js +290 -0
- package/dist/agent/agent-live-ai-audit.js.map +1 -0
- package/dist/agent/agent-live-ai-runtime.d.ts +300 -0
- package/dist/agent/agent-live-ai-runtime.d.ts.map +1 -0
- package/dist/agent/agent-live-ai-runtime.js +611 -0
- package/dist/agent/agent-live-ai-runtime.js.map +1 -0
- package/dist/agent/agent-live-audit.d.ts +67 -0
- package/dist/agent/agent-live-audit.d.ts.map +1 -0
- package/dist/agent/agent-live-audit.js +121 -0
- package/dist/agent/agent-live-audit.js.map +1 -0
- package/dist/agent/agent-live-budget.d.ts +84 -0
- package/dist/agent/agent-live-budget.d.ts.map +1 -0
- package/dist/agent/agent-live-budget.js +161 -0
- package/dist/agent/agent-live-budget.js.map +1 -0
- package/dist/agent/agent-live-fault.d.ts +18 -0
- package/dist/agent/agent-live-fault.d.ts.map +1 -0
- package/dist/agent/{agent-execution-fault.js → agent-live-fault.js} +7 -7
- package/dist/agent/agent-live-fault.js.map +1 -0
- package/dist/agent/agent-live-inputs.d.ts +74 -0
- package/dist/agent/agent-live-inputs.d.ts.map +1 -0
- package/dist/{bus/saved-dispatcher-binding.js → agent/agent-live-inputs.js} +2 -14
- package/dist/agent/agent-live-inputs.js.map +1 -0
- package/dist/agent/agent-live-interaction-events.d.ts +46 -0
- package/dist/agent/agent-live-interaction-events.d.ts.map +1 -0
- package/dist/agent/agent-live-interaction-events.js +104 -0
- package/dist/agent/agent-live-interaction-events.js.map +1 -0
- package/dist/agent/agent-live-mcp-controls.d.ts +129 -0
- package/dist/agent/agent-live-mcp-controls.d.ts.map +1 -0
- package/dist/agent/agent-live-mcp-controls.js +228 -0
- package/dist/agent/agent-live-mcp-controls.js.map +1 -0
- package/dist/agent/agent-live-mcp-host.d.ts +88 -0
- package/dist/agent/agent-live-mcp-host.d.ts.map +1 -0
- package/dist/agent/{agent-mcp-host.js → agent-live-mcp-host.js} +1 -1
- package/dist/agent/agent-live-mcp-host.js.map +1 -0
- package/dist/agent/{agent-mcp-runtime.d.ts → agent-live-mcp-runtime.d.ts} +6 -6
- package/dist/agent/agent-live-mcp-runtime.d.ts.map +1 -0
- package/dist/agent/{agent-mcp-runtime.js → agent-live-mcp-runtime.js} +13 -42
- package/dist/agent/agent-live-mcp-runtime.js.map +1 -0
- package/dist/agent/agent-live-read-runtime.d.ts +61 -0
- package/dist/agent/agent-live-read-runtime.d.ts.map +1 -0
- package/dist/agent/agent-live-read-runtime.js +121 -0
- package/dist/agent/agent-live-read-runtime.js.map +1 -0
- package/dist/agent/agent-model-selection.d.ts +21 -34
- package/dist/agent/agent-model-selection.d.ts.map +1 -1
- package/dist/agent/agent-model-selection.js +61 -78
- package/dist/agent/agent-model-selection.js.map +1 -1
- package/dist/bus/command-bus.d.ts +14 -18
- package/dist/bus/command-bus.d.ts.map +1 -1
- package/dist/bus/command-bus.js +31 -48
- package/dist/bus/command-bus.js.map +1 -1
- package/dist/bus/event-bus.d.ts +17 -4
- package/dist/bus/event-bus.d.ts.map +1 -1
- package/dist/bus/event-bus.js +42 -12
- package/dist/bus/event-bus.js.map +1 -1
- package/dist/context/bounded-context.d.ts +140 -87
- package/dist/context/bounded-context.d.ts.map +1 -1
- package/dist/context/bounded-context.js +702 -329
- package/dist/context/bounded-context.js.map +1 -1
- package/dist/context/entity-inbox.d.ts +7 -2
- package/dist/context/entity-inbox.d.ts.map +1 -1
- package/dist/context/entity-inbox.js +22 -13
- package/dist/context/entity-inbox.js.map +1 -1
- package/dist/context/local-inbox-handoff.d.ts +34 -34
- package/dist/context/local-inbox-handoff.d.ts.map +1 -1
- package/dist/context/local-inbox-handoff.js +108 -150
- package/dist/context/local-inbox-handoff.js.map +1 -1
- package/dist/context/projection-handoff.d.ts +2 -2
- package/dist/context/projection-handoff.d.ts.map +1 -1
- package/dist/context/projection-handoff.js +10 -8
- package/dist/context/projection-handoff.js.map +1 -1
- package/dist/context/tenant-index.d.ts +36 -31
- package/dist/context/tenant-index.d.ts.map +1 -1
- package/dist/context/tenant-index.js +123 -125
- package/dist/context/tenant-index.js.map +1 -1
- package/dist/context/tenant-unknown-error.d.ts +33 -0
- package/dist/context/tenant-unknown-error.d.ts.map +1 -0
- package/dist/context/tenant-unknown-error.js +75 -0
- package/dist/context/tenant-unknown-error.js.map +1 -0
- package/dist/delivery/agent-delivery-scope.d.ts +66 -0
- package/dist/delivery/agent-delivery-scope.d.ts.map +1 -0
- package/dist/delivery/agent-delivery-scope.js +44 -0
- package/dist/delivery/agent-delivery-scope.js.map +1 -0
- package/dist/delivery/delivery-builder.d.ts +25 -1
- package/dist/delivery/delivery-builder.d.ts.map +1 -1
- package/dist/delivery/delivery-builder.js +89 -0
- package/dist/delivery/delivery-builder.js.map +1 -1
- package/dist/delivery/delivery-monitor.d.ts +1 -1
- package/dist/delivery/delivery-monitor.js +1 -1
- package/dist/delivery/delivery-run-control.d.ts +6 -0
- package/dist/delivery/delivery-run-control.d.ts.map +1 -1
- package/dist/delivery/delivery-run-control.js +10 -0
- package/dist/delivery/delivery-run-control.js.map +1 -1
- package/dist/delivery/delivery-supervisor.d.ts.map +1 -1
- package/dist/delivery/delivery-supervisor.js +28 -4
- package/dist/delivery/delivery-supervisor.js.map +1 -1
- package/dist/delivery/delivery-tenant.d.ts +17 -0
- package/dist/delivery/delivery-tenant.d.ts.map +1 -0
- package/dist/delivery/delivery-tenant.js +50 -0
- package/dist/delivery/delivery-tenant.js.map +1 -0
- package/dist/delivery/delivery.d.ts +96 -2
- package/dist/delivery/delivery.d.ts.map +1 -1
- package/dist/delivery/delivery.js +693 -53
- package/dist/delivery/delivery.js.map +1 -1
- package/dist/delivery/inbox-records.d.ts.map +1 -1
- package/dist/delivery/inbox-records.js +9 -16
- package/dist/delivery/inbox-records.js.map +1 -1
- package/dist/delivery/inbox-storage.d.ts +6 -0
- package/dist/delivery/inbox-storage.d.ts.map +1 -1
- package/dist/delivery/inbox-storage.js +43 -6
- package/dist/delivery/inbox-storage.js.map +1 -1
- package/dist/delivery/inbox.d.ts.map +1 -1
- package/dist/delivery/inbox.js +3 -2
- package/dist/delivery/inbox.js.map +1 -1
- package/dist/delivery/reception-observation.d.ts +12 -4
- package/dist/delivery/reception-observation.d.ts.map +1 -1
- package/dist/delivery/reception-observation.js +14 -3
- package/dist/delivery/reception-observation.js.map +1 -1
- package/dist/delivery/sharded-work-registry.d.ts +6 -0
- package/dist/delivery/sharded-work-registry.d.ts.map +1 -1
- package/dist/delivery/sharded-work-registry.js +41 -4
- package/dist/delivery/sharded-work-registry.js.map +1 -1
- package/dist/entity/entity-storage-descriptor.d.ts.map +1 -1
- package/dist/entity/entity-storage-descriptor.js +7 -4
- package/dist/entity/entity-storage-descriptor.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/integration/external-messages.d.ts.map +1 -1
- package/dist/integration/external-messages.js +9 -15
- package/dist/integration/external-messages.js.map +1 -1
- package/dist/integration/integration-broker.d.ts.map +1 -1
- package/dist/integration/integration-broker.js +112 -6
- package/dist/integration/integration-broker.js.map +1 -1
- package/dist/integration/third-party-context.d.ts.map +1 -1
- package/dist/integration/third-party-context.js +7 -10
- package/dist/integration/third-party-context.js.map +1 -1
- package/dist/repository/primitive-id.js +26 -11
- package/dist/repository/primitive-id.js.map +1 -1
- package/dist/repository/repository.d.ts +32 -60
- package/dist/repository/repository.d.ts.map +1 -1
- package/dist/repository/repository.js +1446 -1787
- package/dist/repository/repository.js.map +1 -1
- package/dist/runtime/runtime.d.ts +13 -0
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +18 -0
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/runtime/signal-metadata.d.ts.map +1 -1
- package/dist/runtime/signal-metadata.js +6 -6
- package/dist/runtime/signal-metadata.js.map +1 -1
- package/dist/runtime/signal-publisher.d.ts +0 -6
- package/dist/runtime/signal-publisher.d.ts.map +1 -1
- package/dist/runtime/signal-publisher.js +1 -9
- package/dist/runtime/signal-publisher.js.map +1 -1
- package/dist/runtime/standalone-handler-runtime.d.ts +0 -7
- package/dist/runtime/standalone-handler-runtime.d.ts.map +1 -1
- package/dist/runtime/standalone-handler-runtime.js +13 -99
- package/dist/runtime/standalone-handler-runtime.js.map +1 -1
- package/dist/server/managed-delivery-gate.d.ts +34 -0
- package/dist/server/managed-delivery-gate.d.ts.map +1 -0
- package/dist/server/managed-delivery-gate.js +70 -0
- package/dist/server/managed-delivery-gate.js.map +1 -0
- package/dist/server/managed-server-application.d.ts.map +1 -1
- package/dist/server/managed-server-application.js +7 -4
- package/dist/server/managed-server-application.js.map +1 -1
- package/dist/server/server-environment.d.ts +203 -25
- package/dist/server/server-environment.d.ts.map +1 -1
- package/dist/server/server-environment.js +661 -133
- package/dist/server/server-environment.js.map +1 -1
- package/dist/server/server-log.d.ts +7 -0
- package/dist/server/server-log.d.ts.map +1 -1
- package/dist/server/server-log.js +14 -1
- package/dist/server/server-log.js.map +1 -1
- package/dist/server/server.d.ts +18 -32
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +50 -204
- package/dist/server/server.js.map +1 -1
- package/dist/services/spine-services.d.ts +1 -1
- package/dist/services/spine-services.d.ts.map +1 -1
- package/dist/services/spine-services.js +236 -335
- package/dist/services/spine-services.js.map +1 -1
- package/dist/stand/event-origin-filter.js +3 -3
- package/dist/stand/event-origin-filter.js.map +1 -1
- package/dist/stand/stand.d.ts +14 -0
- package/dist/stand/stand.d.ts.map +1 -1
- package/dist/stand/stand.js +53 -9
- package/dist/stand/stand.js.map +1 -1
- package/dist/stand/subscription-observer.d.ts.map +1 -1
- package/dist/stand/subscription-observer.js +54 -40
- package/dist/stand/subscription-observer.js.map +1 -1
- package/dist/stand/subscription-registry.d.ts +6 -2
- package/dist/stand/subscription-registry.d.ts.map +1 -1
- package/dist/stand/subscription-registry.js +15 -11
- package/dist/stand/subscription-registry.js.map +1 -1
- package/dist/stand/subscription-runtime.d.ts +5 -3
- package/dist/stand/subscription-runtime.d.ts.map +1 -1
- package/dist/stand/subscription-runtime.js +52 -9
- package/dist/stand/subscription-runtime.js.map +1 -1
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +4 -3
- package/dist/testing/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +14 -14
- package/dist/agent/agent-admission.d.ts +0 -80
- package/dist/agent/agent-admission.d.ts.map +0 -1
- package/dist/agent/agent-admission.js +0 -127
- package/dist/agent/agent-admission.js.map +0 -1
- package/dist/agent/agent-ai-runtime.d.ts +0 -76
- package/dist/agent/agent-ai-runtime.d.ts.map +0 -1
- package/dist/agent/agent-ai-runtime.js +0 -1269
- package/dist/agent/agent-ai-runtime.js.map +0 -1
- package/dist/agent/agent-execution-fault.d.ts +0 -18
- package/dist/agent/agent-execution-fault.d.ts.map +0 -1
- package/dist/agent/agent-execution-fault.js.map +0 -1
- package/dist/agent/agent-execution-session.d.ts +0 -103
- package/dist/agent/agent-execution-session.d.ts.map +0 -1
- package/dist/agent/agent-execution-session.js +0 -238
- package/dist/agent/agent-execution-session.js.map +0 -1
- package/dist/agent/agent-interaction-audit.d.ts +0 -58
- package/dist/agent/agent-interaction-audit.d.ts.map +0 -1
- package/dist/agent/agent-interaction-audit.js +0 -114
- package/dist/agent/agent-interaction-audit.js.map +0 -1
- package/dist/agent/agent-interaction-events.d.ts +0 -40
- package/dist/agent/agent-interaction-events.d.ts.map +0 -1
- package/dist/agent/agent-interaction-events.js +0 -129
- package/dist/agent/agent-interaction-events.js.map +0 -1
- package/dist/agent/agent-mcp-budget.d.ts +0 -125
- package/dist/agent/agent-mcp-budget.d.ts.map +0 -1
- package/dist/agent/agent-mcp-budget.js +0 -566
- package/dist/agent/agent-mcp-budget.js.map +0 -1
- package/dist/agent/agent-mcp-host.d.ts +0 -125
- package/dist/agent/agent-mcp-host.d.ts.map +0 -1
- package/dist/agent/agent-mcp-host.js.map +0 -1
- package/dist/agent/agent-mcp-runtime.d.ts.map +0 -1
- package/dist/agent/agent-mcp-runtime.js.map +0 -1
- package/dist/agent/agent-read-runtime.d.ts +0 -70
- package/dist/agent/agent-read-runtime.d.ts.map +0 -1
- package/dist/agent/agent-read-runtime.js +0 -320
- package/dist/agent/agent-read-runtime.js.map +0 -1
- package/dist/agent/agent-revisions.d.ts +0 -35
- package/dist/agent/agent-revisions.d.ts.map +0 -1
- package/dist/agent/agent-revisions.js +0 -133
- package/dist/agent/agent-revisions.js.map +0 -1
- package/dist/agent/agent-scheduler.d.ts +0 -99
- package/dist/agent/agent-scheduler.d.ts.map +0 -1
- package/dist/agent/agent-scheduler.js +0 -398
- package/dist/agent/agent-scheduler.js.map +0 -1
- package/dist/bus/saved-dispatcher-binding.d.ts +0 -53
- package/dist/bus/saved-dispatcher-binding.d.ts.map +0 -1
- package/dist/bus/saved-dispatcher-binding.js.map +0 -1
- package/dist/delivery/delivery-run-coordinator.d.ts +0 -218
- package/dist/delivery/delivery-run-coordinator.d.ts.map +0 -1
- package/dist/delivery/delivery-run-coordinator.js +0 -609
- package/dist/delivery/delivery-run-coordinator.js.map +0 -1
- package/dist/delivery/parked-delivery-obligations.d.ts +0 -182
- package/dist/delivery/parked-delivery-obligations.d.ts.map +0 -1
- package/dist/delivery/parked-delivery-obligations.js +0 -390
- package/dist/delivery/parked-delivery-obligations.js.map +0 -1
- package/dist/server/environment-attachment.d.ts +0 -356
- package/dist/server/environment-attachment.d.ts.map +0 -1
- package/dist/server/environment-attachment.js +0 -2062
- package/dist/server/environment-attachment.js.map +0 -1
- package/dist/server/environment-delivery-records.d.ts +0 -77
- package/dist/server/environment-delivery-records.d.ts.map +0 -1
- package/dist/server/environment-delivery-records.js +0 -282
- package/dist/server/environment-delivery-records.js.map +0 -1
- package/dist/server/environment-delivery-worker.d.ts +0 -161
- package/dist/server/environment-delivery-worker.d.ts.map +0 -1
- package/dist/server/environment-delivery-worker.js +0 -973
- package/dist/server/environment-delivery-worker.js.map +0 -1
|
@@ -1,66 +1,71 @@
|
|
|
1
1
|
import type { TenantId } from "@spine-event-engine/proto";
|
|
2
|
-
import {
|
|
3
|
-
import type
|
|
4
|
-
type TenantMode = "single-tenant" | "multitenant";
|
|
2
|
+
import type { StorageFactory } from "@spine-event-engine/storage";
|
|
3
|
+
import { type TenantCatalogCursor, type TenantCatalogRead, type TenantCatalogSignal } from "@spine-event-engine/storage/provider";
|
|
5
4
|
/**
|
|
6
|
-
*
|
|
5
|
+
* Finite read request for a live tenant index.
|
|
6
|
+
*/
|
|
7
|
+
export type TenantIndexRead = TenantCatalogRead;
|
|
8
|
+
/**
|
|
9
|
+
* Cancellation port for tenant-index traversal.
|
|
10
|
+
*/
|
|
11
|
+
export type TenantIndexSignal = TenantCatalogSignal;
|
|
12
|
+
/**
|
|
13
|
+
* Opaque continuation returned by the same index instance.
|
|
14
|
+
*/
|
|
15
|
+
export type TenantIndexCursor = TenantCatalogCursor;
|
|
16
|
+
/**
|
|
17
|
+
* Live application membership independent of storage destination resolution.
|
|
7
18
|
*/
|
|
8
19
|
export interface TenantIndex {
|
|
9
20
|
/**
|
|
10
|
-
*
|
|
21
|
+
* Checks current membership without registration or storage preparation.
|
|
22
|
+
*
|
|
23
|
+
* @param tenantId Complete tenant identity to inspect.
|
|
24
|
+
* @returns Whether this index currently includes the tenant.
|
|
11
25
|
*/
|
|
12
|
-
|
|
26
|
+
contains(tenantId: TenantId): Promise<boolean>;
|
|
13
27
|
/**
|
|
14
|
-
* Lists complete
|
|
28
|
+
* Lists complete currently registered tenant identities.
|
|
15
29
|
*
|
|
16
|
-
* @returns
|
|
30
|
+
* @returns Complete currently registered tenant identities.
|
|
17
31
|
*/
|
|
18
32
|
all(): Promise<readonly TenantId[]>;
|
|
19
33
|
/**
|
|
20
|
-
* Reads a finite page
|
|
34
|
+
* Reads a finite page from this index.
|
|
21
35
|
*
|
|
22
|
-
* @param request Bounded
|
|
23
|
-
* @returns
|
|
36
|
+
* @param request Bounded page and cancellation.
|
|
37
|
+
* @returns Tenant identities and an opaque continuation.
|
|
24
38
|
*/
|
|
25
|
-
page(request:
|
|
39
|
+
page(request: TenantIndexRead): Promise<TenantIndexPage>;
|
|
26
40
|
/**
|
|
27
|
-
*
|
|
41
|
+
* Registers a tenant and returns after membership becomes visible.
|
|
28
42
|
*
|
|
29
|
-
* @param tenantId
|
|
30
|
-
* @returns Completion
|
|
43
|
+
* @param tenantId Complete tenant identity to register.
|
|
44
|
+
* @returns Completion or rejection from this index.
|
|
31
45
|
*/
|
|
32
46
|
keep(tenantId: TenantId): Promise<void>;
|
|
33
|
-
/**
|
|
34
|
-
* Closes this context view without closing the factory-owned catalog.
|
|
35
|
-
*/
|
|
36
|
-
close(): void;
|
|
37
47
|
}
|
|
38
48
|
/**
|
|
39
|
-
* One finite
|
|
49
|
+
* One finite page of complete tenant identities.
|
|
40
50
|
*/
|
|
41
51
|
export interface TenantIndexPage {
|
|
42
52
|
/**
|
|
43
|
-
* Complete generated tenant identities
|
|
53
|
+
* Complete generated tenant identities.
|
|
44
54
|
*/
|
|
45
55
|
readonly ids: readonly TenantId[];
|
|
46
56
|
/**
|
|
47
|
-
* Opaque continuation when another
|
|
57
|
+
* Opaque continuation when another page remains.
|
|
48
58
|
*/
|
|
49
|
-
readonly after?:
|
|
59
|
+
readonly after?: TenantIndexCursor;
|
|
50
60
|
/**
|
|
51
|
-
* Whether
|
|
61
|
+
* Whether another page belongs to this traversal.
|
|
52
62
|
*/
|
|
53
63
|
readonly hasMore: boolean;
|
|
54
64
|
}
|
|
55
65
|
/**
|
|
56
|
-
* Creates
|
|
66
|
+
* Creates an environment default from a provider catalog or transient memory.
|
|
57
67
|
*/
|
|
58
68
|
export declare const TenantIndexes: Readonly<{
|
|
59
|
-
|
|
60
|
-
readonly contextName: string;
|
|
61
|
-
readonly tenantMode: TenantMode;
|
|
62
|
-
readonly storageFactory: StorageFactory;
|
|
63
|
-
}): TenantIndex;
|
|
69
|
+
fromFactory(factory: StorageFactory): TenantIndex;
|
|
64
70
|
}>;
|
|
65
|
-
export {};
|
|
66
71
|
//# sourceMappingURL=tenant-index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tenant-index.d.ts","sourceRoot":"","sources":["../../src/context/tenant-index.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"tenant-index.d.ts","sourceRoot":"","sources":["../../src/context/tenant-index.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAIL,KAAK,mBAAmB,EAExB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACzB,MAAM,sCAAsC,CAAC;AAE9C;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAEhD;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AAEpD;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,WAAW;IAG1B;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE/C;;;;OAIG;IACH,GAAG,IAAI,OAAO,CAAC,SAAS,QAAQ,EAAE,CAAC,CAAC;IAEpC;;;;;OAKG;IACH,IAAI,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAEzD;;;;;OAKG;IACH,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,SAAS,QAAQ,EAAE,CAAC;IAElC;;OAEG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAEnC;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC;IAAE,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,WAAW,CAAA;CAAE,CActF,CAAC"}
|
|
@@ -11,196 +11,194 @@
|
|
|
11
11
|
* or implied. See the License for the specific language governing permissions and limitations under
|
|
12
12
|
* the License.
|
|
13
13
|
*/
|
|
14
|
-
import {} from "@spine-event-engine/storage";
|
|
15
|
-
import { TenantBoundary } from "@spine-event-engine/storage/provider";
|
|
16
|
-
import { TenantCatalogReads } from "@spine-event-engine/storage/provider";
|
|
17
|
-
import { EffectiveTenants } from "./effective-tenant.js";
|
|
14
|
+
import { TenantBoundary, TenantCatalogReads, } from "@spine-event-engine/storage/provider";
|
|
18
15
|
/**
|
|
19
|
-
* Creates
|
|
16
|
+
* Creates an environment default from a provider catalog or transient memory.
|
|
20
17
|
*/
|
|
21
18
|
export const TenantIndexes = Object.freeze({
|
|
22
|
-
// prettier-ignore
|
|
23
19
|
/**
|
|
24
|
-
*
|
|
20
|
+
* Selects a provider catalog when available without creating records.
|
|
25
21
|
*
|
|
26
|
-
* @param
|
|
27
|
-
* @returns
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
22
|
+
* @param factory Environment storage factory.
|
|
23
|
+
* @returns One live index for the environment lifetime.
|
|
24
|
+
*/
|
|
25
|
+
fromFactory(factory) {
|
|
26
|
+
const provider = factory;
|
|
27
|
+
return typeof provider.tenantCatalog === "function"
|
|
28
|
+
? new StorageTenantIndex(provider.tenantCatalog())
|
|
29
|
+
: new MemoryTenantIndex();
|
|
33
30
|
},
|
|
34
31
|
});
|
|
35
32
|
/**
|
|
36
|
-
*
|
|
33
|
+
* Adapts a provider catalog to the public live membership contract.
|
|
37
34
|
*/
|
|
38
|
-
class
|
|
39
|
-
|
|
40
|
-
// prettier-ignore
|
|
41
|
-
/**
|
|
42
|
-
* Identifies the index mode.
|
|
43
|
-
*/
|
|
44
|
-
tenantMode = "single-tenant";
|
|
45
|
-
/**
|
|
46
|
-
* Whether callers may still use this index.
|
|
47
|
-
*/
|
|
48
|
-
#open = true;
|
|
35
|
+
class StorageTenantIndex {
|
|
36
|
+
catalog;
|
|
49
37
|
/**
|
|
50
|
-
*
|
|
38
|
+
* Binds the index to a provider catalog.
|
|
51
39
|
*
|
|
52
|
-
* @param
|
|
40
|
+
* @param catalog Provider catalog retained by its storage factory.
|
|
53
41
|
*/
|
|
54
|
-
constructor(
|
|
55
|
-
this.
|
|
42
|
+
constructor(catalog) {
|
|
43
|
+
this.catalog = catalog;
|
|
56
44
|
}
|
|
57
45
|
/**
|
|
58
|
-
*
|
|
46
|
+
* Checks membership through the catalog.
|
|
59
47
|
*
|
|
60
|
-
* @
|
|
48
|
+
* @param tenantId Tenant to inspect.
|
|
49
|
+
* @returns Live catalog membership.
|
|
61
50
|
*/
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
return closed === undefined
|
|
65
|
-
? Promise.resolve(Object.freeze([EffectiveTenants.current(false, undefined)]))
|
|
66
|
-
: Promise.reject(closed);
|
|
51
|
+
async contains(tenantId) {
|
|
52
|
+
return this.catalog.contains(TenantBoundary.from(tenantId));
|
|
67
53
|
}
|
|
68
54
|
/**
|
|
69
|
-
*
|
|
55
|
+
* Lists complete named tenant identities.
|
|
70
56
|
*
|
|
71
|
-
* @
|
|
72
|
-
* @returns One terminal tenant page.
|
|
57
|
+
* @returns Complete named tenant identities.
|
|
73
58
|
*/
|
|
74
|
-
|
|
75
|
-
return
|
|
76
|
-
const closed = this.closedError();
|
|
77
|
-
if (closed !== undefined)
|
|
78
|
-
throw closed;
|
|
79
|
-
TenantCatalogReads.require(request);
|
|
80
|
-
if (request.after !== undefined)
|
|
81
|
-
throw new TypeError("Single-tenant catalog does not accept a continuation.");
|
|
82
|
-
return { ids: [EffectiveTenants.current(false, undefined)], hasMore: false };
|
|
83
|
-
});
|
|
59
|
+
async all() {
|
|
60
|
+
return Object.freeze((await this.catalog.all()).map((boundary) => this.named(boundary)));
|
|
84
61
|
}
|
|
85
62
|
/**
|
|
86
|
-
*
|
|
63
|
+
* Reads a finite provider page.
|
|
87
64
|
*
|
|
88
|
-
* @
|
|
65
|
+
* @param request Finite provider page.
|
|
66
|
+
* @returns Complete tenant page.
|
|
89
67
|
*/
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
68
|
+
async page(request) {
|
|
69
|
+
TenantCatalogReads.require(request);
|
|
70
|
+
const page = await this.catalog.page(request);
|
|
71
|
+
request.signal.throwIfAborted();
|
|
72
|
+
return {
|
|
73
|
+
ids: page.boundaries.map((boundary) => this.named(boundary)),
|
|
74
|
+
...(page.after === undefined ? {} : { after: page.after }),
|
|
75
|
+
hasMore: page.hasMore,
|
|
76
|
+
};
|
|
94
77
|
}
|
|
95
78
|
/**
|
|
96
|
-
*
|
|
79
|
+
* Registers a tenant through the provider catalog.
|
|
80
|
+
*
|
|
81
|
+
* @param tenantId Tenant to register.
|
|
82
|
+
* @returns Provider confirmation.
|
|
97
83
|
*/
|
|
98
|
-
|
|
99
|
-
this
|
|
84
|
+
async keep(tenantId) {
|
|
85
|
+
return this.catalog.keep(TenantBoundary.from(tenantId));
|
|
100
86
|
}
|
|
101
87
|
/**
|
|
102
|
-
*
|
|
88
|
+
* Validates a named provider boundary.
|
|
103
89
|
*
|
|
104
|
-
* @
|
|
90
|
+
* @param boundary Provider boundary.
|
|
91
|
+
* @returns Its complete named identity.
|
|
105
92
|
*/
|
|
106
|
-
|
|
107
|
-
|
|
93
|
+
named(boundary) {
|
|
94
|
+
if (boundary.single || boundary.tenantId === undefined)
|
|
95
|
+
throw new Error("Multitenant provider catalog returned a single-tenant boundary.");
|
|
96
|
+
return boundary.tenantId;
|
|
108
97
|
}
|
|
109
98
|
}
|
|
110
99
|
/**
|
|
111
|
-
*
|
|
100
|
+
* Retains explicit membership when a custom factory has no catalog.
|
|
112
101
|
*/
|
|
113
|
-
class
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* Identifies the index mode.
|
|
119
|
-
*/
|
|
120
|
-
tenantMode = "multitenant";
|
|
102
|
+
class MemoryTenantIndex {
|
|
103
|
+
#tenants = new Map();
|
|
104
|
+
#order = [];
|
|
105
|
+
#identity = {};
|
|
121
106
|
/**
|
|
122
|
-
*
|
|
107
|
+
* Checks explicit memory membership.
|
|
108
|
+
*
|
|
109
|
+
* @param tenantId Tenant to inspect.
|
|
110
|
+
* @returns Explicit membership.
|
|
123
111
|
*/
|
|
124
|
-
|
|
112
|
+
contains(tenantId) {
|
|
113
|
+
return Promise.resolve().then(() => this.#tenants.has(String(TenantBoundary.from(tenantId).key)));
|
|
114
|
+
}
|
|
125
115
|
/**
|
|
126
|
-
*
|
|
116
|
+
* Lists detached complete tenant identities.
|
|
127
117
|
*
|
|
128
|
-
* @
|
|
129
|
-
* @param catalog Provider catalog for named tenants.
|
|
118
|
+
* @returns Detached complete tenant identities.
|
|
130
119
|
*/
|
|
131
|
-
|
|
132
|
-
this.
|
|
133
|
-
this.catalog = catalog;
|
|
120
|
+
all() {
|
|
121
|
+
return Promise.resolve(Object.freeze(this.#order.map((boundary) => boundary.tenantId)));
|
|
134
122
|
}
|
|
135
123
|
/**
|
|
136
|
-
*
|
|
124
|
+
* Reads a bounded page without copying the full directory.
|
|
137
125
|
*
|
|
138
|
-
* @
|
|
126
|
+
* @param request Finite page request.
|
|
127
|
+
* @returns Bounded membership page.
|
|
139
128
|
*/
|
|
140
|
-
|
|
141
|
-
this.
|
|
142
|
-
return Object.freeze((await this.catalog.all()).map((boundary) => {
|
|
143
|
-
if (boundary.single || boundary.tenantId === undefined)
|
|
144
|
-
throw new Error("Multitenant provider catalog returned a single-tenant boundary.");
|
|
145
|
-
return boundary.tenantId;
|
|
146
|
-
}));
|
|
129
|
+
page(request) {
|
|
130
|
+
return Promise.resolve().then(() => this.readPage(request));
|
|
147
131
|
}
|
|
148
132
|
/**
|
|
149
|
-
* Reads
|
|
133
|
+
* Reads one page after promise admission.
|
|
150
134
|
*
|
|
151
135
|
* @param request Finite page request.
|
|
152
|
-
* @returns
|
|
136
|
+
* @returns Bounded membership page.
|
|
153
137
|
*/
|
|
154
|
-
|
|
155
|
-
this.requireOpen();
|
|
138
|
+
readPage(request) {
|
|
156
139
|
TenantCatalogReads.require(request);
|
|
157
|
-
const
|
|
140
|
+
const cursor = request.after;
|
|
141
|
+
if (cursor !== undefined && !(cursor instanceof MemoryTenantIndexCursor))
|
|
142
|
+
throw new TypeError("TenantIndex continuation is invalid.");
|
|
143
|
+
const state = cursor?.position(this.#identity);
|
|
144
|
+
const start = state?.index ?? 0;
|
|
145
|
+
const length = state?.length ?? this.#order.length;
|
|
146
|
+
const end = Math.min(length, start + request.count);
|
|
158
147
|
request.signal.throwIfAborted();
|
|
159
|
-
this.requireOpen();
|
|
160
|
-
const ids = page.boundaries.map((boundary) => {
|
|
161
|
-
if (boundary.single || boundary.tenantId === undefined)
|
|
162
|
-
throw new Error("Multitenant provider catalog returned a single-tenant boundary.");
|
|
163
|
-
return boundary.tenantId;
|
|
164
|
-
});
|
|
165
148
|
return {
|
|
166
|
-
ids,
|
|
167
|
-
...(
|
|
168
|
-
hasMore:
|
|
149
|
+
ids: this.#order.slice(start, end).map((boundary) => boundary.tenantId),
|
|
150
|
+
...(end < length ? { after: new MemoryTenantIndexCursor(this.#identity, end, length) } : {}),
|
|
151
|
+
hasMore: end < length,
|
|
169
152
|
};
|
|
170
153
|
}
|
|
171
154
|
/**
|
|
172
|
-
*
|
|
155
|
+
* Registers one detached complete tenant identity.
|
|
173
156
|
*
|
|
174
|
-
* @param tenantId
|
|
175
|
-
* @returns
|
|
157
|
+
* @param tenantId Tenant to register.
|
|
158
|
+
* @returns Visible membership completion.
|
|
176
159
|
*/
|
|
177
160
|
keep(tenantId) {
|
|
178
161
|
return Promise.resolve().then(() => {
|
|
179
|
-
|
|
180
|
-
|
|
162
|
+
const boundary = TenantBoundary.from(tenantId);
|
|
163
|
+
const key = String(boundary.key);
|
|
164
|
+
if (this.#tenants.has(key))
|
|
165
|
+
return;
|
|
166
|
+
this.#tenants.set(key, boundary);
|
|
167
|
+
this.#order.push(boundary);
|
|
181
168
|
});
|
|
182
169
|
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Instance-bound continuation for a transient in-memory index.
|
|
173
|
+
*/
|
|
174
|
+
class MemoryTenantIndexCursor {
|
|
175
|
+
[Symbol.toStringTag] = "TenantCatalogCursor";
|
|
176
|
+
#identity;
|
|
177
|
+
#index;
|
|
178
|
+
#length;
|
|
183
179
|
/**
|
|
184
|
-
*
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
180
|
+
* Captures one finite sweep position.
|
|
181
|
+
*
|
|
182
|
+
* @param identity Index identity.
|
|
183
|
+
* @param index Next position.
|
|
184
|
+
* @param length Sweep length.
|
|
185
|
+
*/
|
|
186
|
+
constructor(identity, index, length) {
|
|
187
|
+
this.#identity = identity;
|
|
188
|
+
this.#index = index;
|
|
189
|
+
this.#length = length;
|
|
190
|
+
Object.freeze(this);
|
|
188
191
|
}
|
|
189
192
|
/**
|
|
190
|
-
*
|
|
193
|
+
* Verifies the issuing index before returning the sweep position.
|
|
194
|
+
*
|
|
195
|
+
* @param identity Expected index identity.
|
|
196
|
+
* @returns Finite sweep position.
|
|
191
197
|
*/
|
|
192
|
-
|
|
193
|
-
if (
|
|
194
|
-
throw new
|
|
198
|
+
position(identity) {
|
|
199
|
+
if (this.#identity !== identity)
|
|
200
|
+
throw new TypeError("TenantIndex continuation is invalid.");
|
|
201
|
+
return { index: this.#index, length: this.#length };
|
|
195
202
|
}
|
|
196
203
|
}
|
|
197
|
-
function tenantCatalog(factory) {
|
|
198
|
-
const provider = factory;
|
|
199
|
-
if (typeof provider.tenantCatalog !== "function")
|
|
200
|
-
throw new Error("Multitenant storage requires a provider-owned tenant catalog.");
|
|
201
|
-
const catalog = provider.tenantCatalog();
|
|
202
|
-
if (typeof catalog.page !== "function")
|
|
203
|
-
throw new Error("Multitenant Agent storage requires a paged provider tenant catalog.");
|
|
204
|
-
return catalog;
|
|
205
|
-
}
|
|
206
204
|
//# sourceMappingURL=tenant-index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tenant-index.js","sourceRoot":"","sources":["../../src/context/tenant-index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"tenant-index.js","sourceRoot":"","sources":["../../src/context/tenant-index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { TenantId } from "@spine-event-engine/proto";
|
|
2
|
+
import type { TenantIndex } from "./tenant-index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Identifies a complete tenant absent from a receiving Bounded Context's live index.
|
|
5
|
+
*/
|
|
6
|
+
export declare class TenantUnknownError extends Error {
|
|
7
|
+
#private;
|
|
8
|
+
readonly contextName: string;
|
|
9
|
+
/**
|
|
10
|
+
* Stable structured error type for missing live membership.
|
|
11
|
+
*/
|
|
12
|
+
readonly type: "TENANT_UNKNOWN";
|
|
13
|
+
/**
|
|
14
|
+
* Captures the rejected tenant without retaining a mutable caller message.
|
|
15
|
+
*
|
|
16
|
+
* @param tenantId Complete unknown tenant identity.
|
|
17
|
+
* @param contextName Receiving Bounded Context name.
|
|
18
|
+
*/
|
|
19
|
+
constructor(tenantId: TenantId, contextName: string);
|
|
20
|
+
/**
|
|
21
|
+
* Returns a detached copy of the complete rejected identity.
|
|
22
|
+
*
|
|
23
|
+
* @returns Complete tenant identity.
|
|
24
|
+
*/
|
|
25
|
+
get tenantId(): TenantId;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Checks a receiving context's current membership after shape validation.
|
|
29
|
+
*/
|
|
30
|
+
export declare const TenantAdmissions: Readonly<{
|
|
31
|
+
require(index: TenantIndex, contextName: string, multitenant: boolean, tenantId?: TenantId): Promise<void>;
|
|
32
|
+
}>;
|
|
33
|
+
//# sourceMappingURL=tenant-unknown-error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant-unknown-error.d.ts","sourceRoot":"","sources":["../../src/context/tenant-unknown-error.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;;IAgBzC,QAAQ,CAAC,WAAW,EAAE,MAAM;IAf9B;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAG,gBAAgB,CAAU;IAI1C;;;;;OAKG;gBAED,QAAQ,EAAE,QAAQ,EACT,WAAW,EAAE,MAAM;IAW9B;;;;OAIG;IACH,IAAI,QAAQ,IAAI,QAAQ,CAEvB;CACF;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC;IACtC,OAAO,CACL,KAAK,EAAE,WAAW,EAClB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,OAAO,EACpB,QAAQ,CAAC,EAAE,QAAQ,GAClB,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB,CAsBC,CAAC"}
|
|
@@ -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 { TenantBoundary } from "@spine-event-engine/storage/provider";
|
|
15
|
+
/**
|
|
16
|
+
* Identifies a complete tenant absent from a receiving Bounded Context's live index.
|
|
17
|
+
*/
|
|
18
|
+
export class TenantUnknownError extends Error {
|
|
19
|
+
contextName;
|
|
20
|
+
/**
|
|
21
|
+
* Stable structured error type for missing live membership.
|
|
22
|
+
*/
|
|
23
|
+
type = "TENANT_UNKNOWN";
|
|
24
|
+
#tenant;
|
|
25
|
+
/**
|
|
26
|
+
* Captures the rejected tenant without retaining a mutable caller message.
|
|
27
|
+
*
|
|
28
|
+
* @param tenantId Complete unknown tenant identity.
|
|
29
|
+
* @param contextName Receiving Bounded Context name.
|
|
30
|
+
*/
|
|
31
|
+
constructor(tenantId, contextName) {
|
|
32
|
+
const tenant = TenantBoundary.from(tenantId);
|
|
33
|
+
const kind = tenant.tenantId.kind;
|
|
34
|
+
const label = kind.case === "value" ? kind.value : kind.case === undefined ? "" : kind.value.value;
|
|
35
|
+
super(`Tenant "${label}" is not registered for ${contextName}.`);
|
|
36
|
+
this.contextName = contextName;
|
|
37
|
+
this.name = "TenantUnknownError";
|
|
38
|
+
this.#tenant = tenant;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Returns a detached copy of the complete rejected identity.
|
|
42
|
+
*
|
|
43
|
+
* @returns Complete tenant identity.
|
|
44
|
+
*/
|
|
45
|
+
get tenantId() {
|
|
46
|
+
return this.#tenant.tenantId;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Checks a receiving context's current membership after shape validation.
|
|
51
|
+
*/
|
|
52
|
+
export const TenantAdmissions = Object.freeze({
|
|
53
|
+
/**
|
|
54
|
+
* Requires live membership before tenant-specific work.
|
|
55
|
+
*
|
|
56
|
+
* @param index Receiving Bounded Context's effective index.
|
|
57
|
+
* @param contextName Diagnostic context name.
|
|
58
|
+
* @param multitenant Whether a tenant identity applies.
|
|
59
|
+
* @param tenantId Complete supplied tenant identity, when applicable.
|
|
60
|
+
* @returns Completion when current membership permits this input.
|
|
61
|
+
*/
|
|
62
|
+
async require(index, contextName, multitenant, tenantId) {
|
|
63
|
+
if (!multitenant) {
|
|
64
|
+
if (tenantId !== undefined)
|
|
65
|
+
throw new Error(`Single-tenant storage "${contextName}" does not accept context.tenantId.`);
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
if (tenantId === undefined)
|
|
69
|
+
throw new Error(`Multitenant storage "${contextName}" requires context.tenantId.`);
|
|
70
|
+
const boundary = TenantBoundary.from(tenantId);
|
|
71
|
+
if (!(await index.contains(boundary.tenantId)))
|
|
72
|
+
throw new TenantUnknownError(boundary.tenantId, contextName);
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
//# sourceMappingURL=tenant-unknown-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant-unknown-error.js","sourceRoot":"","sources":["../../src/context/tenant-unknown-error.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAGtE;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAgBhC;IAfX;;OAEG;IACM,IAAI,GAAG,gBAAyB,CAAC;IAEjC,OAAO,CAAyC;IAEzD;;;;;OAKG;IACH,YACE,QAAkB,EACT,WAAmB;QAE5B,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAClC,MAAM,KAAK,GACT,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QACvF,KAAK,CAAC,WAAW,KAAK,2BAA2B,WAAW,GAAG,CAAC,CAAC;QANxD,gBAAW,GAAX,WAAW,CAAQ;QAO5B,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACH,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC/B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAOxB,MAAM,CAAC,MAAM,CAAC;IACjB;;;;;;;;OAQG;IACH,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ;QACrD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,IAAI,QAAQ,KAAK,SAAS;gBACxB,MAAM,IAAI,KAAK,CAAC,0BAA0B,WAAW,qCAAqC,CAAC,CAAC;YAC9F,OAAO;QACT,CAAC;QACD,IAAI,QAAQ,KAAK,SAAS;YACxB,MAAM,IAAI,KAAK,CAAC,wBAAwB,WAAW,8BAA8B,CAAC,CAAC;QACrF,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC5C,MAAM,IAAI,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IACjE,CAAC;CACF,CAAC,CAAC"}
|