@serfab/cadre-core 1.4.0 → 1.5.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 +77 -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 +182 -0
  17. package/dist/link-budget.js +195 -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 +165 -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 +43 -5
  31. package/dist/strand-first-sync-gate.js +55 -7
  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 +56 -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 +96 -9
  45. package/dist/types.js +14 -4
  46. package/dist/types.js.map +1 -1
  47. package/package.json +8 -8
  48. package/src/cadre-node.ts +7445 -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 +581 -563
  53. package/src/link-budget.ts +217 -0
  54. package/src/peer-dial.ts +39 -17
  55. package/src/peer-join-backfill.ts +192 -23
  56. package/src/relay-reservation.ts +1119 -951
  57. package/src/seed-bootstrap.ts +2 -1
  58. package/src/strand-first-sync-gate.ts +55 -7
  59. package/src/strand-instance-manager.ts +1516 -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 +95 -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} — 8 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,56 @@ 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} (2000 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, and the control-cohort dial budgets. Reaching another machine through a
411
+ * relay costs a fixed number of exchanges, so a deadline written as milliseconds has a link
412
+ * speed above which it can never open a connection — which is the defect this declaration
413
+ * exists to make impossible to reintroduce one budget at a time. The counts, the measurement
414
+ * behind them, and the ceiling that no declaration here can lift are in `link-budget.ts`.
415
+ *
416
+ * Raise it for a link slower than the relayed phone-to-phone band sereus assumes; the cost is
417
+ * the ordinary cost of longer deadlines, a peer that is genuinely gone holding each operation
418
+ * that much longer before it is abandoned and retried. Above about 2500 it buys nothing: two
419
+ * libp2p budgets that sereus cannot reach abandon the connection first
420
+ * (`tickets/blocked/how-slow-a-relayed-link-does-sereus-carry`).
421
+ *
422
+ * Refused where the libp2p node is built — inside `CadreNode.start()` for the control
423
+ * network, inside `CadreNode.addStrand` for a strand — if it is not a finite number above
424
+ * zero, because every consumer multiplies it into a deadline where a zero means "give up at
425
+ * once" and a `NaN` means "never".
426
+ */
427
+ linkRoundTripMs?: number;
377
428
  /**
378
429
  * Optional async resolver returning the multiaddrs to embed in invites
379
430
  * (and other owner-address contexts). When unset, `libp2pNode.getMultiaddrs()`
@@ -555,11 +606,21 @@ export interface ControlNetworkConfig {
555
606
  *
556
607
  * The two `*ClusterPolicy` BUILDERS are the same objects with the block-repair
557
608
  * 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.
609
+ * ({@link resolveRepairYardstick}) and, if the host set one, its own per-peer read
610
+ * deadline in place of {@link COHORT_READ_DEADLINE_MS}. Both arrive in one named
611
+ * declarations object, because both are plain numbers meaning unrelated things;
612
+ * declaring neither returns the frozen base constant unchanged. A network picks the
613
+ * derived numbers up when its libp2p node is built, which for a strand is every wake
614
+ * from hibernation.
561
615
  */
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';
616
+ 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';
617
+ /**
618
+ * The declared link round trip every cadre-owned dial and reservation deadline is derived from,
619
+ * re-exported beside {@link NetworkConfig.linkRoundTripMs} so a host reading the setting finds
620
+ * the default it replaces. The counts, the measurement and the derivation live in
621
+ * `link-budget.ts`.
622
+ */
623
+ export { DECLARED_LINK_ROUND_TRIP_MS } from './link-budget.js';
563
624
  /**
564
625
  * Main configuration for a CadreNode
565
626
  */
@@ -680,10 +741,12 @@ export interface CadreNodeConfig {
680
741
  * to a table it has never fetched creates a private copy of it that never merges.
681
742
  * `timeoutMs` bounds how long {@link CadreNode.addStrand} waits before rejecting with
682
743
  * `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.
744
+ * `pollIntervalMs` is the probe cadence. Omit for the defaults (`DEFAULT_STRAND_FIRST_SYNC_TIMEOUT_MS`,
745
+ * 120 s — sized for a machine joining through a relay on a slow link; that constant's doc
746
+ * comment carries the measurement behind the number and what the budget costs, and is the
747
+ * only copy of it; `DEFAULT_STRAND_FIRST_SYNC_POLL_MS`, 500 ms). There is
748
+ * deliberately no way to disable the gate: a machine that already holds the Header is never
749
+ * gated, so nothing that works today is blocked by it.
687
750
  */
688
751
  strandFirstSync?: StrandFirstSyncConfig;
689
752
  /** Hibernation configuration */
@@ -1228,6 +1291,30 @@ export interface CadreNodeEvents {
1228
1291
  'strand:revoked': {
1229
1292
  strandId: string;
1230
1293
  };
1294
+ /**
1295
+ * Emitted when this node holds a staged membership invitation for a CLOSED strand
1296
+ * that its own writes cannot redeem — the shape a REMOVED party hits when a manager
1297
+ * hands it a fresh invitation. Redeeming means writing this party's `Strand.Member`
1298
+ * row into the strand, and the machines that would carry that write are the ones the
1299
+ * remaining members refuse, so the attempt is made and fails. Two triggers, reported
1300
+ * at most once per re-arm of the membership loop (a further invitation staged while the
1301
+ * loop is still running does not reset the report):
1302
+ *
1303
+ * - CONFIRMED: the revoked-peer gate already flags this node as removed (the
1304
+ * `strand:revoked` case) and an invitation is staged.
1305
+ * - PROBABLE: `UNFINISHED_PASSES_BEFORE_ESCALATION` consecutive attempts left the
1306
+ * invitation staged. This one is a SUSPICION, not a verdict — the invitation's row
1307
+ * may simply not have replicated here yet on a slow strand — and the accompanying
1308
+ * warning names both causes.
1309
+ *
1310
+ * Nothing is stopped or torn down. A fresh invitation cannot re-admit a removed
1311
+ * party by itself: the remedy is a remaining manager admitting this party's member
1312
+ * key directly (`addMemberByManager`), after which the membership loop, which keeps
1313
+ * retrying, finishes the join on its own.
1314
+ */
1315
+ 'strand:rejoin-blocked': {
1316
+ strandId: string;
1317
+ };
1231
1318
  /**
1232
1319
  * Emitted when the control network advertises a strand this node has no
1233
1320
  * registered `sAppConfig` for — i.e. a strand created by another member, or
package/dist/types.js CHANGED
@@ -113,9 +113,19 @@ export const DEFAULT_CHECKIN_WINDOW_MS = 15 * 1000;
113
113
  *
114
114
  * The two `*ClusterPolicy` BUILDERS are the same objects with the block-repair
115
115
  * 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.
116
+ * ({@link resolveRepairYardstick}) and, if the host set one, its own per-peer read
117
+ * deadline in place of {@link COHORT_READ_DEADLINE_MS}. Both arrive in one named
118
+ * declarations object, because both are plain numbers meaning unrelated things;
119
+ * declaring neither returns the frozen base constant unchanged. A network picks the
120
+ * derived numbers up when its libp2p node is built, which for a strand is every wake
121
+ * from hibernation.
119
122
  */
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';
123
+ 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';
124
+ /**
125
+ * The declared link round trip every cadre-owned dial and reservation deadline is derived from,
126
+ * re-exported beside {@link NetworkConfig.linkRoundTripMs} so a host reading the setting finds
127
+ * the default it replaces. The counts, the measurement and the derivation live in
128
+ * `link-budget.ts`.
129
+ */
130
+ export { DECLARED_LINK_ROUND_TRIP_MS } from './link-budget.js';
121
131
  //# 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;AAwaF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;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.5.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.6.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.6.0",
92
+ "@optimystic/db-p2p": "^1.6.0",
93
+ "@optimystic/quereus-plugin-crypto": "^1.6.0",
94
+ "@optimystic/quereus-plugin-optimystic": "^1.6.0",
95
+ "@quereus/quereus": "^4.20.0",
96
+ "@serfab/quereus-plugin-sereus": "^1.5.0",
97
97
  "debug": "^4.4.3",
98
98
  "libp2p": "^3.1.3",
99
99
  "uint8arrays": "^5.1.0"