@serfab/cadre-core 1.17.0 → 1.18.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 (144) hide show
  1. package/README.md +3 -2
  2. package/dist/cadre-invite-protocol.d.ts +35 -13
  3. package/dist/cadre-invite-protocol.js +90 -25
  4. package/dist/cadre-invite-protocol.js.map +1 -1
  5. package/dist/cadre-node.d.ts +586 -255
  6. package/dist/cadre-node.js +1176 -564
  7. package/dist/cadre-node.js.map +1 -1
  8. package/dist/control-cohort.d.ts +66 -9
  9. package/dist/control-cohort.js +67 -9
  10. package/dist/control-cohort.js.map +1 -1
  11. package/dist/control-database.d.ts +451 -193
  12. package/dist/control-database.js +701 -359
  13. package/dist/control-database.js.map +1 -1
  14. package/dist/control-formation-recorder.d.ts +46 -43
  15. package/dist/control-formation-recorder.js +77 -78
  16. package/dist/control-formation-recorder.js.map +1 -1
  17. package/dist/control-protocol-guard.d.ts +6 -0
  18. package/dist/control-protocol-guard.js +14 -2
  19. package/dist/control-protocol-guard.js.map +1 -1
  20. package/dist/control-schema-version.d.ts +48 -31
  21. package/dist/control-schema-version.js +67 -45
  22. package/dist/control-schema-version.js.map +1 -1
  23. package/dist/control-schema.d.ts +8 -8
  24. package/dist/control-schema.js +16 -16
  25. package/dist/control-schema.js.map +1 -1
  26. package/dist/control-write-retry.d.ts +42 -7
  27. package/dist/control-write-retry.js +87 -19
  28. package/dist/control-write-retry.js.map +1 -1
  29. package/dist/enrolled-machine-store.d.ts +3 -3
  30. package/dist/enrolled-machine-store.js +3 -3
  31. package/dist/formation-token.d.ts +48 -0
  32. package/dist/formation-token.js +26 -0
  33. package/dist/formation-token.js.map +1 -0
  34. package/dist/index.d.ts +14 -13
  35. package/dist/index.js +16 -13
  36. package/dist/index.js.map +1 -1
  37. package/dist/joined-strand-store.d.ts +26 -9
  38. package/dist/joined-strand-store.js +63 -24
  39. package/dist/joined-strand-store.js.map +1 -1
  40. package/dist/link-budget.d.ts +9 -7
  41. package/dist/link-budget.js +9 -7
  42. package/dist/link-budget.js.map +1 -1
  43. package/dist/member-redemption.d.ts +15 -9
  44. package/dist/member-redemption.js +13 -8
  45. package/dist/member-redemption.js.map +1 -1
  46. package/dist/membership-view.d.ts +91 -0
  47. package/dist/membership-view.js +110 -0
  48. package/dist/membership-view.js.map +1 -0
  49. package/dist/owner-grant-protocol.d.ts +11 -7
  50. package/dist/owner-grant-protocol.js +31 -17
  51. package/dist/owner-grant-protocol.js.map +1 -1
  52. package/dist/peer-addr-book.d.ts +10 -1
  53. package/dist/peer-addr-book.js +4 -3
  54. package/dist/peer-addr-book.js.map +1 -1
  55. package/dist/peer-join-backfill.d.ts +89 -20
  56. package/dist/peer-join-backfill.js +265 -108
  57. package/dist/peer-join-backfill.js.map +1 -1
  58. package/dist/pending-join-runner.d.ts +48 -18
  59. package/dist/pending-join-runner.js +74 -56
  60. package/dist/pending-join-runner.js.map +1 -1
  61. package/dist/seed-bootstrap.d.ts +47 -40
  62. package/dist/seed-bootstrap.js +66 -61
  63. package/dist/seed-bootstrap.js.map +1 -1
  64. package/dist/strand-database.d.ts +23 -2
  65. package/dist/strand-database.js +26 -6
  66. package/dist/strand-database.js.map +1 -1
  67. package/dist/strand-first-sync-gate.d.ts +176 -89
  68. package/dist/strand-first-sync-gate.js +288 -122
  69. package/dist/strand-first-sync-gate.js.map +1 -1
  70. package/dist/strand-formation-deadlines.d.ts +9 -9
  71. package/dist/strand-formation-deadlines.js +9 -9
  72. package/dist/strand-formation-manager.d.ts +23 -17
  73. package/dist/strand-formation-manager.js +46 -44
  74. package/dist/strand-formation-manager.js.map +1 -1
  75. package/dist/strand-formation-protocol.d.ts +5 -8
  76. package/dist/strand-formation-protocol.js +101 -16
  77. package/dist/strand-formation-protocol.js.map +1 -1
  78. package/dist/strand-instance-manager.d.ts +26 -17
  79. package/dist/strand-instance-manager.js +119 -50
  80. package/dist/strand-instance-manager.js.map +1 -1
  81. package/dist/strand-membership-reconciler.d.ts +16 -13
  82. package/dist/strand-membership-reconciler.js +30 -22
  83. package/dist/strand-membership-reconciler.js.map +1 -1
  84. package/dist/strand-membership-writer.d.ts +40 -28
  85. package/dist/strand-membership-writer.js +212 -153
  86. package/dist/strand-membership-writer.js.map +1 -1
  87. package/dist/strand-move.js +5 -2
  88. package/dist/strand-move.js.map +1 -1
  89. package/dist/strand-revocation-enforcer.d.ts +134 -60
  90. package/dist/strand-revocation-enforcer.js +144 -71
  91. package/dist/strand-revocation-enforcer.js.map +1 -1
  92. package/dist/strand-solicitation.d.ts +50 -39
  93. package/dist/strand-solicitation.js +10 -3
  94. package/dist/strand-solicitation.js.map +1 -1
  95. package/dist/strand-watcher.d.ts +80 -13
  96. package/dist/strand-watcher.js +152 -48
  97. package/dist/strand-watcher.js.map +1 -1
  98. package/dist/table-change-watch.d.ts +63 -0
  99. package/dist/table-change-watch.js +209 -0
  100. package/dist/table-change-watch.js.map +1 -0
  101. package/dist/timeout-scheduler.d.ts +4 -3
  102. package/dist/timeout-scheduler.js +4 -3
  103. package/dist/timeout-scheduler.js.map +1 -1
  104. package/dist/types.d.ts +90 -49
  105. package/dist/types.js +4 -4
  106. package/dist/types.js.map +1 -1
  107. package/package.json +8 -8
  108. package/src/cadre-invite-protocol.ts +119 -31
  109. package/src/cadre-node.ts +1282 -584
  110. package/src/control-cohort.ts +86 -9
  111. package/src/control-database.ts +848 -403
  112. package/src/control-formation-recorder.ts +359 -353
  113. package/src/control-protocol-guard.ts +16 -2
  114. package/src/control-schema-version.ts +101 -51
  115. package/src/control-schema.ts +16 -16
  116. package/src/control-write-retry.ts +91 -19
  117. package/src/delegate-admission.ts +351 -351
  118. package/src/enrolled-machine-store.ts +3 -3
  119. package/src/formation-token.ts +63 -0
  120. package/src/index.ts +30 -17
  121. package/src/joined-strand-store.ts +69 -24
  122. package/src/link-budget.ts +9 -7
  123. package/src/member-redemption.ts +20 -13
  124. package/src/membership-view.ts +144 -0
  125. package/src/owner-grant-protocol.ts +33 -18
  126. package/src/peer-addr-book.ts +4 -3
  127. package/src/peer-join-backfill.ts +971 -761
  128. package/src/pending-join-runner.ts +76 -53
  129. package/src/seed-bootstrap.ts +72 -67
  130. package/src/strand-database.ts +352 -322
  131. package/src/strand-first-sync-gate.ts +334 -134
  132. package/src/strand-formation-deadlines.ts +227 -227
  133. package/src/strand-formation-manager.ts +731 -725
  134. package/src/strand-formation-protocol.ts +122 -24
  135. package/src/strand-instance-manager.ts +2092 -2026
  136. package/src/strand-membership-reconciler.ts +33 -25
  137. package/src/strand-membership-writer.ts +2093 -2019
  138. package/src/strand-move.ts +5 -2
  139. package/src/strand-revocation-enforcer.ts +740 -654
  140. package/src/strand-solicitation.ts +61 -34
  141. package/src/strand-watcher.ts +175 -56
  142. package/src/table-change-watch.ts +285 -0
  143. package/src/timeout-scheduler.ts +29 -28
  144. package/src/types.ts +89 -51
