@real-life/trust-protocol 0.3.1 → 0.4.0
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/CHANGELOG.md +32 -0
- package/README.md +187 -78
- package/dist/ack.d.ts +84 -0
- package/dist/ack.d.ts.map +1 -0
- package/dist/ack.js +114 -0
- package/dist/ack.js.map +1 -0
- package/dist/adapters/vti-mediator.d.ts +154 -0
- package/dist/adapters/vti-mediator.d.ts.map +1 -0
- package/dist/adapters/vti-mediator.js +621 -0
- package/dist/adapters/vti-mediator.js.map +1 -0
- package/dist/anchor.d.ts +226 -0
- package/dist/anchor.d.ts.map +1 -0
- package/dist/anchor.js +347 -0
- package/dist/anchor.js.map +1 -0
- package/dist/{holder.d.ts → carrier-holder.d.ts} +1 -1
- package/dist/carrier-holder.d.ts.map +1 -0
- package/dist/{holder.js → carrier-holder.js} +5 -4
- package/dist/carrier-holder.js.map +1 -0
- package/dist/carrier-identity.js +4 -4
- package/dist/carrier-identity.js.map +1 -1
- package/dist/carrier.d.ts.map +1 -1
- package/dist/carrier.js +4 -3
- package/dist/carrier.js.map +1 -1
- package/dist/ceremony.d.ts +3 -2
- package/dist/ceremony.d.ts.map +1 -1
- package/dist/ceremony.js +16 -26
- package/dist/ceremony.js.map +1 -1
- package/dist/codec.d.ts +46 -0
- package/dist/codec.d.ts.map +1 -0
- package/dist/codec.js +410 -0
- package/dist/codec.js.map +1 -0
- package/dist/continuity.d.ts +67 -0
- package/dist/continuity.d.ts.map +1 -0
- package/dist/continuity.js +110 -0
- package/dist/continuity.js.map +1 -0
- package/dist/core.d.ts +4 -0
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js.map +1 -1
- package/dist/crypto.d.ts +23 -7
- package/dist/crypto.d.ts.map +1 -1
- package/dist/crypto.js +54 -20
- package/dist/crypto.js.map +1 -1
- package/dist/delivery.d.ts +31 -3
- package/dist/delivery.d.ts.map +1 -1
- package/dist/delivery.js +75 -28
- package/dist/delivery.js.map +1 -1
- package/dist/encounter/ceremony.d.ts +37 -0
- package/dist/encounter/ceremony.d.ts.map +1 -0
- package/dist/encounter/ceremony.js +662 -0
- package/dist/encounter/ceremony.js.map +1 -0
- package/dist/encounter.d.ts +91 -1
- package/dist/encounter.d.ts.map +1 -1
- package/dist/encounter.js +191 -12
- package/dist/encounter.js.map +1 -1
- package/dist/engine.d.ts +291 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +1395 -0
- package/dist/engine.js.map +1 -0
- package/dist/entropy.d.ts +28 -0
- package/dist/entropy.d.ts.map +1 -0
- package/dist/entropy.js +96 -0
- package/dist/entropy.js.map +1 -0
- package/dist/events.d.ts +177 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +2 -0
- package/dist/events.js.map +1 -0
- package/dist/fixtures.d.ts +30 -0
- package/dist/fixtures.d.ts.map +1 -0
- package/dist/fixtures.js +155 -0
- package/dist/fixtures.js.map +1 -0
- package/dist/forge.d.ts +47 -0
- package/dist/forge.d.ts.map +1 -0
- package/dist/forge.js +20 -0
- package/dist/forge.js.map +1 -0
- package/dist/group-star.d.ts +251 -0
- package/dist/group-star.d.ts.map +1 -0
- package/dist/group-star.js +348 -0
- package/dist/group-star.js.map +1 -0
- package/dist/holder-api.d.ts +137 -0
- package/dist/holder-api.d.ts.map +1 -0
- package/dist/holder-api.js +132 -0
- package/dist/holder-api.js.map +1 -0
- package/dist/holder-state-v1.d.ts +801 -0
- package/dist/holder-state-v1.d.ts.map +1 -0
- package/dist/holder-state-v1.js +2 -0
- package/dist/holder-state-v1.js.map +1 -0
- package/dist/identity-state.d.ts +43 -0
- package/dist/identity-state.d.ts.map +1 -0
- package/dist/identity-state.js +345 -0
- package/dist/identity-state.js.map +1 -0
- package/dist/identity.d.ts +24 -2
- package/dist/identity.d.ts.map +1 -1
- package/dist/identity.js +70 -11
- package/dist/identity.js.map +1 -1
- package/dist/index.d.ts +26 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +77 -29
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +36 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +22 -0
- package/dist/internal.js.map +1 -0
- package/dist/introduction/holder.d.ts +18 -0
- package/dist/introduction/holder.d.ts.map +1 -0
- package/dist/introduction/holder.js +757 -0
- package/dist/introduction/holder.js.map +1 -0
- package/dist/introduction.d.ts +101 -0
- package/dist/introduction.d.ts.map +1 -0
- package/dist/introduction.js +132 -0
- package/dist/introduction.js.map +1 -0
- package/dist/invariants.d.ts +43 -0
- package/dist/invariants.d.ts.map +1 -0
- package/dist/invariants.js +883 -0
- package/dist/invariants.js.map +1 -0
- package/dist/keys-seed.d.ts +7 -0
- package/dist/keys-seed.d.ts.map +1 -0
- package/dist/keys-seed.js +133 -0
- package/dist/keys-seed.js.map +1 -0
- package/dist/log-memory.d.ts +12 -0
- package/dist/log-memory.d.ts.map +1 -0
- package/dist/log-memory.js +101 -0
- package/dist/log-memory.js.map +1 -0
- package/dist/membership/holder.d.ts +35 -0
- package/dist/membership/holder.d.ts.map +1 -0
- package/dist/membership/holder.js +852 -0
- package/dist/membership/holder.js.map +1 -0
- package/dist/membership.d.ts +92 -0
- package/dist/membership.d.ts.map +1 -0
- package/dist/membership.js +157 -0
- package/dist/membership.js.map +1 -0
- package/dist/ports.d.ts +237 -0
- package/dist/ports.d.ts.map +1 -0
- package/dist/ports.js +2 -0
- package/dist/ports.js.map +1 -0
- package/dist/profile.d.ts +56 -0
- package/dist/profile.d.ts.map +1 -0
- package/dist/profile.js +193 -0
- package/dist/profile.js.map +1 -0
- package/dist/prompts.d.ts +14 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +69 -0
- package/dist/prompts.js.map +1 -0
- package/dist/receive.d.ts +133 -0
- package/dist/receive.d.ts.map +1 -0
- package/dist/receive.js +298 -0
- package/dist/receive.js.map +1 -0
- package/dist/results.d.ts +158 -0
- package/dist/results.d.ts.map +1 -0
- package/dist/results.js +21 -0
- package/dist/results.js.map +1 -0
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +42 -38
- package/dist/schemas.js.map +1 -1
- package/dist/sha256.d.ts +3 -0
- package/dist/sha256.d.ts.map +1 -0
- package/dist/sha256.js +69 -0
- package/dist/sha256.js.map +1 -0
- package/dist/star.d.ts +31 -0
- package/dist/star.d.ts.map +1 -0
- package/dist/star.js +56 -0
- package/dist/star.js.map +1 -0
- package/dist/state-builder.d.ts +42 -0
- package/dist/state-builder.d.ts.map +1 -0
- package/dist/state-builder.js +100 -0
- package/dist/state-builder.js.map +1 -0
- package/dist/state.d.ts +853 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +36 -0
- package/dist/state.js.map +1 -0
- package/dist/store-contract.d.ts +11 -0
- package/dist/store-contract.d.ts.map +1 -0
- package/dist/store-contract.js +189 -0
- package/dist/store-contract.js.map +1 -0
- package/dist/store-memory.d.ts +8 -0
- package/dist/store-memory.d.ts.map +1 -0
- package/dist/store-memory.js +17 -0
- package/dist/store-memory.js.map +1 -0
- package/dist/testing.d.ts +22 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +21 -0
- package/dist/testing.js.map +1 -0
- package/dist/trust/continuity.d.ts +71 -0
- package/dist/trust/continuity.d.ts.map +1 -0
- package/dist/trust/continuity.js +1216 -0
- package/dist/trust/continuity.js.map +1 -0
- package/dist/trust/duties.d.ts +67 -0
- package/dist/trust/duties.d.ts.map +1 -0
- package/dist/trust/duties.js +179 -0
- package/dist/trust/duties.js.map +1 -0
- package/dist/trust/entries.d.ts +139 -0
- package/dist/trust/entries.d.ts.map +1 -0
- package/dist/trust/entries.js +694 -0
- package/dist/trust/entries.js.map +1 -0
- package/dist/trust/group-star.d.ts +43 -0
- package/dist/trust/group-star.d.ts.map +1 -0
- package/dist/trust/group-star.js +188 -0
- package/dist/trust/group-star.js.map +1 -0
- package/dist/trust/mapping.d.ts +56 -0
- package/dist/trust/mapping.d.ts.map +1 -0
- package/dist/trust/mapping.js +584 -0
- package/dist/trust/mapping.js.map +1 -0
- package/dist/trust/profile.d.ts +25 -0
- package/dist/trust/profile.d.ts.map +1 -0
- package/dist/trust/profile.js +249 -0
- package/dist/trust/profile.js.map +1 -0
- package/dist/trust/star.d.ts +208 -0
- package/dist/trust/star.d.ts.map +1 -0
- package/dist/trust/star.js +588 -0
- package/dist/trust/star.js.map +1 -0
- package/dist/trust/state.d.ts +83 -0
- package/dist/trust/state.d.ts.map +1 -0
- package/dist/trust/state.js +154 -0
- package/dist/trust/state.js.map +1 -0
- package/dist/util-freeze.d.ts +3 -0
- package/dist/util-freeze.d.ts.map +1 -0
- package/dist/util-freeze.js +11 -0
- package/dist/util-freeze.js.map +1 -0
- package/dist/views.d.ts +147 -0
- package/dist/views.d.ts.map +1 -0
- package/dist/views.js +268 -0
- package/dist/views.js.map +1 -0
- package/dist/visibility.d.ts +5 -5
- package/dist/visibility.d.ts.map +1 -1
- package/dist/visibility.js +22 -28
- package/dist/visibility.js.map +1 -1
- package/dist/wire.d.ts +178 -84
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js.map +1 -1
- package/package.json +58 -11
- package/schemas/holder-state-v1.schema.json +3880 -0
- package/dist/holder.d.ts.map +0 -1
- package/dist/holder.js.map +0 -1
- package/dist/probe/acks.d.ts +0 -27
- package/dist/probe/acks.d.ts.map +0 -1
- package/dist/probe/acks.js +0 -152
- package/dist/probe/acks.js.map +0 -1
- package/dist/probe/continuity.d.ts +0 -20
- package/dist/probe/continuity.d.ts.map +0 -1
- package/dist/probe/continuity.js +0 -805
- package/dist/probe/continuity.js.map +0 -1
- package/dist/probe/deps.d.ts +0 -61
- package/dist/probe/deps.d.ts.map +0 -1
- package/dist/probe/deps.js +0 -54
- package/dist/probe/deps.js.map +0 -1
- package/dist/probe/encounter.d.ts +0 -26
- package/dist/probe/encounter.d.ts.map +0 -1
- package/dist/probe/encounter.js +0 -938
- package/dist/probe/encounter.js.map +0 -1
- package/dist/probe/introduce.d.ts +0 -70
- package/dist/probe/introduce.d.ts.map +0 -1
- package/dist/probe/introduce.js +0 -295
- package/dist/probe/introduce.js.map +0 -1
- package/dist/probe/membership.d.ts +0 -90
- package/dist/probe/membership.d.ts.map +0 -1
- package/dist/probe/membership.js +0 -450
- package/dist/probe/membership.js.map +0 -1
- package/dist/probe/trust.d.ts +0 -156
- package/dist/probe/trust.d.ts.map +0 -1
- package/dist/probe/trust.js +0 -1233
- package/dist/probe/trust.js.map +0 -1
- package/dist/probe.d.ts +0 -7
- package/dist/probe.d.ts.map +0 -1
- package/dist/probe.js +0 -42
- package/dist/probe.js.map +0 -1
package/dist/engine.d.ts
ADDED
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
import type { Dec, Duty, HolderState, Millis, Prompt, PromptChoice, PromptKind } from './state.js';
|
|
2
|
+
import type { Access, DeliveryReport, KeyProvider, KeyRelease, Log, Outbound, RetryPolicy, Store } from './ports.js';
|
|
3
|
+
import type { HolderEvent } from './events.js';
|
|
4
|
+
import type { ActError, ActResult, ReceiveResult, ResumeResult } from './results.js';
|
|
5
|
+
import type { Entropy, PlatformRandom } from './entropy.js';
|
|
6
|
+
import type { Arrival, Channel, ReceivedDocument, TaskDiscarded, TaskRefusal } from './receive.js';
|
|
7
|
+
import type { CommitOp } from './invariants.js';
|
|
8
|
+
export type { Arrival, Channel, ReceivedDocument, TaskDiscarded, TaskFailure, TaskRefusal } from './receive.js';
|
|
9
|
+
type DistributiveOmit<T, K extends PropertyKey> = T extends unknown ? Omit<T, K> : never;
|
|
10
|
+
/** An event as a module emits it; the engine adds eventId, commitSeq, actId. */
|
|
11
|
+
export type EventDraft = DistributiveOmit<HolderEvent, 'eventId' | 'commitSeq' | 'actId'>;
|
|
12
|
+
/** A document as a module issues it; the engine sets attempt 1 and files it in the outbox. */
|
|
13
|
+
export type OutboundDraft = Omit<Outbound, 'attempt'>;
|
|
14
|
+
/** What a WebCrypto handle must offer; resolved at construction. The
|
|
15
|
+
* default entropy also needs getRandomValues and randomUUID from it. */
|
|
16
|
+
export type CryptoHandle = {
|
|
17
|
+
subtle: SubtleCrypto;
|
|
18
|
+
} & Partial<PlatformRandom>;
|
|
19
|
+
/** What a preparation sees. The snapshot is deep-frozen; `release` is the
|
|
20
|
+
* key release read from its `addresses` (note §3 KeyProvider). */
|
|
21
|
+
export interface PrepareCtx {
|
|
22
|
+
readonly snapshot: Readonly<HolderState>;
|
|
23
|
+
readonly keys: KeyProvider;
|
|
24
|
+
readonly entropy: Entropy;
|
|
25
|
+
readonly access?: Access;
|
|
26
|
+
readonly log?: Log;
|
|
27
|
+
readonly crypto: CryptoHandle;
|
|
28
|
+
readonly when: Millis;
|
|
29
|
+
readonly release: KeyRelease;
|
|
30
|
+
}
|
|
31
|
+
/** A preparation's value, bound to the store version and commitSeq of the
|
|
32
|
+
* snapshot it ran against. The commit is CAS on exactly that version, so
|
|
33
|
+
* a prepared value never lands on any other state. */
|
|
34
|
+
export interface Prepared<P = unknown> {
|
|
35
|
+
readonly value: P;
|
|
36
|
+
readonly version: string | null;
|
|
37
|
+
readonly commitSeq: Dec;
|
|
38
|
+
}
|
|
39
|
+
/** A holder-local identity rename (2100, 2140): stored acks whose
|
|
40
|
+
* recipient.contactId is one of `from` (for an own rkid in `rkids`, or
|
|
41
|
+
* any where null) now name `to`. */
|
|
42
|
+
export interface IdentityRename {
|
|
43
|
+
from: string[];
|
|
44
|
+
to: string;
|
|
45
|
+
rkids: string[] | null;
|
|
46
|
+
}
|
|
47
|
+
/** A transition's outcome: the next state (a new object; the input is
|
|
48
|
+
* frozen) and what it issues. `renames`: identities the transition
|
|
49
|
+
* rewrote; the engine follows them in the stored acks (only the core
|
|
50
|
+
* writes the effect cache; the sealed envelopes stay untouched). */
|
|
51
|
+
export interface Applied {
|
|
52
|
+
state: HolderState;
|
|
53
|
+
outbound?: OutboundDraft[];
|
|
54
|
+
events?: EventDraft[];
|
|
55
|
+
duties?: Duty[];
|
|
56
|
+
renames?: IdentityRename[];
|
|
57
|
+
}
|
|
58
|
+
/** A refused act: nothing commits — except an Encounter aging latch
|
|
59
|
+
* (`latch`, receive.ts TaskRefusal): then exactly that state and the
|
|
60
|
+
* raised lastWhen commit, without a journal entry, outbound or event. */
|
|
61
|
+
export interface Refusal {
|
|
62
|
+
ok: false;
|
|
63
|
+
code: ActError;
|
|
64
|
+
ref?: string;
|
|
65
|
+
latch?: HolderState;
|
|
66
|
+
}
|
|
67
|
+
/** One command of a module. `human` acts need an actId and are journaled. */
|
|
68
|
+
export interface CommandDef<I = any, P = any> {
|
|
69
|
+
human: boolean;
|
|
70
|
+
prepare?: (ctx: PrepareCtx, input: I) => Promise<P>;
|
|
71
|
+
/** synchronous and pure: must not mutate `state`, returns a new object */
|
|
72
|
+
apply: (state: Readonly<HolderState>, prepared: Prepared<P>, input: I, when: Millis) => Applied | Refusal;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* A received task type's handler, keyed by its full task URI with
|
|
76
|
+
* version (note §4.3; receive.ts runs it). `decode` is the payload's
|
|
77
|
+
* decoder and validator (stage 7: refuse 'malformed'; stage 8: any other
|
|
78
|
+
* reason); `prepare` the async stage-8 work (MAC checks, key agreement),
|
|
79
|
+
* which may also refuse; `apply` the synchronous stage-9 transition. The
|
|
80
|
+
* core, never the handler, writes the effect-cache entry with its ack in
|
|
81
|
+
* the same commit and releases the events after it; a handler whose
|
|
82
|
+
* state touches `effects` is a programming error and throws.
|
|
83
|
+
*/
|
|
84
|
+
export interface TaskHandler<T = any, P = any> {
|
|
85
|
+
/** the registry entry's proof declaration (Delivery 4.4): whether the
|
|
86
|
+
* document itself carries a `proof` (its artifacts' own MACs and
|
|
87
|
+
* signatures are the payload's business); checked at stage 6 */
|
|
88
|
+
proof: 'absent' | 'required';
|
|
89
|
+
decode: (payload: unknown) => T | TaskRefusal;
|
|
90
|
+
/** the acceptance binding of a document that may arrive on an own key no
|
|
91
|
+
* tuple carries yet (receive.ts): the counterpart's key agreement and
|
|
92
|
+
* contact, from the document itself, or a refusal; absent: the arrival
|
|
93
|
+
* tuple's binding (Delivery 4.4) */
|
|
94
|
+
channel?: (state: Readonly<HolderState>, doc: ReceivedDocument<T>, rkid: string) => Channel | TaskRefusal;
|
|
95
|
+
/** under the arrival tuple's binding: the document may arrive on a tuple
|
|
96
|
+
* a chaining deactivated, because the handler binds it to the tuples an
|
|
97
|
+
* act pinned and checks that pin itself (Trust 8270); absent: the arrival
|
|
98
|
+
* tuple must be the active head of a live relationship (6190, 6240) */
|
|
99
|
+
pinned?: true;
|
|
100
|
+
prepare?: (ctx: PrepareCtx, doc: ReceivedDocument<T>, arrival: Arrival) => Promise<P | TaskRefusal>;
|
|
101
|
+
/** a TaskDiscarded commits its `state` as the disposition `discarded`
|
|
102
|
+
* (no effect-cache entry, no ack): a resource-limit discard (Trust 5365) */
|
|
103
|
+
apply: (state: Readonly<HolderState>, prepared: Prepared<P>, doc: ReceivedDocument<T>, arrival: Arrival) => Applied | TaskRefusal | TaskDiscarded;
|
|
104
|
+
}
|
|
105
|
+
/** What a duty's apply sees beside the state: its preparation. */
|
|
106
|
+
export interface DutyCtx<P = unknown> {
|
|
107
|
+
readonly prepared: Prepared<P>;
|
|
108
|
+
/** the holder's retry backoff (RetryPolicy): the delay before attempt
|
|
109
|
+
* n, for duties that re-schedule themselves (dueAt) */
|
|
110
|
+
readonly backoff: (attempt: number) => number;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* A duty kind's handler at one version (note §2.1 duties), run by
|
|
114
|
+
* resume(when). A duty of the kind at another `v` stays untouched and is
|
|
115
|
+
* announced as duty.unsupported. `awaitHolds` is the module's pure
|
|
116
|
+
* condition for a duty that carries an `awaitHead` (6596); without it
|
|
117
|
+
* such a duty never runs. `apply` returning Applied fulfils the duty
|
|
118
|
+
* (the engine removes it in the same commit); 'not-due' and a refusal
|
|
119
|
+
* leave it as it is.
|
|
120
|
+
*/
|
|
121
|
+
export interface DutyHandler<P = any> {
|
|
122
|
+
v: number;
|
|
123
|
+
prepare?: (ctx: PrepareCtx, duty: Duty) => Promise<P>;
|
|
124
|
+
awaitHolds?: (state: Readonly<HolderState>, duty: Duty) => boolean;
|
|
125
|
+
apply: (state: Readonly<HolderState>, duty: Duty, ctx: DutyCtx<P>, when: Millis) => Applied | Refusal | 'not-due';
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* A module's reconciliation sweep (Trust 5.4), run by resume(when) after
|
|
129
|
+
* the duties, on the state they left. `prepare` runs against resume's
|
|
130
|
+
* snapshot (before the duties); `apply` re-checks every prepared piece
|
|
131
|
+
* against the state it gets and skips one whose inputs moved, reporting
|
|
132
|
+
* `deferred` (resume then names `when` as nextDueAt). `pending` is the
|
|
133
|
+
* pure answer to "would the sweep issue now?", as keys: an operation
|
|
134
|
+
* other than resume whose commit adds a key names `when` as its
|
|
135
|
+
* nextDueAt, the app's cue to call resume (engine.ts header).
|
|
136
|
+
*/
|
|
137
|
+
export interface SweepHandler<P = any> {
|
|
138
|
+
pending: (state: Readonly<HolderState>, when: Millis) => string[];
|
|
139
|
+
/** the top-level state parts `pending` reads; where given, an operation
|
|
140
|
+
* that replaced none of them skips `pending` (its keys cannot change) */
|
|
141
|
+
reads?: ReadonlyArray<keyof HolderState>;
|
|
142
|
+
prepare: (ctx: PrepareCtx) => Promise<P>;
|
|
143
|
+
apply: (state: Readonly<HolderState>, prepared: Prepared<P>, when: Millis) => Applied & {
|
|
144
|
+
deferred?: boolean;
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* What a verified delivery-ack does for the module whose task type the
|
|
149
|
+
* acknowledged outbox item carries (receive.ts, the common ack path):
|
|
150
|
+
* synchronous and pure, inside the ack's transaction, after the item is
|
|
151
|
+
* marked delivered. Adapter reports never reach it: only a verified ack
|
|
152
|
+
* completes (ports.ts DeliveryReport, 5660).
|
|
153
|
+
*/
|
|
154
|
+
export type AckHandler = (state: Readonly<HolderState>, ref: string, when: Millis) => Applied;
|
|
155
|
+
/**
|
|
156
|
+
* What the module whose task type an outbox item carries does when that
|
|
157
|
+
* item turns failed (a failed report, or the holder's give-up at the
|
|
158
|
+
* horizon): synchronous and pure, inside that transaction, after the item
|
|
159
|
+
* is marked failed. Its duties are folded into the state (an id already
|
|
160
|
+
* open is kept as it is); it must not write the effect cache.
|
|
161
|
+
*/
|
|
162
|
+
export type FailureHandler = (state: Readonly<HolderState>, ref: string, when: Millis, ctx: {
|
|
163
|
+
readonly backoff: (attempt: number) => number;
|
|
164
|
+
}) => Applied;
|
|
165
|
+
/**
|
|
166
|
+
* What a human's choice on a prompt of one kind does in its domain
|
|
167
|
+
* (prompts.ts): synchronous and pure like apply, run inside the decision's
|
|
168
|
+
* own transition, so the domain effect and the closing commit together.
|
|
169
|
+
* It sees the prompt still open; the prompts module removes it after. A
|
|
170
|
+
* refusal refuses the decision.
|
|
171
|
+
*/
|
|
172
|
+
export type DecisionHandler = DecisionFn | DecisionDef;
|
|
173
|
+
/** The synchronous form: the domain effect needs no preparation. */
|
|
174
|
+
export type DecisionFn = (state: Readonly<HolderState>, prompt: Readonly<Prompt>, choice: PromptChoice, when: Millis) => Applied | Refusal;
|
|
175
|
+
/**
|
|
176
|
+
* The prepared form, for a domain effect that signs or seals (the
|
|
177
|
+
* counter-step, the membership accept, the introduction's consent):
|
|
178
|
+
* `prepare` runs in the decision's preparation against its snapshot, the
|
|
179
|
+
* prompt still open there; `apply` gets its value bound to that snapshot.
|
|
180
|
+
*/
|
|
181
|
+
export interface DecisionDef<P = any> {
|
|
182
|
+
prepare?: (ctx: PrepareCtx, prompt: Readonly<Prompt>, choice: PromptChoice) => Promise<P>;
|
|
183
|
+
apply: (state: Readonly<HolderState>, prompt: Readonly<Prompt>, choice: PromptChoice, when: Millis, prepared: Prepared<P>) => Applied | Refusal;
|
|
184
|
+
}
|
|
185
|
+
/** A domain module: what it registers with the engine. */
|
|
186
|
+
export interface HolderModule {
|
|
187
|
+
name: string;
|
|
188
|
+
commands: Record<string, CommandDef>;
|
|
189
|
+
tasks?: Record<string, TaskHandler>;
|
|
190
|
+
duties?: Record<string, DutyHandler>;
|
|
191
|
+
/** reconciliation sweeps, run by resume after the duties, by name */
|
|
192
|
+
sweeps?: Record<string, SweepHandler>;
|
|
193
|
+
/** ack handlers by the full task type URI of the acknowledged document;
|
|
194
|
+
* at most one per type across all modules */
|
|
195
|
+
acks?: Record<string, AckHandler>;
|
|
196
|
+
/** failure handlers by the full task type URI of the failed document;
|
|
197
|
+
* at most one per type across all modules */
|
|
198
|
+
failures?: Record<string, FailureHandler>;
|
|
199
|
+
/** task types whose documents the module re-issues itself (a fresh
|
|
200
|
+
* document, never a reproduction): the outbox never re-emits their
|
|
201
|
+
* items and gives them up only at the horizon. Trusted as registered:
|
|
202
|
+
* the engine checks no ownership of the types named, since modules are
|
|
203
|
+
* part of the library, not app plug-ins */
|
|
204
|
+
ownRetries?: readonly string[];
|
|
205
|
+
/** own rkids the module still needs although no live tuple carries
|
|
206
|
+
* them: tick does not tombstone them. Trusted as registered, like
|
|
207
|
+
* ownRetries: no check that the module has any claim to the keys */
|
|
208
|
+
keepKeys?: (state: Readonly<HolderState>) => Iterable<string>;
|
|
209
|
+
/** the module's own retention, run by tick after the engine's: pure and
|
|
210
|
+
* synchronous, returning the same state object where nothing goes */
|
|
211
|
+
retain?: (state: Readonly<HolderState>, when: Millis) => HolderState;
|
|
212
|
+
/** the times at which the module's `retain` (run by tick) changes the
|
|
213
|
+
* state: counted into nextDueAt (the timer contract, the header) */
|
|
214
|
+
deadlines?: (state: Readonly<HolderState>) => Iterable<Millis>;
|
|
215
|
+
/** at most one handler per prompt kind across all modules; collected by
|
|
216
|
+
* createHolder for the prompts module (prompts.ts) */
|
|
217
|
+
decisions?: Partial<Record<PromptKind, DecisionHandler>>;
|
|
218
|
+
}
|
|
219
|
+
/** The ports of a holder (note §3); retry fields fall back to ENGINE_DEFAULTS. */
|
|
220
|
+
export interface EnginePorts {
|
|
221
|
+
store: Store;
|
|
222
|
+
keys: KeyProvider;
|
|
223
|
+
entropy?: Entropy;
|
|
224
|
+
log?: Log;
|
|
225
|
+
access?: Access;
|
|
226
|
+
retry?: Partial<RetryPolicy>;
|
|
227
|
+
crypto?: CryptoHandle;
|
|
228
|
+
}
|
|
229
|
+
/** Engine options beside the ports. `check` runs on every commit before
|
|
230
|
+
* the store's CAS, on the state read and the state about to be written,
|
|
231
|
+
* with the operation; a throw aborts the operation and nothing commits
|
|
232
|
+
* (createHolder's `invariants: true`, invariants.ts). */
|
|
233
|
+
export interface EngineOptions {
|
|
234
|
+
check?: (before: Readonly<HolderState>, after: Readonly<HolderState>, op: CommitOp) => void;
|
|
235
|
+
/** where no Access port is given: an Access over each preparation's own
|
|
236
|
+
* snapshot (createHolder passes the membership module's localAccess) */
|
|
237
|
+
accessFrom?: (state: Readonly<HolderState>) => Access;
|
|
238
|
+
}
|
|
239
|
+
/** Announced after every commit of this engine, with its commitSeq. */
|
|
240
|
+
export type CommitListener = (commit: {
|
|
241
|
+
commitSeq: Dec;
|
|
242
|
+
events: HolderEvent[];
|
|
243
|
+
}) => void;
|
|
244
|
+
/** A deep-frozen decoded state and its commitSeq. */
|
|
245
|
+
export interface EngineSnapshot {
|
|
246
|
+
state: Readonly<HolderState>;
|
|
247
|
+
commitSeq: Dec;
|
|
248
|
+
}
|
|
249
|
+
export interface Engine {
|
|
250
|
+
/** the names registered at construction, frozen */
|
|
251
|
+
readonly registry: Readonly<{
|
|
252
|
+
commands: readonly string[];
|
|
253
|
+
tasks: readonly string[];
|
|
254
|
+
duties: readonly string[];
|
|
255
|
+
sweeps: readonly string[];
|
|
256
|
+
}>;
|
|
257
|
+
act(command: string, input: unknown, when: Millis, opts?: {
|
|
258
|
+
actId?: string;
|
|
259
|
+
}): Promise<ActResult>;
|
|
260
|
+
/** expiry and retention: effects, prompts, the act journal, terminal
|
|
261
|
+
* outbox items, address keys to tombstones; raises lastWhen */
|
|
262
|
+
tick(when: Millis): Promise<ActResult>;
|
|
263
|
+
/** re-emits due outbox items (attempt + 1) or gives them up, runs due
|
|
264
|
+
* duties, re-emits unsent acks */
|
|
265
|
+
resume(when: Millis): Promise<ResumeResult>;
|
|
266
|
+
/** an adapter's delivery report (Delivery §6.1); on an ack's digest it
|
|
267
|
+
* marks the stored ack sent */
|
|
268
|
+
report(report: DeliveryReport, when: Millis): Promise<ActResult>;
|
|
269
|
+
/** an arriving envelope: Delivery §6.2 stages 1–9 (receive.ts) */
|
|
270
|
+
receive(env: unknown, when: Millis): Promise<ReceiveResult>;
|
|
271
|
+
subscribe(listener: CommitListener): () => void;
|
|
272
|
+
snapshot(): Promise<EngineSnapshot>;
|
|
273
|
+
}
|
|
274
|
+
/** Defaults of the retry policy and the retention it implies. */
|
|
275
|
+
export declare const ENGINE_DEFAULTS: Readonly<{
|
|
276
|
+
/** 30 s, doubling, at most 6 h */
|
|
277
|
+
backoff: (attempt: number) => number;
|
|
278
|
+
/** P7D, inside Delivery's give-up range [P1D, P90D]; the only give-up */
|
|
279
|
+
horizonMs: number;
|
|
280
|
+
commitAttempts: 8;
|
|
281
|
+
/** max(P90D, horizonMs) with the default horizon */
|
|
282
|
+
retentionMs: number;
|
|
283
|
+
}>;
|
|
284
|
+
/**
|
|
285
|
+
* Build an engine over the ports and modules: resolves and probes
|
|
286
|
+
* WebCrypto, freezes the registries (duplicate command names, task URIs
|
|
287
|
+
* or duty kinds throw), and initialises an empty store with the empty
|
|
288
|
+
* state at the current codec.
|
|
289
|
+
*/
|
|
290
|
+
export declare function createEngine(ports: EnginePorts, modules: readonly HolderModule[], opts?: EngineOptions): Promise<Engine>;
|
|
291
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
|