@serfab/cadre-core 1.4.0 → 1.6.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 (63) hide show
  1. package/dist/cadre-node.d.ts +38 -15
  2. package/dist/cadre-node.js +81 -29
  3. package/dist/cadre-node.js.map +1 -1
  4. package/dist/control-database.d.ts +24 -10
  5. package/dist/control-database.js +48 -16
  6. package/dist/control-database.js.map +1 -1
  7. package/dist/control-read-retry.d.ts +12 -0
  8. package/dist/control-read-retry.js +12 -0
  9. package/dist/control-read-retry.js.map +1 -1
  10. package/dist/control-write-retry.d.ts +5 -4
  11. package/dist/control-write-retry.js +24 -7
  12. package/dist/control-write-retry.js.map +1 -1
  13. package/dist/index.d.ts +3 -2
  14. package/dist/index.js +5 -2
  15. package/dist/index.js.map +1 -1
  16. package/dist/link-budget.d.ts +224 -0
  17. package/dist/link-budget.js +239 -0
  18. package/dist/link-budget.js.map +1 -0
  19. package/dist/peer-dial.d.ts +36 -17
  20. package/dist/peer-dial.js +37 -17
  21. package/dist/peer-dial.js.map +1 -1
  22. package/dist/peer-join-backfill.d.ts +58 -4
  23. package/dist/peer-join-backfill.js +166 -20
  24. package/dist/peer-join-backfill.js.map +1 -1
  25. package/dist/relay-reservation.d.ts +59 -11
  26. package/dist/relay-reservation.js +169 -43
  27. package/dist/relay-reservation.js.map +1 -1
  28. package/dist/seed-bootstrap.js +2 -1
  29. package/dist/seed-bootstrap.js.map +1 -1
  30. package/dist/strand-first-sync-gate.d.ts +105 -22
  31. package/dist/strand-first-sync-gate.js +121 -27
  32. package/dist/strand-first-sync-gate.js.map +1 -1
  33. package/dist/strand-instance-manager.d.ts +27 -2
  34. package/dist/strand-instance-manager.js +60 -13
  35. package/dist/strand-instance-manager.js.map +1 -1
  36. package/dist/strand-membership-reconciler.d.ts +200 -45
  37. package/dist/strand-membership-reconciler.js +302 -86
  38. package/dist/strand-membership-reconciler.js.map +1 -1
  39. package/dist/strand-membership-writer.d.ts +3 -2
  40. package/dist/strand-membership-writer.js +67 -90
  41. package/dist/strand-membership-writer.js.map +1 -1
  42. package/dist/strand-network-config.d.ts +2 -2
  43. package/dist/strand-network-config.js +2 -2
  44. package/dist/types.d.ts +105 -9
  45. package/dist/types.js +20 -4
  46. package/dist/types.js.map +1 -1
  47. package/package.json +8 -8
  48. package/src/cadre-node.ts +7449 -7397
  49. package/src/control-database.ts +48 -16
  50. package/src/control-read-retry.ts +214 -202
  51. package/src/control-write-retry.ts +24 -7
  52. package/src/index.ts +582 -563
  53. package/src/link-budget.ts +264 -0
  54. package/src/peer-dial.ts +39 -17
  55. package/src/peer-join-backfill.ts +648 -478
  56. package/src/relay-reservation.ts +1119 -951
  57. package/src/seed-bootstrap.ts +2 -1
  58. package/src/strand-first-sync-gate.ts +352 -258
  59. package/src/strand-instance-manager.ts +1520 -1458
  60. package/src/strand-membership-reconciler.ts +334 -92
  61. package/src/strand-membership-writer.ts +1962 -1987
  62. package/src/strand-network-config.ts +2 -2
  63. package/src/types.ts +104 -8
