@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.
Files changed (264) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +187 -78
  3. package/dist/ack.d.ts +84 -0
  4. package/dist/ack.d.ts.map +1 -0
  5. package/dist/ack.js +114 -0
  6. package/dist/ack.js.map +1 -0
  7. package/dist/adapters/vti-mediator.d.ts +154 -0
  8. package/dist/adapters/vti-mediator.d.ts.map +1 -0
  9. package/dist/adapters/vti-mediator.js +621 -0
  10. package/dist/adapters/vti-mediator.js.map +1 -0
  11. package/dist/anchor.d.ts +226 -0
  12. package/dist/anchor.d.ts.map +1 -0
  13. package/dist/anchor.js +347 -0
  14. package/dist/anchor.js.map +1 -0
  15. package/dist/{holder.d.ts → carrier-holder.d.ts} +1 -1
  16. package/dist/carrier-holder.d.ts.map +1 -0
  17. package/dist/{holder.js → carrier-holder.js} +5 -4
  18. package/dist/carrier-holder.js.map +1 -0
  19. package/dist/carrier-identity.js +4 -4
  20. package/dist/carrier-identity.js.map +1 -1
  21. package/dist/carrier.d.ts.map +1 -1
  22. package/dist/carrier.js +4 -3
  23. package/dist/carrier.js.map +1 -1
  24. package/dist/ceremony.d.ts +3 -2
  25. package/dist/ceremony.d.ts.map +1 -1
  26. package/dist/ceremony.js +16 -26
  27. package/dist/ceremony.js.map +1 -1
  28. package/dist/codec.d.ts +46 -0
  29. package/dist/codec.d.ts.map +1 -0
  30. package/dist/codec.js +410 -0
  31. package/dist/codec.js.map +1 -0
  32. package/dist/continuity.d.ts +67 -0
  33. package/dist/continuity.d.ts.map +1 -0
  34. package/dist/continuity.js +110 -0
  35. package/dist/continuity.js.map +1 -0
  36. package/dist/core.d.ts +4 -0
  37. package/dist/core.d.ts.map +1 -1
  38. package/dist/core.js.map +1 -1
  39. package/dist/crypto.d.ts +23 -7
  40. package/dist/crypto.d.ts.map +1 -1
  41. package/dist/crypto.js +54 -20
  42. package/dist/crypto.js.map +1 -1
  43. package/dist/delivery.d.ts +31 -3
  44. package/dist/delivery.d.ts.map +1 -1
  45. package/dist/delivery.js +75 -28
  46. package/dist/delivery.js.map +1 -1
  47. package/dist/encounter/ceremony.d.ts +37 -0
  48. package/dist/encounter/ceremony.d.ts.map +1 -0
  49. package/dist/encounter/ceremony.js +662 -0
  50. package/dist/encounter/ceremony.js.map +1 -0
  51. package/dist/encounter.d.ts +91 -1
  52. package/dist/encounter.d.ts.map +1 -1
  53. package/dist/encounter.js +191 -12
  54. package/dist/encounter.js.map +1 -1
  55. package/dist/engine.d.ts +291 -0
  56. package/dist/engine.d.ts.map +1 -0
  57. package/dist/engine.js +1395 -0
  58. package/dist/engine.js.map +1 -0
  59. package/dist/entropy.d.ts +28 -0
  60. package/dist/entropy.d.ts.map +1 -0
  61. package/dist/entropy.js +96 -0
  62. package/dist/entropy.js.map +1 -0
  63. package/dist/events.d.ts +177 -0
  64. package/dist/events.d.ts.map +1 -0
  65. package/dist/events.js +2 -0
  66. package/dist/events.js.map +1 -0
  67. package/dist/fixtures.d.ts +30 -0
  68. package/dist/fixtures.d.ts.map +1 -0
  69. package/dist/fixtures.js +155 -0
  70. package/dist/fixtures.js.map +1 -0
  71. package/dist/forge.d.ts +47 -0
  72. package/dist/forge.d.ts.map +1 -0
  73. package/dist/forge.js +20 -0
  74. package/dist/forge.js.map +1 -0
  75. package/dist/group-star.d.ts +251 -0
  76. package/dist/group-star.d.ts.map +1 -0
  77. package/dist/group-star.js +348 -0
  78. package/dist/group-star.js.map +1 -0
  79. package/dist/holder-api.d.ts +137 -0
  80. package/dist/holder-api.d.ts.map +1 -0
  81. package/dist/holder-api.js +132 -0
  82. package/dist/holder-api.js.map +1 -0
  83. package/dist/holder-state-v1.d.ts +801 -0
  84. package/dist/holder-state-v1.d.ts.map +1 -0
  85. package/dist/holder-state-v1.js +2 -0
  86. package/dist/holder-state-v1.js.map +1 -0
  87. package/dist/identity-state.d.ts +43 -0
  88. package/dist/identity-state.d.ts.map +1 -0
  89. package/dist/identity-state.js +345 -0
  90. package/dist/identity-state.js.map +1 -0
  91. package/dist/identity.d.ts +24 -2
  92. package/dist/identity.d.ts.map +1 -1
  93. package/dist/identity.js +70 -11
  94. package/dist/identity.js.map +1 -1
  95. package/dist/index.d.ts +26 -1
  96. package/dist/index.d.ts.map +1 -1
  97. package/dist/index.js +77 -29
  98. package/dist/index.js.map +1 -1
  99. package/dist/internal.d.ts +36 -0
  100. package/dist/internal.d.ts.map +1 -0
  101. package/dist/internal.js +22 -0
  102. package/dist/internal.js.map +1 -0
  103. package/dist/introduction/holder.d.ts +18 -0
  104. package/dist/introduction/holder.d.ts.map +1 -0
  105. package/dist/introduction/holder.js +757 -0
  106. package/dist/introduction/holder.js.map +1 -0
  107. package/dist/introduction.d.ts +101 -0
  108. package/dist/introduction.d.ts.map +1 -0
  109. package/dist/introduction.js +132 -0
  110. package/dist/introduction.js.map +1 -0
  111. package/dist/invariants.d.ts +43 -0
  112. package/dist/invariants.d.ts.map +1 -0
  113. package/dist/invariants.js +883 -0
  114. package/dist/invariants.js.map +1 -0
  115. package/dist/keys-seed.d.ts +7 -0
  116. package/dist/keys-seed.d.ts.map +1 -0
  117. package/dist/keys-seed.js +133 -0
  118. package/dist/keys-seed.js.map +1 -0
  119. package/dist/log-memory.d.ts +12 -0
  120. package/dist/log-memory.d.ts.map +1 -0
  121. package/dist/log-memory.js +101 -0
  122. package/dist/log-memory.js.map +1 -0
  123. package/dist/membership/holder.d.ts +35 -0
  124. package/dist/membership/holder.d.ts.map +1 -0
  125. package/dist/membership/holder.js +852 -0
  126. package/dist/membership/holder.js.map +1 -0
  127. package/dist/membership.d.ts +92 -0
  128. package/dist/membership.d.ts.map +1 -0
  129. package/dist/membership.js +157 -0
  130. package/dist/membership.js.map +1 -0
  131. package/dist/ports.d.ts +237 -0
  132. package/dist/ports.d.ts.map +1 -0
  133. package/dist/ports.js +2 -0
  134. package/dist/ports.js.map +1 -0
  135. package/dist/profile.d.ts +56 -0
  136. package/dist/profile.d.ts.map +1 -0
  137. package/dist/profile.js +193 -0
  138. package/dist/profile.js.map +1 -0
  139. package/dist/prompts.d.ts +14 -0
  140. package/dist/prompts.d.ts.map +1 -0
  141. package/dist/prompts.js +69 -0
  142. package/dist/prompts.js.map +1 -0
  143. package/dist/receive.d.ts +133 -0
  144. package/dist/receive.d.ts.map +1 -0
  145. package/dist/receive.js +298 -0
  146. package/dist/receive.js.map +1 -0
  147. package/dist/results.d.ts +158 -0
  148. package/dist/results.d.ts.map +1 -0
  149. package/dist/results.js +21 -0
  150. package/dist/results.js.map +1 -0
  151. package/dist/schemas.d.ts.map +1 -1
  152. package/dist/schemas.js +42 -38
  153. package/dist/schemas.js.map +1 -1
  154. package/dist/sha256.d.ts +3 -0
  155. package/dist/sha256.d.ts.map +1 -0
  156. package/dist/sha256.js +69 -0
  157. package/dist/sha256.js.map +1 -0
  158. package/dist/star.d.ts +31 -0
  159. package/dist/star.d.ts.map +1 -0
  160. package/dist/star.js +56 -0
  161. package/dist/star.js.map +1 -0
  162. package/dist/state-builder.d.ts +42 -0
  163. package/dist/state-builder.d.ts.map +1 -0
  164. package/dist/state-builder.js +100 -0
  165. package/dist/state-builder.js.map +1 -0
  166. package/dist/state.d.ts +853 -0
  167. package/dist/state.d.ts.map +1 -0
  168. package/dist/state.js +36 -0
  169. package/dist/state.js.map +1 -0
  170. package/dist/store-contract.d.ts +11 -0
  171. package/dist/store-contract.d.ts.map +1 -0
  172. package/dist/store-contract.js +189 -0
  173. package/dist/store-contract.js.map +1 -0
  174. package/dist/store-memory.d.ts +8 -0
  175. package/dist/store-memory.d.ts.map +1 -0
  176. package/dist/store-memory.js +17 -0
  177. package/dist/store-memory.js.map +1 -0
  178. package/dist/testing.d.ts +22 -0
  179. package/dist/testing.d.ts.map +1 -0
  180. package/dist/testing.js +21 -0
  181. package/dist/testing.js.map +1 -0
  182. package/dist/trust/continuity.d.ts +71 -0
  183. package/dist/trust/continuity.d.ts.map +1 -0
  184. package/dist/trust/continuity.js +1216 -0
  185. package/dist/trust/continuity.js.map +1 -0
  186. package/dist/trust/duties.d.ts +67 -0
  187. package/dist/trust/duties.d.ts.map +1 -0
  188. package/dist/trust/duties.js +179 -0
  189. package/dist/trust/duties.js.map +1 -0
  190. package/dist/trust/entries.d.ts +139 -0
  191. package/dist/trust/entries.d.ts.map +1 -0
  192. package/dist/trust/entries.js +694 -0
  193. package/dist/trust/entries.js.map +1 -0
  194. package/dist/trust/group-star.d.ts +43 -0
  195. package/dist/trust/group-star.d.ts.map +1 -0
  196. package/dist/trust/group-star.js +188 -0
  197. package/dist/trust/group-star.js.map +1 -0
  198. package/dist/trust/mapping.d.ts +56 -0
  199. package/dist/trust/mapping.d.ts.map +1 -0
  200. package/dist/trust/mapping.js +584 -0
  201. package/dist/trust/mapping.js.map +1 -0
  202. package/dist/trust/profile.d.ts +25 -0
  203. package/dist/trust/profile.d.ts.map +1 -0
  204. package/dist/trust/profile.js +249 -0
  205. package/dist/trust/profile.js.map +1 -0
  206. package/dist/trust/star.d.ts +208 -0
  207. package/dist/trust/star.d.ts.map +1 -0
  208. package/dist/trust/star.js +588 -0
  209. package/dist/trust/star.js.map +1 -0
  210. package/dist/trust/state.d.ts +83 -0
  211. package/dist/trust/state.d.ts.map +1 -0
  212. package/dist/trust/state.js +154 -0
  213. package/dist/trust/state.js.map +1 -0
  214. package/dist/util-freeze.d.ts +3 -0
  215. package/dist/util-freeze.d.ts.map +1 -0
  216. package/dist/util-freeze.js +11 -0
  217. package/dist/util-freeze.js.map +1 -0
  218. package/dist/views.d.ts +147 -0
  219. package/dist/views.d.ts.map +1 -0
  220. package/dist/views.js +268 -0
  221. package/dist/views.js.map +1 -0
  222. package/dist/visibility.d.ts +5 -5
  223. package/dist/visibility.d.ts.map +1 -1
  224. package/dist/visibility.js +22 -28
  225. package/dist/visibility.js.map +1 -1
  226. package/dist/wire.d.ts +178 -84
  227. package/dist/wire.d.ts.map +1 -1
  228. package/dist/wire.js.map +1 -1
  229. package/package.json +58 -11
  230. package/schemas/holder-state-v1.schema.json +3880 -0
  231. package/dist/holder.d.ts.map +0 -1
  232. package/dist/holder.js.map +0 -1
  233. package/dist/probe/acks.d.ts +0 -27
  234. package/dist/probe/acks.d.ts.map +0 -1
  235. package/dist/probe/acks.js +0 -152
  236. package/dist/probe/acks.js.map +0 -1
  237. package/dist/probe/continuity.d.ts +0 -20
  238. package/dist/probe/continuity.d.ts.map +0 -1
  239. package/dist/probe/continuity.js +0 -805
  240. package/dist/probe/continuity.js.map +0 -1
  241. package/dist/probe/deps.d.ts +0 -61
  242. package/dist/probe/deps.d.ts.map +0 -1
  243. package/dist/probe/deps.js +0 -54
  244. package/dist/probe/deps.js.map +0 -1
  245. package/dist/probe/encounter.d.ts +0 -26
  246. package/dist/probe/encounter.d.ts.map +0 -1
  247. package/dist/probe/encounter.js +0 -938
  248. package/dist/probe/encounter.js.map +0 -1
  249. package/dist/probe/introduce.d.ts +0 -70
  250. package/dist/probe/introduce.d.ts.map +0 -1
  251. package/dist/probe/introduce.js +0 -295
  252. package/dist/probe/introduce.js.map +0 -1
  253. package/dist/probe/membership.d.ts +0 -90
  254. package/dist/probe/membership.d.ts.map +0 -1
  255. package/dist/probe/membership.js +0 -450
  256. package/dist/probe/membership.js.map +0 -1
  257. package/dist/probe/trust.d.ts +0 -156
  258. package/dist/probe/trust.d.ts.map +0 -1
  259. package/dist/probe/trust.js +0 -1233
  260. package/dist/probe/trust.js.map +0 -1
  261. package/dist/probe.d.ts +0 -7
  262. package/dist/probe.d.ts.map +0 -1
  263. package/dist/probe.js +0 -42
  264. package/dist/probe.js.map +0 -1
