@serfab/cadre-core 1.6.0 → 1.8.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 +8 -6
- package/dist/cadre-node.d.ts +548 -137
- package/dist/cadre-node.js +1208 -383
- package/dist/cadre-node.js.map +1 -1
- package/dist/control-authorization.d.ts +2 -2
- package/dist/control-authorization.js +1 -0
- package/dist/control-authorization.js.map +1 -1
- package/dist/control-cohort.d.ts +6 -0
- package/dist/control-cohort.js +6 -0
- package/dist/control-cohort.js.map +1 -1
- package/dist/control-database.d.ts +46 -8
- package/dist/control-database.js +97 -18
- package/dist/control-database.js.map +1 -1
- package/dist/control-formation-recorder.d.ts +37 -14
- package/dist/control-formation-recorder.js +60 -10
- package/dist/control-formation-recorder.js.map +1 -1
- package/dist/control-read-retry.d.ts +13 -12
- package/dist/control-read-retry.js +14 -12
- package/dist/control-read-retry.js.map +1 -1
- package/dist/control-schema.d.ts +1 -1
- package/dist/control-schema.js +67 -5
- package/dist/control-schema.js.map +1 -1
- package/dist/control-stream.d.ts +9 -1
- package/dist/control-stream.js +24 -1
- package/dist/control-stream.js.map +1 -1
- package/dist/control-write-retry.d.ts +12 -2
- package/dist/control-write-retry.js +13 -2
- package/dist/control-write-retry.js.map +1 -1
- package/dist/delegate-admission.d.ts +11 -8
- package/dist/delegate-admission.js +19 -11
- package/dist/delegate-admission.js.map +1 -1
- package/dist/diagnostics/connection-path.d.ts +0 -7
- package/dist/diagnostics/connection-path.js +0 -7
- package/dist/diagnostics/connection-path.js.map +1 -1
- package/dist/formation-approval.d.ts +7 -0
- package/dist/formation-approval.js +9 -3
- package/dist/formation-approval.js.map +1 -1
- package/dist/fs-atomic.d.ts +11 -2
- package/dist/fs-atomic.js +13 -3
- package/dist/fs-atomic.js.map +1 -1
- package/dist/hibernation-manager.d.ts +111 -8
- package/dist/hibernation-manager.js +234 -49
- package/dist/hibernation-manager.js.map +1 -1
- package/dist/index.d.ts +13 -6
- package/dist/index.js +27 -5
- package/dist/index.js.map +1 -1
- package/dist/joined-strand-store.d.ts +177 -0
- package/dist/joined-strand-store.js +431 -0
- package/dist/joined-strand-store.js.map +1 -0
- package/dist/key-store-file.js +14 -5
- package/dist/key-store-file.js.map +1 -1
- package/dist/key-store.d.ts +6 -0
- package/dist/key-store.js.map +1 -1
- package/dist/link-budget.d.ts +367 -69
- package/dist/link-budget.js +375 -72
- package/dist/link-budget.js.map +1 -1
- package/dist/membership-connection-gater.d.ts +30 -43
- package/dist/membership-connection-gater.js +31 -42
- package/dist/membership-connection-gater.js.map +1 -1
- package/dist/node-local-snapshot.d.ts +5 -4
- package/dist/node-local-snapshot.js +6 -3
- package/dist/node-local-snapshot.js.map +1 -1
- package/dist/peer-dial.d.ts +24 -4
- package/dist/peer-dial.js +74 -5
- package/dist/peer-dial.js.map +1 -1
- package/dist/peer-join-backfill.d.ts +35 -15
- package/dist/peer-join-backfill.js +115 -55
- package/dist/peer-join-backfill.js.map +1 -1
- package/dist/push-fanout.d.ts +6 -0
- package/dist/push-fanout.js +6 -0
- package/dist/push-fanout.js.map +1 -1
- package/dist/relay-reservation.d.ts +3 -1
- package/dist/relay-reservation.js +3 -1
- package/dist/relay-reservation.js.map +1 -1
- package/dist/relay-server.d.ts +79 -0
- package/dist/relay-server.js +74 -0
- package/dist/relay-server.js.map +1 -0
- package/dist/seed-bootstrap.d.ts +57 -4
- package/dist/seed-bootstrap.js +107 -83
- package/dist/seed-bootstrap.js.map +1 -1
- package/dist/storage-scope.d.ts +33 -17
- package/dist/storage-scope.js +44 -23
- package/dist/storage-scope.js.map +1 -1
- package/dist/strand-addr-protocol.d.ts +58 -21
- package/dist/strand-addr-protocol.js +133 -85
- package/dist/strand-addr-protocol.js.map +1 -1
- package/dist/strand-database.d.ts +20 -2
- package/dist/strand-database.js +42 -5
- package/dist/strand-database.js.map +1 -1
- package/dist/strand-first-sync-gate.d.ts +59 -21
- package/dist/strand-first-sync-gate.js +58 -19
- package/dist/strand-first-sync-gate.js.map +1 -1
- package/dist/strand-formation-deadlines.d.ts +151 -0
- package/dist/strand-formation-deadlines.js +171 -0
- package/dist/strand-formation-deadlines.js.map +1 -0
- package/dist/strand-formation-manager.d.ts +63 -30
- package/dist/strand-formation-manager.js +67 -41
- package/dist/strand-formation-manager.js.map +1 -1
- package/dist/strand-formation-protocol.d.ts +45 -35
- package/dist/strand-formation-protocol.js +59 -122
- package/dist/strand-formation-protocol.js.map +1 -1
- package/dist/strand-instance-manager.d.ts +152 -6
- package/dist/strand-instance-manager.js +331 -42
- package/dist/strand-instance-manager.js.map +1 -1
- package/dist/strand-membership-writer.d.ts +6 -0
- package/dist/strand-membership-writer.js +11 -0
- package/dist/strand-membership-writer.js.map +1 -1
- package/dist/strand-peer-book-file.d.ts +12 -0
- package/dist/strand-peer-book-file.js +37 -0
- package/dist/strand-peer-book-file.js.map +1 -0
- package/dist/strand-peer-book-protocol.d.ts +168 -0
- package/dist/strand-peer-book-protocol.js +356 -0
- package/dist/strand-peer-book-protocol.js.map +1 -0
- package/dist/strand-peer-book-swap.d.ts +104 -0
- package/dist/strand-peer-book-swap.js +284 -0
- package/dist/strand-peer-book-swap.js.map +1 -0
- package/dist/strand-peer-book.d.ts +159 -0
- package/dist/strand-peer-book.js +361 -0
- package/dist/strand-peer-book.js.map +1 -0
- package/dist/strand-peer-observer.d.ts +88 -0
- package/dist/strand-peer-observer.js +180 -0
- package/dist/strand-peer-observer.js.map +1 -0
- package/dist/strand-revocation-enforcer.js +2 -1
- package/dist/strand-revocation-enforcer.js.map +1 -1
- package/dist/strand-solicitation.d.ts +36 -20
- package/dist/strand-solicitation.js +4 -4
- package/dist/strand-solicitation.js.map +1 -1
- package/dist/strand-wake-protocol.d.ts +80 -23
- package/dist/strand-wake-protocol.js +89 -64
- package/dist/strand-wake-protocol.js.map +1 -1
- package/dist/types.d.ts +181 -33
- package/dist/types.js +4 -3
- package/dist/types.js.map +1 -1
- package/package.json +11 -7
- package/src/cadre-node.ts +1316 -398
- package/src/control-authorization.ts +2 -1
- package/src/control-cohort.ts +6 -0
- package/src/control-database.ts +122 -18
- package/src/control-formation-recorder.ts +354 -305
- package/src/control-read-retry.ts +14 -12
- package/src/control-schema.ts +67 -5
- package/src/control-stream.ts +25 -1
- package/src/control-write-retry.ts +13 -2
- package/src/delegate-admission.ts +23 -13
- package/src/diagnostics/connection-path.ts +0 -7
- package/src/formation-approval.ts +610 -604
- package/src/fs-atomic.ts +14 -4
- package/src/hibernation-manager.ts +638 -437
- package/src/index.ts +91 -6
- package/src/joined-strand-store.ts +498 -0
- package/src/key-store-file.ts +14 -5
- package/src/key-store.ts +6 -0
- package/src/link-budget.ts +393 -74
- package/src/membership-connection-gater.ts +31 -45
- package/src/node-local-snapshot.ts +293 -289
- package/src/peer-dial.ts +81 -7
- package/src/peer-join-backfill.ts +120 -57
- package/src/push-fanout.ts +6 -0
- package/src/relay-reservation.ts +3 -1
- package/src/relay-server.ts +98 -0
- package/src/seed-bootstrap.ts +133 -91
- package/src/storage-scope.ts +44 -23
- package/src/strand-addr-protocol.ts +547 -458
- package/src/strand-database.ts +287 -242
- package/src/strand-first-sync-gate.ts +58 -19
- package/src/strand-formation-deadlines.ts +227 -0
- package/src/strand-formation-manager.ts +700 -647
- package/src/strand-formation-protocol.ts +103 -150
- package/src/strand-instance-manager.ts +387 -45
- package/src/strand-membership-writer.ts +12 -0
- package/src/strand-peer-book-file.ts +39 -0
- package/src/strand-peer-book-protocol.ts +466 -0
- package/src/strand-peer-book-swap.ts +338 -0
- package/src/strand-peer-book.ts +475 -0
- package/src/strand-peer-observer.ts +235 -0
- package/src/strand-revocation-enforcer.ts +2 -1
- package/src/strand-solicitation.ts +519 -500
- package/src/strand-wake-protocol.ts +401 -355
- package/src/types.ts +185 -33
|
@@ -19,13 +19,14 @@
|
|
|
19
19
|
*/
|
|
20
20
|
import debug from 'debug';
|
|
21
21
|
import { multiaddr } from '@multiformats/multiaddr';
|
|
22
|
-
import { writeFrame, withTimeout } from './control-stream.js';
|
|
22
|
+
import { writeFrame, withDeadline, withTimeout } from './control-stream.js';
|
|
23
23
|
import { canonicalJson } from './canonical-json.js';
|
|
24
24
|
import { requireEd25519PublicKeyB64 } from './ed25519-key.js';
|
|
25
25
|
import { verifyFormationConsent } from './peer-authorization.js';
|
|
26
26
|
// seed-bootstrap imports neither this protocol nor the manager/solicitation layers,
|
|
27
27
|
// so this import introduces no cycle.
|
|
28
28
|
import { ed25519PublicKeyB64FromPeerId } from './seed-bootstrap.js';
|
|
29
|
+
import { formationDeadlines, resolveProvisionTimeoutMs, responderClampReserveMs, splitProvisionBudget } from './strand-formation-deadlines.js';
|
|
29
30
|
const log = debug('sereus:cadre:formation-proto');
|
|
30
31
|
/** Protocol id for the native formation transport (parallel to `/sereus/seed/1.0.0`). */
|
|
31
32
|
export const FORMATION_PROTOCOL = '/sereus/formation/1.0.0';
|
|
@@ -39,66 +40,16 @@ export const FORMATION_PROTOCOL = '/sereus/formation/1.0.0';
|
|
|
39
40
|
export const INVALID_TOKEN_REASON = 'Invalid token';
|
|
40
41
|
/** Maximum formation message size (1MB). */
|
|
41
42
|
const MAX_FORMATION_MSG_SIZE = 1024 * 1024;
|
|
42
|
-
/** Default whole-session timeout (ms). */
|
|
43
|
-
const DEFAULT_SESSION_TIMEOUT_MS = 30000;
|
|
44
|
-
/** Default per-step (single read/write) timeout (ms). */
|
|
45
|
-
const DEFAULT_STEP_TIMEOUT_MS = 5000;
|
|
46
|
-
/**
|
|
47
|
-
* Default provisioning budget (ms) — distinct from {@link DEFAULT_STEP_TIMEOUT_MS} because
|
|
48
|
-
* `provisionStrand` is real work (DB writes, and an outbound approval-hook HTTP call when
|
|
49
|
-
* the invite carries a `ValidationUrl`), not a bare wire read/write.
|
|
50
|
-
*
|
|
51
|
-
* Ordering is deliberate — each layer must be able to fail and report before the layer above
|
|
52
|
-
* it gives up:
|
|
53
|
-
*
|
|
54
|
-
* approval hook (10 s, `formation-approval.ts`)
|
|
55
|
-
* < responder provisioning (12 s)
|
|
56
|
-
* < initiator await-response (15 s)
|
|
57
|
-
* < session (30 s)
|
|
58
|
-
*
|
|
59
|
-
* The 3 s margin between responder provisioning and initiator await-response is the wire
|
|
60
|
-
* latency budget for the result frame to travel back.
|
|
61
|
-
*
|
|
62
|
-
* The last {@link PROVISION_SETTLE_GRACE_MS} of this budget is a settle grace, so the default
|
|
63
|
-
* WORK budget (12 s − 2 s = 10 s) EQUALS the hook's own 10 s: a dead hook races 'Formation
|
|
64
|
-
* approval unavailable, retry' against 'Formation provisioning timed out'. Both are retryable
|
|
65
|
-
* and both leave the invite unspent, so the race is benign.
|
|
66
|
-
*/
|
|
67
|
-
const DEFAULT_PROVISION_TIMEOUT_MS = 12000;
|
|
68
|
-
/**
|
|
69
|
-
* Settle grace (ms), carved OUT of `provisionTimeoutMs` — never added on top, so the budget
|
|
70
|
-
* ladder above is untouched. The listener aborts the provisioning hook when the work budget
|
|
71
|
-
* ({@link splitProvisionBudget}) expires, then waits up to this grace for the work to settle
|
|
72
|
-
* anyway: once the `FormationUsage` insert has been issued nothing can un-spend it (the table
|
|
73
|
-
* is append-only), so a provisioning that lands late is ADOPTED and reported as a real
|
|
74
|
-
* approval rather than lying "timed out" over a spent invite. A hook that observes the
|
|
75
|
-
* abort before writing leaves the invite unspent.
|
|
76
|
-
*/
|
|
77
|
-
const PROVISION_SETTLE_GRACE_MS = 2000;
|
|
78
|
-
/**
|
|
79
|
-
* Wire-latency margin (ms) added to the responder's provisioning budget to get the
|
|
80
|
-
* initiator's await-response budget — the travel time for the result frame to come back
|
|
81
|
-
* after the responder finishes (see {@link DEFAULT_PROVISION_TIMEOUT_MS}).
|
|
82
|
-
* `StrandFormationManager` reuses this constant so a CONFIGURED budget preserves the same
|
|
83
|
-
* margin the defaults do, instead of applying the same number to both sides and racing the
|
|
84
|
-
* initiator's own timeout against the responder's clean rejection reply. The responder's
|
|
85
|
-
* clamp ({@link provisionCeilingMs}) holds the same margin back, so the ordering survives a
|
|
86
|
-
* budget large enough that BOTH roles get clamped.
|
|
87
|
-
*
|
|
88
|
-
* NOTE: 3 s is a fixed assumption about how long the result frame takes to travel back. If
|
|
89
|
-
* formation ever runs over paths where that frame can take longer (a slow circuit relay, a
|
|
90
|
-
* congested mobile link), the margin is too thin and the initiator's timeout races the
|
|
91
|
-
* responder's reply again — raise it, or derive it from an observed round-trip.
|
|
92
|
-
*/
|
|
93
|
-
export const PROVISION_RESPONSE_TRAVEL_MARGIN_MS = 3000;
|
|
94
|
-
/** Default initiator await-response budget (ms); see {@link DEFAULT_PROVISION_TIMEOUT_MS}. */
|
|
95
|
-
const DEFAULT_INITIATOR_PROVISION_TIMEOUT_MS = DEFAULT_PROVISION_TIMEOUT_MS + PROVISION_RESPONSE_TRAVEL_MARGIN_MS;
|
|
96
43
|
/**
|
|
97
44
|
* Default cap on concurrent inbound formation sessions.
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
45
|
+
*
|
|
46
|
+
* NOTE: a session holds its slot for its whole provisioning budget, 171 s at the default
|
|
47
|
+
* declared link ({@link formationDeadlines}), so a slow hook or commit holds slots for
|
|
48
|
+
* minutes. Only a caller holding a valid token AND a valid consent signature reaches
|
|
49
|
+
* provisioning — a stranger is cut at the contact wait (7 s at the default) or at the first
|
|
50
|
+
* validation read — so the exposure is one invitee opening many sessions with one token. If
|
|
51
|
+
* invitation tokens are ever published where untrusted parties can read them, cap in-flight
|
|
52
|
+
* sessions per token rather than lowering this.
|
|
102
53
|
*/
|
|
103
54
|
const DEFAULT_MAX_CONCURRENT_SESSIONS = 100;
|
|
104
55
|
/**
|
|
@@ -264,49 +215,6 @@ export function isValidResponderCreatesResult(response) {
|
|
|
264
215
|
}
|
|
265
216
|
return true;
|
|
266
217
|
}
|
|
267
|
-
/**
|
|
268
|
-
* Ceiling for a resolved provisioning budget.
|
|
269
|
-
*
|
|
270
|
-
* The session budget also has to cover the wire step that PRECEDES provisioning (the
|
|
271
|
-
* responder's contact read, the initiator's dial-connect), so a whole step is held back
|
|
272
|
-
* rather than triggering only on a literal overrun.
|
|
273
|
-
*
|
|
274
|
-
* `reserveMs` is the EXTRA room only the responder holds back, so its own budget still
|
|
275
|
-
* lands strictly before the initiator's larger await-response budget even when both are
|
|
276
|
-
* clamped — without it, any configured budget at or above `sessionTimeoutMs -
|
|
277
|
-
* stepTimeoutMs` clamps both roles onto the same number and the responder's clean
|
|
278
|
-
* rejection races the initiator's timeout again. Capped at half the remaining room (like
|
|
279
|
-
* {@link splitProvisionBudget}) so a small session config still spends most of it working.
|
|
280
|
-
*/
|
|
281
|
-
function provisionCeilingMs(sessionTimeoutMs, stepTimeoutMs, reserveMs) {
|
|
282
|
-
const roomMs = sessionTimeoutMs - stepTimeoutMs;
|
|
283
|
-
return Math.max(1, roomMs - Math.min(reserveMs, Math.floor(roomMs / 2)));
|
|
284
|
-
}
|
|
285
|
-
/**
|
|
286
|
-
* Resolve a caller-supplied provisioning budget: `0`/negative means "unset" (use
|
|
287
|
-
* `defaultMs`). If the result would let provisioning outlive the session — no result
|
|
288
|
-
* frame is ever sent, exactly the failure this budget exists to prevent — clamp it to
|
|
289
|
-
* {@link provisionCeilingMs} and log a warning.
|
|
290
|
-
*/
|
|
291
|
-
function resolveProvisionTimeoutMs(configured, defaultMs, sessionTimeoutMs, stepTimeoutMs, role, reserveMs = 0) {
|
|
292
|
-
const requested = configured && configured > 0 ? configured : defaultMs;
|
|
293
|
-
const ceilingMs = provisionCeilingMs(sessionTimeoutMs, stepTimeoutMs, reserveMs);
|
|
294
|
-
if (requested >= ceilingMs) {
|
|
295
|
-
log('%s provisionTimeoutMs %dms leaves no room under sessionTimeoutMs %dms (step %dms, reserve %dms); clamping to %dms', role, requested, sessionTimeoutMs, stepTimeoutMs, reserveMs, ceilingMs);
|
|
296
|
-
return ceilingMs;
|
|
297
|
-
}
|
|
298
|
-
return requested;
|
|
299
|
-
}
|
|
300
|
-
/**
|
|
301
|
-
* Split a resolved provisioning budget into the WORK budget and the trailing settle grace.
|
|
302
|
-
*
|
|
303
|
-
* The grace is carved OUT of the budget (see {@link PROVISION_SETTLE_GRACE_MS}), and capped at
|
|
304
|
-
* half of it so a small configured budget still spends at least half its time doing work.
|
|
305
|
-
*/
|
|
306
|
-
function splitProvisionBudget(provisionTimeoutMs) {
|
|
307
|
-
const graceMs = Math.min(PROVISION_SETTLE_GRACE_MS, Math.floor(provisionTimeoutMs / 2));
|
|
308
|
-
return { workMs: provisionTimeoutMs - graceMs, graceMs };
|
|
309
|
-
}
|
|
310
218
|
/**
|
|
311
219
|
* Responder side of the native formation protocol. Registers a libp2p handler and
|
|
312
220
|
* drives each inbound stream through token + disclosure validation, provisioning,
|
|
@@ -319,9 +227,10 @@ export class FormationListener {
|
|
|
319
227
|
this.activeSessions = 0;
|
|
320
228
|
this.sessionCounter = 0;
|
|
321
229
|
this.options = options;
|
|
322
|
-
|
|
323
|
-
this.
|
|
324
|
-
|
|
230
|
+
const deadlines = formationDeadlines(options.linkRoundTripMs);
|
|
231
|
+
this.sessionTimeoutMs = options.sessionTimeoutMs ?? deadlines.sessionMs;
|
|
232
|
+
this.awaitContactMs = options.stepTimeoutMs ?? deadlines.awaitContactMs;
|
|
233
|
+
const split = splitProvisionBudget(resolveProvisionTimeoutMs(options.provisionTimeoutMs, deadlines.provisionWorkMs + deadlines.provisionGraceMs, this.sessionTimeoutMs, this.awaitContactMs + deadlines.validationMs, 'FormationListener', responderClampReserveMs(deadlines, this.awaitContactMs)), deadlines.provisionGraceMs);
|
|
325
234
|
this.provisionWorkMs = split.workMs;
|
|
326
235
|
this.provisionGraceMs = split.graceMs;
|
|
327
236
|
this.maxConcurrentSessions = options.maxConcurrentSessions ?? DEFAULT_MAX_CONCURRENT_SESSIONS;
|
|
@@ -330,21 +239,22 @@ export class FormationListener {
|
|
|
330
239
|
get activeCount() {
|
|
331
240
|
return this.activeSessions;
|
|
332
241
|
}
|
|
333
|
-
|
|
242
|
+
/** Register the formation handler on `node`. Rejects when libp2p refuses the registration. */
|
|
243
|
+
async register(node, protocolId = FORMATION_PROTOCOL) {
|
|
334
244
|
if (this.registered.has(node)) {
|
|
335
245
|
log('node already registered');
|
|
336
246
|
return;
|
|
337
247
|
}
|
|
338
|
-
|
|
248
|
+
await node.handle(protocolId, async (rawStream, _connection) => {
|
|
339
249
|
await this.handleStream(rawStream);
|
|
340
250
|
});
|
|
341
251
|
this.registered.add(node);
|
|
342
252
|
log('formation listener registered (%s)', protocolId);
|
|
343
253
|
}
|
|
344
|
-
unregister(node, protocolId = FORMATION_PROTOCOL) {
|
|
254
|
+
async unregister(node, protocolId = FORMATION_PROTOCOL) {
|
|
345
255
|
if (!this.registered.has(node))
|
|
346
256
|
return;
|
|
347
|
-
|
|
257
|
+
await node.unhandle(protocolId);
|
|
348
258
|
this.registered.delete(node);
|
|
349
259
|
log('formation listener unregistered (%s)', protocolId);
|
|
350
260
|
}
|
|
@@ -378,8 +288,8 @@ export class FormationListener {
|
|
|
378
288
|
}
|
|
379
289
|
}
|
|
380
290
|
/**
|
|
381
|
-
* Run the provisioning hook under its WORK budget — the
|
|
382
|
-
*
|
|
291
|
+
* Run the provisioning hook under its WORK budget — the provisioning budget minus the
|
|
292
|
+
* trailing settle grace ({@link splitProvisionBudget}).
|
|
383
293
|
*
|
|
384
294
|
* When the work budget expires the hook's signal is aborted, then
|
|
385
295
|
* {@link settleWithinGrace} waits out the grace for the aborted work to settle anyway.
|
|
@@ -412,11 +322,16 @@ export class FormationListener {
|
|
|
412
322
|
* inside the grace its outcome is ADOPTED — the joiner is told the truth (approved, or the
|
|
413
323
|
* hook's own rejection reason) rather than "timed out" over a spent invite.
|
|
414
324
|
*
|
|
415
|
-
*
|
|
416
|
-
*
|
|
417
|
-
*
|
|
418
|
-
*
|
|
419
|
-
*
|
|
325
|
+
* The grace is derived to contain one seat read plus one commit at the declared link
|
|
326
|
+
* ({@link formationDeadlines}), which is exactly what runs after the insert attempt passes
|
|
327
|
+
* its abort check, so at that link the late outcome lands inside it.
|
|
328
|
+
*
|
|
329
|
+
* NOTE: a commit that outlasts even the derived grace (a link slower than declared, or a
|
|
330
|
+
* configured `provisionTimeoutMs` whose half-cap shrank the grace) still tells the joiner
|
|
331
|
+
* 'timed out' while its one-time invite is in fact spent, and since every retry mints a
|
|
332
|
+
* fresh keypair no recovery path can match it. Nothing can un-spend an append-only row, so
|
|
333
|
+
* the late-settle logging below is the observability for it; if it is seen in the wild,
|
|
334
|
+
* raise the declared link rather than this grace.
|
|
420
335
|
*/
|
|
421
336
|
async settleWithinGrace(id, pending) {
|
|
422
337
|
let stillPending = false;
|
|
@@ -507,7 +422,7 @@ export class FormationListener {
|
|
|
507
422
|
};
|
|
508
423
|
try {
|
|
509
424
|
const reader = new FrameReader(stream);
|
|
510
|
-
const contact = await withTimeout(this.
|
|
425
|
+
const contact = await withTimeout(this.awaitContactMs, `Formation await-contact#${id}`, () => reader.read());
|
|
511
426
|
log('formation session #%d contact: token=%s party=%s', id, contact.token, contact.partyId);
|
|
512
427
|
if (!this.isJoinerConsentValid(id, contact)) {
|
|
513
428
|
send({ approved: false, reason: 'Invalid joiner consent' });
|
|
@@ -568,6 +483,28 @@ export class FormationListener {
|
|
|
568
483
|
}
|
|
569
484
|
}
|
|
570
485
|
}
|
|
486
|
+
/**
|
|
487
|
+
* Open the formation stream under the dial deadline, cancelling the dial when it expires.
|
|
488
|
+
*
|
|
489
|
+
* The deadline's signal goes into `dialProtocol`, so an expired dial is abandoned by libp2p
|
|
490
|
+
* rather than left running. A dial that settles in the same tick the deadline fires loses
|
|
491
|
+
* the race to the timeout rejection and would leave its stream open with nobody to close
|
|
492
|
+
* it, so a stream that arrives after the signal aborted is reset here — the same treatment
|
|
493
|
+
* `exchangeFrame` (`control-stream.ts`) gives a stream dialed past its deadline. A late
|
|
494
|
+
* rejection is the abort itself, or reaches the caller through the awaited copy, so the
|
|
495
|
+
* handler below only stops it being reported as unhandled.
|
|
496
|
+
*/
|
|
497
|
+
function openFormationStream(node, addr, protocolId, dialTimeoutMs) {
|
|
498
|
+
return withDeadline(dialTimeoutMs, 'Formation dial-connect', (signal) => {
|
|
499
|
+
const pending = node.dialProtocol(addr, protocolId, { signal });
|
|
500
|
+
void pending.then((stream) => {
|
|
501
|
+
if (signal.aborted) {
|
|
502
|
+
stream.abort(new Error('Formation dial-connect resolved after its deadline'));
|
|
503
|
+
}
|
|
504
|
+
}, () => { });
|
|
505
|
+
return pending;
|
|
506
|
+
});
|
|
507
|
+
}
|
|
571
508
|
/**
|
|
572
509
|
* Initiator side of the native formation protocol. Dials the responder, sends the
|
|
573
510
|
* contact (carrying the real disclosure/token/cadre), validates the responder's
|
|
@@ -579,13 +516,13 @@ export async function dialFormation(node, options) {
|
|
|
579
516
|
throw new Error('No responder addresses available for formation');
|
|
580
517
|
}
|
|
581
518
|
const protocolId = options.protocolId ?? FORMATION_PROTOCOL;
|
|
582
|
-
const
|
|
583
|
-
const
|
|
584
|
-
const
|
|
519
|
+
const deadlines = formationDeadlines(options.linkRoundTripMs);
|
|
520
|
+
const sessionTimeoutMs = options.sessionTimeoutMs ?? deadlines.sessionMs;
|
|
521
|
+
const dialTimeoutMs = options.dialTimeoutMs ?? deadlines.dialMs;
|
|
522
|
+
const provisionTimeoutMs = resolveProvisionTimeoutMs(options.provisionTimeoutMs, deadlines.initiatorAwaitResponseMs, sessionTimeoutMs, dialTimeoutMs, 'dialFormation');
|
|
585
523
|
const addr = multiaddr(options.responderAddrs[0]);
|
|
586
524
|
return withTimeout(sessionTimeoutMs, 'Formation dial', async () => {
|
|
587
|
-
const
|
|
588
|
-
const stream = rawStream;
|
|
525
|
+
const stream = await openFormationStream(node, addr, protocolId, dialTimeoutMs);
|
|
589
526
|
try {
|
|
590
527
|
const reader = new FrameReader(stream);
|
|
591
528
|
writeFrame(stream, options.contact);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strand-formation-protocol.js","sourceRoot":"","sources":["../src/strand-formation-protocol.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"strand-formation-protocol.js","sourceRoot":"","sources":["../src/strand-formation-protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { PrivateKey } from '@libp2p/interface';
|
|
2
2
|
import { type PeerJoinBackfillConfig } from './peer-join-backfill.js';
|
|
3
|
+
import { type StrandPeerObservation } from './strand-peer-observer.js';
|
|
4
|
+
import type { StrandPeerBookStore } from './strand-peer-book.js';
|
|
3
5
|
import { type StrandRevocationEnforcementConfig } from './strand-revocation-enforcer.js';
|
|
4
6
|
import { type PendingMembershipInviteSource, type StrandMembershipReconciliationConfig } from './strand-membership-reconciler.js';
|
|
5
7
|
import { type StrandFirstSyncConfig } from './strand-first-sync-gate.js';
|
|
@@ -32,8 +34,15 @@ export declare function liveStrandStatus(instance: StrandInstance): 'active' | '
|
|
|
32
34
|
*/
|
|
33
35
|
export interface StartStrandConfig {
|
|
34
36
|
strandRow: StrandRow;
|
|
35
|
-
/**
|
|
36
|
-
|
|
37
|
+
/**
|
|
38
|
+
* sApp configuration provided by the hosting application. Absent for a **storage
|
|
39
|
+
* replica** — a strand this node stores and serves without the app installed
|
|
40
|
+
* (`CadreNodeConfig.hostUnclaimedStrands`): no schema signature check, no `App`
|
|
41
|
+
* schema, no `sAppInfo` on the instance, and the default latency hint. A replica is
|
|
42
|
+
* always a joiner; `StrandDatabase` refuses to found one. An app that later claims the
|
|
43
|
+
* strand upgrades the running replica in place ({@link StrandInstanceManager.attachSApp}).
|
|
44
|
+
*/
|
|
45
|
+
sAppConfig?: SAppConfig;
|
|
37
46
|
storage?: StorageConfig;
|
|
38
47
|
network?: NetworkConfig;
|
|
39
48
|
profile: NodeProfile;
|
|
@@ -200,6 +209,26 @@ export interface StartStrandConfig {
|
|
|
200
209
|
* hibernation wake's rebuilt supervisors carry it too.
|
|
201
210
|
*/
|
|
202
211
|
announceDelegateToRelay?: (strandId: string, relayAddr: string, delegatePeerId: string) => Promise<void>;
|
|
212
|
+
/**
|
|
213
|
+
* Called when the strand's libp2p node identifies a STRAND peer — one whose
|
|
214
|
+
* identify result names this strand's block-transfer protocol, so never the
|
|
215
|
+
* circuit relay or a bootstrap node — with the addresses it is dialable at
|
|
216
|
+
* (`strand-peer-observer.ts`). Throttled per peer; must not throw. `CadreNode`
|
|
217
|
+
* wires it to the node-local strand peer book, which is what lets a restarted
|
|
218
|
+
* machine dial the peers it was talking to. Absent ⇒ nothing is observed.
|
|
219
|
+
* Retained with the launch config, so a hibernation wake re-arms it on the
|
|
220
|
+
* rebuilt node.
|
|
221
|
+
*/
|
|
222
|
+
onStrandPeerIdentified?: (strandId: string, observation: StrandPeerObservation) => void;
|
|
223
|
+
/**
|
|
224
|
+
* The node-local strand peer book the book SWAP reads and writes
|
|
225
|
+
* (`strand-peer-book-swap.ts`): the strand node signs its own addresses with
|
|
226
|
+
* {@link privateKey}, exchanges signed entries with every strand peer it identifies,
|
|
227
|
+
* and files what verifies. Absent ⇒ no swap runs — a peer that dials this node's
|
|
228
|
+
* swap handler gets no answer. `CadreNode` passes its book store. Retained with the
|
|
229
|
+
* launch config, so a hibernation wake re-arms the swap on the rebuilt node.
|
|
230
|
+
*/
|
|
231
|
+
strandPeerBook?: StrandPeerBookStore;
|
|
203
232
|
}
|
|
204
233
|
/**
|
|
205
234
|
* Volatile inputs re-resolved when resuming a quiesced strand — the ones that can
|
|
@@ -259,6 +288,23 @@ export declare class StrandInstanceManager {
|
|
|
259
288
|
* missed writes).
|
|
260
289
|
*/
|
|
261
290
|
private backfills;
|
|
291
|
+
/**
|
|
292
|
+
* The per-strand peer-book observation writer (`strand-peer-observer.ts`), keyed
|
|
293
|
+
* by strand id. Same lifecycle rationale as {@link backfills}: started in
|
|
294
|
+
* `buildStrandRuntime` right after the libp2p node exists, stopped and dropped in
|
|
295
|
+
* `releaseRuntime`, so quiesce → resume re-arms it on the rebuilt node. Only
|
|
296
|
+
* present when the launch config supplied `onStrandPeerIdentified`.
|
|
297
|
+
*/
|
|
298
|
+
private peerObservers;
|
|
299
|
+
/**
|
|
300
|
+
* Per-strand strand peer book SWAP driver ({@link StrandPeerBookSwap}) — the signed
|
|
301
|
+
* exchange of book entries between strand peers. Same lifetime as the peer-book
|
|
302
|
+
* observer above: armed in `buildStrandRuntime` right after the libp2p node exists
|
|
303
|
+
* (its protocol handler must be registered before an early peer dials it), stopped
|
|
304
|
+
* and dropped in `releaseRuntime`. Only present when the launch config supplied
|
|
305
|
+
* `strandPeerBook`.
|
|
306
|
+
*/
|
|
307
|
+
private peerBookSwaps;
|
|
262
308
|
/**
|
|
263
309
|
* The per-strand revoked-peer enforcer (closed strands only), keyed by strand
|
|
264
310
|
* id. Same lifecycle rationale as {@link backfills}: created in
|
|
@@ -325,6 +371,23 @@ export declare class StrandInstanceManager {
|
|
|
325
371
|
* wake becomes the better trade.
|
|
326
372
|
*/
|
|
327
373
|
private strandStorages;
|
|
374
|
+
/**
|
|
375
|
+
* The runtime build in flight per strand id (`buildStrandRuntime`, from `startStrand` or
|
|
376
|
+
* `resumeStrand`), present until it settles. The instance is tracked for the whole build,
|
|
377
|
+
* with its database not yet constructed or not yet initialized, so a caller that must act
|
|
378
|
+
* on the FINISHED runtime ({@link attachSApp}, {@link whenRuntimeBuilt}) waits on this instead. A failed build's
|
|
379
|
+
* rejection belongs to the call that started it.
|
|
380
|
+
*/
|
|
381
|
+
private runtimeBuilds;
|
|
382
|
+
/**
|
|
383
|
+
* The latest resume or quiesce requested per strand id, present until it settles. Each one
|
|
384
|
+
* starts only once the one requested before it has settled, so a wake that lands during a
|
|
385
|
+
* quiesce rebuilds after it, and a quiesce requested during a rebuild releases what that
|
|
386
|
+
* rebuild finished. The WHOLE operation, not its entry in {@link runtimeBuilds}: that settles
|
|
387
|
+
* before a resume's own catch records `'error'`, so a joiner awaiting it could read a stale
|
|
388
|
+
* status.
|
|
389
|
+
*/
|
|
390
|
+
private transitions;
|
|
328
391
|
private stopping;
|
|
329
392
|
constructor();
|
|
330
393
|
/**
|
|
@@ -356,6 +419,18 @@ export declare class StrandInstanceManager {
|
|
|
356
419
|
* hibernation wake never re-enters the embedder's provider.
|
|
357
420
|
*/
|
|
358
421
|
startStrand(config: StartStrandConfig): Promise<StrandInstance>;
|
|
422
|
+
/** Hold `build` in {@link runtimeBuilds} until it settles, and settle as it does. */
|
|
423
|
+
private trackRuntimeBuild;
|
|
424
|
+
/**
|
|
425
|
+
* Wait until no runtime build of `strandId` is in flight. Never rejects: a failed build
|
|
426
|
+
* is reported by the call that started it, and the caller re-reads the instance after.
|
|
427
|
+
*
|
|
428
|
+
* NOTE: after a failed launch the re-read sees the instance gone only because
|
|
429
|
+
* `startStrand`'s catch deletes it synchronously, and its continuation is queued before
|
|
430
|
+
* this waiter's. If that cleanup ever awaits before `instances.delete`, a waiter can act
|
|
431
|
+
* on the dying record; move the cleanup inside the tracked promise then.
|
|
432
|
+
*/
|
|
433
|
+
private settleRuntimeBuilds;
|
|
359
434
|
/**
|
|
360
435
|
* Build (or rebuild) the libp2p node + StrandDatabase for an instance and
|
|
361
436
|
* attach them, transitioning it to `active`. Shared by `startStrand` (fresh
|
|
@@ -470,11 +545,26 @@ export declare class StrandInstanceManager {
|
|
|
470
545
|
* Quiesce a strand: release its strand-network resources (stop the libp2p node,
|
|
471
546
|
* close the StrandDatabase) while RETAINING the instance record — identity,
|
|
472
547
|
* sAppInfo, keys, latency hint, metadata — and its launch config so it can be
|
|
473
|
-
* resumed later
|
|
474
|
-
* deletion.
|
|
475
|
-
*
|
|
548
|
+
* resumed later, then mark it `hibernating`. Mechanically this is `stopStrand` minus
|
|
549
|
+
* the instance/config deletion. A tracked strand with no runtime left (a failed
|
|
550
|
+
* rebuild already released it) is only marked; an untracked one is left alone.
|
|
551
|
+
*
|
|
552
|
+
* Ordered with {@link resumeStrand} (see {@link transitions}): it starts once the resume
|
|
553
|
+
* or launch build before it has settled, so it releases a finished runtime, and the
|
|
554
|
+
* status write is its last step, so a resume requested meanwhile writes after it. A call
|
|
555
|
+
* made while another quiesce is the latest request joins it. A failed release leaves the
|
|
556
|
+
* status as it was and rejects.
|
|
476
557
|
*/
|
|
477
558
|
quiesceStrand(strandId: string): Promise<void>;
|
|
559
|
+
/** Body of {@link quiesceStrand}. */
|
|
560
|
+
private runQuiesce;
|
|
561
|
+
/**
|
|
562
|
+
* Whether the latest runtime transition requested for `strandId` is a quiesce that has
|
|
563
|
+
* not finished. Its handles may still be attached and its status still live, but it is on
|
|
564
|
+
* its way to `hibernating`, so a caller that needs it up must {@link resumeStrand} it — the
|
|
565
|
+
* resume runs after the quiesce — rather than treat it as live.
|
|
566
|
+
*/
|
|
567
|
+
isQuiescing(strandId: string): boolean;
|
|
478
568
|
/**
|
|
479
569
|
* Resume a previously-quiesced strand: rebuild its libp2p node + StrandDatabase
|
|
480
570
|
* from the retained launch config and re-attach them, transitioning it back to
|
|
@@ -482,8 +572,22 @@ export declare class StrandInstanceManager {
|
|
|
482
572
|
* launch (the cohort `bootstrapNodes` seed and the strand's `servingMachines`
|
|
483
573
|
* count) and updates the retained config so a later resume reuses the latest
|
|
484
574
|
* values. Returns the live instance unchanged if it is already running.
|
|
575
|
+
*
|
|
576
|
+
* Overlapping calls share one rebuild: a call made while a resume is the latest request
|
|
577
|
+
* for the strand — a wake landing during a check-in — joins it and settles exactly as it
|
|
578
|
+
* does, `'error'` status included. The joiner's own `overrides` are ignored; the first
|
|
579
|
+
* resume's seed wins, and both callers resolved the cohort seed moments apart. A call made
|
|
580
|
+
* while a quiesce is the latest request runs after that quiesce and rebuilds (see
|
|
581
|
+
* {@link transitions}), and one made while `startStrand` is still building waits for that
|
|
582
|
+
* build rather than starting a second.
|
|
485
583
|
*/
|
|
486
584
|
resumeStrand(strandId: string, overrides?: ResumeStrandOverrides): Promise<StrandInstance>;
|
|
585
|
+
/** Record `transition` as the latest for `strandId` until it settles. */
|
|
586
|
+
private holdTransition;
|
|
587
|
+
/** Wait for the transition requested before this one. Never rejects: its failure belongs to its caller. */
|
|
588
|
+
private settleTransition;
|
|
589
|
+
/** Body of {@link resumeStrand}; at most one runs per strand at a time. */
|
|
590
|
+
private runResume;
|
|
487
591
|
/**
|
|
488
592
|
* Honor a founder request against an ALREADY-TRACKED strand — the seam that
|
|
489
593
|
* closes the "whoever launches first decides whether the bootstrap runs" gap:
|
|
@@ -500,7 +604,8 @@ export declare class StrandInstanceManager {
|
|
|
500
604
|
* - `'already-founder'` — the retained config already founds; nothing to do.
|
|
501
605
|
* - `'bootstrapped'` — config flipped and the live database ran the bootstrap.
|
|
502
606
|
* - `'needs-resume'` — config flipped, but the instance is quiesced (no live
|
|
503
|
-
* database)
|
|
607
|
+
* database) or being quiesced (its database is closing), so the bootstrap could
|
|
608
|
+
* not run here: the CALLER must wake the
|
|
504
609
|
* strand (`CadreNode.wakeStrand`, which owns the hibernation bookkeeping this
|
|
505
610
|
* manager does not) so the rebuild — which now founds — runs it.
|
|
506
611
|
* @param resolvePartyKey - Asked for the party's own membership key when (and only
|
|
@@ -516,6 +621,39 @@ export declare class StrandInstanceManager {
|
|
|
516
621
|
* whose `'needs-resume'` wake fails owes the same withdrawal.
|
|
517
622
|
*/
|
|
518
623
|
foundExistingStrand(strandId: string, resolvePartyKey?: () => Promise<string | undefined>): Promise<'already-founder' | 'bootstrapped' | 'needs-resume'>;
|
|
624
|
+
/**
|
|
625
|
+
* Give a tracked storage replica ({@link StartStrandConfig.sAppConfig} absent) the app's
|
|
626
|
+
* schema in place — the seam for an app on this machine claiming a strand this node was
|
|
627
|
+
* already hosting. No runtime rebuild: the libp2p node, its peer id and connections, the
|
|
628
|
+
* store and its warm cache all stay, and the new `App` tables read the blocks the replica
|
|
629
|
+
* already holds. Callers attach BEFORE {@link foundExistingStrand}: the founder bootstrap
|
|
630
|
+
* writes the sApp into `Strand.Header` and refuses a database that has none.
|
|
631
|
+
*
|
|
632
|
+
* A runtime build in flight (the replica's launch, or a hibernation wake) is waited out
|
|
633
|
+
* first, so the attach acts on the database that build produced. Then, in order: the
|
|
634
|
+
* schema signature is checked before anything changes; the retained launch config takes
|
|
635
|
+
* the sApp, so every later rebuild applies it through `composeStrand`; the live database —
|
|
636
|
+
* published, or still held by the first-sync gate — gets the schema; and only then does
|
|
637
|
+
* the instance record `sAppInfo` and the sApp's latency hint. A quiesced instance gets the
|
|
638
|
+
* config alone, and its next resume applies the schema.
|
|
639
|
+
*
|
|
640
|
+
* @returns `'already-attached'` when the instance already runs an sApp — a DIFFERENT one
|
|
641
|
+
* is logged and left as it is, as a second claim of a claimed strand always has been —
|
|
642
|
+
* else `'attached'`.
|
|
643
|
+
* @throws when the strand is not tracked (a caller bug, or a launch that failed while
|
|
644
|
+
* this waited on it); when the schema signature is refused, having changed nothing; and
|
|
645
|
+
* whatever the live apply throws (e.g. a quiesce closed the database mid-apply) — the
|
|
646
|
+
* retained config then still carries the sApp and `sAppInfo` stays unset, so the next
|
|
647
|
+
* claim retries the apply.
|
|
648
|
+
*
|
|
649
|
+
* NOTE: two claims of one replica racing each other both pass the `sAppInfo` check and
|
|
650
|
+
* apply concurrently; the loser of the declarative diff can reject, and its `addStrand`
|
|
651
|
+
* retry then resolves `'already-attached'`. Needs an app calling `addStrand` twice at once
|
|
652
|
+
* (or beside a watcher retry); if it is ever seen, chain attaches per strand id.
|
|
653
|
+
*/
|
|
654
|
+
attachSApp(strandId: string, sAppConfig: SAppConfig, options?: {
|
|
655
|
+
requireSignedSchemas?: boolean;
|
|
656
|
+
}): Promise<'attached' | 'already-attached'>;
|
|
519
657
|
/**
|
|
520
658
|
* Whether `strandId` is launched but still waiting for its first sync — a joiner whose
|
|
521
659
|
* runtime is up while its database is withheld (status `'syncing'`, or `'idle'` after
|
|
@@ -536,6 +674,14 @@ export declare class StrandInstanceManager {
|
|
|
536
674
|
whenWritable(strandId: string, options?: {
|
|
537
675
|
timeoutMs?: number;
|
|
538
676
|
}): Promise<StrandInstance>;
|
|
677
|
+
/**
|
|
678
|
+
* The tracked instance once no runtime build of it is in flight, or `undefined` when none
|
|
679
|
+
* is tracked by then — never launched, or the launch waited on failed and dropped its
|
|
680
|
+
* record. For a caller about to hand a tracked instance to an app: until its build settles
|
|
681
|
+
* the instance is `'starting'` with no database, and a failed launch leaves no instance.
|
|
682
|
+
* Never rejects; a failed build is reported by the call that started it.
|
|
683
|
+
*/
|
|
684
|
+
whenRuntimeBuilt(strandId: string): Promise<StrandInstance | undefined>;
|
|
539
685
|
/**
|
|
540
686
|
* Hand a launch's database to the app: set `instance.database`, retire the gate that
|
|
541
687
|
* held it, release every {@link whenWritable} waiter, and — when the launch had already
|