package/README.md CHANGED
@@ -149,8 +149,9 @@ const { seed, encodedSeed } = await node.addDrone({ dronePeerId, droneMultiaddrs
149
149
 
150
150
  // The new machine starts with it: `cadre start --seed <encodedSeed> --pin-owner-key <owner key>`
151
151
 
152
- // Dial the drone now from the addresses addDrone kept (a drone cannot dial a
153
- // phone); otherwise the next reconcile pass, about every 15 s, does it
152
+ // Await the dial of the drone from the addresses addDrone kept (a drone cannot
153
+ // dial a phone); the row insert starts a pass that dials it anyway, about 50 ms
154
+ // later, and retries a failed dial after 15 s, 30 s, 60 s, then every 2 minutes
154
155
  await node.reconcileControlCohort();
155
156
  ```
156
157
 
@@ -22,7 +22,7 @@
22
22
  import type { Libp2p } from '@libp2p/interface';
23
23
  import { type ControlDatabase } from './control-database.js';
24
24
  import { MemberRedemptionHandler, type MemberRedemption, type MemberRedemptionHandlerOptions, type RedemptionAddressOutcome, type RedemptionRejection } from './member-redemption.js';
25
- import type { CadreInviteRow, CadreJoinProgress, SeedPeer } from './types.js';
25
+ import type { CadreInviteRow, CadreJoinProgress, PeerAddressRecord, SeedPeer } from './types.js';
26
26
  /** Protocol id for cadre invitation redemption (parallel to `/sereus/seed/1.0.0`). */
27
27
  export declare const CADRE_INVITE_PROTOCOL = "/sereus/cadre-invite/1.0.0";
28
28
  /**
@@ -76,17 +76,27 @@ export declare function encodeCadreInvitation(invitation: CadreInvitation): stri
76
76
  * that is not base64url JSON after it, or one that decodes to another shape or version.
77
77
  */
78
78
  export declare function decodeCadreInvitation(encoded: string): CadreInvitation;
79
+ /**
80
+ * The device's own address record as a request carries it: a {@link PeerAddressRecord} without
81
+ * the peer id, which the connection gives, and the key, which is the request's `peerKey`.
82
+ */
83
+ export type RedeemSelfRecord = Pick<PeerAddressRecord, 'addrs' | 'updatedAt' | 'profile' | 'sig'>;
79
84
  /** Device → member: one frame, the whole redemption. */
80
85
  export interface CadreInviteRedeemRequest {
81
- v: 1;
86
+ v: 2;
82
87
  /** The cadre the device believes it is joining; a machine serving another party refuses by name. */
83
88
  partyId: string;
84
89
  /** The owner-signed row from the bundle. */
85
90
  invite: CadreInviteRow;
86
91
  /** The device's ed25519 public key, base64url; must be the key behind the connecting peer id. */
87
92
  peerKey: string;
88
- /** The device's dialable addresses; empty for a phone. Stored on its `CadrePeer` row. */
89
- multiaddrs: string[];
93
+ /**
94
+ * The device's own address record for its `CadrePeer` row, self-signed for the invitation's
95
+ * party as `CadreNode.registerSelf` signs it (`signPeerRecord`); `addrs` is empty for a phone.
96
+ * The member stores `addrs` and, when the signature verifies over them, the rest of the
97
+ * record too ({@link admittedRecord}), so the device's first publish is its admission.
98
+ */
99
+ record: RedeemSelfRecord;
90
100
  /** Single-use nonce the device minted (`generateStampId`); both signatures cover it. */
91
101
  usageStampId: string;
92
102
  /** By `invitePrivateKey` over the `'redeem'` digest. */
@@ -209,8 +219,12 @@ export interface RedeemSigner {
209
219
  * (invitation key, `usageStampId`, device key) for the invitation's party. The same bytes
210
220
  * the schema verifies at the member (`cadreInviteRedeemMessage` / `cadreInviteConsentMessage`),
211
221
  * whose own `party_id()` must therefore be the party the bundle names.
222
+ *
223
+ * @param record - the device's address record, already signed for the invitation's party over
224
+ * sanitized addresses ({@link sanitizeAddrs}); copied in unchanged, since the signature
225
+ * covers the exact list.
212
226
  */
213
- export declare function signRedeemRequest(invitation: CadreInvitation, signer: RedeemSigner, usageStampId: string, multiaddrs: string[]): CadreInviteRedeemRequest;
227
+ export declare function signRedeemRequest(invitation: CadreInvitation, signer: RedeemSigner, usageStampId: string, record: RedeemSelfRecord): CadreInviteRedeemRequest;
214
228
  /**
215
229
  * The device's check on an acceptance: the same party, the same invitation key, and a row
216
230
  * signed by an issuer the device pinned from the bundle. Throws
@@ -224,7 +238,7 @@ export declare function signRedeemRequest(invitation: CadreInvitation, signer: R
224
238
  */
225
239
  export declare function verifyRedeemReply(reply: CadreInviteAccepted, invitation: CadreInvitation, isTrustedIssuer: (ownerKey: string) => boolean): void;
226
240
  /** The control-database surface a redemption needs; a `ControlDatabase` satisfies it. */
227
- export type CadreInviteStore = Pick<ControlDatabase, 'seatCadreInvite' | 'isCadreInviteLive' | 'redeemCadreInvite' | 'querySeedPeers'>;
241
+ export type CadreInviteStore = Pick<ControlDatabase, 'queryCadreInvite' | 'seatCadreInvite' | 'isCadreInviteLive' | 'redeemCadreInvite' | 'querySeedPeers'>;
228
242
  export interface CadreInviteHandlerOptions extends MemberRedemptionHandlerOptions {
229
243
  /** This member's peer id: the reply's peer list marks it preferred, since the device just reached it. */
230
244
  peerId: string;
@@ -234,11 +248,11 @@ export interface CadreInviteHandlerOptions extends MemberRedemptionHandlerOption
234
248
  * Member side of the invitation protocol (`MemberRedemptionHandler` has the shape): after the
235
249
  * request's shape, it checks the party, the connecting identity (an ed25519 peer id is an
236
250
  * identity multihash of the very key, and this is the only layer that can check the pair),
237
- * both signatures and a targeted invitation's device, then seats the row from the bundle and
238
- * redeems. An issuer this member does not know as an owner is the one retryable refusal left:
239
- * the device tries the next address, which may hold the issuer's row.
251
+ * both signatures and a targeted invitation's device, then seats the row from the bundle when
252
+ * this member holds none and redeems. An issuer this member does not know as an owner is the
253
+ * one retryable refusal left: the device tries the next address, which may hold the issuer's row.
240
254
  */
241
- export declare class CadreInviteHandler extends MemberRedemptionHandler<CadreInviteRedeemRequest, CadreInviteRedeemReply> {
255
+ export declare class CadreInviteHandler extends MemberRedemptionHandler<CadreInviteRedeemRequest, CadreInviteRedeemReply, CadreInviteRow> {
242
256
  private readonly peerId;
243
257
  private readonly store;
244
258
  protected readonly busyRefusal: RedemptionRejection<"busy">;
@@ -247,9 +261,17 @@ export declare class CadreInviteHandler extends MemberRedemptionHandler<CadreInv
247
261
  constructor(options: CadreInviteHandlerOptions);
248
262
  protected isWellFormedRequest(value: unknown): value is CadreInviteRedeemRequest;
249
263
  protected checkRequest(request: CadreInviteRedeemRequest, remotePeerId: string): CadreInviteRejection | null;
250
- protected isLive(request: CadreInviteRedeemRequest): Promise<boolean>;
251
- /** The two writes — the seat (its own transaction; a no-op when held) and the redemption — each answered by name when it fails. */
252
- protected redeemAdmitted(request: CadreInviteRedeemRequest, remotePeerId: string): Promise<CadreInviteRedeemReply>;
264
+ protected readHeld(request: CadreInviteRedeemRequest): Promise<CadreInviteRow | null>;
265
+ protected isLive(request: CadreInviteRedeemRequest, held: CadreInviteRow | null): Promise<boolean>;
266
+ /**
267
+ * The two writes — the seat (its own transaction), only when this member holds no row, and
268
+ * the redemption — each answered by name when it fails. The held row is carried into the
269
+ * redemption so it is not read again in the write lock; after a fresh seat nothing is carried
270
+ * and the redemption reads the row it seated, since the bundle's copy is the requester's.
271
+ */
272
+ protected redeemAdmitted(request: CadreInviteRedeemRequest, remotePeerId: string, held: CadreInviteRow | null): Promise<CadreInviteRedeemReply>;
273
+ /** Seat the bundle's copy of the row; a refusal answered by name, or null once it is held. */
274
+ private seat;
253
275
  /** Dial hints are an optimization; a failed read costs the device its hints, not its membership. */
254
276
  private peersBestEffort;
255
277
  }
@@ -25,6 +25,7 @@ import { toString as uint8ArrayToString, fromString as uint8ArrayFromString } fr
25
25
  import { sign } from '@optimystic/quereus-plugin-crypto';
26
26
  import { cadreInviteRedeemMessage, cadreInviteConsentMessage, CadreInviteIssuerUnknownError, InvitationExhaustedError } from './control-database.js';
27
27
  import { verifyCadreInviteRow, verifyCadreInviteRedemption } from './peer-authorization.js';
28
+ import { verifyPeerRecordSignature } from './peer-record.js';
28
29
  import { ed25519PublicKeyB64FromPeerId } from './ed25519-key.js';
29
30
  import { CADRE_INVITATION_PREFIX, CADRE_JOIN_REQUEST_PREFIX, OWNER_GRANT_PREFIX, OWNER_KEY_EXPORT_STEM } from './cadre-join-request.js';
30
31
  import { MemberRedemptionHandler, constraintRefusal, dialRedemption, dialRedemptionInPasses, isBoundedString, isEd25519KeyB64, isNullableBoundedString, isNullableUseCap, rejection, writeFailureRefusal } from './member-redemption.js';
@@ -167,19 +168,51 @@ export function isWellFormedCadreInviteRow(value) {
167
168
  && isEd25519KeyB64(row.issuerKey)
168
169
  && isBoundedString(row.issuerSig);
169
170
  }
171
+ /**
172
+ * The record's other fields are left to {@link admittedRecord}: a bad value there costs the
173
+ * device its signature on the row, not its admission.
174
+ */
170
175
  function isWellFormedRedeemRequest(value) {
171
176
  if (typeof value !== 'object' || value === null)
172
177
  return false;
173
- const { v, partyId, invite, peerKey, multiaddrs, usageStampId, inviteSig, peerSig } = value;
174
- return v === 1
178
+ const { v, partyId, invite, peerKey, record, usageStampId, inviteSig, peerSig } = value;
179
+ return v === 2
175
180
  && isBoundedString(partyId)
176
181
  && isWellFormedCadreInviteRow(invite)
177
182
  && isEd25519KeyB64(peerKey)
178
- && Array.isArray(multiaddrs)
183
+ && typeof record === 'object' && record !== null && Array.isArray(record.addrs)
179
184
  && isBoundedString(usageStampId)
180
185
  && isBoundedString(inviteSig)
181
186
  && isBoundedString(peerSig);
182
187
  }
188
+ /**
189
+ * Judge the device's record (`request.record`) for its admission row. The signature covers the
190
+ * exact address list, so it is kept only when sanitizing dropped nothing, the profile is one the
191
+ * schema's `KnownProfile` check admits, the stamp and signature are in their stored forms, and
192
+ * the signature verifies for `partyId` under the device's key. Anything less admits the device
193
+ * with its addresses and no signature, as an owner-written row is, and the device's next
194
+ * publish fills it in. No clock check: a stamp in the future or the past is one the device's own
195
+ * self-publish could write too.
196
+ */
197
+ function admittedRecord(partyId, remotePeerId, request) {
198
+ const { addrs: offered, updatedAt, profile, sig } = request.record;
199
+ const addrs = sanitizeAddrs(offered);
200
+ const unsigned = (because) => ({ addrs, signed: null, unsignedBecause: because });
201
+ // Sanitizing only drops entries, so an unchanged length is an unchanged list.
202
+ if (!Array.isArray(offered) || addrs.length !== offered.length) {
203
+ return unsigned('sanitizing changed the signed address list');
204
+ }
205
+ if (profile !== null && profile !== 'transaction' && profile !== 'storage') {
206
+ return unsigned('unknown profile');
207
+ }
208
+ if (typeof updatedAt !== 'number' || !Number.isSafeInteger(updatedAt) || updatedAt <= 0 || !isBoundedString(sig)) {
209
+ return unsigned('malformed stamp or signature');
210
+ }
211
+ if (!verifyPeerRecordSignature(partyId, { peerId: remotePeerId, publicKey: request.peerKey, addrs, updatedAt, profile, sig })) {
212
+ return unsigned('signature does not verify');
213
+ }
214
+ return { addrs, signed: { updatedAt, profile, sig } };
215
+ }
183
216
  /**
184
217
  * Keep only parsable, distinct multiaddr strings, capped at {@link MAX_ADDRS}, order kept.
185
218
  * Applied on both sides: the member bounds what it stores on the device's row, the device
@@ -237,16 +270,20 @@ function decodeAccepted(reply) {
237
270
  * (invitation key, `usageStampId`, device key) for the invitation's party. The same bytes
238
271
  * the schema verifies at the member (`cadreInviteRedeemMessage` / `cadreInviteConsentMessage`),
239
272
  * whose own `party_id()` must therefore be the party the bundle names.
273
+ *
274
+ * @param record - the device's address record, already signed for the invitation's party over
275
+ * sanitized addresses ({@link sanitizeAddrs}); copied in unchanged, since the signature
276
+ * covers the exact list.
240
277
  */
241
- export function signRedeemRequest(invitation, signer, usageStampId, multiaddrs) {
278
+ export function signRedeemRequest(invitation, signer, usageStampId, record) {
242
279
  const fields = { inviteKey: invitation.invite.key, usageStampId, peerKey: signer.peerKey };
243
280
  const signB64 = (message, privateKey) => sign(message, privateKey, 'ed25519', 'bytes', 'base64url', 'base64url');
244
281
  return {
245
- v: 1,
282
+ v: 2,
246
283
  partyId: invitation.partyId,
247
284
  invite: invitation.invite,
248
285
  peerKey: signer.peerKey,
249
- multiaddrs: sanitizeAddrs(multiaddrs),
286
+ record: { addrs: [...record.addrs], updatedAt: record.updatedAt, profile: record.profile, sig: record.sig },
250
287
  usageStampId,
251
288
  inviteSig: signB64(cadreInviteRedeemMessage(invitation.partyId, fields), invitation.invitePrivateKey),
252
289
  peerSig: signB64(cadreInviteConsentMessage(invitation.partyId, fields), signer.peerPrivateKey)
@@ -287,9 +324,9 @@ const REDEEM_CONSTRAINT_CODES = [
287
324
  * Member side of the invitation protocol (`MemberRedemptionHandler` has the shape): after the
288
325
  * request's shape, it checks the party, the connecting identity (an ed25519 peer id is an
289
326
  * identity multihash of the very key, and this is the only layer that can check the pair),
290
- * both signatures and a targeted invitation's device, then seats the row from the bundle and
291
- * redeems. An issuer this member does not know as an owner is the one retryable refusal left:
292
- * the device tries the next address, which may hold the issuer's row.
327
+ * both signatures and a targeted invitation's device, then seats the row from the bundle when
328
+ * this member holds none and redeems. An issuer this member does not know as an owner is the
329
+ * one retryable refusal left: the device tries the next address, which may hold the issuer's row.
293
330
  */
294
331
  export class CadreInviteHandler extends MemberRedemptionHandler {
295
332
  constructor(options) {
@@ -319,27 +356,40 @@ export class CadreInviteHandler extends MemberRedemptionHandler {
319
356
  }
320
357
  return null;
321
358
  }
322
- isLive(request) {
323
- return this.store.isCadreInviteLive(request.invite);
359
+ readHeld(request) {
360
+ return this.store.queryCadreInvite(request.invite.key);
324
361
  }
325
- /** The two writes — the seat (its own transaction; a no-op when held) and the redemption — each answered by name when it fails. */
326
- async redeemAdmitted(request, remotePeerId) {
327
- try {
328
- await this.store.seatCadreInvite(request.invite);
362
+ isLive(request, held) {
363
+ return this.store.isCadreInviteLive(request.invite, held);
364
+ }
365
+ /**
366
+ * The two writes — the seat (its own transaction), only when this member holds no row, and
367
+ * the redemption — each answered by name when it fails. The held row is carried into the
368
+ * redemption so it is not read again in the write lock; after a fresh seat nothing is carried
369
+ * and the redemption reads the row it seated, since the bundle's copy is the requester's.
370
+ */
371
+ async redeemAdmitted(request, remotePeerId, held) {
372
+ if (held === null) {
373
+ const refused = await this.seat(request, remotePeerId);
374
+ if (refused)
375
+ return refused;
329
376
  }
330
- catch (error) {
331
- if (error instanceof CadreInviteIssuerUnknownError) {
332
- return rejection('issuer-unknown', 'The invitation\'s issuer is not known as an owner here');
333
- }
334
- log('seating invitation %s from %s failed: %o', request.invite.key, remotePeerId, error);
335
- return constraintRefusal(error, REDEEM_CONSTRAINT_CODES) ?? writeFailureRefusal(error);
377
+ // Built before the write: the `CadrePeer` membership view is normally warm then (the
378
+ // connection gate read it when the device connected), and the redemption's commit drops it.
379
+ // The list lacks the device's own row, which the device drops from it anyway.
380
+ const peers = await this.peersBestEffort();
381
+ const record = admittedRecord(this.partyId, remotePeerId, request);
382
+ if (record.signed === null) {
383
+ log('admitting %s without its own record signature: %s', remotePeerId, record.unsignedBecause);
336
384
  }
337
385
  try {
338
386
  const result = await this.store.redeemCadreInvite({
339
387
  inviteKey: request.invite.key,
388
+ ...(held ? { held } : {}),
340
389
  peerId: remotePeerId,
341
390
  peerKey: request.peerKey,
342
- multiaddrs: sanitizeAddrs(request.multiaddrs),
391
+ multiaddrs: record.addrs,
392
+ ...(record.signed ? { record: record.signed } : {}),
343
393
  usageStampId: request.usageStampId,
344
394
  inviteSig: request.inviteSig,
345
395
  peerSig: request.peerSig
@@ -353,9 +403,24 @@ export class CadreInviteHandler extends MemberRedemptionHandler {
353
403
  log('redeeming invitation %s for %s failed: %o', request.invite.key, remotePeerId, error);
354
404
  return constraintRefusal(error, REDEEM_CONSTRAINT_CODES) ?? writeFailureRefusal(error);
355
405
  }
356
- // The row as held: the seat inserted this copy verbatim, or found the same row (its key
357
- // is the primary key and every column is under the issuer's signature).
358
- return { accepted: true, partyId: this.partyId, invite: request.invite, peers: await this.peersBestEffort() };
406
+ // The row as held: read before the write, or the bundle's copy the seat inserted verbatim
407
+ // or found already held (its key is the primary key and every column is under the issuer's
408
+ // signature).
409
+ return { accepted: true, partyId: this.partyId, invite: held ?? request.invite, peers };
410
+ }
411
+ /** Seat the bundle's copy of the row; a refusal answered by name, or null once it is held. */
412
+ async seat(request, remotePeerId) {
413
+ try {
414
+ await this.store.seatCadreInvite(request.invite);
415
+ return null;
416
+ }
417
+ catch (error) {
418
+ if (error instanceof CadreInviteIssuerUnknownError) {
419
+ return rejection('issuer-unknown', 'The invitation\'s issuer is not known as an owner here');
420
+ }
421
+ log('seating invitation %s from %s failed: %o', request.invite.key, remotePeerId, error);
422
+ return constraintRefusal(error, REDEEM_CONSTRAINT_CODES) ?? writeFailureRefusal(error);
423
+ }
359
424
  }
360
425
  /** Dial hints are an optimization; a failed read costs the device its hints, not its membership. */
361
426
  async peersBestEffort() {
@@ -1 +1 @@
1
- {"version":3,"file":"cadre-invite-protocol.js","sourceRoot":"","sources":["../src/cadre-invite-protocol.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cadre-invite-protocol.js","sourceRoot":"","sources":["../src/cadre-invite-protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACjG,OAAO,EAAE,IAAI,EAAE,MAAM,mCAAmC,CAAC;AACzD,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,6BAA6B,EAC7B,wBAAwB,EAEzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAC5F,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACxI,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,eAAe,EACf,eAAe,EACf,uBAAuB,EACvB,gBAAgB,EAChB,SAAS,EACT,mBAAmB,EAQpB,MAAM,wBAAwB,CAAC;AAGhC,MAAM,GAAG,GAAG,KAAK,CAAC,2BAA2B,CAAC,CAAC;AAE/C,sFAAsF;AACtF,MAAM,CAAC,MAAM,qBAAqB,GAAG,4BAA4B,CAAC;AAElE,yFAAyF;AACzF,MAAM,KAAK,GAAG,kBAAkB,CAAC;AAEjC,iGAAiG;AACjG,MAAM,SAAS,GAAG,EAAE,CAAC;AAErB,gGAAgG;AAChG,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAE9B,kDAAkD;AAClD,MAAM,eAAe,GAAG,GAAG,CAAC;AAuC5B;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,UAA2B;IAC/D,OAAO,GAAG,uBAAuB,GAAG,kBAAkB,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC;AAC9H,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,OAAO,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,oHAAoH,CAAC,CAAC;IACxI,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,gGAAgG,CAAC,CAAC;IACpH,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,CAAC,yBAAyB,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,+FAA+F,CAAC,CAAC;IACnH,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,uBAAuB,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,qCAAqC,uBAAuB,4BAA4B,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChK,CAAC;IACD,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAClI,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,oDAAoD,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1F,CAAC;IACD,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,2BAA2B,CAAC,KAAc;IACjD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,KAAgC,CAAC;IACtG,OAAO,CAAC,KAAK,CAAC;WACT,eAAe,CAAC,OAAO,CAAC;WACxB,eAAe,CAAC,gBAAgB,CAAC;WACjC,0BAA0B,CAAC,MAAM,CAAC;WAClC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;WAClG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI,kBAAkB,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;AACxH,CAAC;AAgED,2FAA2F;AAC3F,MAAM,CAAC,MAAM,gCAAgC,GAAwD;IACnG,gBAAgB,EAAE,IAAI;IACtB,gBAAgB,EAAE,KAAK;IACvB,cAAc,EAAE,KAAK;IACrB,gBAAgB,EAAE,KAAK;IACvB,MAAM,EAAE,IAAI;IACZ,UAAU,EAAE,IAAI;IAChB,UAAU,EAAE,IAAI;CACjB,CAAC;AAEF,oGAAoG;AACpG,MAAM,UAAU,0BAA0B,CAAC,KAAc;IACvD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;AACpH,CAAC;AAiCD,gFAAgF;AAEhF;;;;GAIG;AACH,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IAKjD,kGAAkG;IAClG,YAAY,IAAa,EAAE,MAAe;QACxC,MAAM,IAAI,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC;QACxE,KAAK,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;QACvC,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC;QACrE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,KAAK,cAAc,IAAI,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/F,CAAC;CACF;AAKD;;;GAGG;AACH,MAAM,OAAO,2BAA4B,SAAQ,KAAK;IAGpD,YAAqB,QAA8C;QACjE,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;YACzB,CAAC,CAAC,2CAA2C;YAC7C,CAAC,CAAC,wDAAwD,QAAQ,CAAC,MAAM,gBAAgB;kBACrF,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAJtE,aAAQ,GAAR,QAAQ,CAAsC;QAF1D,cAAS,GAAG,IAAI,CAAC;QAOxB,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAC;IAC5C,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IAGrD,YAAY,OAAe;QACzB,KAAK,CAAC,mCAAmC,OAAO,EAAE,CAAC,CAAC;QAH7C,cAAS,GAAG,KAAK,CAAC;QAIzB,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;IAC7C,CAAC;CACF;AAED,gFAAgF;AAEhF,4FAA4F;AAC5F,MAAM,UAAU,0BAA0B,CAAC,KAAc;IACvD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,OAAO,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;WAC1B,uBAAuB,CAAC,GAAG,CAAC,MAAM,CAAC;WACnC,uBAAuB,CAAC,GAAG,CAAC,SAAS,CAAC;WACtC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC;WAC/B,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;WAC5B,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC;WAC9B,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,SAAS,yBAAyB,CAAC,KAAc;IAC/C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,KAAgC,CAAC;IACnH,OAAO,CAAC,KAAK,CAAC;WACT,eAAe,CAAC,OAAO,CAAC;WACxB,0BAA0B,CAAC,MAAM,CAAC;WAClC,eAAe,CAAC,OAAO,CAAC;WACxB,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAE,MAAkC,CAAC,KAAK,CAAC;WACzG,eAAe,CAAC,YAAY,CAAC;WAC7B,eAAe,CAAC,SAAS,CAAC;WAC1B,eAAe,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAYD;;;;;;;;GAQG;AACH,SAAS,cAAc,CAAC,OAAe,EAAE,YAAoB,EAAE,OAA6D;IAC1H,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,MAA0D,CAAC;IACvH,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,CAAC,OAAe,EAAkB,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1G,8EAA8E;IAC9E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;QAC/D,OAAO,QAAQ,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,aAAa,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC3E,OAAO,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;QACjH,OAAO,QAAQ,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QAC9H,OAAO,QAAQ,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC;AACxD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,GAAG,CAAC,MAAM,IAAI,SAAS;YAAE,MAAM;QACnC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,SAAS;QACzD,IAAI,CAAC;YACH,SAAS,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;YACnD,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,kGAAkG;AAClG,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,MAAM,GAAG,GAAe,EAAE,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,GAAG,CAAC,MAAM,IAAI,eAAe;YAAE,MAAM;QACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;YAAE,SAAS;QAC1D,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,KAAgC,CAAC;QAC3E,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;YAAE,SAAS;QACvC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,SAAS,KAAK,IAAI,EAAE,CAAC,CAAC;IAC7F,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,uGAAuG;AACvG,SAAS,cAAc,CAAC,KAA8B;IACpD,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACjF,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;IAC9F,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;AAC7G,CAAC;AAYD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAC/B,UAA2B,EAC3B,MAAoB,EACpB,YAAoB,EACpB,MAAwB;IAExB,MAAM,MAAM,GAAG,EAAE,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IAC3F,MAAM,OAAO,GAAG,CAAC,OAAmB,EAAE,UAAkB,EAAU,EAAE,CAClE,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,CAAW,CAAC;IACpF,OAAO;QACL,CAAC,EAAE,CAAC;QACJ,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE;QAC3G,YAAY;QACZ,SAAS,EAAE,OAAO,CAAC,wBAAwB,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,UAAU,CAAC,gBAAgB,CAAC;QACrG,OAAO,EAAE,OAAO,CAAC,yBAAyB,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;KAC/F,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAA0B,EAC1B,UAA2B,EAC3B,eAA8C;IAE9C,IAAI,KAAK,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,EAAE,CAAC;QACzC,MAAM,IAAI,4BAA4B,CAAC,2BAA2B,KAAK,CAAC,OAAO,0BAA0B,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;IACjI,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAC/C,MAAM,IAAI,4BAA4B,CAAC,gDAAgD,CAAC,CAAC;IAC3F,CAAC;IACD,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,4BAA4B,CAAC,+EAA+E,CAAC,CAAC;IAC1H,CAAC;IACD,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,4BAA4B,CAAC,sDAAsD,CAAC,CAAC;IACjG,CAAC;AACH,CAAC;AAaD,wFAAwF;AACxF,MAAM,uBAAuB,GAAkE;IAC7F,CAAC,uCAAuC,EAAE,cAAc,EAAE,sFAAsF,CAAC;IACjJ,CAAC,uEAAuE,EAAE,gBAAgB,EAAE,gDAAgD,CAAC;IAC7I,CAAC,uCAAuC,EAAE,cAAc,EAAE,8BAA8B,CAAC;CAC1F,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,OAAO,kBAAmB,SAAQ,uBAAyF;IAO/H,YAAY,OAAkC;QAC5C,KAAK,CAAC,cAAc,EAAE,qBAAqB,EAAE,OAAO,CAAC,CAAC;QALrC,gBAAW,GAAG,SAAS,CAAC,MAAM,EAAE,iCAAiC,CAAC,CAAC;QACnE,oBAAe,GAAG,SAAS,CAAC,UAAU,EAAE,2BAA2B,CAAC,CAAC;QACrE,qBAAgB,GAAG,SAAS,CAAC,gBAAgB,EAAE,8BAA8B,CAAC,CAAC;QAIhG,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,CAAC;IAES,mBAAmB,CAAC,KAAc;QAC1C,OAAO,yBAAyB,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAES,YAAY,CAAC,OAAiC,EAAE,YAAoB;QAC5E,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;YACrC,OAAO,SAAS,CAAC,gBAAgB,EAAE,mCAAmC,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,6BAA6B,CAAC,YAAY,CAAC,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC;YACpE,OAAO,SAAS,CAAC,gBAAgB,EAAE,6CAA6C,CAAC,CAAC;QACpF,CAAC;QACD,MAAM,MAAM,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;QAC/G,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3F,OAAO,SAAS,CAAC,gBAAgB,EAAE,yCAAyC,CAAC,CAAC;QAChF,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YAC7E,OAAO,SAAS,CAAC,gBAAgB,EAAE,qCAAqC,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAES,QAAQ,CAAC,OAAiC;QAClD,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACzD,CAAC;IAES,MAAM,CAAC,OAAiC,EAAE,IAA2B;QAC7E,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC;IAED;;;;;OAKG;IACO,KAAK,CAAC,cAAc,CAAC,OAAiC,EAAE,YAAoB,EAAE,IAA2B;QACjH,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YACvD,IAAI,OAAO;gBAAE,OAAO,OAAO,CAAC;QAC9B,CAAC;QACD,qFAAqF;QACrF,4FAA4F;QAC5F,8EAA8E;QAC9E,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QACnE,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YAC3B,GAAG,CAAC,mDAAmD,EAAE,YAAY,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;QACjG,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;gBAChD,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG;gBAC7B,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzB,MAAM,EAAE,YAAY;gBACpB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,UAAU,EAAE,MAAM,CAAC,KAAK;gBACxB,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnD,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB,CAAC,CAAC;YACH,GAAG,CAAC,iDAAiD,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;QACjH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,wBAAwB,EAAE,CAAC;gBAC9C,OAAO,SAAS,CAAC,cAAc,EAAE,iCAAiC,CAAC,CAAC;YACtE,CAAC;YACD,GAAG,CAAC,2CAA2C,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;YAC1F,OAAO,iBAAiB,CAAC,KAAK,EAAE,uBAAuB,CAAC,IAAI,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACzF,CAAC;QACD,0FAA0F;QAC1F,2FAA2F;QAC3F,cAAc;QACd,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;IAC1F,CAAC;IAED,8FAA8F;IACtF,KAAK,CAAC,IAAI,CAAC,OAAiC,EAAE,YAAoB;QACxE,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACjD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,6BAA6B,EAAE,CAAC;gBACnD,OAAO,SAAS,CAAC,gBAAgB,EAAE,wDAAwD,CAAC,CAAC;YAC/F,CAAC;YACD,GAAG,CAAC,0CAA0C,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;YACzF,OAAO,iBAAiB,CAAC,KAAK,EAAE,uBAAuB,CAAC,IAAI,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IAED,oGAAoG;IAC5F,KAAK,CAAC,eAAe;QAC3B,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,qEAAqE,EAAE,KAAK,CAAC,CAAC;YAClF,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;CACF;AAuBD,4GAA4G;AAC5G,SAAS,gBAAgB,CAAC,OAA+B;IACvD,OAAO;QACL,KAAK,EAAE,KAAK;QACZ,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,qBAAqB;QACvD,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO;QACnC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,cAAc;QACd,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,wBAAwB,CAAC,IAAI,EAAE,MAAM,CAAC;QACrE,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,eAAe,CAAC;QAChG,WAAW,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,2BAA2B,CAAC,QAAQ,CAAC;QACpE,GAAG,CAAC,OAAO,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9F,GAAG,CAAC,OAAO,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9F,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtD,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,OAA+B;IAC3E,OAAO,cAAc,CAAC,IAAI,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;AACzD,CAAC;AASD;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,OAA8B;IACzE,MAAM,MAAM,GAAqD;QAC/D,GAAG,gBAAgB,CAAC,OAAO,CAAC;QAC5B,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS;QAC9C,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,wBAAwB,CAAC,cAAc,EAAE,oDAAoD,CAAC;QACjH,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClE,CAAC;IACF,OAAO,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC9C,CAAC"}