@serfab/cadre-core 1.14.0 → 1.15.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/README.md +293 -274
- package/dist/cadre-invite-protocol.d.ts +64 -29
- package/dist/cadre-invite-protocol.js +207 -38
- package/dist/cadre-invite-protocol.js.map +1 -1
- package/dist/cadre-join-request.d.ts +42 -0
- package/dist/cadre-join-request.js +144 -0
- package/dist/cadre-join-request.js.map +1 -0
- package/dist/cadre-node.d.ts +375 -79
- package/dist/cadre-node.js +758 -186
- package/dist/cadre-node.js.map +1 -1
- package/dist/control-database.d.ts +92 -12
- package/dist/control-database.js +323 -142
- package/dist/control-database.js.map +1 -1
- package/dist/control-schema.d.ts +1 -1
- package/dist/control-schema.js +19 -3
- package/dist/control-schema.js.map +1 -1
- package/dist/ed25519-key.d.ts +7 -9
- package/dist/ed25519-key.js +20 -10
- package/dist/ed25519-key.js.map +1 -1
- package/dist/fetch-impl.d.ts +12 -0
- package/dist/fetch-impl.js +23 -0
- package/dist/fetch-impl.js.map +1 -0
- package/dist/file-durable-slot.js +2 -1
- package/dist/file-durable-slot.js.map +1 -1
- package/dist/file-safe-name.d.ts +25 -0
- package/dist/file-safe-name.js +29 -0
- package/dist/file-safe-name.js.map +1 -0
- package/dist/formation-approval.js +5 -11
- package/dist/formation-approval.js.map +1 -1
- package/dist/fs-atomic.d.ts +0 -19
- package/dist/fs-atomic.js +3 -24
- package/dist/fs-atomic.js.map +1 -1
- package/dist/index.d.ts +12 -5
- package/dist/index.js +31 -6
- package/dist/index.js.map +1 -1
- package/dist/invitation-bootstrap.d.ts +50 -12
- package/dist/invitation-bootstrap.js +76 -13
- package/dist/invitation-bootstrap.js.map +1 -1
- package/dist/joined-strand-store.d.ts +7 -0
- package/dist/joined-strand-store.js +9 -0
- package/dist/joined-strand-store.js.map +1 -1
- package/dist/key-store-file.js +2 -1
- package/dist/key-store-file.js.map +1 -1
- package/dist/link-budget.d.ts +9 -4
- package/dist/link-budget.js +9 -4
- package/dist/link-budget.js.map +1 -1
- package/dist/machine-removal.d.ts +78 -0
- package/dist/machine-removal.js +166 -0
- package/dist/machine-removal.js.map +1 -0
- package/dist/membership-connection-gater.d.ts +6 -5
- package/dist/membership-connection-gater.js +6 -5
- package/dist/membership-connection-gater.js.map +1 -1
- package/dist/node-claim-payload.d.ts +55 -0
- package/dist/node-claim-payload.js +108 -4
- package/dist/node-claim-payload.js.map +1 -1
- package/dist/node-default-transports.d.ts +27 -0
- package/dist/node-default-transports.js +35 -0
- package/dist/node-default-transports.js.map +1 -0
- package/dist/node-transports.d.ts +30 -0
- package/dist/node-transports.js +40 -0
- package/dist/node-transports.js.map +1 -0
- package/dist/peer-dial.d.ts +124 -27
- package/dist/peer-dial.js +254 -30
- package/dist/peer-dial.js.map +1 -1
- package/dist/peer-join-backfill.js +6 -0
- package/dist/peer-join-backfill.js.map +1 -1
- package/dist/peer-record.d.ts +6 -45
- package/dist/peer-record.js +8 -50
- package/dist/peer-record.js.map +1 -1
- package/dist/primary-lan-address.d.ts +8 -0
- package/dist/primary-lan-address.js +46 -0
- package/dist/primary-lan-address.js.map +1 -0
- package/dist/provider/client.d.ts +131 -0
- package/dist/provider/client.js +226 -0
- package/dist/provider/client.js.map +1 -0
- package/dist/provider/descriptor.d.ts +41 -0
- package/dist/provider/descriptor.js +103 -0
- package/dist/provider/descriptor.js.map +1 -0
- package/dist/provider/index.d.ts +9 -0
- package/dist/provider/index.js +10 -0
- package/dist/provider/index.js.map +1 -0
- package/dist/provider/oauth.d.ts +125 -0
- package/dist/provider/oauth.js +199 -0
- package/dist/provider/oauth.js.map +1 -0
- package/dist/provider/rent-node.d.ts +101 -0
- package/dist/provider/rent-node.js +220 -0
- package/dist/provider/rent-node.js.map +1 -0
- package/dist/relay-addrs.d.ts +9 -4
- package/dist/relay-addrs.js +9 -4
- package/dist/relay-addrs.js.map +1 -1
- package/dist/relay-reservation.d.ts +51 -16
- package/dist/relay-reservation.js +107 -24
- package/dist/relay-reservation.js.map +1 -1
- package/dist/seed-bootstrap.d.ts +22 -5
- package/dist/seed-bootstrap.js +48 -25
- package/dist/seed-bootstrap.js.map +1 -1
- package/dist/strand-commit-durability.d.ts +54 -0
- package/dist/strand-commit-durability.js +74 -0
- package/dist/strand-commit-durability.js.map +1 -0
- package/dist/strand-database.d.ts +23 -8
- package/dist/strand-database.js +41 -13
- package/dist/strand-database.js.map +1 -1
- package/dist/strand-first-sync-gate.d.ts +7 -1
- package/dist/strand-first-sync-gate.js +7 -1
- package/dist/strand-first-sync-gate.js.map +1 -1
- package/dist/strand-formation-protocol.js +4 -1
- package/dist/strand-formation-protocol.js.map +1 -1
- package/dist/strand-fret-addrs.d.ts +19 -1
- package/dist/strand-fret-addrs.js +27 -9
- package/dist/strand-fret-addrs.js.map +1 -1
- package/dist/strand-instance-manager.d.ts +81 -19
- package/dist/strand-instance-manager.js +216 -105
- package/dist/strand-instance-manager.js.map +1 -1
- package/dist/strand-move.d.ts +124 -0
- package/dist/strand-move.js +438 -0
- package/dist/strand-move.js.map +1 -0
- package/dist/strand-network-config.js +7 -6
- package/dist/strand-network-config.js.map +1 -1
- package/dist/strand-peer-redial.d.ts +113 -0
- package/dist/strand-peer-redial.js +236 -0
- package/dist/strand-peer-redial.js.map +1 -0
- package/dist/strand-wake-protocol.js +10 -7
- package/dist/strand-wake-protocol.js.map +1 -1
- package/dist/types.d.ts +212 -4
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -1
- package/package.json +18 -10
- package/src/cadre-invite-protocol.ts +233 -45
- package/src/cadre-join-request.ts +167 -0
- package/src/cadre-node.ts +10003 -9381
- package/src/control-database.ts +4663 -4451
- package/src/control-schema.ts +19 -3
- package/src/ed25519-key.ts +20 -10
- package/src/fetch-impl.ts +23 -0
- package/src/file-durable-slot.ts +64 -63
- package/src/file-safe-name.ts +32 -0
- package/src/formation-approval.ts +604 -610
- package/src/fs-atomic.ts +92 -117
- package/src/index.ts +789 -722
- package/src/invitation-bootstrap.ts +91 -13
- package/src/joined-strand-store.ts +508 -498
- package/src/key-store-file.ts +142 -141
- package/src/link-budget.ts +9 -4
- package/src/machine-removal.ts +216 -0
- package/src/membership-connection-gater.ts +638 -637
- package/src/node-claim-payload.ts +138 -4
- package/src/node-default-transports.ts +38 -0
- package/src/node-transports.ts +49 -0
- package/src/peer-dial.ts +604 -336
- package/src/peer-join-backfill.ts +6 -0
- package/src/peer-record.ts +159 -202
- package/src/primary-lan-address.ts +47 -0
- package/src/provider/client.ts +326 -0
- package/src/provider/descriptor.ts +129 -0
- package/src/provider/index.ts +59 -0
- package/src/provider/oauth.ts +285 -0
- package/src/provider/rent-node.ts +275 -0
- package/src/relay-addrs.ts +9 -4
- package/src/relay-reservation.ts +1211 -1121
- package/src/seed-bootstrap.ts +1502 -1471
- package/src/strand-commit-durability.ts +116 -0
- package/src/strand-database.ts +46 -14
- package/src/strand-first-sync-gate.ts +7 -1
- package/src/strand-formation-protocol.ts +1039 -1036
- package/src/strand-fret-addrs.ts +179 -145
- package/src/strand-instance-manager.ts +2026 -1883
- package/src/strand-move.ts +585 -0
- package/src/strand-network-config.ts +7 -6
- package/src/strand-peer-redial.ts +307 -0
- package/src/strand-wake-protocol.ts +10 -7
- package/src/types.ts +220 -4
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
import type { Libp2p } from '@libp2p/interface';
|
|
21
21
|
import { type ControlStream } from './control-stream.js';
|
|
22
22
|
import { type ControlDatabase } from './control-database.js';
|
|
23
|
-
import type { CadreInviteRow, SeedPeer } from './types.js';
|
|
23
|
+
import type { CadreInviteRow, CadreJoinProgress, SeedPeer } from './types.js';
|
|
24
24
|
/** Protocol id for cadre invitation redemption (parallel to `/sereus/seed/1.0.0`). */
|
|
25
25
|
export declare const CADRE_INVITE_PROTOCOL = "/sereus/cadre-invite/1.0.0";
|
|
26
26
|
/**
|
|
@@ -51,20 +51,26 @@ export interface CadreInvitation {
|
|
|
51
51
|
*/
|
|
52
52
|
ownerKeys: string[];
|
|
53
53
|
/**
|
|
54
|
-
* Multiaddrs ending in `/p2p/<peerId>`: the issuer's own first, then
|
|
55
|
-
* `
|
|
56
|
-
* tries them in order.
|
|
54
|
+
* Multiaddrs ending in `/p2p/<peerId>`: the issuer's own first, then other members', at
|
|
55
|
+
* most `CADRE_INVITATION_MAX_ADDRS` in all (`selectCadreInvitationMembers` in
|
|
56
|
+
* `invitation-bootstrap.ts`). The device tries them in order.
|
|
57
57
|
*/
|
|
58
58
|
members: string[];
|
|
59
59
|
}
|
|
60
|
-
/**
|
|
60
|
+
/**
|
|
61
|
+
* Encode a bundle for out-of-band delivery: {@link CADRE_INVITATION_PREFIX}, then base64url
|
|
62
|
+
* over JSON. The prefix lets an app tell an invitation from a join request
|
|
63
|
+
* (`cadre-join-request.ts`) and name the mistake when one is pasted for the other.
|
|
64
|
+
*/
|
|
61
65
|
export declare function encodeCadreInvitation(invitation: CadreInvitation): string;
|
|
62
66
|
/**
|
|
63
67
|
* Decode a bundle, refusing anything that is not a well-formed version-1
|
|
64
|
-
* {@link CadreInvitation}. Standalone so a client
|
|
65
|
-
* wants to show which cadre an invitation joins) can
|
|
68
|
+
* {@link CadreInvitation} behind {@link CADRE_INVITATION_PREFIX}. Standalone so a client
|
|
69
|
+
* without a node (a settings screen that wants to show which cadre an invitation joins) can
|
|
70
|
+
* decode one.
|
|
66
71
|
*
|
|
67
|
-
* @throws on a
|
|
72
|
+
* @throws on a join request, a string without the prefix or that is not base64url JSON after
|
|
73
|
+
* it, or one that decodes to another shape or version.
|
|
68
74
|
*/
|
|
69
75
|
export declare function decodeCadreInvitation(encoded: string): CadreInvitation;
|
|
70
76
|
/** Device → member: one frame, the whole redemption. */
|
|
@@ -222,12 +228,14 @@ export interface CadreInviteHandlerOptions {
|
|
|
222
228
|
partyId: string;
|
|
223
229
|
store: CadreInviteStore;
|
|
224
230
|
/**
|
|
225
|
-
* Push this member's control store to the device
|
|
226
|
-
*
|
|
227
|
-
*
|
|
228
|
-
*
|
|
231
|
+
* Push this member's control store to the device, resolving once the push has finished, and
|
|
232
|
+
* keep the device counted in this member's control write cohort until the returned release
|
|
233
|
+
* is called. Called after the request verified and before the row is seated and the
|
|
234
|
+
* admission is written; the handler releases once both have settled. Absent, the writes go
|
|
235
|
+
* ahead with the device neither caught up nor in the cohort, so it does not hold them; see
|
|
236
|
+
* `admitDeviceIfLive`.
|
|
229
237
|
*/
|
|
230
|
-
|
|
238
|
+
admitDevice?: (peerId: string) => Promise<() => void>;
|
|
231
239
|
/** Time to wait for the request frame; default {@link DEFAULT_REDEEM_READ_TIMEOUT_MS}. */
|
|
232
240
|
redeemReadTimeoutMs?: number;
|
|
233
241
|
/** Cap on concurrent inbound redemptions; default {@link DEFAULT_MAX_CONCURRENT_REDEMPTIONS}. */
|
|
@@ -236,8 +244,8 @@ export interface CadreInviteHandlerOptions {
|
|
|
236
244
|
/**
|
|
237
245
|
* Member side: registers the handler and drives each inbound stream through the checks in
|
|
238
246
|
* cost order — shape, connecting identity, both signatures, target device — so no database
|
|
239
|
-
* work happens for a stranger that cannot prove anything, then
|
|
240
|
-
*
|
|
247
|
+
* work happens for a stranger that cannot prove anything, then admits the device to this
|
|
248
|
+
* member's control replication (`admitDevice`), seats the row and redeems.
|
|
241
249
|
* Hardened as the seed handler is: a concurrency cap (over it, `busy`) and a read timeout.
|
|
242
250
|
*
|
|
243
251
|
* Registered only by a started `CadreNode`, after its control database is up, like the
|
|
@@ -279,20 +287,24 @@ export declare class CadreInviteHandler {
|
|
|
279
287
|
*/
|
|
280
288
|
private checkRequest;
|
|
281
289
|
/**
|
|
282
|
-
*
|
|
283
|
-
* transaction; a no-op when held), then redeem. The
|
|
284
|
-
* already a write the device takes part in
|
|
285
|
-
* member does not know as an owner is the one retryable refusal left: the device
|
|
286
|
-
* next address, which may hold the issuer's row.
|
|
290
|
+
* Admit the device to this member's control replication (see {@link admitDeviceIfLive}),
|
|
291
|
+
* seat the row from the bundle (its own transaction; a no-op when held), then redeem. The
|
|
292
|
+
* admission comes first because the seat is already a write the device takes part in. An
|
|
293
|
+
* issuer this member does not know as an owner is the one retryable refusal left: the device
|
|
294
|
+
* tries the next address, which may hold the issuer's row.
|
|
287
295
|
*/
|
|
288
296
|
private seatAndRedeem;
|
|
297
|
+
/** {@link seatAndRedeem}'s two writes, each answered by name when it fails. */
|
|
298
|
+
private seatAndRedeemAdmitted;
|
|
289
299
|
/**
|
|
290
|
-
*
|
|
291
|
-
* (the seat, when this member does not hold the row; otherwise the admission)
|
|
292
|
-
*
|
|
293
|
-
*
|
|
294
|
-
*
|
|
295
|
-
*
|
|
300
|
+
* Admit the device to this member's control replication before the first write of the
|
|
301
|
+
* exchange (the seat, when this member does not hold the row; otherwise the admission), and
|
|
302
|
+
* resolve to the release that ends the admission. The device is not a member until the
|
|
303
|
+
* admission is written, so only this puts it in this member's control write cohort, and it
|
|
304
|
+
* must be there to hold the rows that admit it. It is pushed the control store first,
|
|
305
|
+
* because a cohort node with no base revision of a block refuses a commit to it; a member
|
|
306
|
+
* alone with the device would then have half its cohort refusing, and the write would tear
|
|
307
|
+
* instead of committing.
|
|
296
308
|
*
|
|
297
309
|
* Only for an invitation still live here, judged on the row this member holds or, before
|
|
298
310
|
* the seat, on the bundle's copy once its issuer signature verifies
|
|
@@ -300,10 +312,10 @@ export declare class CadreInviteHandler {
|
|
|
300
312
|
* or of a forged copy naming a real owner, is refused without being sent anything. The
|
|
301
313
|
* retry of an admission already written can read as spent too and is sent nothing; it
|
|
302
314
|
* needs nothing, since the device is a member and the ordinary catch-up reaches it.
|
|
303
|
-
* Best-effort: a failed check or push is logged and the writes go ahead
|
|
304
|
-
* answered retryably.
|
|
315
|
+
* Best-effort: a failed check or push is logged and the writes go ahead without the device
|
|
316
|
+
* admitted, then commit or are answered retryably.
|
|
305
317
|
*/
|
|
306
|
-
private
|
|
318
|
+
private admitDeviceIfLive;
|
|
307
319
|
/** Dial hints are an optimization; a failed read costs the device its hints, not its membership. */
|
|
308
320
|
private peersBestEffort;
|
|
309
321
|
}
|
|
@@ -323,6 +335,8 @@ export interface RedeemAtMembersOptions {
|
|
|
323
335
|
/** Per-address deadline override; default derived from `linkRoundTripMs`. */
|
|
324
336
|
addressBudgetMs?: number;
|
|
325
337
|
protocolId?: string;
|
|
338
|
+
/** Cancels the dial or stream in flight and ends the pass; the call throws the signal's reason. */
|
|
339
|
+
signal?: AbortSignal;
|
|
326
340
|
}
|
|
327
341
|
/** What a successful redemption yields the device. */
|
|
328
342
|
export interface CadreInviteRedemption {
|
|
@@ -344,5 +358,26 @@ export interface CadreInviteRedemption {
|
|
|
344
358
|
* @throws {CadreInviteRejectedError} on a final refusal (its `retryable` is false).
|
|
345
359
|
* @throws {CadreInviteReplyInvalidError} on an acceptance that fails {@link verifyRedeemReply}.
|
|
346
360
|
* @throws {CadreInviteUnreachableError} when every address was tried and none accepted.
|
|
361
|
+
* @throws the reason of `options.signal` once it aborts.
|
|
347
362
|
*/
|
|
348
363
|
export declare function redeemAtMembers(node: Libp2p, options: RedeemAtMembersOptions): Promise<CadreInviteRedemption>;
|
|
364
|
+
export interface RedeemInPassesOptions extends RedeemAtMembersOptions {
|
|
365
|
+
/** Keep making passes while every answer is retryable; false makes exactly one. */
|
|
366
|
+
waitForMember: boolean;
|
|
367
|
+
/** Called at each pass and each pause; an exception it throws is logged and ignored. */
|
|
368
|
+
onProgress?: (progress: CadreJoinProgress) => void;
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Device side, in passes: one {@link redeemAtMembers} pass over the bundle's addresses, or,
|
|
372
|
+
* with `waitForMember`, as many as it takes, pausing between them (5 s after the first,
|
|
373
|
+
* doubling to 60 s, never past the invitation's expiry). Every pass sends the same signed
|
|
374
|
+
* request, so a member that admitted the device on a pass whose reply was lost answers a later
|
|
375
|
+
* pass as already a member, with no second usage row.
|
|
376
|
+
*
|
|
377
|
+
* A wait ends at the first acceptance, at a final refusal or an invalid reply (thrown as
|
|
378
|
+
* {@link redeemAtMembers} throws them), when the invitation expires by this device's clock
|
|
379
|
+
* (thrown as the `invite-spent` refusal a member would give), when `signal` aborts (its reason
|
|
380
|
+
* thrown), and when `node` stops. A bundle that names no address has nothing to wait for and
|
|
381
|
+
* throws at once.
|
|
382
|
+
*/
|
|
383
|
+
export declare function redeemInPasses(node: Libp2p, options: RedeemInPassesOptions): Promise<CadreInviteRedemption>;
|
|
@@ -24,13 +24,13 @@ import { sign } from '@optimystic/quereus-plugin-crypto';
|
|
|
24
24
|
import { withDeadline, exchangeFrame, readStreamToEnd, replyAndClose } from './control-stream.js';
|
|
25
25
|
import { decodeLengthPrefixedFrame } from './seed-bootstrap.js';
|
|
26
26
|
import { relayedRequestBudgetMs } from './link-budget.js';
|
|
27
|
-
import { cadreInviteRedeemMessage, cadreInviteConsentMessage, CadreInviteIssuerUnknownError, InvitationExhaustedError } from './control-database.js';
|
|
27
|
+
import { cadreInviteRedeemMessage, cadreInviteConsentMessage, CadreInviteIssuerUnknownError, InvitationExhaustedError, parseNullableStoredDatetimeMs } from './control-database.js';
|
|
28
28
|
import { verifyCadreInviteRow, verifyCadreInviteRedemption } from './peer-authorization.js';
|
|
29
29
|
import { ed25519PublicKeyB64FromPeerId, requireEd25519PublicKeyB64 } from './ed25519-key.js';
|
|
30
|
-
import { trailingPeerId } from './peer-
|
|
31
|
-
import { nextMacrotask } from './peer-dial.js';
|
|
30
|
+
import { dialAddr, nextMacrotask, trailingPeerId } from './peer-dial.js';
|
|
32
31
|
import { chainMessages } from './control-retry.js';
|
|
33
32
|
import { isRetriableControlWriteFailure } from './control-write-retry.js';
|
|
33
|
+
import { CADRE_INVITATION_PREFIX, CADRE_JOIN_REQUEST_PREFIX } from './cadre-join-request.js';
|
|
34
34
|
const log = debug('sereus:cadre:invite-proto');
|
|
35
35
|
/** Protocol id for cadre invitation redemption (parallel to `/sereus/seed/1.0.0`). */
|
|
36
36
|
export const CADRE_INVITE_PROTOCOL = '/sereus/cadre-invite/1.0.0';
|
|
@@ -58,21 +58,34 @@ const MAX_BUNDLE_MEMBERS = 64;
|
|
|
58
58
|
/** Most peers a reply may carry as dial hints. */
|
|
59
59
|
const MAX_REPLY_PEERS = 256;
|
|
60
60
|
const BASE64URL = /^[A-Za-z0-9_-]+$/;
|
|
61
|
-
/**
|
|
61
|
+
/**
|
|
62
|
+
* Encode a bundle for out-of-band delivery: {@link CADRE_INVITATION_PREFIX}, then base64url
|
|
63
|
+
* over JSON. The prefix lets an app tell an invitation from a join request
|
|
64
|
+
* (`cadre-join-request.ts`) and name the mistake when one is pasted for the other.
|
|
65
|
+
*/
|
|
62
66
|
export function encodeCadreInvitation(invitation) {
|
|
63
|
-
return uint8ArrayToString(new TextEncoder().encode(JSON.stringify(invitation)), 'base64url')
|
|
67
|
+
return `${CADRE_INVITATION_PREFIX}${uint8ArrayToString(new TextEncoder().encode(JSON.stringify(invitation)), 'base64url')}`;
|
|
64
68
|
}
|
|
65
69
|
/**
|
|
66
70
|
* Decode a bundle, refusing anything that is not a well-formed version-1
|
|
67
|
-
* {@link CadreInvitation}. Standalone so a client
|
|
68
|
-
* wants to show which cadre an invitation joins) can
|
|
71
|
+
* {@link CadreInvitation} behind {@link CADRE_INVITATION_PREFIX}. Standalone so a client
|
|
72
|
+
* without a node (a settings screen that wants to show which cadre an invitation joins) can
|
|
73
|
+
* decode one.
|
|
69
74
|
*
|
|
70
|
-
* @throws on a
|
|
75
|
+
* @throws on a join request, a string without the prefix or that is not base64url JSON after
|
|
76
|
+
* it, or one that decodes to another shape or version.
|
|
71
77
|
*/
|
|
72
78
|
export function decodeCadreInvitation(encoded) {
|
|
79
|
+
const trimmed = encoded.trim();
|
|
80
|
+
if (trimmed.startsWith(CADRE_JOIN_REQUEST_PREFIX)) {
|
|
81
|
+
throw new Error('This is a join request, not a cadre invitation; paste it into the app that manages your cadre');
|
|
82
|
+
}
|
|
83
|
+
if (!trimmed.startsWith(CADRE_INVITATION_PREFIX)) {
|
|
84
|
+
throw new Error(`Cadre invitation must start with "${CADRE_INVITATION_PREFIX}" (this one starts with "${trimmed.slice(0, CADRE_INVITATION_PREFIX.length)}")`);
|
|
85
|
+
}
|
|
73
86
|
let parsed;
|
|
74
87
|
try {
|
|
75
|
-
parsed = JSON.parse(new TextDecoder().decode(uint8ArrayFromString(
|
|
88
|
+
parsed = JSON.parse(new TextDecoder().decode(uint8ArrayFromString(trimmed.slice(CADRE_INVITATION_PREFIX.length), 'base64url')));
|
|
76
89
|
}
|
|
77
90
|
catch (error) {
|
|
78
91
|
throw new Error('Cadre invitation does not decode as base64url JSON', { cause: error });
|
|
@@ -340,8 +353,8 @@ function writeFailureRejection(error) {
|
|
|
340
353
|
/**
|
|
341
354
|
* Member side: registers the handler and drives each inbound stream through the checks in
|
|
342
355
|
* cost order — shape, connecting identity, both signatures, target device — so no database
|
|
343
|
-
* work happens for a stranger that cannot prove anything, then
|
|
344
|
-
*
|
|
356
|
+
* work happens for a stranger that cannot prove anything, then admits the device to this
|
|
357
|
+
* member's control replication (`admitDevice`), seats the row and redeems.
|
|
345
358
|
* Hardened as the seed handler is: a concurrency cap (over it, `busy`) and a read timeout.
|
|
346
359
|
*
|
|
347
360
|
* Registered only by a started `CadreNode`, after its control database is up, like the
|
|
@@ -446,15 +459,24 @@ export class CadreInviteHandler {
|
|
|
446
459
|
return null;
|
|
447
460
|
}
|
|
448
461
|
/**
|
|
449
|
-
*
|
|
450
|
-
* transaction; a no-op when held), then redeem. The
|
|
451
|
-
* already a write the device takes part in
|
|
452
|
-
* member does not know as an owner is the one retryable refusal left: the device
|
|
453
|
-
* next address, which may hold the issuer's row.
|
|
462
|
+
* Admit the device to this member's control replication (see {@link admitDeviceIfLive}),
|
|
463
|
+
* seat the row from the bundle (its own transaction; a no-op when held), then redeem. The
|
|
464
|
+
* admission comes first because the seat is already a write the device takes part in. An
|
|
465
|
+
* issuer this member does not know as an owner is the one retryable refusal left: the device
|
|
466
|
+
* tries the next address, which may hold the issuer's row.
|
|
454
467
|
*/
|
|
455
468
|
async seatAndRedeem(request, remotePeerId) {
|
|
469
|
+
const release = await this.admitDeviceIfLive(request.invite, remotePeerId);
|
|
470
|
+
try {
|
|
471
|
+
return await this.seatAndRedeemAdmitted(request, remotePeerId);
|
|
472
|
+
}
|
|
473
|
+
finally {
|
|
474
|
+
release();
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
/** {@link seatAndRedeem}'s two writes, each answered by name when it fails. */
|
|
478
|
+
async seatAndRedeemAdmitted(request, remotePeerId) {
|
|
456
479
|
const { store } = this.options;
|
|
457
|
-
await this.catchUpDeviceIfLive(request.invite, remotePeerId);
|
|
458
480
|
try {
|
|
459
481
|
await store.seatCadreInvite(request.invite);
|
|
460
482
|
}
|
|
@@ -489,12 +511,14 @@ export class CadreInviteHandler {
|
|
|
489
511
|
return { accepted: true, partyId: this.options.partyId, invite: request.invite, peers: await this.peersBestEffort() };
|
|
490
512
|
}
|
|
491
513
|
/**
|
|
492
|
-
*
|
|
493
|
-
* (the seat, when this member does not hold the row; otherwise the admission)
|
|
494
|
-
*
|
|
495
|
-
*
|
|
496
|
-
*
|
|
497
|
-
*
|
|
514
|
+
* Admit the device to this member's control replication before the first write of the
|
|
515
|
+
* exchange (the seat, when this member does not hold the row; otherwise the admission), and
|
|
516
|
+
* resolve to the release that ends the admission. The device is not a member until the
|
|
517
|
+
* admission is written, so only this puts it in this member's control write cohort, and it
|
|
518
|
+
* must be there to hold the rows that admit it. It is pushed the control store first,
|
|
519
|
+
* because a cohort node with no base revision of a block refuses a commit to it; a member
|
|
520
|
+
* alone with the device would then have half its cohort refusing, and the write would tear
|
|
521
|
+
* instead of committing.
|
|
498
522
|
*
|
|
499
523
|
* Only for an invitation still live here, judged on the row this member holds or, before
|
|
500
524
|
* the seat, on the bundle's copy once its issuer signature verifies
|
|
@@ -502,27 +526,29 @@ export class CadreInviteHandler {
|
|
|
502
526
|
* or of a forged copy naming a real owner, is refused without being sent anything. The
|
|
503
527
|
* retry of an admission already written can read as spent too and is sent nothing; it
|
|
504
528
|
* needs nothing, since the device is a member and the ordinary catch-up reaches it.
|
|
505
|
-
* Best-effort: a failed check or push is logged and the writes go ahead
|
|
506
|
-
* answered retryably.
|
|
529
|
+
* Best-effort: a failed check or push is logged and the writes go ahead without the device
|
|
530
|
+
* admitted, then commit or are answered retryably.
|
|
507
531
|
*/
|
|
508
|
-
async
|
|
509
|
-
const {
|
|
510
|
-
|
|
511
|
-
|
|
532
|
+
async admitDeviceIfLive(invite, remotePeerId) {
|
|
533
|
+
const { admitDevice, store } = this.options;
|
|
534
|
+
const notAdmitted = () => undefined;
|
|
535
|
+
if (!admitDevice)
|
|
536
|
+
return notAdmitted;
|
|
512
537
|
try {
|
|
513
538
|
if (!await store.isCadreInviteLive(invite)) {
|
|
514
|
-
log('invitation %s is not live here; %s is not
|
|
515
|
-
return;
|
|
539
|
+
log('invitation %s is not live here; %s is not admitted before the write', invite.key, remotePeerId);
|
|
540
|
+
return notAdmitted;
|
|
516
541
|
}
|
|
517
542
|
// NOTE: accepted tradeoff — when a write then fails (the seat refused, the last use
|
|
518
543
|
// taken by a race, the row expiring between this check and the write), the device keeps
|
|
519
544
|
// a copy of a control store it was not admitted to. It holds a live owner-signed
|
|
520
545
|
// invitation and proved possession and consent, and a seed hands an un-enrolled machine
|
|
521
546
|
// the same information. Revisit if a control table ever carries data a non-member must not see.
|
|
522
|
-
await
|
|
547
|
+
return await admitDevice(remotePeerId);
|
|
523
548
|
}
|
|
524
549
|
catch (error) {
|
|
525
|
-
log('
|
|
550
|
+
log('admitting %s before its admission write failed (writing anyway): %o', remotePeerId, error);
|
|
551
|
+
return notAdmitted;
|
|
526
552
|
}
|
|
527
553
|
}
|
|
528
554
|
/** Dial hints are an optimization; a failed read costs the device its hints, not its membership. */
|
|
@@ -537,19 +563,49 @@ export class CadreInviteHandler {
|
|
|
537
563
|
}
|
|
538
564
|
}
|
|
539
565
|
/**
|
|
540
|
-
*
|
|
566
|
+
* Dial `addr`, open one stream to it, send the request, half-close, read the one reply frame.
|
|
541
567
|
* `signal` is the per-address deadline: it cancels the dial and resets a live stream.
|
|
568
|
+
*
|
|
569
|
+
* The address is dialed outside libp2p's dial queue (`dialAddr`), so another dial of the
|
|
570
|
+
* member in flight cannot capture this attempt; an open connection is still reused.
|
|
542
571
|
*/
|
|
543
572
|
async function exchangeRedemption(node, addr, request, signal, budgetMs, protocolId) {
|
|
573
|
+
const connection = await dialAddr(node, addr, signal, 'Cadre invitation redemption');
|
|
544
574
|
// `runOnLimitedConnection`: a member may be reachable only through a relay (see `register`).
|
|
545
|
-
const rawStream = await
|
|
575
|
+
const rawStream = await connection.newStream(protocolId, { runOnLimitedConnection: true, signal });
|
|
546
576
|
return await exchangeFrame(rawStream, signal, request, async (stream) => {
|
|
547
577
|
const data = await readStreamToEnd(stream, { maxBytes: MAX_CADRE_INVITE_MSG_SIZE, timeoutMs: budgetMs, label: 'Cadre invite reply' });
|
|
548
578
|
return decodeReply(JSON.parse(new TextDecoder().decode(decodeLengthPrefixedFrame(data, MAX_CADRE_INVITE_MSG_SIZE))));
|
|
549
579
|
}, 'Cadre invitation redemption aborted by its deadline');
|
|
550
580
|
}
|
|
551
581
|
function asError(error) {
|
|
552
|
-
|
|
582
|
+
if (error instanceof Error)
|
|
583
|
+
return error;
|
|
584
|
+
// A WebSocket transport rejects a refused dial with an `ErrorEvent`, whose text is its `message`.
|
|
585
|
+
const message = error?.message;
|
|
586
|
+
return new Error(typeof message === 'string' && message.length > 0 ? message : String(error), { cause: error });
|
|
587
|
+
}
|
|
588
|
+
/**
|
|
589
|
+
* Run `op` with a signal that aborts when either `deadline` or the caller's `signal` does.
|
|
590
|
+
* Relayed by hand rather than with `AbortSignal.any`, which the phone runtimes lack.
|
|
591
|
+
*/
|
|
592
|
+
async function underDeadlineAndCaller(deadline, caller, op) {
|
|
593
|
+
if (!caller)
|
|
594
|
+
return await op(deadline);
|
|
595
|
+
const either = new AbortController();
|
|
596
|
+
const abort = () => either.abort();
|
|
597
|
+
deadline.addEventListener('abort', abort, { once: true });
|
|
598
|
+
caller.addEventListener('abort', abort, { once: true });
|
|
599
|
+
// An abort between the caller's last check and the listener above fired no event.
|
|
600
|
+
if (caller.aborted)
|
|
601
|
+
abort();
|
|
602
|
+
try {
|
|
603
|
+
return await op(either.signal);
|
|
604
|
+
}
|
|
605
|
+
finally {
|
|
606
|
+
deadline.removeEventListener('abort', abort);
|
|
607
|
+
caller.removeEventListener('abort', abort);
|
|
608
|
+
}
|
|
553
609
|
}
|
|
554
610
|
/**
|
|
555
611
|
* Device side: try the bundle's addresses one at a time, each under its own deadline, and
|
|
@@ -563,13 +619,16 @@ function asError(error) {
|
|
|
563
619
|
* @throws {CadreInviteRejectedError} on a final refusal (its `retryable` is false).
|
|
564
620
|
* @throws {CadreInviteReplyInvalidError} on an acceptance that fails {@link verifyRedeemReply}.
|
|
565
621
|
* @throws {CadreInviteUnreachableError} when every address was tried and none accepted.
|
|
622
|
+
* @throws the reason of `options.signal` once it aborts.
|
|
566
623
|
*/
|
|
567
624
|
export async function redeemAtMembers(node, options) {
|
|
568
625
|
const protocolId = options.protocolId ?? CADRE_INVITE_PROTOCOL;
|
|
569
626
|
const budgetMs = options.addressBudgetMs ?? relayedRequestBudgetMs(options.linkRoundTripMs);
|
|
570
627
|
const outcomes = [];
|
|
571
628
|
for (const addr of options.invitation.members) {
|
|
572
|
-
|
|
629
|
+
options.signal?.throwIfAborted();
|
|
630
|
+
// Between attempts: a relayed address's relay leg goes through libp2p's dial queue, which
|
|
631
|
+
// needs a macrotask to drop an aborted job (see `tryAddrsInTurn`).
|
|
573
632
|
if (outcomes.length > 0)
|
|
574
633
|
await nextMacrotask();
|
|
575
634
|
let parsed;
|
|
@@ -581,7 +640,7 @@ export async function redeemAtMembers(node, options) {
|
|
|
581
640
|
continue;
|
|
582
641
|
}
|
|
583
642
|
try {
|
|
584
|
-
const reply = await withDeadline(budgetMs, `Cadre invitation redemption via ${addr}`, (signal) => exchangeRedemption(node, parsed, options.request, signal, budgetMs, protocolId));
|
|
643
|
+
const reply = await withDeadline(budgetMs, `Cadre invitation redemption via ${addr}`, (deadline) => underDeadlineAndCaller(deadline, options.signal, (signal) => exchangeRedemption(node, parsed, options.request, signal, budgetMs, protocolId)));
|
|
585
644
|
if (!reply.accepted) {
|
|
586
645
|
const refusal = new CadreInviteRejectedError(reply.code, reply.reason);
|
|
587
646
|
if (!refusal.retryable)
|
|
@@ -596,10 +655,120 @@ export async function redeemAtMembers(node, options) {
|
|
|
596
655
|
catch (error) {
|
|
597
656
|
if (error instanceof CadreInviteRejectedError || error instanceof CadreInviteReplyInvalidError)
|
|
598
657
|
throw error;
|
|
658
|
+
// The caller's abort cut this attempt short; its reason, not the cut, is the answer.
|
|
659
|
+
options.signal?.throwIfAborted();
|
|
599
660
|
log('redemption via %s failed before an answer (%s); trying the next address', addr, asError(error).message);
|
|
600
661
|
outcomes.push({ addr, error: asError(error) });
|
|
601
662
|
}
|
|
602
663
|
}
|
|
603
664
|
throw new CadreInviteUnreachableError(outcomes);
|
|
604
665
|
}
|
|
666
|
+
/** Pause after the first pass in which no member accepted; doubled after each further one. */
|
|
667
|
+
const REDEEM_PASS_FIRST_PAUSE_MS = 5000;
|
|
668
|
+
/** Longest pause between passes. */
|
|
669
|
+
const REDEEM_PASS_MAX_PAUSE_MS = 60000;
|
|
670
|
+
/**
|
|
671
|
+
* Device side, in passes: one {@link redeemAtMembers} pass over the bundle's addresses, or,
|
|
672
|
+
* with `waitForMember`, as many as it takes, pausing between them (5 s after the first,
|
|
673
|
+
* doubling to 60 s, never past the invitation's expiry). Every pass sends the same signed
|
|
674
|
+
* request, so a member that admitted the device on a pass whose reply was lost answers a later
|
|
675
|
+
* pass as already a member, with no second usage row.
|
|
676
|
+
*
|
|
677
|
+
* A wait ends at the first acceptance, at a final refusal or an invalid reply (thrown as
|
|
678
|
+
* {@link redeemAtMembers} throws them), when the invitation expires by this device's clock
|
|
679
|
+
* (thrown as the `invite-spent` refusal a member would give), when `signal` aborts (its reason
|
|
680
|
+
* thrown), and when `node` stops. A bundle that names no address has nothing to wait for and
|
|
681
|
+
* throws at once.
|
|
682
|
+
*/
|
|
683
|
+
export async function redeemInPasses(node, options) {
|
|
684
|
+
for (let pass = 1;; pass++) {
|
|
685
|
+
if (options.waitForMember) {
|
|
686
|
+
// One pass leaves expiry to the member, whose clock decides; a wait has nothing else to end it.
|
|
687
|
+
refuseIfExpired(options.invitation.invite);
|
|
688
|
+
refuseIfStopped(node);
|
|
689
|
+
}
|
|
690
|
+
reportProgress(options.onProgress, { state: 'redeeming', pass });
|
|
691
|
+
try {
|
|
692
|
+
return await redeemAtMembers(node, options);
|
|
693
|
+
}
|
|
694
|
+
catch (error) {
|
|
695
|
+
if (!options.waitForMember || !(error instanceof CadreInviteUnreachableError) || error.outcomes.length === 0)
|
|
696
|
+
throw error;
|
|
697
|
+
const pauseMs = pauseAfterPass(pass, options.invitation.invite);
|
|
698
|
+
reportProgress(options.onProgress, {
|
|
699
|
+
state: 'waiting', pass, retryAtMs: Date.now() + pauseMs, reason: waitReason(error.outcomes), outcomes: error.outcomes
|
|
700
|
+
});
|
|
701
|
+
log('redemption pass %d found no member ready; the next pass in %d ms', pass, pauseMs);
|
|
702
|
+
await pause(pauseMs, options.signal, node);
|
|
703
|
+
}
|
|
704
|
+
}
|
|
705
|
+
}
|
|
706
|
+
// NOTE: judged by this device's clock, so one running ahead ends a wait before the members
|
|
707
|
+
// would refuse it. If waits are seen ending early on skewed phones, allow a grace margin here.
|
|
708
|
+
function refuseIfExpired(invite) {
|
|
709
|
+
const expiresAtMs = parseNullableStoredDatetimeMs(invite.expiresAt);
|
|
710
|
+
if (expiresAtMs !== null && expiresAtMs <= Date.now()) {
|
|
711
|
+
throw new CadreInviteRejectedError('invite-spent', 'the invitation expired before a member accepted it');
|
|
712
|
+
}
|
|
713
|
+
}
|
|
714
|
+
/** A stopped node's every dial fails at once, which would otherwise read as "no member answered" until expiry. */
|
|
715
|
+
function refuseIfStopped(node) {
|
|
716
|
+
if (node.status !== 'started') {
|
|
717
|
+
throw new Error(`Cadre invitation redemption stopped waiting: the node is ${node.status}`);
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
/** The pause after pass `pass`, cut short at the invitation's expiry so the next check ends the wait then. */
|
|
721
|
+
function pauseAfterPass(pass, invite) {
|
|
722
|
+
const backoffMs = Math.min(REDEEM_PASS_FIRST_PAUSE_MS * 2 ** (pass - 1), REDEEM_PASS_MAX_PAUSE_MS);
|
|
723
|
+
const expiresAtMs = parseNullableStoredDatetimeMs(invite.expiresAt);
|
|
724
|
+
return expiresAtMs === null ? backoffMs : Math.max(0, Math.min(backoffMs, expiresAtMs - Date.now()));
|
|
725
|
+
}
|
|
726
|
+
/** Any refusal means a member answered and is not ready yet; otherwise none answered at all. */
|
|
727
|
+
function waitReason(outcomes) {
|
|
728
|
+
return outcomes.some((outcome) => outcome.error instanceof CadreInviteRejectedError) ? 'member-not-ready' : 'no-member-answered';
|
|
729
|
+
}
|
|
730
|
+
/** A UI callback must not break the join. */
|
|
731
|
+
function reportProgress(onProgress, progress) {
|
|
732
|
+
if (!onProgress)
|
|
733
|
+
return;
|
|
734
|
+
try {
|
|
735
|
+
onProgress(progress);
|
|
736
|
+
}
|
|
737
|
+
catch (error) {
|
|
738
|
+
log('redemption progress callback threw (ignored): %o', error);
|
|
739
|
+
}
|
|
740
|
+
}
|
|
741
|
+
/**
|
|
742
|
+
* Wait `ms`, or reject with `signal`'s reason as soon as it aborts. Ends early, resolving, when
|
|
743
|
+
* `node` stops (or is already stopped), so the next pass's stop check ends the wait without a
|
|
744
|
+
* timer holding the process open. Listeners and timer are cleared however it ends.
|
|
745
|
+
*/
|
|
746
|
+
function pause(ms, signal, node) {
|
|
747
|
+
return new Promise((resolve, reject) => {
|
|
748
|
+
if (signal?.aborted) {
|
|
749
|
+
reject(signal.reason);
|
|
750
|
+
return;
|
|
751
|
+
}
|
|
752
|
+
if (node.status !== 'started') {
|
|
753
|
+
resolve();
|
|
754
|
+
return;
|
|
755
|
+
}
|
|
756
|
+
const settle = () => {
|
|
757
|
+
clearTimeout(timer);
|
|
758
|
+
signal?.removeEventListener('abort', onAbort);
|
|
759
|
+
node.removeEventListener('stop', onStop);
|
|
760
|
+
};
|
|
761
|
+
const onAbort = () => {
|
|
762
|
+
settle();
|
|
763
|
+
reject(signal.reason);
|
|
764
|
+
};
|
|
765
|
+
const onStop = () => {
|
|
766
|
+
settle();
|
|
767
|
+
resolve();
|
|
768
|
+
};
|
|
769
|
+
const timer = setTimeout(onStop, ms);
|
|
770
|
+
signal?.addEventListener('abort', onAbort, { once: true });
|
|
771
|
+
node.addEventListener('stop', onStop, { once: true });
|
|
772
|
+
});
|
|
773
|
+
}
|
|
605
774
|
//# sourceMappingURL=cadre-invite-protocol.js.map
|
|
@@ -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":"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"}
|