@@ -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":"AAuLA,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,EAAU,WAAW,EAAE,MAAM,EAA0B,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAClI,OAAO,KAAK,EAAE,MAAM,EAAc,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAiB,MAAM,YAAY,CAAA;AAC/I,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAkB,aAAa,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEpG,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAO3D,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAe,gBAAgB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/G,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC/C,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAI/G,KAAK,gBAAgB,CAAC,CAAC,EAAE,CAAC,SAAS,WAAW,IAAI,CAAC,SAAS,OAAO,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAA;AAExF,gFAAgF;AAChF,MAAM,MAAM,UAAU,GAAG,gBAAgB,CAAC,WAAW,EAAE,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC,CAAA;AACzF,8FAA8F;AAC9F,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;AAErD;yEACyE;AACzE,MAAM,MAAM,YAAY,GAAG;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;AAE7E;mEACmE;AACnE,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAA;IACxC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAA;IAClB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAA;CAC7B;AAED;;uDAEuD;AACvD,MAAM,WAAW,QAAQ,CAAC,CAAC,GAAG,OAAO;IACnC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;IACjB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAA;CACxB;AAED;;qCAEqC;AACrC,MAAM,WAAW,cAAc;IAAG,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;CAAE;AAEtF;;;qEAGqE;AACrE,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,WAAW,CAAA;IAClB,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAA;IAC1B,MAAM,CAAC,EAAE,UAAU,EAAE,CAAA;IACrB,MAAM,CAAC,EAAE,IAAI,EAAE,CAAA;IACf,OAAO,CAAC,EAAE,cAAc,EAAE,CAAA;CAC3B;AAED;;0EAE0E;AAC1E,MAAM,WAAW,OAAO;IAAG,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,WAAW,CAAA;CAAE;AAyBzF,6EAA6E;AAC7E,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG;IAC1C,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAA;IACnD,0EAA0E;IAC1E,KAAK,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAA;CAC1G;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG;IAC3C;;qEAEiE;IACjE,KAAK,EAAE,QAAQ,GAAG,UAAU,CAAA;IAC5B,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,CAAC,GAAG,WAAW,CAAA;IAC7C;;;yCAGqC;IACrC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,WAAW,CAAA;IACzG;;;4EAGwE;IACxE,MAAM,CAAC,EAAE,IAAI,CAAA;IACb,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,GAAG,WAAW,CAAC,CAAA;IACnG;iFAC6E;IAC7E,KAAK,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,GAAG,WAAW,GAAG,aAAa,CAAA;CAClJ;AAED,kEAAkE;AAClE,MAAM,WAAW,OAAO,CAAC,CAAC,GAAG,OAAO;IAClC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC9B;4DACwD;IACxD,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAA;CAC9C;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,GAAG;IAClC,CAAC,EAAE,MAAM,CAAA;IACT,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAA;IACrD,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,KAAK,OAAO,CAAA;IAClE,KAAK,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,GAAG,SAAS,CAAA;CAClH;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,GAAG;IACnC,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,EAAE,CAAA;IACjE;8EAC0E;IAC1E,KAAK,CAAC,EAAE,aAAa,CAAC,MAAM,WAAW,CAAC,CAAA;IACxC,OAAO,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,CAAA;IACxC,KAAK,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CAC/G;AAED;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;AAE7F;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;IAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAA;CAAE,KAAK,OAAO,CAAA;AAEzJ;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,WAAW,CAAA;AAEtD,oEAAoE;AACpE,MAAM,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAA;AAE1I;;;;;GAKG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,GAAG;IAClC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,CAAC,CAAC,CAAA;IACzF,KAAK,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,GAAG,OAAO,CAAA;CAChJ;AAED,0DAA0D;AAC1D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IACpC,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IACrC;kDAC8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IACjC;kDAC8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IACzC;;;;gDAI4C;IAC5C,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC9B;;yEAEqE;IACrE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC7D;0EACsE;IACtE,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,KAAK,WAAW,CAAA;IACpE;yEACqE;IACrE,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC9D;2DACuD;IACvD,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC,CAAA;CACzD;AAED,kFAAkF;AAClF,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,KAAK,CAAA;IACZ,IAAI,EAAE,WAAW,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,GAAG,CAAC,EAAE,GAAG,CAAA;IACT,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;IAC5B,MAAM,CAAC,EAAE,YAAY,CAAA;CACtB;AAED;;;0DAG0D;AAC1D,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,QAAQ,KAAK,IAAI,CAAA;IAC3F;6EACyE;IACzE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,KAAK,MAAM,CAAA;CACtD;AAED,uEAAuE;AACvE,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE;IAAE,SAAS,EAAE,GAAG,CAAC;IAAC,MAAM,EAAE,WAAW,EAAE,CAAA;CAAE,KAAK,IAAI,CAAA;AAExF,qDAAqD;AACrD,MAAM,WAAW,cAAc;IAAG,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IAAC,SAAS,EAAE,GAAG,CAAA;CAAE;AAEhF,MAAM,WAAW,MAAM;IACrB,mDAAmD;IACnD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;QAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAC,CAAA;IAC5I,GAAG,CAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;IAClG;oEACgE;IAChE,IAAI,CAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;IACvC;uCACmC;IACnC,MAAM,CAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IAC5C;oCACgC;IAChC,MAAM,CAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;IACjE,kEAAkE;IAClE,OAAO,CAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;IAC5D,SAAS,CAAE,QAAQ,EAAE,cAAc,GAAG,MAAM,IAAI,CAAA;IAChD,QAAQ,IAAK,OAAO,CAAC,cAAc,CAAC,CAAA;CACrC;AAMD,iEAAiE;AACjE,eAAO,MAAM,eAAe;IAC1B,kCAAkC;uBACf,MAAM,KAAG,MAAM;IAClC,yEAAyE;;;IAGzE,oDAAoD;;EAEpD,CAAA;AAg/BF;;;;;GAKG;AACH,wBAAsB,YAAY,CAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,YAAY,EAAE,EAAE,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAMnI"}