@optimystic/db-p2p 0.17.0 → 0.19.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 (66) hide show
  1. package/dist/src/cluster/block-transfer-service.d.ts +10 -0
  2. package/dist/src/cluster/block-transfer-service.d.ts.map +1 -1
  3. package/dist/src/cluster/block-transfer-service.js +2 -1
  4. package/dist/src/cluster/block-transfer-service.js.map +1 -1
  5. package/dist/src/cluster/cluster-policy.d.ts +112 -0
  6. package/dist/src/cluster/cluster-policy.d.ts.map +1 -0
  7. package/dist/src/cluster/cluster-policy.js +88 -0
  8. package/dist/src/cluster/cluster-policy.js.map +1 -0
  9. package/dist/src/cluster/cluster-repo.d.ts +35 -11
  10. package/dist/src/cluster/cluster-repo.d.ts.map +1 -1
  11. package/dist/src/cluster/cluster-repo.js +95 -19
  12. package/dist/src/cluster/cluster-repo.js.map +1 -1
  13. package/dist/src/cluster/quorum-restore.d.ts +25 -3
  14. package/dist/src/cluster/quorum-restore.d.ts.map +1 -1
  15. package/dist/src/cluster/quorum-restore.js +27 -3
  16. package/dist/src/cluster/quorum-restore.js.map +1 -1
  17. package/dist/src/cluster/reconcile-block.d.ts +10 -2
  18. package/dist/src/cluster/reconcile-block.d.ts.map +1 -1
  19. package/dist/src/cluster/reconcile-block.js +38 -18
  20. package/dist/src/cluster/reconcile-block.js.map +1 -1
  21. package/dist/src/cluster/spread-on-churn.d.ts.map +1 -1
  22. package/dist/src/cluster/spread-on-churn.js +8 -0
  23. package/dist/src/cluster/spread-on-churn.js.map +1 -1
  24. package/dist/src/inbound-authorization.d.ts +6 -0
  25. package/dist/src/inbound-authorization.d.ts.map +1 -1
  26. package/dist/src/inbound-authorization.js +6 -0
  27. package/dist/src/inbound-authorization.js.map +1 -1
  28. package/dist/src/libp2p-key-network.d.ts +66 -4
  29. package/dist/src/libp2p-key-network.d.ts.map +1 -1
  30. package/dist/src/libp2p-key-network.js +130 -17
  31. package/dist/src/libp2p-key-network.js.map +1 -1
  32. package/dist/src/libp2p-node-base.d.ts +22 -23
  33. package/dist/src/libp2p-node-base.d.ts.map +1 -1
  34. package/dist/src/libp2p-node-base.js +45 -34
  35. package/dist/src/libp2p-node-base.js.map +1 -1
  36. package/dist/src/repo/cluster-coordinator.d.ts +21 -3
  37. package/dist/src/repo/cluster-coordinator.d.ts.map +1 -1
  38. package/dist/src/repo/cluster-coordinator.js +27 -5
  39. package/dist/src/repo/cluster-coordinator.js.map +1 -1
  40. package/dist/src/repo/coordinator-repo.d.ts +88 -28
  41. package/dist/src/repo/coordinator-repo.d.ts.map +1 -1
  42. package/dist/src/repo/coordinator-repo.js +287 -81
  43. package/dist/src/repo/coordinator-repo.js.map +1 -1
  44. package/dist/src/storage/storage-repo.d.ts +9 -0
  45. package/dist/src/storage/storage-repo.d.ts.map +1 -1
  46. package/dist/src/storage/storage-repo.js +77 -7
  47. package/dist/src/storage/storage-repo.js.map +1 -1
  48. package/dist/src/testing/mesh-harness.d.ts +17 -0
  49. package/dist/src/testing/mesh-harness.d.ts.map +1 -1
  50. package/dist/src/testing/mesh-harness.js +27 -4
  51. package/dist/src/testing/mesh-harness.js.map +1 -1
  52. package/package.json +2 -2
  53. package/readme.md +20 -0
  54. package/src/cluster/block-transfer-service.ts +9 -1
  55. package/src/cluster/cluster-policy.ts +152 -0
  56. package/src/cluster/cluster-repo.ts +100 -22
  57. package/src/cluster/quorum-restore.ts +28 -3
  58. package/src/cluster/reconcile-block.ts +52 -19
  59. package/src/cluster/spread-on-churn.ts +8 -0
  60. package/src/inbound-authorization.ts +6 -0
  61. package/src/libp2p-key-network.ts +958 -807
  62. package/src/libp2p-node-base.ts +65 -57
  63. package/src/repo/cluster-coordinator.ts +30 -6
  64. package/src/repo/coordinator-repo.ts +329 -91
  65. package/src/storage/storage-repo.ts +81 -10
  66. package/src/testing/mesh-harness.ts +34 -4
