@loomwork/event-runtime 0.0.0-stage → 0.1.1
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 +202 -0
- package/NOTICE +8 -0
- package/README.md +95 -2
- package/dist/BranchRegistry.d.ts +140 -0
- package/dist/BranchRegistry.d.ts.map +1 -0
- package/dist/BranchRegistry.js +66 -0
- package/dist/BranchRegistry.js.map +1 -0
- package/dist/CoalescingEventStore.d.ts +97 -0
- package/dist/CoalescingEventStore.d.ts.map +1 -0
- package/dist/CoalescingEventStore.js +180 -0
- package/dist/CoalescingEventStore.js.map +1 -0
- package/dist/InMemoryArchiveStore.d.ts +19 -0
- package/dist/InMemoryArchiveStore.d.ts.map +1 -0
- package/dist/InMemoryArchiveStore.js +49 -0
- package/dist/InMemoryArchiveStore.js.map +1 -0
- package/dist/InMemoryAsyncEventStore.d.ts +111 -0
- package/dist/InMemoryAsyncEventStore.d.ts.map +1 -0
- package/dist/InMemoryAsyncEventStore.js +374 -0
- package/dist/InMemoryAsyncEventStore.js.map +1 -0
- package/dist/InMemoryBranchRegistry.d.ts +31 -0
- package/dist/InMemoryBranchRegistry.d.ts.map +1 -0
- package/dist/InMemoryBranchRegistry.js +167 -0
- package/dist/InMemoryBranchRegistry.js.map +1 -0
- package/dist/ProfilingEventStore.d.ts +75 -0
- package/dist/ProfilingEventStore.d.ts.map +1 -0
- package/dist/ProfilingEventStore.js +133 -0
- package/dist/ProfilingEventStore.js.map +1 -0
- package/dist/ShardPlan.d.ts +87 -0
- package/dist/ShardPlan.d.ts.map +1 -0
- package/dist/ShardPlan.js +193 -0
- package/dist/ShardPlan.js.map +1 -0
- package/dist/ShardedEventStore.d.ts +149 -0
- package/dist/ShardedEventStore.d.ts.map +1 -0
- package/dist/ShardedEventStore.js +468 -0
- package/dist/ShardedEventStore.js.map +1 -0
- package/dist/SubscriberRegistry.d.ts +59 -0
- package/dist/SubscriberRegistry.d.ts.map +1 -0
- package/dist/SubscriberRegistry.js +113 -0
- package/dist/SubscriberRegistry.js.map +1 -0
- package/dist/TenantScopedArchiveStore.d.ts +36 -0
- package/dist/TenantScopedArchiveStore.d.ts.map +1 -0
- package/dist/TenantScopedArchiveStore.js +96 -0
- package/dist/TenantScopedArchiveStore.js.map +1 -0
- package/dist/TenantScopedEventStore.d.ts +59 -0
- package/dist/TenantScopedEventStore.d.ts.map +1 -0
- package/dist/TenantScopedEventStore.js +227 -0
- package/dist/TenantScopedEventStore.js.map +1 -0
- package/dist/archive.d.ts +68 -0
- package/dist/archive.d.ts.map +1 -0
- package/dist/archive.js +207 -0
- package/dist/archive.js.map +1 -0
- package/dist/archiveSpi.d.ts +165 -0
- package/dist/archiveSpi.d.ts.map +1 -0
- package/dist/archiveSpi.js +184 -0
- package/dist/archiveSpi.js.map +1 -0
- package/dist/creationMarker.d.ts +13 -0
- package/dist/creationMarker.d.ts.map +1 -0
- package/dist/creationMarker.js +17 -0
- package/dist/creationMarker.js.map +1 -0
- package/dist/decoratorPlan.typecheck.d.ts +2 -0
- package/dist/decoratorPlan.typecheck.d.ts.map +1 -0
- package/dist/decoratorPlan.typecheck.js +41 -0
- package/dist/decoratorPlan.typecheck.js.map +1 -0
- package/dist/eventKindClass.d.ts +40 -0
- package/dist/eventKindClass.d.ts.map +1 -0
- package/dist/eventKindClass.js +99 -0
- package/dist/eventKindClass.js.map +1 -0
- package/dist/executionIdOrder.d.ts +21 -0
- package/dist/executionIdOrder.d.ts.map +1 -0
- package/dist/executionIdOrder.js +43 -0
- package/dist/executionIdOrder.js.map +1 -0
- package/dist/fencing.d.ts +21 -0
- package/dist/fencing.d.ts.map +1 -0
- package/dist/fencing.js +36 -0
- package/dist/fencing.js.map +1 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +126 -0
- package/dist/index.js.map +1 -0
- package/dist/installOptional.d.ts +52 -0
- package/dist/installOptional.d.ts.map +1 -0
- package/dist/installOptional.js +112 -0
- package/dist/installOptional.js.map +1 -0
- package/dist/keyUnavailable.d.ts +67 -0
- package/dist/keyUnavailable.d.ts.map +1 -0
- package/dist/keyUnavailable.js +87 -0
- package/dist/keyUnavailable.js.map +1 -0
- package/dist/leases.d.ts +177 -0
- package/dist/leases.d.ts.map +1 -0
- package/dist/leases.js +142 -0
- package/dist/leases.js.map +1 -0
- package/dist/payloadShredded.d.ts +30 -0
- package/dist/payloadShredded.d.ts.map +1 -0
- package/dist/payloadShredded.js +67 -0
- package/dist/payloadShredded.js.map +1 -0
- package/dist/scaleDecorators.bench.d.ts +2 -0
- package/dist/scaleDecorators.bench.d.ts.map +1 -0
- package/dist/scaleDecorators.bench.js +93 -0
- package/dist/scaleDecorators.bench.js.map +1 -0
- package/dist/sequenceRange.bench.d.ts +2 -0
- package/dist/sequenceRange.bench.d.ts.map +1 -0
- package/dist/sequenceRange.bench.js +46 -0
- package/dist/sequenceRange.bench.js.map +1 -0
- package/dist/sequenceRange.d.ts +10 -0
- package/dist/sequenceRange.d.ts.map +1 -0
- package/dist/sequenceRange.js +35 -0
- package/dist/sequenceRange.js.map +1 -0
- package/dist/timers.d.ts +87 -0
- package/dist/timers.d.ts.map +1 -0
- package/dist/timers.js +68 -0
- package/dist/timers.js.map +1 -0
- package/dist/types.d.ts +634 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +429 -0
- package/dist/types.js.map +1 -0
- package/dist/writeConflicts.d.ts +46 -0
- package/dist/writeConflicts.d.ts.map +1 -0
- package/dist/writeConflicts.js +63 -0
- package/dist/writeConflicts.js.map +1 -0
- package/memory.d.ts +4 -0
- package/memory.js +13 -0
- package/package.json +67 -3
- package/sequence.d.ts +1 -0
- package/sequence.js +5 -0
- package/src/BranchRegistry.ts +161 -0
- package/src/CoalescingEventStore.ts +214 -0
- package/src/InMemoryArchiveStore.ts +69 -0
- package/src/InMemoryAsyncEventStore.ts +425 -0
- package/src/InMemoryBranchRegistry.ts +178 -0
- package/src/ProfilingEventStore.ts +153 -0
- package/src/ShardPlan.ts +235 -0
- package/src/ShardedEventStore.ts +557 -0
- package/src/SubscriberRegistry.ts +115 -0
- package/src/TenantScopedArchiveStore.ts +114 -0
- package/src/TenantScopedEventStore.ts +266 -0
- package/src/archive.ts +248 -0
- package/src/archiveSpi.ts +308 -0
- package/src/creationMarker.ts +15 -0
- package/src/decoratorPlan.typecheck.ts +52 -0
- package/src/eventKindClass.ts +127 -0
- package/src/executionIdOrder.ts +38 -0
- package/src/fencing.ts +31 -0
- package/src/index.ts +151 -0
- package/src/installOptional.ts +136 -0
- package/src/keyUnavailable.ts +98 -0
- package/src/leases.ts +319 -0
- package/src/payloadShredded.ts +63 -0
- package/src/scaleDecorators.bench.ts +107 -0
- package/src/sequenceRange.bench.ts +51 -0
- package/src/sequenceRange.ts +35 -0
- package/src/timers.ts +150 -0
- package/src/types.ts +857 -0
- package/src/writeConflicts.ts +56 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archiveSpi.js","sourceRoot":"","sources":["../src/archiveSpi.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { EventEnvelope } from "@loomwork/core";
|
|
2
|
+
/**
|
|
3
|
+
* SPI 2.2.0 — the LEGACY (pre-ADR 0129) opaque creation marker `appendIfUnchanged` compares (see `TipObservation`):
|
|
4
|
+
* derived from an execution's sequence-0 envelope, so a log deleted and re-created under the same
|
|
5
|
+
* id reads as a different execution. Envelope ids are deterministic, hence the timestamp too.
|
|
6
|
+
* Every reference store derives it with this one function so they agree byte for byte.
|
|
7
|
+
*
|
|
8
|
+
* SPI 2.3.0 (ADR 0129): this is no longer the anchor of a log whose store assigned an
|
|
9
|
+
* incarnation (it cannot tell two byte-identical re-creations apart). It remains the anchor of a
|
|
10
|
+
* log created before the store gained that metadata, and of a store that cannot assign one.
|
|
11
|
+
*/
|
|
12
|
+
export declare function creationMarker(first: Pick<EventEnvelope, "id" | "timestamp">): string;
|
|
13
|
+
//# sourceMappingURL=creationMarker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"creationMarker.d.ts","sourceRoot":"","sources":["../src/creationMarker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,MAAM,CAErF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.creationMarker = creationMarker;
|
|
4
|
+
/**
|
|
5
|
+
* SPI 2.2.0 — the LEGACY (pre-ADR 0129) opaque creation marker `appendIfUnchanged` compares (see `TipObservation`):
|
|
6
|
+
* derived from an execution's sequence-0 envelope, so a log deleted and re-created under the same
|
|
7
|
+
* id reads as a different execution. Envelope ids are deterministic, hence the timestamp too.
|
|
8
|
+
* Every reference store derives it with this one function so they agree byte for byte.
|
|
9
|
+
*
|
|
10
|
+
* SPI 2.3.0 (ADR 0129): this is no longer the anchor of a log whose store assigned an
|
|
11
|
+
* incarnation (it cannot tell two byte-identical re-creations apart). It remains the anchor of a
|
|
12
|
+
* log created before the store gained that metadata, and of a store that cannot assign one.
|
|
13
|
+
*/
|
|
14
|
+
function creationMarker(first) {
|
|
15
|
+
return `${first.timestamp}:${first.id}`;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=creationMarker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"creationMarker.js","sourceRoot":"","sources":["../src/creationMarker.ts"],"names":[],"mappings":";;AAYA,wCAEC;AAZD;;;;;;;;;GASG;AACH,SAAgB,cAAc,CAAC,KAA8C;IAC3E,OAAO,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decoratorPlan.typecheck.d.ts","sourceRoot":"","sources":["../src/decoratorPlan.typecheck.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const complete = {
|
|
4
|
+
appendBatch: "forward",
|
|
5
|
+
readRange: "forward",
|
|
6
|
+
head: "forward",
|
|
7
|
+
acquireFence: "forward",
|
|
8
|
+
acquireFenceIf: "forward",
|
|
9
|
+
appendIfUnchanged: "forward",
|
|
10
|
+
storeNow: "forward",
|
|
11
|
+
sealingCapability: "forward",
|
|
12
|
+
readAtRest: "forward",
|
|
13
|
+
copyPrefix: "forward",
|
|
14
|
+
deleteExecution: "forward",
|
|
15
|
+
deleteThrough: "forward",
|
|
16
|
+
truncatePrefix: "forward",
|
|
17
|
+
truncatePrefixKeeping: "forward",
|
|
18
|
+
listExecutions: "forward",
|
|
19
|
+
listExecutionsPage: { refuse: "a refusal is a decision, and still a key" },
|
|
20
|
+
};
|
|
21
|
+
void complete;
|
|
22
|
+
// @ts-expect-error — listExecutionsPage is missing: a plan must decide every optional method.
|
|
23
|
+
const missingOne = {
|
|
24
|
+
appendBatch: "forward",
|
|
25
|
+
readRange: "forward",
|
|
26
|
+
head: "forward",
|
|
27
|
+
acquireFence: "forward",
|
|
28
|
+
acquireFenceIf: "forward",
|
|
29
|
+
appendIfUnchanged: "forward",
|
|
30
|
+
storeNow: "forward",
|
|
31
|
+
sealingCapability: "forward",
|
|
32
|
+
readAtRest: "forward",
|
|
33
|
+
copyPrefix: "forward",
|
|
34
|
+
deleteExecution: "forward",
|
|
35
|
+
deleteThrough: "forward",
|
|
36
|
+
truncatePrefix: "forward",
|
|
37
|
+
truncatePrefixKeeping: "forward",
|
|
38
|
+
listExecutions: "forward",
|
|
39
|
+
};
|
|
40
|
+
void missingOne;
|
|
41
|
+
//# sourceMappingURL=decoratorPlan.typecheck.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decoratorPlan.typecheck.js","sourceRoot":"","sources":["../src/decoratorPlan.typecheck.ts"],"names":[],"mappings":";;AAaA,MAAM,QAAQ,GAAG;IACf,WAAW,EAAE,SAAS;IACtB,SAAS,EAAE,SAAS;IACpB,IAAI,EAAE,SAAS;IACf,YAAY,EAAE,SAAS;IACvB,cAAc,EAAE,SAAS;IACzB,iBAAiB,EAAE,SAAS;IAC5B,QAAQ,EAAE,SAAS;IACnB,iBAAiB,EAAE,SAAS;IAC5B,UAAU,EAAE,SAAS;IACrB,UAAU,EAAE,SAAS;IACrB,eAAe,EAAE,SAAS;IAC1B,aAAa,EAAE,SAAS;IACxB,cAAc,EAAE,SAAS;IACzB,qBAAqB,EAAE,SAAS;IAChC,cAAc,EAAE,SAAS;IACzB,kBAAkB,EAAE,EAAE,MAAM,EAAE,0CAA0C,EAAE;CAC5D,CAAC;AACjB,KAAK,QAAQ,CAAC;AAEd,8FAA8F;AAC9F,MAAM,UAAU,GAAS;IACvB,WAAW,EAAE,SAAS;IACtB,SAAS,EAAE,SAAS;IACpB,IAAI,EAAE,SAAS;IACf,YAAY,EAAE,SAAS;IACvB,cAAc,EAAE,SAAS;IACzB,iBAAiB,EAAE,SAAS;IAC5B,QAAQ,EAAE,SAAS;IACnB,iBAAiB,EAAE,SAAS;IAC5B,UAAU,EAAE,SAAS;IACrB,UAAU,EAAE,SAAS;IACrB,eAAe,EAAE,SAAS;IAC1B,aAAa,EAAE,SAAS;IACxB,cAAc,EAAE,SAAS;IACzB,qBAAqB,EAAE,SAAS;IAChC,cAAc,EAAE,SAAS;CAC1B,CAAC;AACF,KAAK,UAAU,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type EventEnvelope, type EventKind } from "@loomwork/core";
|
|
2
|
+
/** Whether an event of this kind, appended after a park, answers it. */
|
|
3
|
+
export type EventKindClass = "answering" | "ignorable";
|
|
4
|
+
export declare const EVENT_KIND_CLASS: Readonly<Record<EventKind, EventKindClass>>;
|
|
5
|
+
/** The two envelope fields the classification reads. */
|
|
6
|
+
export interface ClassifiableEvent {
|
|
7
|
+
readonly eventType: string;
|
|
8
|
+
readonly metadata?: Readonly<Record<string, unknown>> | undefined;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Whether an appended event answers a park (what `acquireFenceIf` counts past `parkSeq`).
|
|
12
|
+
*
|
|
13
|
+
* - A kind in {@link KERNEL_EVENT_KINDS} is classified by its {@link EVENT_KIND_CLASS} entry.
|
|
14
|
+
* - A kind NOT in it is an APPLICATION event (`ctx.emit`, a `ctx.stream` delta, a parallel
|
|
15
|
+
* sibling's output) and is IGNORABLE: counting it would let a sibling that keeps emitting after
|
|
16
|
+
* the park make every `acquireFenceIf` stale, so the execution could never be resumed.
|
|
17
|
+
* - EXCEPT an unknown kind that carries `metadata.kernel === true`: a kernel kind written by a
|
|
18
|
+
* NEWER node in a mixed fleet. This node cannot classify it, so it is ANSWERING (fail-closed:
|
|
19
|
+
* the cost of a wrong "answering" is a `contended` retry, of a wrong "ignorable" a fenced-out
|
|
20
|
+
* live body). This is why every kernel kind added after 1.23.0 MUST be stamped
|
|
21
|
+
* `metadata.kernel: true` by its writer — an unstamped new kernel kind is indistinguishable
|
|
22
|
+
* from an app event and would classify as ignorable on an older node.
|
|
23
|
+
*
|
|
24
|
+
* Own-property membership (a `Set`), so `"__proto__"` / `"constructor"` are unknown kinds, not
|
|
25
|
+
* `Object.prototype` members; the stamp must be literally `true`.
|
|
26
|
+
*/
|
|
27
|
+
export declare function isAnsweringKind(event: ClassifiableEvent): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Does the log show NO runner? The ONE rule `shredSubject` (before it takes a fence) and the
|
|
30
|
+
* erasure coordinator (in the destroy window, for a compacted log with a sealed checkpoint) share.
|
|
31
|
+
* Judged from data that sealing never hides: the LAST answering event of `tail`
|
|
32
|
+
* (`isAnsweringKind`, ignoring audit rows and the shredder's own events). A terminal kind or a park
|
|
33
|
+
* is quiescent; a resume (a terminal followed by a re-open included) or a start with no park is
|
|
34
|
+
* live. With no answering event in `tail`, the checkpoint's `snapshotStatus` decides when it is
|
|
35
|
+
* readable; if it is not (a retry after the key was destroyed), the erase intent already in the
|
|
36
|
+
* log is the proof, because it was only written to a quiescent log. Quiescent is NOT "terminal
|
|
37
|
+
* chain head": a parked (`suspended`) owner is quiescent.
|
|
38
|
+
*/
|
|
39
|
+
export declare function isQuiescent(tail: readonly EventEnvelope[], snapshotStatus: string | undefined, hasIntent: boolean): boolean;
|
|
40
|
+
//# sourceMappingURL=eventKindClass.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventKindClass.d.ts","sourceRoot":"","sources":["../src/eventKindClass.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAAsB,MAAM,gBAAgB,CAAC;AAexF,wEAAwE;AACxE,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,WAAW,CAAC;AAEvD,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,CAwCxE,CAAC;AAEF,wDAAwD;AACxD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;CACnE;AAID;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAKjE;AAUD;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,SAAS,aAAa,EAAE,EAC9B,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,SAAS,EAAE,OAAO,GACjB,OAAO,CAWT"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EVENT_KIND_CLASS = void 0;
|
|
4
|
+
exports.isAnsweringKind = isAnsweringKind;
|
|
5
|
+
exports.isQuiescent = isQuiescent;
|
|
6
|
+
const core_1 = require("@loomwork/core");
|
|
7
|
+
exports.EVENT_KIND_CLASS = {
|
|
8
|
+
// ── answering: they move the execution out of the park (or supersede it) ──
|
|
9
|
+
EXECUTION_RESUMED: "answering", // any payload, incl. the `null` status-only re-open (ADR 0104)
|
|
10
|
+
EXECUTION_SUSPENDED: "answering", // a later park supersedes this one
|
|
11
|
+
EXECUTION_COMPLETED: "answering",
|
|
12
|
+
EXECUTION_FAILED: "answering",
|
|
13
|
+
EXECUTION_CANCELLED: "answering",
|
|
14
|
+
EXECUTION_CONTINUED: "answering", // ADR 0109: terminal, names the successor
|
|
15
|
+
// ── ignorable: audit / bookkeeping that never answers a park by itself ──
|
|
16
|
+
EXECUTION_STARTED: "ignorable", // sequence 0; precedes every park
|
|
17
|
+
EXECUTION_DENIED: "ignorable", // unfenced, appended after a park (`recordExecutionDenied`)
|
|
18
|
+
OUTCOME_RECORDED: "ignorable", // ADR 0116: terminal-only late attach, or a live emit
|
|
19
|
+
MESSAGE_CONSUMED: "ignorable", // ADR 0110: written by the running owner; the RESUMED answers
|
|
20
|
+
// ADR 0130 residuals D9 (EVENT_SCHEMA 1.25.0; written by quarantineInbox / releaseInbox / auto-release): both land under the park's
|
|
21
|
+
// conditional fence and leave the park unanswered, exactly like MESSAGE_CONSUMED.
|
|
22
|
+
INBOX_QUARANTINED: "ignorable", // the topic's head is held; the park is not answered
|
|
23
|
+
INBOX_RELEASED: "ignorable", // a held entry is released or dropped; the delivery's own facts answer
|
|
24
|
+
EXECUTION_MIGRATED: "ignorable",
|
|
25
|
+
STEP_STARTED: "ignorable",
|
|
26
|
+
STEP_COMPLETED: "ignorable",
|
|
27
|
+
STEP_FAILED: "ignorable", // ADR 0105: a sibling failing while parked
|
|
28
|
+
STEP_CANCELLED: "ignorable",
|
|
29
|
+
STEP_RETRYING: "ignorable",
|
|
30
|
+
PARALLEL_STARTED: "ignorable",
|
|
31
|
+
PARALLEL_COMPLETED: "ignorable", // ADR 0112: the scope outcome, written before a rethrow
|
|
32
|
+
DECISION_RECORDED: "ignorable",
|
|
33
|
+
EFFECT_DENIED: "ignorable",
|
|
34
|
+
EFFECT_INDOUBT: "ignorable",
|
|
35
|
+
EGRESS_DENIED: "ignorable",
|
|
36
|
+
SAFETY_BLOCKED: "ignorable",
|
|
37
|
+
QUOTA_EXCEEDED: "ignorable",
|
|
38
|
+
RESOURCE_METERED: "ignorable",
|
|
39
|
+
APPROVAL_GRANTED: "ignorable",
|
|
40
|
+
TIMER_FIRED: "ignorable",
|
|
41
|
+
PAYLOAD_SHREDDED: "ignorable",
|
|
42
|
+
ERASURE_PENDING: "ignorable",
|
|
43
|
+
EXECUTION_ARCHIVED: "ignorable",
|
|
44
|
+
EXECUTION_DELETED: "ignorable",
|
|
45
|
+
EVENTS_REHOMED: "ignorable",
|
|
46
|
+
};
|
|
47
|
+
const KERNEL_KIND_SET = new Set(core_1.KERNEL_EVENT_KINDS);
|
|
48
|
+
/**
|
|
49
|
+
* Whether an appended event answers a park (what `acquireFenceIf` counts past `parkSeq`).
|
|
50
|
+
*
|
|
51
|
+
* - A kind in {@link KERNEL_EVENT_KINDS} is classified by its {@link EVENT_KIND_CLASS} entry.
|
|
52
|
+
* - A kind NOT in it is an APPLICATION event (`ctx.emit`, a `ctx.stream` delta, a parallel
|
|
53
|
+
* sibling's output) and is IGNORABLE: counting it would let a sibling that keeps emitting after
|
|
54
|
+
* the park make every `acquireFenceIf` stale, so the execution could never be resumed.
|
|
55
|
+
* - EXCEPT an unknown kind that carries `metadata.kernel === true`: a kernel kind written by a
|
|
56
|
+
* NEWER node in a mixed fleet. This node cannot classify it, so it is ANSWERING (fail-closed:
|
|
57
|
+
* the cost of a wrong "answering" is a `contended` retry, of a wrong "ignorable" a fenced-out
|
|
58
|
+
* live body). This is why every kernel kind added after 1.23.0 MUST be stamped
|
|
59
|
+
* `metadata.kernel: true` by its writer — an unstamped new kernel kind is indistinguishable
|
|
60
|
+
* from an app event and would classify as ignorable on an older node.
|
|
61
|
+
*
|
|
62
|
+
* Own-property membership (a `Set`), so `"__proto__"` / `"constructor"` are unknown kinds, not
|
|
63
|
+
* `Object.prototype` members; the stamp must be literally `true`.
|
|
64
|
+
*/
|
|
65
|
+
function isAnsweringKind(event) {
|
|
66
|
+
if (KERNEL_KIND_SET.has(event.eventType)) {
|
|
67
|
+
return exports.EVENT_KIND_CLASS[event.eventType] === "answering";
|
|
68
|
+
}
|
|
69
|
+
return event.metadata?.kernel === true;
|
|
70
|
+
}
|
|
71
|
+
const QUIESCENT_TERMINAL_EVENTS = new Set([
|
|
72
|
+
"EXECUTION_COMPLETED",
|
|
73
|
+
"EXECUTION_FAILED",
|
|
74
|
+
"EXECUTION_CANCELLED",
|
|
75
|
+
"EXECUTION_CONTINUED",
|
|
76
|
+
]);
|
|
77
|
+
const QUIESCENT_TERMINAL_STATUS = new Set(["completed", "failed", "cancelled", "continued"]);
|
|
78
|
+
/**
|
|
79
|
+
* Does the log show NO runner? The ONE rule `shredSubject` (before it takes a fence) and the
|
|
80
|
+
* erasure coordinator (in the destroy window, for a compacted log with a sealed checkpoint) share.
|
|
81
|
+
* Judged from data that sealing never hides: the LAST answering event of `tail`
|
|
82
|
+
* (`isAnsweringKind`, ignoring audit rows and the shredder's own events). A terminal kind or a park
|
|
83
|
+
* is quiescent; a resume (a terminal followed by a re-open included) or a start with no park is
|
|
84
|
+
* live. With no answering event in `tail`, the checkpoint's `snapshotStatus` decides when it is
|
|
85
|
+
* readable; if it is not (a retry after the key was destroyed), the erase intent already in the
|
|
86
|
+
* log is the proof, because it was only written to a quiescent log. Quiescent is NOT "terminal
|
|
87
|
+
* chain head": a parked (`suspended`) owner is quiescent.
|
|
88
|
+
*/
|
|
89
|
+
function isQuiescent(tail, snapshotStatus, hasIntent) {
|
|
90
|
+
const last = [...tail].reverse().find((e) => isAnsweringKind(e));
|
|
91
|
+
if (last !== undefined) {
|
|
92
|
+
return (QUIESCENT_TERMINAL_EVENTS.has(last.eventType) || last.eventType === "EXECUTION_SUSPENDED");
|
|
93
|
+
}
|
|
94
|
+
if (snapshotStatus !== undefined) {
|
|
95
|
+
return QUIESCENT_TERMINAL_STATUS.has(snapshotStatus) || snapshotStatus === "suspended";
|
|
96
|
+
}
|
|
97
|
+
return hasIntent;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=eventKindClass.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventKindClass.js","sourceRoot":"","sources":["../src/eventKindClass.ts"],"names":[],"mappings":";;;AAqFA,0CAKC;AAqBD,kCAeC;AA9HD,yCAAwF;AAkB3E,QAAA,gBAAgB,GAAgD;IAC3E,6EAA6E;IAC7E,iBAAiB,EAAE,WAAW,EAAE,+DAA+D;IAC/F,mBAAmB,EAAE,WAAW,EAAE,mCAAmC;IACrE,mBAAmB,EAAE,WAAW;IAChC,gBAAgB,EAAE,WAAW;IAC7B,mBAAmB,EAAE,WAAW;IAChC,mBAAmB,EAAE,WAAW,EAAE,0CAA0C;IAE5E,2EAA2E;IAC3E,iBAAiB,EAAE,WAAW,EAAE,kCAAkC;IAClE,gBAAgB,EAAE,WAAW,EAAE,4DAA4D;IAC3F,gBAAgB,EAAE,WAAW,EAAE,sDAAsD;IACrF,gBAAgB,EAAE,WAAW,EAAE,8DAA8D;IAC7F,oIAAoI;IACpI,kFAAkF;IAClF,iBAAiB,EAAE,WAAW,EAAE,qDAAqD;IACrF,cAAc,EAAE,WAAW,EAAE,uEAAuE;IACpG,kBAAkB,EAAE,WAAW;IAC/B,YAAY,EAAE,WAAW;IACzB,cAAc,EAAE,WAAW;IAC3B,WAAW,EAAE,WAAW,EAAE,2CAA2C;IACrE,cAAc,EAAE,WAAW;IAC3B,aAAa,EAAE,WAAW;IAC1B,gBAAgB,EAAE,WAAW;IAC7B,kBAAkB,EAAE,WAAW,EAAE,wDAAwD;IACzF,iBAAiB,EAAE,WAAW;IAC9B,aAAa,EAAE,WAAW;IAC1B,cAAc,EAAE,WAAW;IAC3B,aAAa,EAAE,WAAW;IAC1B,cAAc,EAAE,WAAW;IAC3B,cAAc,EAAE,WAAW;IAC3B,gBAAgB,EAAE,WAAW;IAC7B,gBAAgB,EAAE,WAAW;IAC7B,WAAW,EAAE,WAAW;IACxB,gBAAgB,EAAE,WAAW;IAC7B,eAAe,EAAE,WAAW;IAC5B,kBAAkB,EAAE,WAAW;IAC/B,iBAAiB,EAAE,WAAW;IAC9B,cAAc,EAAE,WAAW;CAC5B,CAAC;AAQF,MAAM,eAAe,GAAwB,IAAI,GAAG,CAAC,yBAAkB,CAAC,CAAC;AAEzE;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,eAAe,CAAC,KAAwB;IACtD,IAAI,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QACzC,OAAO,wBAAgB,CAAC,KAAK,CAAC,SAAsB,CAAC,KAAK,WAAW,CAAC;IACxE,CAAC;IACD,OAAO,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;AACzC,CAAC;AAED,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC;IACxC,qBAAqB;IACrB,kBAAkB;IAClB,qBAAqB;IACrB,qBAAqB;CACtB,CAAC,CAAC;AACH,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;AAE7F;;;;;;;;;;GAUG;AACH,SAAgB,WAAW,CACzB,IAA8B,EAC9B,cAAkC,EAClC,SAAkB;IAElB,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,CACL,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,SAAS,KAAK,qBAAqB,CAC1F,CAAC;IACJ,CAAC;IACD,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,yBAAyB,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,cAAc,KAAK,WAAW,CAAC;IACzF,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The ONE order of executionIds that `listExecutionsPage` promises (EventStore SPI 2.0.0, ADR 0108):
|
|
3
|
+
* Unicode code point order — the same as UTF-8 byte order, SQL `COLLATE "C"` and SQLite's
|
|
4
|
+
* BINARY collation, so a SQL backend can serve it from a plain b-tree.
|
|
5
|
+
*
|
|
6
|
+
* Not JavaScript's default string order: `<` and `Array.prototype.sort()` compare UTF-16
|
|
7
|
+
* code UNITS, which agree with code points everywhere except that an astral character (a
|
|
8
|
+
* surrogate pair, 0xD800–0xDFFF) sorts BELOW U+E000–U+FFFF by code unit and ABOVE them by
|
|
9
|
+
* code point. `ShardedEventStore` merges shard pages with this comparator and resumes every
|
|
10
|
+
* shard from the merged page's last id, so it and every store must agree exactly — a store
|
|
11
|
+
* paging in any other order (a Postgres database collation, say) silently skips ids.
|
|
12
|
+
*
|
|
13
|
+
* The parity with UTF-8 byte order holds for WELL-FORMED ids only. A lone surrogate has no
|
|
14
|
+
* UTF-8 encoding: node-postgres sends it as U+FFFD, so a Postgres store neither keeps nor
|
|
15
|
+
* orders such an id the way this function does. Execution ids should be well-formed Unicode
|
|
16
|
+
* (every id generator loom ships produces ASCII).
|
|
17
|
+
*
|
|
18
|
+
* O(length of the common prefix), no allocation.
|
|
19
|
+
*/
|
|
20
|
+
export declare function compareExecutionIds(a: string, b: string): number;
|
|
21
|
+
//# sourceMappingURL=executionIdOrder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executionIdOrder.d.ts","sourceRoot":"","sources":["../src/executionIdOrder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAchE"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.compareExecutionIds = compareExecutionIds;
|
|
4
|
+
/**
|
|
5
|
+
* The ONE order of executionIds that `listExecutionsPage` promises (EventStore SPI 2.0.0, ADR 0108):
|
|
6
|
+
* Unicode code point order — the same as UTF-8 byte order, SQL `COLLATE "C"` and SQLite's
|
|
7
|
+
* BINARY collation, so a SQL backend can serve it from a plain b-tree.
|
|
8
|
+
*
|
|
9
|
+
* Not JavaScript's default string order: `<` and `Array.prototype.sort()` compare UTF-16
|
|
10
|
+
* code UNITS, which agree with code points everywhere except that an astral character (a
|
|
11
|
+
* surrogate pair, 0xD800–0xDFFF) sorts BELOW U+E000–U+FFFF by code unit and ABOVE them by
|
|
12
|
+
* code point. `ShardedEventStore` merges shard pages with this comparator and resumes every
|
|
13
|
+
* shard from the merged page's last id, so it and every store must agree exactly — a store
|
|
14
|
+
* paging in any other order (a Postgres database collation, say) silently skips ids.
|
|
15
|
+
*
|
|
16
|
+
* The parity with UTF-8 byte order holds for WELL-FORMED ids only. A lone surrogate has no
|
|
17
|
+
* UTF-8 encoding: node-postgres sends it as U+FFFD, so a Postgres store neither keeps nor
|
|
18
|
+
* orders such an id the way this function does. Execution ids should be well-formed Unicode
|
|
19
|
+
* (every id generator loom ships produces ASCII).
|
|
20
|
+
*
|
|
21
|
+
* O(length of the common prefix), no allocation.
|
|
22
|
+
*/
|
|
23
|
+
function compareExecutionIds(a, b) {
|
|
24
|
+
const n = Math.min(a.length, b.length);
|
|
25
|
+
for (let i = 0; i < n; i++) {
|
|
26
|
+
const x = a.charCodeAt(i);
|
|
27
|
+
const y = b.charCodeAt(i);
|
|
28
|
+
if (x === y)
|
|
29
|
+
continue;
|
|
30
|
+
// Below 0xD800 code-unit order is code-point order. When both units are at or above it,
|
|
31
|
+
// lift the surrogates above U+E000–U+FFFF (and lower those to make room), which is
|
|
32
|
+
// exactly where their code points sit. (A lone surrogate gets a consistent position here,
|
|
33
|
+
// but no store is obliged to agree: it cannot round-trip through UTF-8.)
|
|
34
|
+
if (x >= 0xd800 && y >= 0xd800)
|
|
35
|
+
return surrogateLast(x) - surrogateLast(y);
|
|
36
|
+
return x - y;
|
|
37
|
+
}
|
|
38
|
+
return a.length - b.length;
|
|
39
|
+
}
|
|
40
|
+
function surrogateLast(unit) {
|
|
41
|
+
return unit >= 0xe000 ? unit - 0x800 : unit + 0x2000;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=executionIdOrder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executionIdOrder.js","sourceRoot":"","sources":["../src/executionIdOrder.ts"],"names":[],"mappings":";;AAmBA,kDAcC;AAjCD;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,mBAAmB,CAAC,CAAS,EAAE,CAAS;IACtD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC;YAAE,SAAS;QACtB,wFAAwF;QACxF,mFAAmF;QACnF,0FAA0F;QAC1F,yEAAyE;QACzE,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM;YAAE,OAAO,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IACD,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;AAC7B,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { EventEnvelope } from "@loomwork/core";
|
|
2
|
+
/**
|
|
3
|
+
* K9.4 — a fenced store rejected an append carrying a stale (or missing)
|
|
4
|
+
* fencing token: the execution was re-dispatched under a newer token, so the
|
|
5
|
+
* writer is a "zombie" — a network-partitioned or presumed-dead worker whose
|
|
6
|
+
* writes must not land after its execution moved elsewhere. Extends the D3
|
|
7
|
+
* single-writer invariant to the failure domain.
|
|
8
|
+
*/
|
|
9
|
+
export declare class StaleFenceError extends Error {
|
|
10
|
+
readonly executionId: string;
|
|
11
|
+
readonly staleFence: number | undefined;
|
|
12
|
+
readonly currentFence: number;
|
|
13
|
+
/** The error this was re-raised from, when a decorator rewrote it (e.g. tenant unscoping). */
|
|
14
|
+
readonly cause?: unknown | undefined;
|
|
15
|
+
constructor(executionId: string, staleFence: number | undefined, currentFence: number,
|
|
16
|
+
/** The error this was re-raised from, when a decorator rewrote it (e.g. tenant unscoping). */
|
|
17
|
+
cause?: unknown | undefined);
|
|
18
|
+
}
|
|
19
|
+
/** The fencing token an envelope carries (in `metadata.fence`), if any. */
|
|
20
|
+
export declare function fenceOf(envelope: EventEnvelope): number | undefined;
|
|
21
|
+
//# sourceMappingURL=fencing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fencing.d.ts","sourceRoot":"","sources":["../src/fencing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD;;;;;;GAMG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IAEtC,QAAQ,CAAC,WAAW,EAAE,MAAM;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS;IACvC,QAAQ,CAAC,YAAY,EAAE,MAAM;IAC7B,8FAA8F;IAC9F,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO;gBAJf,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,YAAY,EAAE,MAAM;IAC7B,8FAA8F;IACrF,KAAK,CAAC,EAAE,OAAO,YAAA;CAS3B;AAED,2EAA2E;AAC3E,wBAAgB,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,CAGnE"}
|
package/dist/fencing.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StaleFenceError = void 0;
|
|
4
|
+
exports.fenceOf = fenceOf;
|
|
5
|
+
/**
|
|
6
|
+
* K9.4 — a fenced store rejected an append carrying a stale (or missing)
|
|
7
|
+
* fencing token: the execution was re-dispatched under a newer token, so the
|
|
8
|
+
* writer is a "zombie" — a network-partitioned or presumed-dead worker whose
|
|
9
|
+
* writes must not land after its execution moved elsewhere. Extends the D3
|
|
10
|
+
* single-writer invariant to the failure domain.
|
|
11
|
+
*/
|
|
12
|
+
class StaleFenceError extends Error {
|
|
13
|
+
executionId;
|
|
14
|
+
staleFence;
|
|
15
|
+
currentFence;
|
|
16
|
+
cause;
|
|
17
|
+
constructor(executionId, staleFence, currentFence,
|
|
18
|
+
/** The error this was re-raised from, when a decorator rewrote it (e.g. tenant unscoping). */
|
|
19
|
+
cause) {
|
|
20
|
+
super(`stale fence for execution "${executionId}": append carried ` +
|
|
21
|
+
`${staleFence === undefined ? "no token" : `token ${staleFence}`}, current fence is ${currentFence}`);
|
|
22
|
+
this.executionId = executionId;
|
|
23
|
+
this.staleFence = staleFence;
|
|
24
|
+
this.currentFence = currentFence;
|
|
25
|
+
this.cause = cause;
|
|
26
|
+
this.name = "StaleFenceError";
|
|
27
|
+
Object.setPrototypeOf(this, StaleFenceError.prototype);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.StaleFenceError = StaleFenceError;
|
|
31
|
+
/** The fencing token an envelope carries (in `metadata.fence`), if any. */
|
|
32
|
+
function fenceOf(envelope) {
|
|
33
|
+
const fence = envelope.metadata?.fence;
|
|
34
|
+
return typeof fence === "number" ? fence : undefined;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=fencing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fencing.js","sourceRoot":"","sources":["../src/fencing.ts"],"names":[],"mappings":";;;AA2BA,0BAGC;AA5BD;;;;;;GAMG;AACH,MAAa,eAAgB,SAAQ,KAAK;IAE7B;IACA;IACA;IAEA;IALX,YACW,WAAmB,EACnB,UAA8B,EAC9B,YAAoB;IAC7B,8FAA8F;IACrF,KAAe;QAExB,KAAK,CACH,8BAA8B,WAAW,oBAAoB;YAC3D,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,UAAU,EAAE,sBAAsB,YAAY,EAAE,CACvG,CAAC;QATO,gBAAW,GAAX,WAAW,CAAQ;QACnB,eAAU,GAAV,UAAU,CAAoB;QAC9B,iBAAY,GAAZ,YAAY,CAAQ;QAEpB,UAAK,GAAL,KAAK,CAAU;QAMxB,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IACzD,CAAC;CACF;AAfD,0CAeC;AAED,2EAA2E;AAC3E,SAAgB,OAAO,CAAC,QAAuB;IAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC;IACvC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export { TenantScopedEventStore } from "./TenantScopedEventStore";
|
|
2
|
+
export { CoalescingEventStore } from "./CoalescingEventStore";
|
|
3
|
+
export type { InboxStreams } from "./types";
|
|
4
|
+
export type { CoalescingEventStoreOptions } from "./CoalescingEventStore";
|
|
5
|
+
export type { DestructionProof } from "./keyUnavailable";
|
|
6
|
+
export { KEY_UNAVAILABLE_CODE, KeyUnavailableError, erasureWindowView, isErasureWindow, isKeyUnavailable, recordsErasureIntent, } from "./keyUnavailable";
|
|
7
|
+
export { PAYLOAD_SHREDDED_BRAND, brandPayloadShredded, isPayloadShredded, } from "./payloadShredded";
|
|
8
|
+
export { ShardSealingMismatchError, ShardedEventStore } from "./ShardedEventStore";
|
|
9
|
+
export type { MigrationResult, ShardedEventStoreOptions } from "./ShardedEventStore";
|
|
10
|
+
export { ShardPlan, DEFAULT_BUCKETS } from "./ShardPlan";
|
|
11
|
+
export type { ShardPlacement, ShardPlanJSON } from "./ShardPlan";
|
|
12
|
+
export { SubscriberRegistry, bucketOf } from "./SubscriberRegistry";
|
|
13
|
+
export { ProfilingEventStore } from "./ProfilingEventStore";
|
|
14
|
+
export type { WriteProfile } from "./ProfilingEventStore";
|
|
15
|
+
export { InMemoryAsyncEventStore } from "./InMemoryAsyncEventStore";
|
|
16
|
+
export { compareExecutionIds } from "./executionIdOrder";
|
|
17
|
+
export type { InMemoryAsyncEventStoreOptions } from "./InMemoryAsyncEventStore";
|
|
18
|
+
export type { AcquireFenceIfResult, AppendIfUnchangedResult, TipObservation, EventStore, EventStoreOptions, ExecutionEnumerable, ExecutionPage, OptionalEventStoreMethod, SealMarker, SealingCapability, AtRestEventReader, } from "./types";
|
|
19
|
+
export { decoratedInnerOf, forwardStoreMarkers, installOptional, refusalsOf, } from "./installOptional";
|
|
20
|
+
export type { DecoratorPlan } from "./installOptional";
|
|
21
|
+
export { OPTIONAL_EVENT_STORE_METHODS, headOf, readRangeOf, appendBatchOf, INBOX_STREAM_PREFIX, INBOX_TOPIC_SEQ_BASE, INBOX_REGISTRY_SUFFIX, INBOX_LAYOUT_STREAM, QUARANTINE_STREAM_PREFIX, quarantineStreamId, chainIdOfFirst, hasInboxStreamShape, inboxChainOf, RESERVED_LATE_PREFIX, archiveChainOf, reservedLateKey, reservedLateOrigin, inboxRegistryStreamId, inboxStreamsOfChain, inboxStreamsOfChainDeep, inboxTopicHash, inboxTopicStreamId, isReservedStream, iterateExecutionIds, RESERVED_STREAM_PREFIX, EVENT_STORE_SPI_VERSION, } from "./types";
|
|
22
|
+
export { StaleFenceError, fenceOf } from "./fencing";
|
|
23
|
+
export { creationMarker } from "./creationMarker";
|
|
24
|
+
export { EVENT_KIND_CLASS, isAnsweringKind, isQuiescent, type EventKindClass, } from "./eventKindClass";
|
|
25
|
+
export { InMemoryLeaseStore, LEASE_STORE_SPI_VERSION, assertNoBatchSteal, assertSteal, assertTtl, type AcquireOptions, type InMemoryLeaseStoreOptions, type Lease, type LeaseStore, type StealProof, } from "./leases";
|
|
26
|
+
export { DuplicateEnvelopeIdError, DuplicateSequenceError } from "./writeConflicts";
|
|
27
|
+
export { lowerBoundBySequence, sliceBySequence } from "./sequenceRange";
|
|
28
|
+
export { InMemoryBranchRegistry } from "./InMemoryBranchRegistry";
|
|
29
|
+
export type { InMemoryBranchRegistryOptions } from "./InMemoryBranchRegistry";
|
|
30
|
+
export { InMemoryTimerStore } from "./timers";
|
|
31
|
+
export type { TimerRecord, TimerStore } from "./timers";
|
|
32
|
+
export type { BranchRef, BranchRegistry, LineageRecord, ListRefsOptions, PromoteOptions, } from "./BranchRegistry";
|
|
33
|
+
export { BRANCH_REGISTRY_SPI_VERSION, BranchPromotionConflictError, assertListRefsLimit, } from "./BranchRegistry";
|
|
34
|
+
export { ARCHIVE_STORE_SPI_VERSION, ArchiveConflictError, ArchiveDigestError, ArchiveIncarnationError, ArchiveUnserializableError, ARCHIVE_LEGACY_CHECKPOINT_EVENT, OPTIONAL_ARCHIVE_STORE_METHODS, assertReplaceable, classifyAppend, headerOf, } from "./archiveSpi";
|
|
35
|
+
export type { ArchiveExecutionPage, ArchiveSegment, ArchiveSegmentHeader, ArchiveSegmentKind, ArchiveStore, } from "./archiveSpi";
|
|
36
|
+
export { SENDER_ERASED, archivedReservedStreams, assertReservedSegmentDigest, assertSegmentDigest, buildReservedSegment, buildSegment, isSenderErased, maskSender, pageIds, reservedSegmentDigest, sameReservedEnvelope, segmentDigest, senderDigestOf, senderErasedMarker, } from "./archive";
|
|
37
|
+
export { TenantScopedArchiveStore } from "./TenantScopedArchiveStore";
|
|
38
|
+
export { InMemoryArchiveStore } from "./InMemoryArchiveStore";
|
|
39
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EVENT_STORE_SPI_VERSION = exports.RESERVED_STREAM_PREFIX = exports.iterateExecutionIds = exports.isReservedStream = exports.inboxTopicStreamId = exports.inboxTopicHash = exports.inboxStreamsOfChainDeep = exports.inboxStreamsOfChain = exports.inboxRegistryStreamId = exports.reservedLateOrigin = exports.reservedLateKey = exports.archiveChainOf = exports.RESERVED_LATE_PREFIX = exports.inboxChainOf = exports.hasInboxStreamShape = exports.chainIdOfFirst = exports.quarantineStreamId = exports.QUARANTINE_STREAM_PREFIX = exports.INBOX_LAYOUT_STREAM = exports.INBOX_REGISTRY_SUFFIX = exports.INBOX_TOPIC_SEQ_BASE = exports.INBOX_STREAM_PREFIX = exports.appendBatchOf = exports.readRangeOf = exports.headOf = exports.OPTIONAL_EVENT_STORE_METHODS = exports.refusalsOf = exports.installOptional = exports.forwardStoreMarkers = exports.decoratedInnerOf = exports.compareExecutionIds = exports.InMemoryAsyncEventStore = exports.ProfilingEventStore = exports.bucketOf = exports.SubscriberRegistry = exports.DEFAULT_BUCKETS = exports.ShardPlan = exports.ShardedEventStore = exports.ShardSealingMismatchError = exports.isPayloadShredded = exports.brandPayloadShredded = exports.PAYLOAD_SHREDDED_BRAND = exports.recordsErasureIntent = exports.isKeyUnavailable = exports.isErasureWindow = exports.erasureWindowView = exports.KeyUnavailableError = exports.KEY_UNAVAILABLE_CODE = exports.CoalescingEventStore = exports.TenantScopedEventStore = void 0;
|
|
4
|
+
exports.InMemoryArchiveStore = exports.TenantScopedArchiveStore = exports.senderErasedMarker = exports.senderDigestOf = exports.segmentDigest = exports.sameReservedEnvelope = exports.reservedSegmentDigest = exports.pageIds = exports.maskSender = exports.isSenderErased = exports.buildSegment = exports.buildReservedSegment = exports.assertSegmentDigest = exports.assertReservedSegmentDigest = exports.archivedReservedStreams = exports.SENDER_ERASED = exports.headerOf = exports.classifyAppend = exports.assertReplaceable = exports.OPTIONAL_ARCHIVE_STORE_METHODS = exports.ARCHIVE_LEGACY_CHECKPOINT_EVENT = exports.ArchiveUnserializableError = exports.ArchiveIncarnationError = exports.ArchiveDigestError = exports.ArchiveConflictError = exports.ARCHIVE_STORE_SPI_VERSION = exports.assertListRefsLimit = exports.BranchPromotionConflictError = exports.BRANCH_REGISTRY_SPI_VERSION = exports.InMemoryTimerStore = exports.InMemoryBranchRegistry = exports.sliceBySequence = exports.lowerBoundBySequence = exports.DuplicateSequenceError = exports.DuplicateEnvelopeIdError = exports.assertTtl = exports.assertSteal = exports.assertNoBatchSteal = exports.LEASE_STORE_SPI_VERSION = exports.InMemoryLeaseStore = exports.isQuiescent = exports.isAnsweringKind = exports.EVENT_KIND_CLASS = exports.creationMarker = exports.fenceOf = exports.StaleFenceError = void 0;
|
|
5
|
+
var TenantScopedEventStore_1 = require("./TenantScopedEventStore");
|
|
6
|
+
Object.defineProperty(exports, "TenantScopedEventStore", { enumerable: true, get: function () { return TenantScopedEventStore_1.TenantScopedEventStore; } });
|
|
7
|
+
var CoalescingEventStore_1 = require("./CoalescingEventStore");
|
|
8
|
+
Object.defineProperty(exports, "CoalescingEventStore", { enumerable: true, get: function () { return CoalescingEventStore_1.CoalescingEventStore; } });
|
|
9
|
+
var keyUnavailable_1 = require("./keyUnavailable");
|
|
10
|
+
Object.defineProperty(exports, "KEY_UNAVAILABLE_CODE", { enumerable: true, get: function () { return keyUnavailable_1.KEY_UNAVAILABLE_CODE; } });
|
|
11
|
+
Object.defineProperty(exports, "KeyUnavailableError", { enumerable: true, get: function () { return keyUnavailable_1.KeyUnavailableError; } });
|
|
12
|
+
Object.defineProperty(exports, "erasureWindowView", { enumerable: true, get: function () { return keyUnavailable_1.erasureWindowView; } });
|
|
13
|
+
Object.defineProperty(exports, "isErasureWindow", { enumerable: true, get: function () { return keyUnavailable_1.isErasureWindow; } });
|
|
14
|
+
Object.defineProperty(exports, "isKeyUnavailable", { enumerable: true, get: function () { return keyUnavailable_1.isKeyUnavailable; } });
|
|
15
|
+
Object.defineProperty(exports, "recordsErasureIntent", { enumerable: true, get: function () { return keyUnavailable_1.recordsErasureIntent; } });
|
|
16
|
+
var payloadShredded_1 = require("./payloadShredded");
|
|
17
|
+
Object.defineProperty(exports, "PAYLOAD_SHREDDED_BRAND", { enumerable: true, get: function () { return payloadShredded_1.PAYLOAD_SHREDDED_BRAND; } });
|
|
18
|
+
Object.defineProperty(exports, "brandPayloadShredded", { enumerable: true, get: function () { return payloadShredded_1.brandPayloadShredded; } });
|
|
19
|
+
Object.defineProperty(exports, "isPayloadShredded", { enumerable: true, get: function () { return payloadShredded_1.isPayloadShredded; } });
|
|
20
|
+
var ShardedEventStore_1 = require("./ShardedEventStore");
|
|
21
|
+
Object.defineProperty(exports, "ShardSealingMismatchError", { enumerable: true, get: function () { return ShardedEventStore_1.ShardSealingMismatchError; } });
|
|
22
|
+
Object.defineProperty(exports, "ShardedEventStore", { enumerable: true, get: function () { return ShardedEventStore_1.ShardedEventStore; } });
|
|
23
|
+
var ShardPlan_1 = require("./ShardPlan");
|
|
24
|
+
Object.defineProperty(exports, "ShardPlan", { enumerable: true, get: function () { return ShardPlan_1.ShardPlan; } });
|
|
25
|
+
Object.defineProperty(exports, "DEFAULT_BUCKETS", { enumerable: true, get: function () { return ShardPlan_1.DEFAULT_BUCKETS; } });
|
|
26
|
+
var SubscriberRegistry_1 = require("./SubscriberRegistry");
|
|
27
|
+
Object.defineProperty(exports, "SubscriberRegistry", { enumerable: true, get: function () { return SubscriberRegistry_1.SubscriberRegistry; } });
|
|
28
|
+
Object.defineProperty(exports, "bucketOf", { enumerable: true, get: function () { return SubscriberRegistry_1.bucketOf; } });
|
|
29
|
+
var ProfilingEventStore_1 = require("./ProfilingEventStore");
|
|
30
|
+
Object.defineProperty(exports, "ProfilingEventStore", { enumerable: true, get: function () { return ProfilingEventStore_1.ProfilingEventStore; } });
|
|
31
|
+
var InMemoryAsyncEventStore_1 = require("./InMemoryAsyncEventStore");
|
|
32
|
+
Object.defineProperty(exports, "InMemoryAsyncEventStore", { enumerable: true, get: function () { return InMemoryAsyncEventStore_1.InMemoryAsyncEventStore; } });
|
|
33
|
+
var executionIdOrder_1 = require("./executionIdOrder");
|
|
34
|
+
Object.defineProperty(exports, "compareExecutionIds", { enumerable: true, get: function () { return executionIdOrder_1.compareExecutionIds; } });
|
|
35
|
+
var installOptional_1 = require("./installOptional");
|
|
36
|
+
Object.defineProperty(exports, "decoratedInnerOf", { enumerable: true, get: function () { return installOptional_1.decoratedInnerOf; } });
|
|
37
|
+
Object.defineProperty(exports, "forwardStoreMarkers", { enumerable: true, get: function () { return installOptional_1.forwardStoreMarkers; } });
|
|
38
|
+
Object.defineProperty(exports, "installOptional", { enumerable: true, get: function () { return installOptional_1.installOptional; } });
|
|
39
|
+
Object.defineProperty(exports, "refusalsOf", { enumerable: true, get: function () { return installOptional_1.refusalsOf; } });
|
|
40
|
+
var types_1 = require("./types");
|
|
41
|
+
Object.defineProperty(exports, "OPTIONAL_EVENT_STORE_METHODS", { enumerable: true, get: function () { return types_1.OPTIONAL_EVENT_STORE_METHODS; } });
|
|
42
|
+
Object.defineProperty(exports, "headOf", { enumerable: true, get: function () { return types_1.headOf; } });
|
|
43
|
+
Object.defineProperty(exports, "readRangeOf", { enumerable: true, get: function () { return types_1.readRangeOf; } });
|
|
44
|
+
Object.defineProperty(exports, "appendBatchOf", { enumerable: true, get: function () { return types_1.appendBatchOf; } });
|
|
45
|
+
Object.defineProperty(exports, "INBOX_STREAM_PREFIX", { enumerable: true, get: function () { return types_1.INBOX_STREAM_PREFIX; } });
|
|
46
|
+
Object.defineProperty(exports, "INBOX_TOPIC_SEQ_BASE", { enumerable: true, get: function () { return types_1.INBOX_TOPIC_SEQ_BASE; } });
|
|
47
|
+
Object.defineProperty(exports, "INBOX_REGISTRY_SUFFIX", { enumerable: true, get: function () { return types_1.INBOX_REGISTRY_SUFFIX; } });
|
|
48
|
+
Object.defineProperty(exports, "INBOX_LAYOUT_STREAM", { enumerable: true, get: function () { return types_1.INBOX_LAYOUT_STREAM; } });
|
|
49
|
+
Object.defineProperty(exports, "QUARANTINE_STREAM_PREFIX", { enumerable: true, get: function () { return types_1.QUARANTINE_STREAM_PREFIX; } });
|
|
50
|
+
Object.defineProperty(exports, "quarantineStreamId", { enumerable: true, get: function () { return types_1.quarantineStreamId; } });
|
|
51
|
+
Object.defineProperty(exports, "chainIdOfFirst", { enumerable: true, get: function () { return types_1.chainIdOfFirst; } });
|
|
52
|
+
Object.defineProperty(exports, "hasInboxStreamShape", { enumerable: true, get: function () { return types_1.hasInboxStreamShape; } });
|
|
53
|
+
Object.defineProperty(exports, "inboxChainOf", { enumerable: true, get: function () { return types_1.inboxChainOf; } });
|
|
54
|
+
Object.defineProperty(exports, "RESERVED_LATE_PREFIX", { enumerable: true, get: function () { return types_1.RESERVED_LATE_PREFIX; } });
|
|
55
|
+
Object.defineProperty(exports, "archiveChainOf", { enumerable: true, get: function () { return types_1.archiveChainOf; } });
|
|
56
|
+
Object.defineProperty(exports, "reservedLateKey", { enumerable: true, get: function () { return types_1.reservedLateKey; } });
|
|
57
|
+
Object.defineProperty(exports, "reservedLateOrigin", { enumerable: true, get: function () { return types_1.reservedLateOrigin; } });
|
|
58
|
+
Object.defineProperty(exports, "inboxRegistryStreamId", { enumerable: true, get: function () { return types_1.inboxRegistryStreamId; } });
|
|
59
|
+
Object.defineProperty(exports, "inboxStreamsOfChain", { enumerable: true, get: function () { return types_1.inboxStreamsOfChain; } });
|
|
60
|
+
Object.defineProperty(exports, "inboxStreamsOfChainDeep", { enumerable: true, get: function () { return types_1.inboxStreamsOfChainDeep; } });
|
|
61
|
+
Object.defineProperty(exports, "inboxTopicHash", { enumerable: true, get: function () { return types_1.inboxTopicHash; } });
|
|
62
|
+
Object.defineProperty(exports, "inboxTopicStreamId", { enumerable: true, get: function () { return types_1.inboxTopicStreamId; } });
|
|
63
|
+
Object.defineProperty(exports, "isReservedStream", { enumerable: true, get: function () { return types_1.isReservedStream; } });
|
|
64
|
+
Object.defineProperty(exports, "iterateExecutionIds", { enumerable: true, get: function () { return types_1.iterateExecutionIds; } });
|
|
65
|
+
Object.defineProperty(exports, "RESERVED_STREAM_PREFIX", { enumerable: true, get: function () { return types_1.RESERVED_STREAM_PREFIX; } });
|
|
66
|
+
Object.defineProperty(exports, "EVENT_STORE_SPI_VERSION", { enumerable: true, get: function () { return types_1.EVENT_STORE_SPI_VERSION; } });
|
|
67
|
+
var fencing_1 = require("./fencing");
|
|
68
|
+
Object.defineProperty(exports, "StaleFenceError", { enumerable: true, get: function () { return fencing_1.StaleFenceError; } });
|
|
69
|
+
Object.defineProperty(exports, "fenceOf", { enumerable: true, get: function () { return fencing_1.fenceOf; } });
|
|
70
|
+
var creationMarker_1 = require("./creationMarker");
|
|
71
|
+
Object.defineProperty(exports, "creationMarker", { enumerable: true, get: function () { return creationMarker_1.creationMarker; } });
|
|
72
|
+
var eventKindClass_1 = require("./eventKindClass");
|
|
73
|
+
Object.defineProperty(exports, "EVENT_KIND_CLASS", { enumerable: true, get: function () { return eventKindClass_1.EVENT_KIND_CLASS; } });
|
|
74
|
+
Object.defineProperty(exports, "isAnsweringKind", { enumerable: true, get: function () { return eventKindClass_1.isAnsweringKind; } });
|
|
75
|
+
Object.defineProperty(exports, "isQuiescent", { enumerable: true, get: function () { return eventKindClass_1.isQuiescent; } });
|
|
76
|
+
var leases_1 = require("./leases");
|
|
77
|
+
Object.defineProperty(exports, "InMemoryLeaseStore", { enumerable: true, get: function () { return leases_1.InMemoryLeaseStore; } });
|
|
78
|
+
Object.defineProperty(exports, "LEASE_STORE_SPI_VERSION", { enumerable: true, get: function () { return leases_1.LEASE_STORE_SPI_VERSION; } });
|
|
79
|
+
Object.defineProperty(exports, "assertNoBatchSteal", { enumerable: true, get: function () { return leases_1.assertNoBatchSteal; } });
|
|
80
|
+
Object.defineProperty(exports, "assertSteal", { enumerable: true, get: function () { return leases_1.assertSteal; } });
|
|
81
|
+
Object.defineProperty(exports, "assertTtl", { enumerable: true, get: function () { return leases_1.assertTtl; } });
|
|
82
|
+
var writeConflicts_1 = require("./writeConflicts");
|
|
83
|
+
Object.defineProperty(exports, "DuplicateEnvelopeIdError", { enumerable: true, get: function () { return writeConflicts_1.DuplicateEnvelopeIdError; } });
|
|
84
|
+
Object.defineProperty(exports, "DuplicateSequenceError", { enumerable: true, get: function () { return writeConflicts_1.DuplicateSequenceError; } });
|
|
85
|
+
var sequenceRange_1 = require("./sequenceRange");
|
|
86
|
+
Object.defineProperty(exports, "lowerBoundBySequence", { enumerable: true, get: function () { return sequenceRange_1.lowerBoundBySequence; } });
|
|
87
|
+
Object.defineProperty(exports, "sliceBySequence", { enumerable: true, get: function () { return sequenceRange_1.sliceBySequence; } });
|
|
88
|
+
var InMemoryBranchRegistry_1 = require("./InMemoryBranchRegistry");
|
|
89
|
+
Object.defineProperty(exports, "InMemoryBranchRegistry", { enumerable: true, get: function () { return InMemoryBranchRegistry_1.InMemoryBranchRegistry; } });
|
|
90
|
+
var timers_1 = require("./timers");
|
|
91
|
+
Object.defineProperty(exports, "InMemoryTimerStore", { enumerable: true, get: function () { return timers_1.InMemoryTimerStore; } });
|
|
92
|
+
var BranchRegistry_1 = require("./BranchRegistry");
|
|
93
|
+
Object.defineProperty(exports, "BRANCH_REGISTRY_SPI_VERSION", { enumerable: true, get: function () { return BranchRegistry_1.BRANCH_REGISTRY_SPI_VERSION; } });
|
|
94
|
+
Object.defineProperty(exports, "BranchPromotionConflictError", { enumerable: true, get: function () { return BranchRegistry_1.BranchPromotionConflictError; } });
|
|
95
|
+
Object.defineProperty(exports, "assertListRefsLimit", { enumerable: true, get: function () { return BranchRegistry_1.assertListRefsLimit; } });
|
|
96
|
+
var archiveSpi_1 = require("./archiveSpi");
|
|
97
|
+
Object.defineProperty(exports, "ARCHIVE_STORE_SPI_VERSION", { enumerable: true, get: function () { return archiveSpi_1.ARCHIVE_STORE_SPI_VERSION; } });
|
|
98
|
+
Object.defineProperty(exports, "ArchiveConflictError", { enumerable: true, get: function () { return archiveSpi_1.ArchiveConflictError; } });
|
|
99
|
+
Object.defineProperty(exports, "ArchiveDigestError", { enumerable: true, get: function () { return archiveSpi_1.ArchiveDigestError; } });
|
|
100
|
+
Object.defineProperty(exports, "ArchiveIncarnationError", { enumerable: true, get: function () { return archiveSpi_1.ArchiveIncarnationError; } });
|
|
101
|
+
Object.defineProperty(exports, "ArchiveUnserializableError", { enumerable: true, get: function () { return archiveSpi_1.ArchiveUnserializableError; } });
|
|
102
|
+
Object.defineProperty(exports, "ARCHIVE_LEGACY_CHECKPOINT_EVENT", { enumerable: true, get: function () { return archiveSpi_1.ARCHIVE_LEGACY_CHECKPOINT_EVENT; } });
|
|
103
|
+
Object.defineProperty(exports, "OPTIONAL_ARCHIVE_STORE_METHODS", { enumerable: true, get: function () { return archiveSpi_1.OPTIONAL_ARCHIVE_STORE_METHODS; } });
|
|
104
|
+
Object.defineProperty(exports, "assertReplaceable", { enumerable: true, get: function () { return archiveSpi_1.assertReplaceable; } });
|
|
105
|
+
Object.defineProperty(exports, "classifyAppend", { enumerable: true, get: function () { return archiveSpi_1.classifyAppend; } });
|
|
106
|
+
Object.defineProperty(exports, "headerOf", { enumerable: true, get: function () { return archiveSpi_1.headerOf; } });
|
|
107
|
+
var archive_1 = require("./archive");
|
|
108
|
+
Object.defineProperty(exports, "SENDER_ERASED", { enumerable: true, get: function () { return archive_1.SENDER_ERASED; } });
|
|
109
|
+
Object.defineProperty(exports, "archivedReservedStreams", { enumerable: true, get: function () { return archive_1.archivedReservedStreams; } });
|
|
110
|
+
Object.defineProperty(exports, "assertReservedSegmentDigest", { enumerable: true, get: function () { return archive_1.assertReservedSegmentDigest; } });
|
|
111
|
+
Object.defineProperty(exports, "assertSegmentDigest", { enumerable: true, get: function () { return archive_1.assertSegmentDigest; } });
|
|
112
|
+
Object.defineProperty(exports, "buildReservedSegment", { enumerable: true, get: function () { return archive_1.buildReservedSegment; } });
|
|
113
|
+
Object.defineProperty(exports, "buildSegment", { enumerable: true, get: function () { return archive_1.buildSegment; } });
|
|
114
|
+
Object.defineProperty(exports, "isSenderErased", { enumerable: true, get: function () { return archive_1.isSenderErased; } });
|
|
115
|
+
Object.defineProperty(exports, "maskSender", { enumerable: true, get: function () { return archive_1.maskSender; } });
|
|
116
|
+
Object.defineProperty(exports, "pageIds", { enumerable: true, get: function () { return archive_1.pageIds; } });
|
|
117
|
+
Object.defineProperty(exports, "reservedSegmentDigest", { enumerable: true, get: function () { return archive_1.reservedSegmentDigest; } });
|
|
118
|
+
Object.defineProperty(exports, "sameReservedEnvelope", { enumerable: true, get: function () { return archive_1.sameReservedEnvelope; } });
|
|
119
|
+
Object.defineProperty(exports, "segmentDigest", { enumerable: true, get: function () { return archive_1.segmentDigest; } });
|
|
120
|
+
Object.defineProperty(exports, "senderDigestOf", { enumerable: true, get: function () { return archive_1.senderDigestOf; } });
|
|
121
|
+
Object.defineProperty(exports, "senderErasedMarker", { enumerable: true, get: function () { return archive_1.senderErasedMarker; } });
|
|
122
|
+
var TenantScopedArchiveStore_1 = require("./TenantScopedArchiveStore");
|
|
123
|
+
Object.defineProperty(exports, "TenantScopedArchiveStore", { enumerable: true, get: function () { return TenantScopedArchiveStore_1.TenantScopedArchiveStore; } });
|
|
124
|
+
var InMemoryArchiveStore_1 = require("./InMemoryArchiveStore");
|
|
125
|
+
Object.defineProperty(exports, "InMemoryArchiveStore", { enumerable: true, get: function () { return InMemoryArchiveStore_1.InMemoryArchiveStore; } });
|
|
126
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;AAAA,mEAAkE;AAAzD,gIAAA,sBAAsB,OAAA;AAC/B,+DAA8D;AAArD,4HAAA,oBAAoB,OAAA;AAI7B,mDAO0B;AANxB,sHAAA,oBAAoB,OAAA;AACpB,qHAAA,mBAAmB,OAAA;AACnB,mHAAA,iBAAiB,OAAA;AACjB,iHAAA,eAAe,OAAA;AACf,kHAAA,gBAAgB,OAAA;AAChB,sHAAA,oBAAoB,OAAA;AAEtB,qDAI2B;AAHzB,yHAAA,sBAAsB,OAAA;AACtB,uHAAA,oBAAoB,OAAA;AACpB,oHAAA,iBAAiB,OAAA;AAEnB,yDAAmF;AAA1E,8HAAA,yBAAyB,OAAA;AAAE,sHAAA,iBAAiB,OAAA;AAErD,yCAAyD;AAAhD,sGAAA,SAAS,OAAA;AAAE,4GAAA,eAAe,OAAA;AAEnC,2DAAoE;AAA3D,wHAAA,kBAAkB,OAAA;AAAE,8GAAA,QAAQ,OAAA;AACrC,6DAA4D;AAAnD,0HAAA,mBAAmB,OAAA;AAE5B,qEAAoE;AAA3D,kIAAA,uBAAuB,OAAA;AAChC,uDAAyD;AAAhD,uHAAA,mBAAmB,OAAA;AAe5B,qDAK2B;AAJzB,mHAAA,gBAAgB,OAAA;AAChB,sHAAA,mBAAmB,OAAA;AACnB,kHAAA,eAAe,OAAA;AACf,6GAAA,UAAU,OAAA;AAGZ,iCA2BiB;AA1Bf,qHAAA,4BAA4B,OAAA;AAC5B,+FAAA,MAAM,OAAA;AACN,oGAAA,WAAW,OAAA;AACX,sGAAA,aAAa,OAAA;AACb,4GAAA,mBAAmB,OAAA;AACnB,6GAAA,oBAAoB,OAAA;AACpB,8GAAA,qBAAqB,OAAA;AACrB,4GAAA,mBAAmB,OAAA;AACnB,iHAAA,wBAAwB,OAAA;AACxB,2GAAA,kBAAkB,OAAA;AAClB,uGAAA,cAAc,OAAA;AACd,4GAAA,mBAAmB,OAAA;AACnB,qGAAA,YAAY,OAAA;AACZ,6GAAA,oBAAoB,OAAA;AACpB,uGAAA,cAAc,OAAA;AACd,wGAAA,eAAe,OAAA;AACf,2GAAA,kBAAkB,OAAA;AAClB,8GAAA,qBAAqB,OAAA;AACrB,4GAAA,mBAAmB,OAAA;AACnB,gHAAA,uBAAuB,OAAA;AACvB,uGAAA,cAAc,OAAA;AACd,2GAAA,kBAAkB,OAAA;AAClB,yGAAA,gBAAgB,OAAA;AAChB,4GAAA,mBAAmB,OAAA;AACnB,+GAAA,sBAAsB,OAAA;AACtB,gHAAA,uBAAuB,OAAA;AAEzB,qCAAqD;AAA5C,0GAAA,eAAe,OAAA;AAAE,kGAAA,OAAO,OAAA;AACjC,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AACvB,mDAK0B;AAJxB,kHAAA,gBAAgB,OAAA;AAChB,iHAAA,eAAe,OAAA;AACf,6GAAA,WAAW,OAAA;AAGb,mCAWkB;AAVhB,4GAAA,kBAAkB,OAAA;AAClB,iHAAA,uBAAuB,OAAA;AACvB,4GAAA,kBAAkB,OAAA;AAClB,qGAAA,WAAW,OAAA;AACX,mGAAA,SAAS,OAAA;AAOX,mDAAoF;AAA3E,0HAAA,wBAAwB,OAAA;AAAE,wHAAA,sBAAsB,OAAA;AACzD,iDAAwE;AAA/D,qHAAA,oBAAoB,OAAA;AAAE,gHAAA,eAAe,OAAA;AAC9C,mEAAkE;AAAzD,gIAAA,sBAAsB,OAAA;AAE/B,mCAA8C;AAArC,4GAAA,kBAAkB,OAAA;AAS3B,mDAI0B;AAHxB,6HAAA,2BAA2B,OAAA;AAC3B,8HAAA,4BAA4B,OAAA;AAC5B,qHAAA,mBAAmB,OAAA;AAErB,2CAWsB;AAVpB,uHAAA,yBAAyB,OAAA;AACzB,kHAAA,oBAAoB,OAAA;AACpB,gHAAA,kBAAkB,OAAA;AAClB,qHAAA,uBAAuB,OAAA;AACvB,wHAAA,0BAA0B,OAAA;AAC1B,6HAAA,+BAA+B,OAAA;AAC/B,4HAAA,8BAA8B,OAAA;AAC9B,+GAAA,iBAAiB,OAAA;AACjB,4GAAA,cAAc,OAAA;AACd,sGAAA,QAAQ,OAAA;AASV,qCAemB;AAdjB,wGAAA,aAAa,OAAA;AACb,kHAAA,uBAAuB,OAAA;AACvB,sHAAA,2BAA2B,OAAA;AAC3B,8GAAA,mBAAmB,OAAA;AACnB,+GAAA,oBAAoB,OAAA;AACpB,uGAAA,YAAY,OAAA;AACZ,yGAAA,cAAc,OAAA;AACd,qGAAA,UAAU,OAAA;AACV,kGAAA,OAAO,OAAA;AACP,gHAAA,qBAAqB,OAAA;AACrB,+GAAA,oBAAoB,OAAA;AACpB,wGAAA,aAAa,OAAA;AACb,yGAAA,cAAc,OAAA;AACd,6GAAA,kBAAkB,OAAA;AAEpB,uEAAsE;AAA7D,oIAAA,wBAAwB,OAAA;AACjC,+DAA8D;AAArD,4HAAA,oBAAoB,OAAA"}
|