package/dist/types.d.ts CHANGED
@@ -284,7 +284,8 @@ export interface NetworkConfig {
284
284
  *
285
285
  * It buys a node that BOOTS, not a node that boots fast: `start()` still waits
286
286
  * out that first attempt, which costs the drive's whole timeout
287
- * (`DEFAULT_RELAY_RESERVE_TIMEOUT_MS`, 10 s) against a relay that is unreachable
287
+ * (`DEFAULT_RELAY_RESERVE_TIMEOUT_MS`, four link round trips at
288
+ * {@link linkRoundTripMs} — 14 s at its default) against a relay that is unreachable
288
289
  * rather than merely refusing (`relay-reservation.ts` polls to the deadline, in
289
290
  * case libp2p's own discovery lands a reservation independently).
290
291
  *
@@ -374,6 +375,59 @@ export interface NetworkConfig {
374
375
  * see {@link DEFAULT_CONNECTION_MONITOR} for why.
375
376
  */
376
377
  connectionMonitor?: Libp2pConnectionMonitorInit;
378
+ /**
379
+ * How long ONE cohort peer gets to answer ONE read-path request, in milliseconds, for the
380
+ * control node and every strand node — as {@link connectionMonitor} is, and for the same
381
+ * reason: the setting describes the LINK, and a phone's control node and its strand nodes
382
+ * ride the same one. Omitted takes {@link COHORT_READ_DEADLINE_MS} (5000 ms), chosen for two
383
+ * parties reaching each other only through a relay; Optimystic's own default is 1000 ms.
384
+ *
385
+ * Raise it for a link slower still, lower it for a deployment that is all LAN and wants a
386
+ * departed peer to stop holding up a read sooner. The cost of a larger value is that a peer
387
+ * which is truly gone holds a read of a block missing locally for that long before the read
388
+ * is declined and retried, and a joining machine's first sync runs several such consults —
389
+ * so a change here should be weighed against
390
+ * {@link CadreNodeConfig.strandFirstSync}'s budget. The measurement behind the default, and
391
+ * what it costs, are on {@link COHORT_READ_DEADLINE_MS}.
392
+ *
393
+ * Handed to db-p2p's `clusterPolicy.cohortQueryTimeoutMs` unchanged and NOT re-validated
394
+ * here. Optimystic refuses a value that is not a finite number above zero, or is above its
395
+ * `MAX_COHORT_QUERY_TIMEOUT_MS` (about 4.97 days — the ceiling exists because a unit mix-up
396
+ * is the one way to exceed it), by throwing where the libp2p node is built: inside
397
+ * `CadreNode.start()` for the control network, and inside `CadreNode.addStrand` for a strand.
398
+ * Fractional values are accepted — this is a duration, not a count of peers.
399
+ */
400
+ cohortQueryTimeoutMs?: number;
401
+ /**
402
+ * The round trip this node assumes between itself and another machine, in milliseconds, for
403
+ * the control node and every strand node — as {@link cohortQueryTimeoutMs} is, and for the
404
+ * same reason: the setting describes the LINK, and a phone's control node and its strand
405
+ * nodes ride the same one. Omitted takes {@link DECLARED_LINK_ROUND_TRIP_MS} (3500 ms).
406
+ *
407
+ * This is NOT a timeout. It is the one stated assumption that cadre's own dial and
408
+ * reservation deadlines are DERIVED from, each by the number of round trips that operation
409
+ * was measured to cost: a peer-join catch-up's dial to one peer, its push response, one relay
410
+ * reservation drive, the control-cohort dial budgets, and libp2p's own `dialTimeout` and
411
+ * `inboundUpgradeTimeout` on every node. Reaching another machine through a relay costs a
412
+ * fixed number of exchanges, so a deadline written as milliseconds has a link speed above
413
+ * which it can never open a connection — which is the defect this declaration exists to make
414
+ * impossible to reintroduce one budget at a time. The counts, the measurement behind them,
415
+ * and what still fails at the supported link are in `link-budget.ts`.
416
+ *
417
+ * The default covers the slowest link sereus supports, a 3-second round trip through a relay.
418
+ * Raise it for a link slower still; the cost is the ordinary cost of longer deadlines, a peer
419
+ * that is genuinely gone holding each operation that much longer before it is abandoned and
420
+ * retried. Lower it only if EVERY machine of the party is that close: this node is also the
421
+ * listener for connections other machines open to it, and its `inboundUpgradeTimeout` comes
422
+ * from this value, so a node declaring a faster link than its peers discards their
423
+ * half-built connections — silently, from the dialer's side.
424
+ *
425
+ * Refused where the libp2p node is built — inside `CadreNode.start()` for the control
426
+ * network, inside `CadreNode.addStrand` for a strand — if it is not a finite number above
427
+ * zero, because every consumer multiplies it into a deadline where a zero means "give up at
428
+ * once" and a `NaN` means "never".
429
+ */
430
+ linkRoundTripMs?: number;
377
431
  /**
378
432
  * Optional async resolver returning the multiaddrs to embed in invites
379
433
  * (and other owner-address contexts). When unset, `libp2pNode.getMultiaddrs()`
@@ -485,6 +539,12 @@ export interface NetworkConfig {
485
539
  * kept it (the same pair aborted at a 200ms stall only when the deadline was 300ms). An
486
540
  * interval strictly above the deadline is what makes the 30 seconds real.
487
541
  *
542
+ * WHAT THE LINK NEEDS OF IT. One ping opens a fresh stream and echoes over it: a protocol
543
+ * negotiation plus the echo, two link round trips by `link-budget.ts`'s counts (a `newStream`
544
+ * over a relayed circuit measured 3016 ms at 1500 ms one-way). At the slowest link sereus
545
+ * supports, a 3-second relayed round trip, that is about 6 s — well inside the 30 s deadline,
546
+ * which exists for the phone's CPU rather than the link.
547
+ *
488
548
  * WHAT IT COSTS. A dead peer is reclaimed 30 to 65 seconds after it stops answering — the
489
549
  * deadline, plus up to one interval of waiting for the ping that will fail — where
490
550
  * libp2p's defaults took about 5 to 15 seconds. `db-p2p` caps a node at 16 connections,
@@ -555,11 +615,21 @@ export interface ControlNetworkConfig {
555
615
  *
556
616
  * The two `*ClusterPolicy` BUILDERS are the same objects with the block-repair
557
617
  * corroboration yardstick declared from the machines enrolled in this party
558
- * ({@link resolveRepairYardstick}); handed no count, each returns its frozen base
559
- * constant unchanged. A network picks the derived number up when its libp2p node is
560
- * built, which for a strand is every wake from hibernation.
618
+ * ({@link resolveRepairYardstick}) and, if the host set one, its own per-peer read
619
+ * deadline in place of {@link COHORT_READ_DEADLINE_MS}. Both arrive in one named
620
+ * declarations object, because both are plain numbers meaning unrelated things;
621
+ * declaring neither returns the frozen base constant unchanged. A network picks the
622
+ * derived numbers up when its libp2p node is built, which for a strand is every wake
623
+ * from hibernation.
624
+ */
625
+ export { MIN_CLUSTER_SIZE, COHORT_READ_DEADLINE_MS, CONTROL_REPLICATION_BREADTH, CONTROL_CLUSTER_POLICY, DEFAULT_STRAND_CLUSTER_SIZE, STRAND_CLUSTER_POLICY, resolveStrandClusterSize, resolveRepairYardstick, controlClusterPolicy, strandClusterPolicy } from '@serfab/quereus-plugin-sereus';
626
+ /**
627
+ * The declared link round trip every cadre-owned dial and reservation deadline is derived from,
628
+ * re-exported beside {@link NetworkConfig.linkRoundTripMs} so a host reading the setting finds
629
+ * the default it replaces. The counts, the measurement and the derivation live in
630
+ * `link-budget.ts`.
561
631
  */
562
- export { MIN_CLUSTER_SIZE, CONTROL_REPLICATION_BREADTH, CONTROL_CLUSTER_POLICY, DEFAULT_STRAND_CLUSTER_SIZE, STRAND_CLUSTER_POLICY, resolveStrandClusterSize, resolveRepairYardstick, controlClusterPolicy, strandClusterPolicy } from '@serfab/quereus-plugin-sereus';
632
+ export { DECLARED_LINK_ROUND_TRIP_MS } from './link-budget.js';
563
633
  /**
564
634
  * Main configuration for a CadreNode
565
635
  */
@@ -680,10 +750,12 @@ export interface CadreNodeConfig {
680
750
  * to a table it has never fetched creates a private copy of it that never merges.
681
751
  * `timeoutMs` bounds how long {@link CadreNode.addStrand} waits before rejecting with
682
752
  * `StrandAwaitingFirstSyncError` (retryable — the launch stays up and keeps probing);
683
- * `pollIntervalMs` is the probe cadence. Omit for the defaults (`DEFAULT_STRAND_FIRST_SYNC_TIMEOUT_MS`, 30 s;
684
- * `DEFAULT_STRAND_FIRST_SYNC_POLL_MS`, 500 ms). There is deliberately no way to disable
685
- * the gate: a machine that already holds the Header is never gated, so nothing that works
686
- * today is blocked by it.
753
+ * `pollIntervalMs` is the probe cadence. Omit for the defaults (`DEFAULT_STRAND_FIRST_SYNC_TIMEOUT_MS`,
754
+ * sized for a machine re-attaching through a relay on a slow link, the slowest attach
755
+ * measured; that constant's doc comment carries the number, the measurement behind it and
756
+ * what the budget costs, and is the only copy of them; `DEFAULT_STRAND_FIRST_SYNC_POLL_MS`,
757
+ * 500 ms). There is deliberately no way to disable the gate: a machine whose store already
758
+ * holds the Header is never gated, so nothing that works today is blocked by it.
687
759
  */
688
760
  strandFirstSync?: StrandFirstSyncConfig;
689
761
  /** Hibernation configuration */
@@ -1228,6 +1300,30 @@ export interface CadreNodeEvents {
1228
1300
  'strand:revoked': {
1229
1301
  strandId: string;
1230
1302
  };
1303
+ /**
1304
+ * Emitted when this node holds a staged membership invitation for a CLOSED strand
1305
+ * that its own writes cannot redeem — the shape a REMOVED party hits when a manager
1306
+ * hands it a fresh invitation. Redeeming means writing this party's `Strand.Member`
1307
+ * row into the strand, and the machines that would carry that write are the ones the
1308
+ * remaining members refuse, so the attempt is made and fails. Two triggers, reported
1309
+ * at most once per re-arm of the membership loop (a further invitation staged while the
1310
+ * loop is still running does not reset the report):
1311
+ *
1312
+ * - CONFIRMED: the revoked-peer gate already flags this node as removed (the
1313
+ * `strand:revoked` case) and an invitation is staged.
1314
+ * - PROBABLE: `UNFINISHED_PASSES_BEFORE_ESCALATION` consecutive attempts left the
1315
+ * invitation staged. This one is a SUSPICION, not a verdict — the invitation's row
1316
+ * may simply not have replicated here yet on a slow strand — and the accompanying
1317
+ * warning names both causes.
1318
+ *
1319
+ * Nothing is stopped or torn down. A fresh invitation cannot re-admit a removed
1320
+ * party by itself: the remedy is a remaining manager admitting this party's member
1321
+ * key directly (`addMemberByManager`), after which the membership loop, which keeps
1322
+ * retrying, finishes the join on its own.
1323
+ */
1324
+ 'strand:rejoin-blocked': {
1325
+ strandId: string;
1326
+ };
1231
1327
  /**
1232
1328
  * Emitted when the control network advertises a strand this node has no
1233
1329
  * registered `sAppConfig` for — i.e. a strand created by another member, or
package/dist/types.js CHANGED
@@ -66,6 +66,12 @@ export const HIBERNATION_TIMEOUTS = {
66
66
  * kept it (the same pair aborted at a 200ms stall only when the deadline was 300ms). An
67
67
  * interval strictly above the deadline is what makes the 30 seconds real.
68
68
  *
69
+ * WHAT THE LINK NEEDS OF IT. One ping opens a fresh stream and echoes over it: a protocol
70
+ * negotiation plus the echo, two link round trips by `link-budget.ts`'s counts (a `newStream`
71
+ * over a relayed circuit measured 3016 ms at 1500 ms one-way). At the slowest link sereus
72
+ * supports, a 3-second relayed round trip, that is about 6 s — well inside the 30 s deadline,
73
+ * which exists for the phone's CPU rather than the link.
74
+ *
69
75
  * WHAT IT COSTS. A dead peer is reclaimed 30 to 65 seconds after it stops answering — the
70
76
  * deadline, plus up to one interval of waiting for the ping that will fail — where
71
77
  * libp2p's defaults took about 5 to 15 seconds. `db-p2p` caps a node at 16 connections,
@@ -113,9 +119,19 @@ export const DEFAULT_CHECKIN_WINDOW_MS = 15 * 1000;
113
119
  *
114
120
  * The two `*ClusterPolicy` BUILDERS are the same objects with the block-repair
115
121
  * corroboration yardstick declared from the machines enrolled in this party
116
- * ({@link resolveRepairYardstick}); handed no count, each returns its frozen base
117
- * constant unchanged. A network picks the derived number up when its libp2p node is
118
- * built, which for a strand is every wake from hibernation.
122
+ * ({@link resolveRepairYardstick}) and, if the host set one, its own per-peer read
123
+ * deadline in place of {@link COHORT_READ_DEADLINE_MS}. Both arrive in one named
124
+ * declarations object, because both are plain numbers meaning unrelated things;
125
+ * declaring neither returns the frozen base constant unchanged. A network picks the
126
+ * derived numbers up when its libp2p node is built, which for a strand is every wake
127
+ * from hibernation.
128
+ */
129
+ export { MIN_CLUSTER_SIZE, COHORT_READ_DEADLINE_MS, CONTROL_REPLICATION_BREADTH, CONTROL_CLUSTER_POLICY, DEFAULT_STRAND_CLUSTER_SIZE, STRAND_CLUSTER_POLICY, resolveStrandClusterSize, resolveRepairYardstick, controlClusterPolicy, strandClusterPolicy } from '@serfab/quereus-plugin-sereus';
130
+ /**
131
+ * The declared link round trip every cadre-owned dial and reservation deadline is derived from,
132
+ * re-exported beside {@link NetworkConfig.linkRoundTripMs} so a host reading the setting finds
133
+ * the default it replaces. The counts, the measurement and the derivation live in
134
+ * `link-budget.ts`.
119
135
  */
120
- export { MIN_CLUSTER_SIZE, CONTROL_REPLICATION_BREADTH, CONTROL_CLUSTER_POLICY, DEFAULT_STRAND_CLUSTER_SIZE, STRAND_CLUSTER_POLICY, resolveStrandClusterSize, resolveRepairYardstick, controlClusterPolicy, strandClusterPolicy } from '@serfab/quereus-plugin-sereus';
136
+ export { DECLARED_LINK_ROUND_TRIP_MS } from './link-budget.js';
121
137
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAgFA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAA6C;IAC5E,QAAQ,EAAE;QACR,WAAW,EAAE,QAAQ,EAAS,aAAa;QAC3C,gBAAgB,EAAE,QAAQ,EAAI,kBAAkB;QAChD,eAAe,EAAE,QAAQ,EAAK,MAAM;QACpC,oBAAoB,EAAE,CAAC;QACvB,kBAAkB,EAAE,QAAQ,CAAE,MAAM;KACrC;IACD,WAAW,EAAE;QACX,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAI,YAAY;QAC1C,gBAAgB,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,wBAAwB;QAC1D,eAAe,EAAE,EAAE,GAAG,IAAI,EAAI,mBAAmB;QACjD,oBAAoB,EAAE,CAAC;QACvB,kBAAkB,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,eAAe;KACnD;IACD,UAAU,EAAE;QACV,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAI,WAAW;QACzC,gBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAG,uBAAuB;QACzD,eAAe,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAI,kBAAkB;QACpD,oBAAoB,EAAE,CAAC;QACvB,kBAAkB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,gBAAgB;KACxD;IACD,OAAO,EAAE;QACP,WAAW,EAAE,EAAE,GAAG,IAAI,EAAQ,aAAa;QAC3C,gBAAgB,EAAE,EAAE,GAAG,IAAI,EAAG,wBAAwB;QACtD,eAAe,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAG,eAAe;QACjD,oBAAoB,EAAE,CAAC;QACvB,kBAAkB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,eAAe;KAC5D;CACF,CAAC;AAqXF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC,MAAM,CAAC;IACtD,uFAAuF;IACvF,mFAAmF;IACnF,YAAY,EAAE,KAAM;IACpB,kFAAkF;IAClF,kFAAkF;IAClF,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,KAAM,EAAE,UAAU,EAAE,KAAM,EAAE,CAAC;CACjC,CAAC,CAAC;AAmBzC;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,GAAG,IAAI,CAAC;AAYnD;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EACL,gBAAgB,EAChB,2BAA2B,EAC3B,sBAAsB,EACtB,2BAA2B,EAC3B,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAgFA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAA6C;IAC5E,QAAQ,EAAE;QACR,WAAW,EAAE,QAAQ,EAAS,aAAa;QAC3C,gBAAgB,EAAE,QAAQ,EAAI,kBAAkB;QAChD,eAAe,EAAE,QAAQ,EAAK,MAAM;QACpC,oBAAoB,EAAE,CAAC;QACvB,kBAAkB,EAAE,QAAQ,CAAE,MAAM;KACrC;IACD,WAAW,EAAE;QACX,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAI,YAAY;QAC1C,gBAAgB,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,wBAAwB;QAC1D,eAAe,EAAE,EAAE,GAAG,IAAI,EAAI,mBAAmB;QACjD,oBAAoB,EAAE,CAAC;QACvB,kBAAkB,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,eAAe;KACnD;IACD,UAAU,EAAE;QACV,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAI,WAAW;QACzC,gBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAG,uBAAuB;QACzD,eAAe,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAI,kBAAkB;QACpD,oBAAoB,EAAE,CAAC;QACvB,kBAAkB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,gBAAgB;KACxD;IACD,OAAO,EAAE;QACP,WAAW,EAAE,EAAE,GAAG,IAAI,EAAQ,aAAa;QAC3C,gBAAgB,EAAE,EAAE,GAAG,IAAI,EAAG,wBAAwB;QACtD,eAAe,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAG,eAAe;QACjD,oBAAoB,EAAE,CAAC;QACvB,kBAAkB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,eAAe;KAC5D;CACF,CAAC;AA2aF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC,MAAM,CAAC;IACtD,uFAAuF;IACvF,mFAAmF;IACnF,YAAY,EAAE,KAAM;IACpB,kFAAkF;IAClF,kFAAkF;IAClF,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,KAAM,EAAE,UAAU,EAAE,KAAM,EAAE,CAAC;CACjC,CAAC,CAAC;AAmBzC;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,GAAG,IAAI,CAAC;AAYnD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,2BAA2B,EAC3B,sBAAsB,EACtB,2BAA2B,EAC3B,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,+BAA+B,CAAC;AAEvC;;;;;GAKG;AACH,OAAO,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@serfab/cadre-core",
3
- "version": "1.4.0",
3
+ "version": "1.6.0",
4
4
  "type": "module",
5
5
  "description": "Core library for Sereus cadre nodes - manages control networks and strand participation",
6
6
  "main": "dist/index.js",
@@ -73,7 +73,7 @@
73
73
  "@libp2p/tcp": "^11.0.10",
74
74
  "@libp2p/webrtc": "6.0.14",
75
75
  "@libp2p/websockets": "^10.1.3",
76
- "@optimystic/db-p2p-storage-fs": "^1.5.0",
76
+ "@optimystic/db-p2p-storage-fs": "^1.7.0",
77
77
  "@types/debug": "^4.1.12",
78
78
  "@types/node": "^25.0.10",
79
79
  "@vitest/coverage-v8": "^4.0.17",
@@ -88,12 +88,12 @@
88
88
  "@libp2p/interface": "^3.1.0",
89
89
  "@libp2p/peer-id": "^6.0.4",
90
90
  "@multiformats/multiaddr": "^12.5.1",
91
- "@optimystic/db-core": "^1.5.0",
92
- "@optimystic/db-p2p": "^1.5.0",
93
- "@optimystic/quereus-plugin-crypto": "^1.5.0",
94
- "@optimystic/quereus-plugin-optimystic": "^1.5.0",
95
- "@quereus/quereus": "^4.19.4",
96
- "@serfab/quereus-plugin-sereus": "^1.4.0",
91
+ "@optimystic/db-core": "^1.7.0",
92
+ "@optimystic/db-p2p": "^1.7.0",
93
+ "@optimystic/quereus-plugin-crypto": "^1.7.0",
94
+ "@optimystic/quereus-plugin-optimystic": "^1.7.0",
95
+ "@quereus/quereus": "^4.20.0",
96
+ "@serfab/quereus-plugin-sereus": "^1.6.0",
97
97
  "debug": "^4.4.3",
98
98
  "libp2p": "^3.1.3",
99
99
  "uint8arrays": "^5.1.0"