@@ -1 +1 @@
1
- {"version":3,"file":"inbound-authorization.js","sourceRoot":"","sources":["../../src/inbound-authorization.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inbound-authorization.js","sourceRoot":"","sources":["../../src/inbound-authorization.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { AbortOptions, Libp2p, PeerId, Stream } from "@libp2p/interface";
2
- import type { ClusterPeers, FindCoordinatorOptions, IKeyNetwork, IPeerNetwork } from "@optimystic/db-core";
2
+ import type { ClusterPeers, CoordinatorIntent, FindCoordinatorOptions, IKeyNetwork, IPeerNetwork } from "@optimystic/db-core";
3
3
  import type { SerializedTable } from 'p2p-fret';
4
4
  import type { IPeerReputation } from './reputation/types.js';
5
5
  export type NetworkMode = 'forming' | 'joining';
@@ -11,8 +11,11 @@ export type NetworkMode = 'forming' | 'joining';
11
11
  */
12
12
  export declare const FIND_COORDINATOR_ERROR_CODES: {
13
13
  /**
14
- * Last-resort self-coordination was blocked by the self-coordination guard
15
- * (e.g. partition detected, suspicious shrinkage). Retrying is unlikely to help.
14
+ * Last-resort self-coordination was blocked by a HARD verdict from the
15
+ * self-coordination guard self-coordination switched off by config, or a detected
16
+ * partition / suspicious shrinkage on a WRITE. Retrying is unlikely to help. A
17
+ * *deferrable* denial (see {@link SelfCoordinationDecision.deferrable}) never produces
18
+ * this code: selection degrades to self with a warning instead.
16
19
  */
17
20
  readonly SELF_COORDINATION_BLOCKED: "SELF_COORDINATION_BLOCKED";
18
21
  /**
@@ -78,6 +81,43 @@ export interface SelfCoordinationDecision {
78
81
  allow: boolean;
79
82
  reason: 'bootstrap-node' | 'partition-detected' | 'suspicious-shrinkage' | 'grace-period-not-elapsed' | 'extended-isolation' | 'hwm-decay' | 'disabled';
80
83
  warn?: boolean;
84
+ /**
85
+ * Set on a denial. `true` means "self is not the PREFERRED coordinator right now, but
86
+ * nothing says it is unsafe" — the last-resort tier degrades to self with a warning
87
+ * rather than failing the caller. `false` means there is a positive reason to refuse
88
+ * (operator config, or evidence of a partition) and the caller is failed.
89
+ *
90
+ * Hardness by reason, given the caller's {@link CoordinatorIntent}:
91
+ *
92
+ * | reason | write | read |
93
+ * | ------------------------- | ---------- | ---------- |
94
+ * | `disabled` | hard | hard |
95
+ * | `grace-period-not-elapsed`| deferrable | deferrable |
96
+ * | `partition-detected` | hard | deferrable |
97
+ * | `suspicious-shrinkage` | hard | deferrable |
98
+ *
99
+ * `grace-period-not-elapsed` is deferrable for BOTH because it is a timing condition
100
+ * with no evidence behind it: the same node, with the same FRET table and the same zero
101
+ * connections, is allowed to self-coordinate once the clock passes `gracePeriodMs`. It
102
+ * postpones an isolated write rather than preventing it (a self-only cohort commits
103
+ * under `allowClusterDownsize`, the default), so failing the caller buys no safety.
104
+ *
105
+ * The read column is uniformly deferrable because none of these reasons protects a
106
+ * read: self-coordinating a read means "answer from my own replica", which is what an
107
+ * isolated node must accept anyway, and the layers below already report the quality of
108
+ * that answer (`CoordinatorRepo.fetchBlockFromCluster` short-circuits a self-only cohort
109
+ * as conclusive; an unreachable cohort comes back flagged `unavailable`). `disabled` is
110
+ * the exception for both intents — it is an explicit operator switch, not an inference.
111
+ *
112
+ * NOTE: optional, so a NEW denial branch that forgets to set it silently reads as HARD
113
+ * (`findCoordinator` tests `deferrable !== true`) — safe for a write, but it reinstates
114
+ * the original defect for a read: an outright lookup failure where degrading to our own
115
+ * replica would do. Every denial branch today sets it explicitly. If a fifth reason is
116
+ * ever added, either set it there too or split this into a discriminated union
117
+ * (`{ allow: true, … } | { allow: false, deferrable: boolean, … }`) so omission is a
118
+ * compile error.
119
+ */
120
+ deferrable?: boolean;
81
121
  }
82
122
  export declare class Libp2pKeyPeerNetwork implements IKeyNetwork, IPeerNetwork {
83
123
  private readonly libp2p;
@@ -129,8 +169,30 @@ export declare class Libp2pKeyPeerNetwork implements IKeyNetwork, IPeerNetwork {
129
169
  *
130
170
  * Principle: If we've ever seen a larger network, assume our connectivity is the problem,
131
171
  * not the network shrinking.
172
+ *
173
+ * A denial is classified as HARD or DEFERRABLE via {@link SelfCoordinationDecision.deferrable}
174
+ * — see that field for the reason/intent table. A hard denial fails the caller; a deferrable
175
+ * one only means "self is not the preferred coordinator", and the last-resort tier degrades
176
+ * to self with a warning.
177
+ *
178
+ * @param intent What the caller means to do with the coordinator. Defaults to `'write'`,
179
+ * the conservative reading, so callers that don't know are held to the stricter bar.
180
+ */
181
+ shouldAllowSelfCoordination(intent?: CoordinatorIntent): SelfCoordinationDecision;
182
+ /**
183
+ * Memoize the coordinator for a key. A pick of SELF is deliberately ignored — the
184
+ * cache is consulted ahead of every selection tier, so a self entry would keep the
185
+ * key routed at our own (possibly stale) replica for the full TTL long after a
186
+ * better-placed peer became reachable, and would return self without re-consulting
187
+ * {@link shouldAllowSelfCoordination}, letting a partitioned node silently serve its
188
+ * own data. Self needs no memoizing anyway: every tier that can select it re-derives
189
+ * it from a local lookup with no dial and no retry sleep.
190
+ *
191
+ * The gate lives here rather than at each call site because most writers are OUTSIDE
192
+ * this class — `recordCoordinator` is public and is fed self-valued picks by
193
+ * `NetworkTransactor` (it writes back whatever `findCoordinator` returned, including
194
+ * self) and by `RepoClient`/`ClusterClient` on redirect responses.
132
195
  */
133
- shouldAllowSelfCoordination(): SelfCoordinationDecision;
134
196
  recordCoordinator(key: Uint8Array, peerId: PeerId, ttlMs?: number): void;
135
197
  private getCachedCoordinator;
136
198
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"libp2p-key-network.d.ts","sourceRoot":"","sources":["../../src/libp2p-key-network.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"libp2p-key-network.d.ts","sourceRoot":"","sources":["../../src/libp2p-key-network.ts"],"names":[],"mappings":"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"}
@@ -11,8 +11,11 @@ import { createLogger, verbose } from './logger.js';
11
11
  */
12
12
  export const FIND_COORDINATOR_ERROR_CODES = {
13
13
  /**
14
- * Last-resort self-coordination was blocked by the self-coordination guard
15
- * (e.g. partition detected, suspicious shrinkage). Retrying is unlikely to help.
14
+ * Last-resort self-coordination was blocked by a HARD verdict from the
15
+ * self-coordination guard self-coordination switched off by config, or a detected
16
+ * partition / suspicious shrinkage on a WRITE. Retrying is unlikely to help. A
17
+ * *deferrable* denial (see {@link SelfCoordinationDecision.deferrable}) never produces
18
+ * this code: selection degrades to self with a warning instead.
16
19
  */
17
20
  SELF_COORDINATION_BLOCKED: 'SELF_COORDINATION_BLOCKED',
18
21
  /**
@@ -65,6 +68,13 @@ export class Libp2pKeyPeerNetwork {
65
68
  this.clusterSize = clusterSize;
66
69
  this.reputation = reputation;
67
70
  this.protocolPrefix = protocolPrefix;
71
+ // NOTE: no construction site in this repo passes a SelfCoordinationConfig — every one
72
+ // leaves it `undefined` (libp2p-node-base.ts, quereus-plugin-optimystic's
73
+ // collection-factory.ts and key-network.ts, reference-peer's cli.ts), so these
74
+ // defaults are always what is in force and no operator can tune them. If tuning
75
+ // `gracePeriodMs` is ever needed, those four sites have to thread the config through
76
+ // first. Low urgency: a grace-period denial no longer fails the caller, it only costs
77
+ // a write the ~1s findCoordinator retry window before self-coordinating.
68
78
  this.selfCoordinationConfig = {
69
79
  gracePeriodMs: selfCoordinationConfig?.gracePeriodMs ?? 30_000,
70
80
  shrinkageThreshold: selfCoordinationConfig?.shrinkageThreshold ?? 0.5,
@@ -172,11 +182,23 @@ export class Libp2pKeyPeerNetwork {
172
182
  *
173
183
  * Principle: If we've ever seen a larger network, assume our connectivity is the problem,
174
184
  * not the network shrinking.
185
+ *
186
+ * A denial is classified as HARD or DEFERRABLE via {@link SelfCoordinationDecision.deferrable}
187
+ * — see that field for the reason/intent table. A hard denial fails the caller; a deferrable
188
+ * one only means "self is not the preferred coordinator", and the last-resort tier degrades
189
+ * to self with a warning.
190
+ *
191
+ * @param intent What the caller means to do with the coordinator. Defaults to `'write'`,
192
+ * the conservative reading, so callers that don't know are held to the stricter bar.
175
193
  */
176
- shouldAllowSelfCoordination() {
194
+ shouldAllowSelfCoordination(intent = 'write') {
195
+ // A read never coordinates a mutation, so every evidence-based denial below is merely
196
+ // a preference for a better-placed peer — the caller can always be answered from this
197
+ // node's own replica. Only the explicit `disabled` switch is absolute for a read.
198
+ const deferrableOnEvidence = intent === 'read';
177
199
  // Check global disable
178
200
  if (!this.selfCoordinationConfig.allowSelfCoordination) {
179
- return { allow: false, reason: 'disabled' };
201
+ return { allow: false, reason: 'disabled', deferrable: false };
180
202
  }
181
203
  // Case 1: New/bootstrap node (never seen larger network)
182
204
  if (this.networkHighWaterMark <= 1) {
@@ -191,15 +213,15 @@ export class Libp2pKeyPeerNetwork {
191
213
  try {
192
214
  const fret = this.getFret();
193
215
  if (fret.detectPartition()) {
194
- this.log('self-coord-blocked: partition-detected');
195
- return { allow: false, reason: 'partition-detected' };
216
+ this.log('self-coord-blocked: partition-detected intent=%s', intent);
217
+ return { allow: false, reason: 'partition-detected', deferrable: deferrableOnEvidence };
196
218
  }
197
219
  // Case 3: Suspicious network shrinkage (>threshold drop)
198
220
  const estimate = fret.getNetworkSizeEstimate();
199
221
  const shrinkage = 1 - (estimate.size_estimate / this.networkHighWaterMark);
200
222
  if (shrinkage > this.selfCoordinationConfig.shrinkageThreshold) {
201
- this.log('self-coord-blocked: suspicious-shrinkage current=%d hwm=%d shrinkage=%f', estimate.size_estimate, this.networkHighWaterMark, shrinkage);
202
- return { allow: false, reason: 'suspicious-shrinkage' };
223
+ this.log('self-coord-blocked: suspicious-shrinkage current=%d hwm=%d shrinkage=%f intent=%s', estimate.size_estimate, this.networkHighWaterMark, shrinkage, intent);
224
+ return { allow: false, reason: 'suspicious-shrinkage', deferrable: deferrableOnEvidence };
203
225
  }
204
226
  }
205
227
  catch {
@@ -210,7 +232,7 @@ export class Libp2pKeyPeerNetwork {
210
232
  const timeSinceConnection = Date.now() - this.lastConnectedTime;
211
233
  if (timeSinceConnection < this.selfCoordinationConfig.gracePeriodMs) {
212
234
  this.log('self-coord-blocked: grace-period-not-elapsed since=%dms', timeSinceConnection);
213
- return { allow: false, reason: 'grace-period-not-elapsed' };
235
+ return { allow: false, reason: 'grace-period-not-elapsed', deferrable: true };
214
236
  }
215
237
  }
216
238
  }
@@ -221,14 +243,34 @@ export class Libp2pKeyPeerNetwork {
221
243
  // Only block if we have no connections but did recently
222
244
  if (connections.length === 0) {
223
245
  this.log('self-coord-blocked: grace-period-not-elapsed since=%dms', timeSinceConnection);
224
- return { allow: false, reason: 'grace-period-not-elapsed' };
246
+ // Deferrable for BOTH intents: nothing here is evidence, only a clock. The same
247
+ // node with the same information self-coordinates once gracePeriodMs elapses.
248
+ return { allow: false, reason: 'grace-period-not-elapsed', deferrable: true };
225
249
  }
226
250
  }
227
251
  // Case 5: Extended isolation with gradual shrinkage - allow with warning
228
252
  this.log('self-coord-allowed: extended-isolation (warn)');
229
253
  return { allow: true, reason: 'extended-isolation', warn: true };
230
254
  }
255
+ /**
256
+ * Memoize the coordinator for a key. A pick of SELF is deliberately ignored — the
257
+ * cache is consulted ahead of every selection tier, so a self entry would keep the
258
+ * key routed at our own (possibly stale) replica for the full TTL long after a
259
+ * better-placed peer became reachable, and would return self without re-consulting
260
+ * {@link shouldAllowSelfCoordination}, letting a partitioned node silently serve its
261
+ * own data. Self needs no memoizing anyway: every tier that can select it re-derives
262
+ * it from a local lookup with no dial and no retry sleep.
263
+ *
264
+ * The gate lives here rather than at each call site because most writers are OUTSIDE
265
+ * this class — `recordCoordinator` is public and is fed self-valued picks by
266
+ * `NetworkTransactor` (it writes back whatever `findCoordinator` returned, including
267
+ * self) and by `RepoClient`/`ClusterClient` on redirect responses.
268
+ */
231
269
  recordCoordinator(key, peerId, ttlMs = 30 * 60 * 1000) {
270
+ if (peerId.toString() === this.libp2p.peerId.toString()) {
271
+ this.log('coordinator-cache:self-write-ignored key=%s', this.toCacheKey(key).substring(0, 12));
272
+ return;
273
+ }
232
274
  const k = this.toCacheKey(key);
233
275
  const now = Date.now();
234
276
  for (const [ck, entry] of this.coordinatorCache) {
@@ -312,6 +354,9 @@ export class Libp2pKeyPeerNetwork {
312
354
  async findCoordinator(key, _options) {
313
355
  const t0 = Date.now();
314
356
  const excludedSet = new Set((_options?.excludedPeers ?? []).map(p => p.toString()));
357
+ // Unset means 'write' — the conservative reading, so a caller that doesn't declare an
358
+ // intent is held to the stricter self-coordination bar.
359
+ const intent = _options?.intent ?? 'write';
315
360
  const keyStr = this.toCacheKey(key).substring(0, 12);
316
361
  // Tracks whether the network-membership filter excluded an UNCONFIRMED candidate
317
362
  // — `foreign` (another network) OR `unknown` (not yet confirmed to serve this
@@ -341,11 +386,65 @@ export class Libp2pKeyPeerNetwork {
341
386
  this.log('findCoordinator:fret-neighbors key=%s candidates=%d', keyStr, ids.length);
342
387
  if (verbose)
343
388
  this.log('findCoordinator:fret-candidates key=%s ids=%o connected=%o', keyStr, ids, Array.from(connectedSet));
344
- // Filter to only connected FRET neighbors, excluding banned peers
389
+ // Filter to only connected FRET neighbors, excluding banned peers. Self is
390
+ // never "connected" to itself, so it is admitted by the explicit self clause
391
+ // below — but ONLY when the self-coordination guard allows it, otherwise a
392
+ // node whose FRET neighborhood contains self (essentially always on a small or
393
+ // forming network) would bypass the guard and the last-resort tier's
394
+ // SELF_COORDINATION_BLOCKED would never fire. On refusal self is merely DROPPED
395
+ // from the candidate list, so the connected-peer fallback below still gets its
396
+ // chance at a good remote peer; only if that also comes up empty does the
397
+ // last-resort tier raise the accurate error.
398
+ //
399
+ // An ISOLATED READ is the exception: with no connection left there is no better
400
+ // answer to wait for, and a deferrable denial is not evidence that answering
401
+ // from our own replica is wrong — so self is admitted here and the read resolves
402
+ // immediately instead of paying the ~1s retry loop before the last-resort tier
403
+ // degrades to the same answer. A WRITE keeps dropping self exactly as before,
404
+ // so a peer that lands during the retry window still wins the key.
405
+ const selfStr = this.libp2p.peerId.toString();
406
+ let selfAllowedThisAttempt;
407
+ // Memoized per ATTEMPT, and evaluated lazily so an all-remote neighborhood never
408
+ // pays detectPartition() / getNetworkSizeEstimate(). Re-evaluated on each attempt
409
+ // because a connection can land during the 500ms inter-attempt sleep and
410
+ // legitimately flip the answer — as filterByMembership re-reads the peerStore.
411
+ // NOTE: on a small network self is a neighbor of nearly every key, so this runs
412
+ // per findCoordinator call and self-coordinated keys are never cached to absorb
413
+ // it. Fine while detectPartition()/getNetworkSizeEstimate() stay local FRET
414
+ // table reads; if either ever grows a probe or other network round-trip, cache
415
+ // the decision with a short TTL on the instance instead of per attempt.
416
+ // NOTE: the guard re-reads getConnections() live, while `connectedSet` above was
417
+ // snapshotted at the top of this attempt. A connection landing between the two
418
+ // lifts the guard's grace-period denial while the new peer is still absent from
419
+ // the candidate filter — so self can win an attempt on evidence that attempt
420
+ // cannot yet use. Bounded to one attempt (the next re-snapshots and prefers the
421
+ // peer) and self picks are never cached, so it costs at most one lookup's
422
+ // routing. If that ever matters, pass the snapshot into the guard instead.
423
+ const isSelfAdmissible = () => {
424
+ if (selfAllowedThisAttempt === undefined) {
425
+ const decision = this.shouldAllowSelfCoordination(intent);
426
+ // Gated on ISOLATION, not just on the read intent. Self carries no reputation
427
+ // record, so it scores 0 and sorts ahead of every remote candidate in the rank
428
+ // below — admitting it while a connection is live would hand the key to a node
429
+ // its own guard just called partitioned, over a reachable FRET neighbour. And
430
+ // waiting costs a connected read nothing: the inter-attempt sleep further down
431
+ // only runs when `connected.length === 0`, so with peers present the remaining
432
+ // attempts and the last-resort degrade run back-to-back with no delay.
433
+ const degradedRead = !decision.allow && decision.deferrable === true
434
+ && intent === 'read' && connected.length === 0;
435
+ selfAllowedThisAttempt = decision.allow || degradedRead;
436
+ if (degradedRead) {
437
+ this.log('findCoordinator:fret-self-degraded key=%s reason=%s intent=read attempt=%d', keyStr, decision.reason, attempt);
438
+ }
439
+ else if (!decision.allow) {
440
+ this.log('findCoordinator:fret-self-dropped key=%s reason=%s intent=%s attempt=%d', keyStr, decision.reason, intent, attempt);
441
+ }
442
+ }
443
+ return selfAllowedThisAttempt;
444
+ };
345
445
  const connectedFretIds = ids
346
- .filter(id => (connectedSet.has(id) || id === this.libp2p.peerId.toString())
347
- && !excludedSet.has(id)
348
- && !(this.reputation?.isBanned(id)))
446
+ .filter(id => !excludedSet.has(id) && !(this.reputation?.isBanned(id)))
447
+ .filter(id => connectedSet.has(id) || (id === selfStr && isSelfAdmissible()))
349
448
  .sort((a, b) => (this.reputation?.getScore(a) ?? 0) - (this.reputation?.getScore(b) ?? 0));
350
449
  this.log('findCoordinator:fret-connected key=%s count=%d peers=%o', keyStr, connectedFretIds.length, connectedFretIds.map(s => s.substring(0, 12)));
351
450
  // Network-membership scoping (no-op when protocolPrefix is unset): only a peer
@@ -362,6 +461,8 @@ export class Libp2pKeyPeerNetwork {
362
461
  const pick = ranked[0];
363
462
  if (pick) {
364
463
  const pid = peerIdFromString(pick);
464
+ // A self pick is a no-op here — recordCoordinator ignores self-valued
465
+ // writes (see its doc comment), matching the last-resort self tier below.
365
466
  this.recordCoordinator(key, pid);
366
467
  this.log('findCoordinator:done key=%s ms=%d source=%s', keyStr, Date.now() - t0, 'fret');
367
468
  return pid;
@@ -375,6 +476,8 @@ export class Libp2pKeyPeerNetwork {
375
476
  // `unknown` peer is never picked). Note this candidate set is built from
376
477
  // connected REMOTE peers and never includes self, so when no serving peer is
377
478
  // present selection falls through to the last-resort self-coordination block.
479
+ // Being remote-only, this tier needs no self-coordination guard check, unlike the
480
+ // FRET tier above.
378
481
  const connectedCandidates = connected
379
482
  .filter(p => !excludedSet.has(p.toString()) && !(this.reputation?.isBanned(p.toString())))
380
483
  .sort((a, b) => (this.reputation?.getScore(a.toString()) ?? 0) - (this.reputation?.getScore(b.toString()) ?? 0))
@@ -403,11 +506,21 @@ export class Libp2pKeyPeerNetwork {
403
506
  // last resort: prefer self only if not excluded and guard allows
404
507
  const self = this.libp2p.peerId;
405
508
  if (!excludedSet.has(self.toString())) {
406
- const decision = this.shouldAllowSelfCoordination();
407
- if (!decision.allow) {
408
- this.log('findCoordinator:self-coord-blocked key=%s reason=%s', keyStr, decision.reason);
509
+ const decision = this.shouldAllowSelfCoordination(intent);
510
+ // Only a HARD denial fails the caller. A deferrable one (see
511
+ // SelfCoordinationDecision.deferrable) means self is merely not the preferred
512
+ // coordinator — by this point every better tier has already come up empty and the
513
+ // retry window has been spent, so refusing here would just convert "serve from my
514
+ // own replica, degraded" into an outright failure of the whole operation.
515
+ if (!decision.allow && decision.deferrable !== true) {
516
+ this.log('findCoordinator:self-coord-blocked key=%s reason=%s intent=%s', keyStr, decision.reason, intent);
409
517
  throw new FindCoordinatorError(FIND_COORDINATOR_ERROR_CODES.SELF_COORDINATION_BLOCKED, `Self-coordination blocked: ${decision.reason}. No coordinator available for key.`);
410
518
  }
519
+ if (!decision.allow) {
520
+ this.log('findCoordinator:self-selected-degraded key=%s coordinator=%s reason=%s intent=%s', keyStr, self.toString().substring(0, 12), decision.reason, intent);
521
+ this.log('findCoordinator:done key=%s ms=%d source=%s', keyStr, Date.now() - t0, 'self-degraded');
522
+ return self;
523
+ }
411
524
  if (decision.warn) {
412
525
  this.log('findCoordinator:self-selected-warn key=%s coordinator=%s reason=%s', keyStr, self.toString().substring(0, 12), decision.reason);
413
526
  }
@@ -1 +1 @@
1
- {"version":3,"file":"libp2p-key-network.js","sourceRoot":"","sources":["../../src/libp2p-key-network.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"libp2p-key-network.js","sourceRoot":"","sources":["../../src/libp2p-key-network.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { type CircuitRelayServerInit } from '@libp2p/circuit-relay-v2';
3
3
  import type { ConnectionGater, PrivateKey } from '@libp2p/interface';
4
4
  import type { IRawStorage } from './storage/i-raw-storage.js';
5
5
  import { type CommitCertificateSink } from './cluster/cluster-repo.js';
6
+ import { type ClusterPolicyOptions } from './cluster/cluster-policy.js';
6
7
  import { type NetworkStatePersistence } from './libp2p-key-network.js';
7
8
  import type { ITransactionValidator } from '@optimystic/db-core';
8
9
  import type { ITransactionStateStore } from './cluster/i-transaction-state-store.js';
@@ -16,7 +17,12 @@ type Libp2pInit = NonNullable<Parameters<typeof createLibp2p>[0]>;
16
17
  export type Libp2pTransports = NonNullable<Libp2pInit['transports']>;
17
18
  /** Factory function or instance for creating raw storage */
18
19
  export type RawStorageProvider = IRawStorage | (() => IRawStorage);
19
- export type NodeOptions = {
20
+ /**
21
+ * `ClusterPolicyOptions` is intersected in, not restated: `resolveClusterPolicy` consumes those
22
+ * fields structurally, so a second copy of the shape here would let a newly added knob compile and
23
+ * be silently ignored. See `cluster/cluster-policy.ts` for what each one resolves to.
24
+ */
25
+ export type NodeOptions = ClusterPolicyOptions & {
20
26
  /**
21
27
  * Network port. Only used by the default `listenAddrs` fallback.
22
28
  * For non-TCP transports (e.g. WebSockets), set `listenAddrs` explicitly.
@@ -55,28 +61,20 @@ export type NodeOptions = {
55
61
  relayServerInit?: CircuitRelayServerInit;
56
62
  /** Storage provider - either an IRawStorage instance or a factory function. Defaults to MemoryRawStorage if not provided. */
57
63
  storage?: RawStorageProvider;
58
- /**
59
- * Desired cluster size per key (default 10). Beyond sizing the cohort, this is the
60
- * node's declaration of how many peers *should* exist to corroborate a claim: the
61
- * read-repair corroboration floor is measured against it, so a genuine two-node
62
- * deployment must set `clusterSize: 2` for its members to be able to repair each
63
- * other (see `CoordinatorRepo.corroboratorCapacity`).
64
- */
65
- clusterSize?: number;
66
- clusterPolicy?: {
67
- allowDownsize?: boolean;
68
- sizeTolerance?: number;
69
- superMajorityThreshold?: number;
70
- /**
71
- * Opt in to transacting below the safe cluster-size floor when FRET has no confident
72
- * network-size estimate — the membership-admission and coordinator small-cluster gates
73
- * both fail closed without it. Default false. Turn on only for single-node / local dev
74
- * meshes that knowingly run undersized.
75
- */
76
- allowUnvalidatedSmallCluster?: boolean;
77
- };
78
64
  /** Override libp2p listen multiaddrs. */
79
65
  listenAddrs?: string[];
66
+ /**
67
+ * Multiaddrs to advertise INSTEAD OF the listen addrs. For a node behind a NAT / reverse proxy /
68
+ * DNS front that binds one address but is reachable at another. When non-empty these REPLACE the
69
+ * advertised set entirely — observed/relayed addresses and {@link NodeOptions.appendAnnounceAddrs}
70
+ * are all dropped from it. An empty array means "unset" (libp2p's own semantics).
71
+ */
72
+ announceAddrs?: string[];
73
+ /**
74
+ * Multiaddrs to advertise IN ADDITION TO the listen addrs. Ignored while
75
+ * {@link NodeOptions.announceAddrs} is non-empty.
76
+ */
77
+ appendAnnounceAddrs?: string[];
80
78
  /** Override libp2p transports. */
81
79
  transports?: Libp2pTransports;
82
80
  /**
@@ -175,9 +173,10 @@ export type NodeOptions = {
175
173
  * dialing peer's `PeerId.toString()`. See {@link AuthorizeInboundStream} and
176
174
  * `docs/internals.md` § Inbound Stream Authorization.
177
175
  *
178
- * NOTE: this covers the four database protocols only. The reactivity, matchmaking,
176
+ * NOTE: this covers the four database protocols only. The dispute, reactivity, matchmaking,
179
177
  * cohort-topic and libp2p built-in (identify/ping/…) protocols this node also registers are
180
- * NOT gated by it.
178
+ * NOT gated by it. To refuse a peer at the connection level instead — every protocol at once,
179
+ * including identify — use {@link NodeOptions.connectionGater}.
181
180
  */
182
181
  authorizeInboundStream?: AuthorizeInboundStream;
183
182
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"libp2p-node-base.d.ts","sourceRoot":"","sources":["../../src/libp2p-node-base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"libp2p-node-base.d.ts","sourceRoot":"","sources":["../../src/libp2p-node-base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAC;AASnD,OAAO,EAAsB,KAAK,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAG3F,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAOrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE9D,OAAO,EAA8C,KAAK,qBAAqB,EAAsC,MAAM,2BAA2B,CAAC;AAEvJ,OAAO,EAAwB,KAAK,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAG9F,OAAO,EAA0C,KAAK,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAE/G,OAAO,KAAK,EAAmB,qBAAqB,EAAiC,MAAM,qBAAqB,CAAC;AACjH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAErF,OAAO,KAAK,EAAE,mBAAmB,EAAwB,MAAM,8BAA8B,CAAC;AAE9F,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAU7E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAIzE,OAAO,EAAyB,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAwC5F,OAAO,KAAK,EAAE,sBAAsB,EAAkC,MAAM,4BAA4B,CAAC;AAIzG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,KAAK,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClE,MAAM,MAAM,gBAAgB,GAAG,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;AAwCrE,4DAA4D;AAC5D,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,CAAC,MAAM,WAAW,CAAC,CAAC;AAEnE;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,oBAAoB,GAAG;IAChD;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,sBAAsB,CAAC;IACzC,6HAA6H;IAC7H,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,kCAAkC;IAClC,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAE9B;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,sCAAsC;IACtC,SAAS,CAAC,EAAE;QACX,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,OAAO,CAAC,EAAE,oBAAoB,CAAC;KAC/B,CAAC;IAEF;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAE7C;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,GAAG;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAEpE,kDAAkD;IAClD,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAElC,+EAA+E;IAC/E,WAAW,CAAC,EAAE,uBAAuB,CAAC;IAEtC,qCAAqC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAEjC,mFAAmF;IACnF,qBAAqB,CAAC,EAAE,sBAAsB,CAAC;IAE/C;;;;;;;OAOG;IACH,mBAAmB,CAAC,EAAE,qBAAqB,CAAC;IAE5C;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE;QACb,0DAA0D;QAC1D,OAAO,EAAE,OAAO,CAAC;QACjB;;;WAGG;QACH,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,+GAA+G;QAC/G,IAAI,CAAC,EAAE,IAAI,CAAC,sBAAsB,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC;KAC5D,CAAC;IAEF;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IAExB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAEhD;;;;OAIG;IACH,+BAA+B,CAAC,EAAE,MAAM,CAAC;IAEzC;;;;;OAKG;IACH,eAAe,CAAC,EAAE,eAAe,CAAC;CAClC,CAAC;AA0CF,wBAAsB,oBAAoB,CACzC,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE;IACT,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,EAAE,gBAAgB,CAAC;CAC7B,GACC,OAAO,CAAC,MAAM,CAAC,CAksCjB"}