@optimystic/db-p2p 0.16.3 → 0.18.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 (90) hide show
  1. package/dist/src/cluster/block-transfer-service.d.ts +14 -1
  2. package/dist/src/cluster/block-transfer-service.d.ts.map +1 -1
  3. package/dist/src/cluster/block-transfer-service.js +12 -3
  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 +41 -13
  10. package/dist/src/cluster/cluster-repo.d.ts.map +1 -1
  11. package/dist/src/cluster/cluster-repo.js +116 -23
  12. package/dist/src/cluster/cluster-repo.js.map +1 -1
  13. package/dist/src/cluster/quorum-restore.d.ts +64 -14
  14. package/dist/src/cluster/quorum-restore.d.ts.map +1 -1
  15. package/dist/src/cluster/quorum-restore.js +0 -0
  16. package/dist/src/cluster/quorum-restore.js.map +1 -1
  17. package/dist/src/cluster/reconcile-block.d.ts +60 -0
  18. package/dist/src/cluster/reconcile-block.d.ts.map +1 -0
  19. package/dist/src/cluster/reconcile-block.js +133 -0
  20. package/dist/src/cluster/reconcile-block.js.map +1 -0
  21. package/dist/src/cluster/service.d.ts +4 -1
  22. package/dist/src/cluster/service.d.ts.map +1 -1
  23. package/dist/src/cluster/service.js +9 -1
  24. package/dist/src/cluster/service.js.map +1 -1
  25. package/dist/src/cluster/spread-on-churn.d.ts.map +1 -1
  26. package/dist/src/cluster/spread-on-churn.js +8 -0
  27. package/dist/src/cluster/spread-on-churn.js.map +1 -1
  28. package/dist/src/inbound-authorization.d.ts +117 -0
  29. package/dist/src/inbound-authorization.d.ts.map +1 -0
  30. package/dist/src/inbound-authorization.js +149 -0
  31. package/dist/src/inbound-authorization.js.map +1 -0
  32. package/dist/src/index.d.ts +1 -0
  33. package/dist/src/index.d.ts.map +1 -1
  34. package/dist/src/index.js +1 -0
  35. package/dist/src/index.js.map +1 -1
  36. package/dist/src/libp2p-key-network.d.ts +14 -0
  37. package/dist/src/libp2p-key-network.d.ts.map +1 -1
  38. package/dist/src/libp2p-key-network.js +54 -4
  39. package/dist/src/libp2p-key-network.js.map +1 -1
  40. package/dist/src/libp2p-node-base.d.ts +48 -7
  41. package/dist/src/libp2p-node-base.d.ts.map +1 -1
  42. package/dist/src/libp2p-node-base.js +61 -83
  43. package/dist/src/libp2p-node-base.js.map +1 -1
  44. package/dist/src/repo/cluster-coordinator.d.ts +21 -3
  45. package/dist/src/repo/cluster-coordinator.d.ts.map +1 -1
  46. package/dist/src/repo/cluster-coordinator.js +27 -5
  47. package/dist/src/repo/cluster-coordinator.js.map +1 -1
  48. package/dist/src/repo/coordinator-repo.d.ts +123 -16
  49. package/dist/src/repo/coordinator-repo.d.ts.map +1 -1
  50. package/dist/src/repo/coordinator-repo.js +354 -49
  51. package/dist/src/repo/coordinator-repo.js.map +1 -1
  52. package/dist/src/repo/service.d.ts +4 -1
  53. package/dist/src/repo/service.d.ts.map +1 -1
  54. package/dist/src/repo/service.js +9 -1
  55. package/dist/src/repo/service.js.map +1 -1
  56. package/dist/src/storage/block-storage.d.ts.map +1 -1
  57. package/dist/src/storage/block-storage.js +11 -0
  58. package/dist/src/storage/block-storage.js.map +1 -1
  59. package/dist/src/storage/storage-repo.d.ts +56 -0
  60. package/dist/src/storage/storage-repo.d.ts.map +1 -1
  61. package/dist/src/storage/storage-repo.js +155 -13
  62. package/dist/src/storage/storage-repo.js.map +1 -1
  63. package/dist/src/sync/service.d.ts +4 -7
  64. package/dist/src/sync/service.d.ts.map +1 -1
  65. package/dist/src/sync/service.js +13 -10
  66. package/dist/src/sync/service.js.map +1 -1
  67. package/dist/src/testing/mesh-harness.d.ts +10 -0
  68. package/dist/src/testing/mesh-harness.d.ts.map +1 -1
  69. package/dist/src/testing/mesh-harness.js +55 -49
  70. package/dist/src/testing/mesh-harness.js.map +1 -1
  71. package/package.json +2 -2
  72. package/{README.md → readme.md} +37 -0
  73. package/src/cluster/block-transfer-service.ts +20 -5
  74. package/src/cluster/cluster-policy.ts +152 -0
  75. package/src/cluster/cluster-repo.ts +121 -26
  76. package/src/cluster/quorum-restore.ts +0 -0
  77. package/src/cluster/reconcile-block.ts +191 -0
  78. package/src/cluster/service.ts +10 -3
  79. package/src/cluster/spread-on-churn.ts +8 -0
  80. package/src/inbound-authorization.ts +190 -0
  81. package/src/index.ts +1 -0
  82. package/src/libp2p-key-network.ts +54 -4
  83. package/src/libp2p-node-base.ts +111 -94
  84. package/src/repo/cluster-coordinator.ts +30 -6
  85. package/src/repo/coordinator-repo.ts +419 -58
  86. package/src/repo/service.ts +10 -3
  87. package/src/storage/block-storage.ts +11 -0
  88. package/src/storage/storage-repo.ts +172 -15
  89. package/src/sync/service.ts +14 -12
  90. package/src/testing/mesh-harness.ts +55 -49
@@ -1,6 +1,7 @@
1
1
  import type { Startable, Logger, StreamHandler, PeerId, Libp2p } from '@libp2p/interface';
2
2
  import type { IRepo, RepoMessage } from '@optimystic/db-core';
3
3
  import { type RedirectPayload } from './redirect.js';
4
+ import { type InboundStreamAuthorizationInit } from '../inbound-authorization.js';
4
5
  interface BaseComponents {
5
6
  logger: {
6
7
  forComponent: (name: string) => Logger;
@@ -26,7 +27,7 @@ export type RepoServiceComponents = BaseComponents & {
26
27
  */
27
28
  libp2p?: Libp2p;
28
29
  };
29
- export type RepoServiceInit = {
30
+ export type RepoServiceInit = InboundStreamAuthorizationInit & {
30
31
  protocol?: string;
31
32
  protocolPrefix?: string;
32
33
  maxInboundStreams?: number;
@@ -65,6 +66,8 @@ export declare class RepoService implements Startable {
65
66
  * self identity, and connection addrs through this explicitly-set reference.
66
67
  */
67
68
  private libp2pRef;
69
+ /** Optional embedder authorization gate; `undefined` (the default) means no check runs. */
70
+ private readonly authorization;
68
71
  constructor(components: RepoServiceComponents, init?: RepoServiceInit);
69
72
  readonly [Symbol.toStringTag] = "@libp2p/repo-service";
70
73
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/repo/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/repo/service.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ import { peersEqual } from '../peer-utils.js';
5
5
  import { encodePeers } from './redirect.js';
6
6
  import { MAX_BLOCK_MESSAGE_BYTES } from '../protocol-limits.js';
7
7
  import { createLogger } from '../logger.js';
8
+ import { createInboundStreamAuthorization } from '../inbound-authorization.js';
8
9
  const debugLog = createLogger('repo-service');
9
10
  export function repoService(init = {}) {
10
11
  return (components) => new RepoService(components, init);
@@ -30,6 +31,8 @@ export class RepoService {
30
31
  * self identity, and connection addrs through this explicitly-set reference.
31
32
  */
32
33
  libp2pRef;
34
+ /** Optional embedder authorization gate; `undefined` (the default) means no check runs. */
35
+ authorization;
33
36
  constructor(components, init = {}) {
34
37
  this.components = components;
35
38
  const computed = init.protocol ?? (init.protocolPrefix ?? '/db-p2p') + '/repo/1.0.0';
@@ -40,6 +43,7 @@ export class RepoService {
40
43
  this.repo = components.repo;
41
44
  this.running = false;
42
45
  this.responsibilityK = init.responsibilityK ?? 1;
46
+ this.authorization = createInboundStreamAuthorization(init, this.protocol, (msg, ...args) => this.log.error(msg, ...args));
43
47
  }
44
48
  [Symbol.toStringTag] = '@libp2p/repo-service';
45
49
  /**
@@ -173,7 +177,7 @@ export class RepoService {
173
177
  * Handle incoming streams on the repo protocol
174
178
  */
175
179
  handleIncomingStream(stream, connection) {
176
- const peerId = connection.remotePeer;
180
+ const peerId = connection?.remotePeer;
177
181
  const processStream = async function* (source) {
178
182
  for await (const msg of source) {
179
183
  // Decode the message
@@ -213,6 +217,10 @@ export class RepoService {
213
217
  };
214
218
  void (async () => {
215
219
  try {
220
+ // Authorization runs before ANY decoding or execution. Guarded on the field so a
221
+ // node without a predicate keeps the original path untouched.
222
+ if (this.authorization && await this.authorization.deny(stream, peerId?.toString()))
223
+ return;
216
224
  const responses = pipe(stream, (source) => lpDecode(source, { maxDataLength: MAX_BLOCK_MESSAGE_BYTES }), processStream.bind(this), (source) => lpEncode(source));
217
225
  for await (const chunk of responses) {
218
226
  stream.send(chunk);
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/repo/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/repo/service.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"block-storage.d.ts","sourceRoot":"","sources":["../../../src/storage/block-storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAmB,MAAM,qBAAqB,CAAC;AAE5G,OAAO,KAAK,EAA+B,eAAe,EAAiB,MAAM,aAAa,CAAC;AAC/F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAY1D,qBAAa,YAAa,YAAW,aAAa;IAEhD,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;IACjC;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBARlB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,WAAW,EACpB,eAAe,CAAC,EAAE,eAAe,YAAA;IAClD;;;;OAIG;IACc,kBAAkB,GAAE,MAA4B;IAG5D,SAAS,IAAI,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAK3C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,SAAS,CAAA;KAAE,GAAG,SAAS,CAAC;IAkBpF,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAIlE,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAIxE,uBAAuB,IAAI,aAAa,CAAC,QAAQ,CAAC;IAInD,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAe/E,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAK1D,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC;IAI1E,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAInF,8BAA8B,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB/D,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5D,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5D,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B3C,OAAO,IAAI,OAAO,CAAC;QAAE,UAAU,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,SAAS,CAAA;KAAE,CAAC;IAuC/D,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAkBlE,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAczD;;;;;;;;;OASG;YACW,mBAAmB;YAwDnB,cAAc;YA+Bd,gBAAgB;YAiEhB,YAAY;YAKZ,YAAY;IAc1B,OAAO,CAAC,QAAQ;IAMhB;;;;;;;;;OASG;IACH,OAAO,CAAC,aAAa;IAMrB;;sGAEkG;IAClG,OAAO,CAAC,YAAY;CASpB"}
1
+ {"version":3,"file":"block-storage.d.ts","sourceRoot":"","sources":["../../../src/storage/block-storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAmB,MAAM,qBAAqB,CAAC;AAE5G,OAAO,KAAK,EAA+B,eAAe,EAAiB,MAAM,aAAa,CAAC;AAC/F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAY1D,qBAAa,YAAa,YAAW,aAAa;IAEhD,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;IACjC;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBARlB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,WAAW,EACpB,eAAe,CAAC,EAAE,eAAe,YAAA;IAClD;;;;OAIG;IACc,kBAAkB,GAAE,MAA4B;IAG5D,SAAS,IAAI,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAK3C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,SAAS,CAAA;KAAE,GAAG,SAAS,CAAC;IA6BpF,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAIlE,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAIxE,uBAAuB,IAAI,aAAa,CAAC,QAAQ,CAAC;IAInD,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAe/E,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAK1D,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC;IAI1E,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAInF,8BAA8B,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB/D,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5D,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5D,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B3C,OAAO,IAAI,OAAO,CAAC;QAAE,UAAU,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,SAAS,CAAA;KAAE,CAAC;IAuC/D,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAkBlE,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAczD;;;;;;;;;OASG;YACW,mBAAmB;YAwDnB,cAAc;YA+Bd,gBAAgB;YAiEhB,YAAY;YAKZ,YAAY;IAc1B,OAAO,CAAC,QAAQ;IAMhB;;;;;;;;;OASG;IACH,OAAO,CAAC,aAAa;IAMrB;;sGAEkG;IAClG,OAAO,CAAC,YAAY;CASpB"}
@@ -32,6 +32,17 @@ export class BlockStorage {
32
32
  async getBlock(rev) {
33
33
  const meta = await this.storage.getMetadata(this.blockId);
34
34
  if (!meta) {
35
+ // No metadata at all ⇒ this node has never seen the block, and reads report it absent
36
+ // WITHOUT consulting `restoreCallback`. That is deliberate, not an oversight: `restoreCallback`
37
+ // is reachable only from ensureRevision below, so a never-seen block is never fetched HERE.
38
+ // Attempting a fetch at this layer would turn every read of a genuinely non-existent block —
39
+ // the common case for an insert probing for a collision — into a network round trip, because
40
+ // storage cannot tell "nobody has this" from "I don't have this".
41
+ //
42
+ // The layer that CAN tell them apart makes that call instead: `CoordinatorRepo` acquires the
43
+ // block only once the cohort has corroborated a `(rev, actionId)` for it
44
+ // (`restoreCorroborated` → `acquireBlockFromCohort`), so an id no peer claims still costs
45
+ // nothing beyond the latest-query it already performed. Keep this early return as-is.
35
46
  return undefined;
36
47
  }
37
48
  // Pending-only state: metadata was seeded by savePendingTransaction but no
@@ -1 +1 @@
1
- {"version":3,"file":"block-storage.js","sourceRoot":"","sources":["../../../src/storage/block-storage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAG1E,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,GAAG,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;AAE1C;;;;GAIG;AACH,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAE/B,MAAM,OAAO,YAAY;IAEN;IACA;IACA;IAMA;IATlB,YACkB,OAAgB,EAChB,OAAoB,EACpB,eAAiC;IAClD;;;;OAIG;IACc,qBAA6B,mBAAmB;QARhD,YAAO,GAAP,OAAO,CAAS;QAChB,YAAO,GAAP,OAAO,CAAa;QACpB,oBAAe,GAAf,eAAe,CAAkB;QAMjC,uBAAkB,GAAlB,kBAAkB,CAA8B;IAC9D,CAAC;IAEL,KAAK,CAAC,SAAS;QACd,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1D,OAAO,IAAI,EAAE,MAAM,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAY;QAC1B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,2EAA2E;QAC3E,4EAA4E;QAC5E,+EAA+E;QAC/E,IAAI,GAAG,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACpD,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,MAAM,SAAS,GAAG,GAAG,IAAI,IAAI,CAAC,MAAO,CAAC,GAAG,CAAC;QAC1C,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC3C,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,QAAkB;QACtC,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,QAAkB;QAC7C,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,CAAC,uBAAuB;QAC7B,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,QAAkB,EAAE,SAAoB;QACpE,GAAG,CAAC,6BAA6B,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC3D,IAAI,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxD,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,4EAA4E;YAC5E,iFAAiF;YACjF,+EAA+E;YAC/E,oFAAoF;YACpF,kEAAkE;YAClE,IAAI,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;YACzC,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC9E,CAAC;IAED,KAAK,CAAC,wBAAwB,CAAC,QAAkB;QAChD,GAAG,CAAC,+BAA+B,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC7D,MAAM,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,CAAC,aAAa,CAAC,QAAgB,EAAE,MAAc;QACpD,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,QAAkB,EAAE,KAAyB;QACxE,MAAM,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,8BAA8B,CAAC,KAAgB;QACpD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1D,iFAAiF;QACjF,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACxC,OAAO;QACR,CAAC;QACD,gGAAgG;QAChG,wFAAwF;QACxF,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACnE,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC;YAChE,OAAO;QACR,CAAC;QACD,iGAAiG;QACjG,mGAAmG;QACnG,4FAA4F;QAC5F,MAAM,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAClF,GAAG,CAAC,qCAAqC,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrF,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,GAAW,EAAE,QAAkB;QACjD,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,yBAAyB,CAAC,QAAkB;QACjD,GAAG,CAAC,+BAA+B,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC7D,MAAM,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAAiB;QAChC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,OAAO,YAAY,CAAC,CAAC;QACpD,CAAC;QACD,8FAA8F;QAC9F,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,uFAAuF;QACvF,8FAA8F;QAC9F,8FAA8F;QAC9F,8FAA8F;QAC9F,+FAA+F;QAC/F,6FAA6F;QAC7F,iGAAiG;QACjG,+FAA+F;QAC/F,gGAAgG;QAChG,+FAA+F;QAC/F,6FAA6F;QAC7F,+FAA+F;QAC/F,qCAAqC;QACrC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,OAAO;QACZ,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;QAC9B,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;QACzC,IAAI,MAAM,GAAG,UAAU,CAAC;QACxB,IAAI,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC;QAExC,yEAAyE;QACzE,0EAA0E;QAC1E,KAAK,IAAI,IAAI,GAAG,UAAU,GAAG,CAAC,GAAI,IAAI,EAAE,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACpE,IAAI,QAAQ,KAAK,SAAS;gBAAE,MAAM;YAClC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC3E,IAAI,QAAQ,KAAK,SAAS;gBAAE,MAAM;YAClC,MAAM,GAAG,IAAI,CAAC;YACd,WAAW,GAAG,QAAQ,CAAC;QACxB,CAAC;QAED,IAAI,MAAM,GAAG,UAAU,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YACtD,MAAM,QAAQ,GAAc,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;YACnE,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;YACvB,kFAAkF;YAClF,wFAAwF;YACxF,yFAAyF;YACzF,4FAA4F;YAC5F,0FAA0F;YAC1F,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;YACtC,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvC,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACpD,GAAG,CAAC,0DAA0D,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;YAClG,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QAC/C,CAAC;QAED,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,KAAa,EAAE,MAAkB;QAClD,MAAM,GAAG,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;QAC7B,+EAA+E;QAC/E,2EAA2E;QAC3E,kFAAkF;QAClF,MAAM,QAAQ,GAAG,MAAM,EAAE,QAAQ,IAAI,MAAM,UAAU,CAAC,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAElG,gGAAgG;QAChG,iGAAiG;QACjG,uEAAuE;QACvE,OAAO,MAAM,IAAI,CAAC,mBAAmB,CACpC,GAAG,EACH,QAAQ,EACR,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAClE,SAAS,CACT,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAiB;QACnC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;QAEjC,4FAA4F;QAC5F,yFAAyF;QACzF,sEAAsE;QACtE,OAAO,MAAM,IAAI,CAAC,mBAAmB,CACpC,GAAG,EACH,QAAQ,EACR,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAC1D,UAAU,CACV,CAAC;IACH,CAAC;IAED;;;;;;;;;OASG;IACK,KAAK,CAAC,mBAAmB,CAChC,GAAW,EACX,QAAkB,EAClB,IAAiD,EACjD,QAAgC;QAEhC,iGAAiG;QACjG,8FAA8F;QAC9F,iGAAiG;QACjG,2EAA2E;QAC3E,MAAM,MAAM,GAAG,4BAA4B,IAAI,CAAC,OAAO,EAAE,CAAC;QAC1D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,CAAC;YACJ,IAAI,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAExD,2FAA2F;YAC3F,sEAAsE;YACtE,IAAI,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;gBAC5C,GAAG,CAAC,mCAAmC,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACvF,OAAO,IAAI,CAAC,MAAM,CAAC;YACpB,CAAC;YAED,2FAA2F;YAC3F,2FAA2F;YAC3F,8EAA8E;YAC9E,MAAM,OAAO,GAAiB;gBAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,SAAS,EAAE;oBACV,CAAC,GAAG,CAAC,EAAE,IAAI;iBACX;gBACD,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC;aACrB,CAAC;YACF,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAEjC,0EAA0E;YAC1E,MAAM,OAAO,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC;YAClC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACX,IAAI,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;YAC1C,CAAC;YACD,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;YAChC,6FAA6F;YAC7F,wFAAwF;YACxF,2FAA2F;YAC3F,2FAA2F;YAC3F,sEAAsE;YACtE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC;YACtC,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvC,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAEpD,GAAG,CAAC,uCAAuC,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;YACpF,OAAO,IAAI,CAAC,MAAM,CAAC;QACpB,CAAC;gBAAS,CAAC;YACV,OAAO,EAAE,CAAC;QACX,CAAC;IACF,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,IAAmB,EAAE,GAAW;QAC5D,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACrC,OAAO;QACR,CAAC;QAED,MAAM,MAAM,GAAG,+BAA+B,IAAI,CAAC,OAAO,EAAE,CAAC;QAC7D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,CAAC;YACJ,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACjE,IAAI,CAAC,WAAW,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,OAAO,qCAAqC,CAAC,CAAC;YAC7E,CAAC;YACD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5C,OAAO;YACR,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YAC9C,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,OAAO,aAAa,GAAG,oCAAoC,CAAC,CAAC;YAC5F,CAAC;YACD,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YAElC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC3C,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACrD,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAE5D,CAAC;gBAAS,CAAC;YACV,OAAO,EAAE,CAAC;QACX,CAAC;IACF,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,IAAmB,EAAE,SAAiB;QACpE,IAAI,KAAyB,CAAC;QAC9B,IAAI,qBAA4C,CAAC;QACjD,MAAM,OAAO,GAAgB,EAAE,CAAC;QAEhC,8BAA8B;QAC9B,IAAI,KAAK,EAAE,MAAM,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC;YACtF,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;YACpG,IAAI,iBAAiB,EAAE,CAAC;gBACvB,KAAK,GAAG,iBAAiB,CAAC;gBAC1B,qBAAqB,GAAG,SAAS,CAAC;gBAClC,MAAM;YACP,CAAC;iBAAM,CAAC;gBACP,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACzB,CAAC;QACF,CAAC;QAED,IAAI,CAAC,KAAK,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACtC,mMAAmM;YACnM,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,CAAC,OAAO,iBAAiB,SAAS,EAAE,CAAC,CAAC;QAChG,CAAC;QAED,oCAAoC;QACpC,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YAC9C,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;YACjC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC5E,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CAAC,kBAAkB,QAAQ,cAAc,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YACzE,CAAC;YACD,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,yFAAyF;YACzF,0FAA0F;YAC1F,yFAAyF;YACzF,0FAA0F;YAC1F,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,6FAA6F;YAC7F,yFAAyF;YACzF,6FAA6F;YAC7F,qFAAqF;YACrF,mCAAmC;YACnC,8FAA8F;YAC9F,8FAA8F;YAC9F,+FAA+F;YAC/F,gGAAgG;YAChG,4FAA4F;YAC5F,gGAAgG;YAChG,4FAA4F;YAC5F,8FAA8F;YAC9F,MAAM,aAAa,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC;YAC7E,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC;YACjC,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC;YACxD,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;YACrE,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC;gBACzD,MAAM,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACrF,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAE,EAAE,CAAC;QAC1C,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC;IACpD,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,GAAW;QACrC,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE,OAAO,SAAS,CAAC;QAC5C,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACtD,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,OAAqB;QAC/C,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;aACjD,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAErD,oDAAoD;QACpD,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,SAAS,EAAE,CAAC;YAC1D,MAAM,OAAO,CAAC,GAAG,CAAC;gBACjB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC;gBAC7D,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC;gBAC7E,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE;aACpG,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IAEO,QAAQ,CAAC,GAAW,EAAE,MAAuB;QACpD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAC1B,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAC7D,CAAC;IACH,CAAC;IAED;;;;;;;;;OASG;IACK,aAAa,CAAC,GAAW,EAAE,SAAiB,EAAE,UAAkB;QACvE,OAAO,GAAG,KAAK,SAAS;eACpB,GAAG,KAAK,UAAU;eAClB,GAAG,GAAG,IAAI,CAAC,kBAAkB,KAAK,CAAC,CAAC;IACzC,CAAC;IAED;;sGAEkG;IAC1F,YAAY,CAAC,GAAW,EAAE,MAAuB;QACxD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC5B,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;YAC3B,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC;gBACtD,OAAO,KAAK,CAAC;YACd,CAAC;QACF,CAAC;QACD,OAAO,GAAG,CAAC;IACZ,CAAC;CACD"}
1
+ {"version":3,"file":"block-storage.js","sourceRoot":"","sources":["../../../src/storage/block-storage.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,31 @@ export declare const commitLatchKey: (blockId: BlockId) => string;
20
20
  * deadlock against commit's sorted, up-front multi-latch acquisition.
21
21
  */
22
22
  export declare function withBlockCommitLatch<T>(blockId: BlockId, fn: () => Promise<T>): Promise<T>;
23
+ /**
24
+ * Stable, greppable prefix on the failure reason a commit carries when this node cannot materialize
25
+ * the revision it was asked to record. It is a STRING marker rather than only an error class because
26
+ * {@link StorageRepo.commit} reports per-block faults as `StaleFailure.reason` (a plain string that
27
+ * also crosses the wire), so the class identity is lost by the time a caller inspects the result.
28
+ */
29
+ export declare const MISSING_BASE_REVISION_REASON = "missing-base-revision";
30
+ /**
31
+ * This node was asked to commit revision N of a block it holds no materializable base for, so
32
+ * applying the transform would materialize nothing while `latest` advanced to N — a block that is
33
+ * then unreadable locally, unservable to peers, and that rejects every later write (see
34
+ * {@link StorageRepo.internalCommit}). The commit is refused instead; the caller heals the node
35
+ * out-of-band (`ClusterMember` pulls the committed revision from a cohort peer) and retries.
36
+ */
37
+ export declare class MissingBaseRevisionError extends Error {
38
+ readonly blockId: BlockId;
39
+ readonly rev: number;
40
+ constructor(blockId: BlockId, rev: number, detail: string);
41
+ }
42
+ /**
43
+ * True when a {@link CommitResult} failed because this node holds no materializable base for one of
44
+ * the committed blocks. Distinguishes that recoverable divergence (heal by fetching the block from a
45
+ * cohort peer) from a genuine storage fault, which must still propagate.
46
+ */
47
+ export declare function isMissingBaseRevisionFailure(result: CommitResult): boolean;
23
48
  export type StorageRepoOptions = {
24
49
  /** Optional hook to validate transactions in PendRequests */
25
50
  validatePend?: PendValidationHook;
@@ -91,5 +116,36 @@ export declare class StorageRepo implements IRepo, IBlockChangeNotifier, IBlockR
91
116
  */
92
117
  saveReplicatedBlock(blockId: BlockId, block: IBlock, source?: ActionRev): Promise<void>;
93
118
  private internalCommit;
119
+ /**
120
+ * The materialization this commit builds on: the block at `latest`, or `undefined` when the block
121
+ * holds no committed revision yet (the normal insert case).
122
+ *
123
+ * `getBlock` THROWS when this node holds a `latest` it cannot materialize — a block already wedged
124
+ * by a pre-fix commit, or by truncated history. That is the same divergence as having no base at
125
+ * all, so it is translated into {@link MissingBaseRevisionError} rather than surfacing as an opaque
126
+ * storage fault: the healing path can then repair the block instead of the fault resetting the
127
+ * cluster stream, and a wedged node recovers on the next write touching the block.
128
+ *
129
+ * The catch is deliberately UNNARROWED — it also absorbs a transient fault (a raw-storage read
130
+ * error, a `restoreCallback` timeout on a block whose `ranges` do not cover its own `latest`).
131
+ * BlockStorage reports every one of these as a bare `Error`, so they cannot be told apart here,
132
+ * and treating them as divergence is the safe default: this node genuinely cannot materialize the
133
+ * base right now, and the cluster's policy is to heal rather than throw out of consensus. The
134
+ * price is that a transient fault ALSO drops the pending (see {@link refuseMissingBase}), so the
135
+ * block converges by replication instead of by a replay the retry could have done. Narrowing this
136
+ * would require typed faults out of BlockStorage; until then, prefer the tolerant reading.
137
+ */
138
+ private readCommitBase;
139
+ /**
140
+ * Refuse a commit this node cannot materialize. Always throws {@link MissingBaseRevisionError};
141
+ * nothing durable has been written at this point, so the block is left exactly as it was minus the
142
+ * pending record.
143
+ *
144
+ * The pending is dropped because it can never be promoted here: promotion needs a base this node
145
+ * must obtain out-of-band, and once the healing path lands that revision `latest` is already >= rev,
146
+ * so a commit retry partitions the block as already-done/stale and never revisits the pending.
147
+ * Leaving it would also report a phantom conflicting action from {@link pend} for every later write.
148
+ */
149
+ private refuseMissingBase;
94
150
  }
95
151
  //# sourceMappingURL=storage-repo.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage-repo.d.ts","sourceRoot":"","sources":["../../../src/storage/storage-repo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EACzG,SAAS,EACH,MAAM,EAAE,SAAS,EACjC,kBAAkB,EAClB,YAAY,EAAE,oBAAoB,EAAE,wBAAwB,EAC5D,MAAM,qBAAqB,CAAC;AAM7B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAK/E;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GAAI,SAAS,OAAO,KAAG,MAAyC,CAAC;AAE5F;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAOhG;AAED,MAAM,MAAM,kBAAkB,GAAG;IAChC,6DAA6D;IAC7D,YAAY,CAAC,EAAE,kBAAkB,CAAC;CAClC,CAAC;AAEF,qBAAa,WAAY,YAAW,KAAK,EAAE,oBAAoB,EAAE,kBAAkB;IAQjF,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IAPpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAqB;IACnD,6EAA6E;IAC7E,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA0D;IAC1F,oFAAoF;IACpF,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAuC;gBAGxD,kBAAkB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,aAAa,EACxE,OAAO,CAAC,EAAE,kBAAkB;IAK7B;;;OAGG;IACH,kBAAkB,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,wBAAwB,GAAG,MAAM,IAAI;IAqB9F;;;;;;OAMG;IACH,qBAAqB,CAAC,QAAQ,EAAE,wBAAwB,GAAG,MAAM,IAAI;IAUrE;;;;;;;;;;OAUG;IACH,OAAO,CAAC,qBAAqB;IAiB7B,wHAAwH;IACxH,OAAO,CAAC,mBAAmB;IAUrB,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAuGhG;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAqBhB,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC;IAiG1E,MAAM,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAQzE,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC;IAsLtF;;;;;;OAMG;IACG,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAYnD;;;;;;;;;;OAUG;IACG,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;YAgC/E,cAAc;CA2D5B"}
1
+ {"version":3,"file":"storage-repo.d.ts","sourceRoot":"","sources":["../../../src/storage/storage-repo.ts"],"names":[],"mappings":"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"}
@@ -29,6 +29,38 @@ export async function withBlockCommitLatch(blockId, fn) {
29
29
  release();
30
30
  }
31
31
  }
32
+ /**
33
+ * Stable, greppable prefix on the failure reason a commit carries when this node cannot materialize
34
+ * the revision it was asked to record. It is a STRING marker rather than only an error class because
35
+ * {@link StorageRepo.commit} reports per-block faults as `StaleFailure.reason` (a plain string that
36
+ * also crosses the wire), so the class identity is lost by the time a caller inspects the result.
37
+ */
38
+ export const MISSING_BASE_REVISION_REASON = 'missing-base-revision';
39
+ /**
40
+ * This node was asked to commit revision N of a block it holds no materializable base for, so
41
+ * applying the transform would materialize nothing while `latest` advanced to N — a block that is
42
+ * then unreadable locally, unservable to peers, and that rejects every later write (see
43
+ * {@link StorageRepo.internalCommit}). The commit is refused instead; the caller heals the node
44
+ * out-of-band (`ClusterMember` pulls the committed revision from a cohort peer) and retries.
45
+ */
46
+ export class MissingBaseRevisionError extends Error {
47
+ blockId;
48
+ rev;
49
+ constructor(blockId, rev, detail) {
50
+ super(`${MISSING_BASE_REVISION_REASON}: block ${blockId} cannot materialize rev ${rev} — ${detail}`);
51
+ this.blockId = blockId;
52
+ this.rev = rev;
53
+ this.name = 'MissingBaseRevisionError';
54
+ }
55
+ }
56
+ /**
57
+ * True when a {@link CommitResult} failed because this node holds no materializable base for one of
58
+ * the committed blocks. Distinguishes that recoverable divergence (heal by fetching the block from a
59
+ * cohort peer) from a genuine storage fault, which must still propagate.
60
+ */
61
+ export function isMissingBaseRevisionFailure(result) {
62
+ return !result.success && (result.reason?.startsWith(MISSING_BASE_REVISION_REASON) ?? false);
63
+ }
32
64
  export class StorageRepo {
33
65
  createBlockStorage;
34
66
  validatePend;
@@ -131,6 +163,11 @@ export class StorageRepo {
131
163
  const promotions = [];
132
164
  const results = await Promise.all(distinctBlockIds.map(async (blockId) => {
133
165
  const blockStorage = this.createBlockStorage(blockId);
166
+ // Set when this node KNOWS its answer for the block is a guess: the promotion
167
+ // below refused for a missing base, or getBlock() threw (truncated history /
168
+ // failed restore). An absent-reading block then reports `unavailable` instead of
169
+ // posing as an authoritative "never existed" — see BlockUnavailableReason.
170
+ let unavailable;
134
171
  // Ensure that all outstanding transactions in the context are committed.
135
172
  // This promotes a landed-elsewhere pending via internalCommit, which mutates
136
173
  // meta.latest — the same read-modify-write commit()/saveReplicatedBlock guard
@@ -160,15 +197,32 @@ export class StorageRepo {
160
197
  // Sort a COPY: when `latest` is undefined, `missing` aliases the caller's
161
198
  // `context.committed` array, and an in-place `.sort()` would reorder the shared
162
199
  // request context under the caller's feet.
163
- for (const { actionId, rev } of [...missing].sort((a, b) => a.rev - b.rev)) {
164
- const pending = await blockStorage.getPendingTransaction(actionId);
165
- if (pending) {
166
- const collectionId = await this.internalCommit(blockId, actionId, rev, blockStorage);
167
- if (collectionId !== undefined) {
168
- promotions.push({ collectionId, blockId, actionId, rev });
200
+ try {
201
+ for (const { actionId, rev } of [...missing].sort((a, b) => a.rev - b.rev)) {
202
+ const pending = await blockStorage.getPendingTransaction(actionId);
203
+ if (pending) {
204
+ const collectionId = await this.internalCommit(blockId, actionId, rev, blockStorage);
205
+ if (collectionId !== undefined) {
206
+ promotions.push({ collectionId, blockId, actionId, rev });
207
+ }
169
208
  }
170
209
  }
171
210
  }
211
+ catch (err) {
212
+ // This node holds no materializable base for the block, so NO context revision
213
+ // can be promoted here (each builds on the one before). Leave `latest` where it
214
+ // is — the invariant internalCommit just enforced — and let the commit-path
215
+ // healing supply the content; a read must not fail for it. Every other fault
216
+ // still propagates.
217
+ if (!(err instanceof MissingBaseRevisionError)) {
218
+ throw err;
219
+ }
220
+ // This node holds records PROVING the block exists (a pending it could not
221
+ // promote); if the block then reads as absent below, the answer is a guess,
222
+ // not an authoritative "never existed".
223
+ unavailable = 'unmaterializable';
224
+ log('get:promote-skipped-missing-base blockId=%s rev=%d reason=%s', blockId, err.rev, err.message);
225
+ }
172
226
  });
173
227
  }
174
228
  }
@@ -179,13 +233,34 @@ export class StorageRepo {
179
233
  // (actionId, rev) self-heals it via storage.recover() in commit(). Not repaired lazily on
180
234
  // the read path because get() holds no commit latch; if stale reads on unwritten blocks
181
235
  // ever become a problem, add a latched lazy recover() here.
182
- const blockRev = await blockStorage.getBlock(context?.rev);
236
+ //
237
+ // getBlock() THROWS when this node holds a `latest` it cannot materialize (truncated
238
+ // history: "Failed to find materialized block", or a failed restore). Caught PER BLOCK so
239
+ // one broken block cannot fail the whole batch's Promise.all and take healthy siblings
240
+ // down with it. The read still fails for THIS block — TransactorSource throws
241
+ // BlockUnavailableError on the flagged entry — so nothing is swallowed.
242
+ let blockRev;
243
+ try {
244
+ blockRev = await blockStorage.getBlock(context?.rev);
245
+ }
246
+ catch (err) {
247
+ // NOTE: the entry drops `state.latest`, which this node does know (getLatest() does not
248
+ // materialize, so it does not throw). Empty state is what makes CoordinatorRepo treat the
249
+ // block as missing and consult the cohort — exactly the repair this block needs. If a
250
+ // consumer ever needs the revision behind an unavailable answer (e.g. to ask the cohort
251
+ // for a specific rev instead of the whole block), carry `latest` here and widen the
252
+ // coordinator's consult trigger to `isMissing || unavailable` so repair still fires.
253
+ log('get:unmaterializable blockId=%s error=%s', blockId, err instanceof Error ? err.message : String(err));
254
+ return [blockId, { state: {}, unavailable: 'unmaterializable' }];
255
+ }
183
256
  // Include pending action if requested — handled first so a pending-only
184
257
  // insert (no committed revision yet) can still be served by applying the
185
258
  // pending transform to an undefined prior block.
186
259
  if (context?.actionId !== undefined) {
187
260
  const pendingTransform = await blockStorage.getPendingTransaction(context.actionId);
188
261
  if (!pendingTransform) {
262
+ // Caller-contract violation (the caller asserted a pending this repo never had, or
263
+ // cancelled) — an error, not an availability question. Deliberately NOT `unavailable`.
189
264
  throw new Error(`Pending action ${context.actionId} not found`);
190
265
  }
191
266
  const block = applyTransform(blockRev?.block, pendingTransform);
@@ -194,11 +269,20 @@ export class StorageRepo {
194
269
  state: {
195
270
  latest: await blockStorage.getLatest(),
196
271
  pendings: [context.actionId]
197
- }
272
+ },
273
+ // A pending applied to a missing base can materialize nothing (applyTransform drops
274
+ // updates with no block to apply them to) — that absence is a guess, and is flagged.
275
+ // A materialized block is a real answer regardless of the earlier refusal.
276
+ ...(unavailable !== undefined && block === undefined ? { unavailable } : {})
198
277
  }];
199
278
  }
200
279
  if (!blockRev) {
201
- return [blockId, { state: {} }];
280
+ // `unavailable` distinguishes "never existed" (the common insert-probe case, no flag)
281
+ // from "this node cannot reconstruct it" (the promotion above refused for a missing
282
+ // base). A tombstoned block also lands here with meta.latest set, but it never enters
283
+ // the missing-base catch, so it stays an authoritative absent — keyed off the explicit
284
+ // flag, not off "no block".
285
+ return [blockId, { state: {}, ...(unavailable !== undefined ? { unavailable } : {}) }];
202
286
  }
203
287
  const pendings = await asyncIteratorToArray(blockStorage.listPendingTransactions());
204
288
  return [blockId, {
@@ -246,6 +330,8 @@ export class StorageRepo {
246
330
  if (this.validatePend && request.transaction && request.operationsHash) {
247
331
  const validationResult = await this.validatePend(request.transaction, request.operationsHash);
248
332
  if (!validationResult.valid) {
333
+ // Hard rejection: the transaction itself is invalid, so no `conflict` flag — a
334
+ // re-read and re-pend would fail the same way and only burn the retry budget.
249
335
  return {
250
336
  success: false,
251
337
  reason: validationResult.reason ?? 'Transaction validation failed'
@@ -292,16 +378,18 @@ export class StorageRepo {
292
378
  log('pend:stale actionId=%s missing=%d', request.actionId, missing.length);
293
379
  return {
294
380
  success: false,
381
+ conflict: true,
295
382
  missing
296
383
  };
297
384
  }
298
385
  if (pendings.length > 0) {
299
386
  if (request.policy === 'f') { // Fail on pending actions
300
- return { success: false, pending: pendings };
387
+ return { success: false, conflict: true, pending: pendings };
301
388
  }
302
389
  else if (request.policy === 'r') { // Return populated pending actions
303
390
  return {
304
391
  success: false,
392
+ conflict: true,
305
393
  pending: await Promise.all(pendings.map(async (action) => {
306
394
  const blockStorage = this.createBlockStorage(action.blockId);
307
395
  return {
@@ -579,12 +667,20 @@ export class StorageRepo {
579
667
  }
580
668
  // Get prior materialized block if it exists
581
669
  const latest = await storage.getLatest();
582
- const priorBlock = latest
583
- ? (await storage.getBlock(latest.rev))?.block
584
- : undefined;
670
+ const priorBlock = await this.readCommitBase(blockId, actionId, rev, storage, latest);
585
671
  // Apply transform and save materialized block
586
672
  // applyTransform handles undefined priorBlock correctly for inserts
587
673
  const newBlock = applyTransform(priorBlock, transform);
674
+ // INVARIANT: `latest` must never advance past a revision this node can materialize.
675
+ // `applyTransform` silently drops `updates` when there is no block to apply them to, so a
676
+ // member that missed the block's CREATING revision would otherwise record rev N while storing
677
+ // nothing to serve it from. `latest === undefined` is precisely the "nothing below to fall
678
+ // back to" case: materializeBlock's descending walk needs some materialization at or below the
679
+ // target, and with no prior revision there is none. With a prior `latest` an absent newBlock is
680
+ // a legitimate tombstone (the walk resolves to an earlier materialization), so it stays allowed.
681
+ if (!newBlock && latest === undefined) {
682
+ return await this.refuseMissingBase(blockId, actionId, rev, storage, 'no committed revision to apply the transform to');
683
+ }
588
684
  if (newBlock) {
589
685
  await storage.saveMaterializedBlock(actionId, newBlock);
590
686
  }
@@ -616,6 +712,52 @@ export class StorageRepo {
616
712
  // undefined so the caller skips it rather than emitting a bogus event.
617
713
  return newBlock?.header.collectionId ?? priorBlock?.header.collectionId;
618
714
  }
715
+ /**
716
+ * The materialization this commit builds on: the block at `latest`, or `undefined` when the block
717
+ * holds no committed revision yet (the normal insert case).
718
+ *
719
+ * `getBlock` THROWS when this node holds a `latest` it cannot materialize — a block already wedged
720
+ * by a pre-fix commit, or by truncated history. That is the same divergence as having no base at
721
+ * all, so it is translated into {@link MissingBaseRevisionError} rather than surfacing as an opaque
722
+ * storage fault: the healing path can then repair the block instead of the fault resetting the
723
+ * cluster stream, and a wedged node recovers on the next write touching the block.
724
+ *
725
+ * The catch is deliberately UNNARROWED — it also absorbs a transient fault (a raw-storage read
726
+ * error, a `restoreCallback` timeout on a block whose `ranges` do not cover its own `latest`).
727
+ * BlockStorage reports every one of these as a bare `Error`, so they cannot be told apart here,
728
+ * and treating them as divergence is the safe default: this node genuinely cannot materialize the
729
+ * base right now, and the cluster's policy is to heal rather than throw out of consensus. The
730
+ * price is that a transient fault ALSO drops the pending (see {@link refuseMissingBase}), so the
731
+ * block converges by replication instead of by a replay the retry could have done. Narrowing this
732
+ * would require typed faults out of BlockStorage; until then, prefer the tolerant reading.
733
+ */
734
+ async readCommitBase(blockId, actionId, rev, storage, latest) {
735
+ if (!latest) {
736
+ return undefined;
737
+ }
738
+ try {
739
+ return (await storage.getBlock(latest.rev))?.block;
740
+ }
741
+ catch (err) {
742
+ log('commit:unmaterializable-base blockId=%s baseRev=%d error=%s', blockId, latest.rev, err instanceof Error ? err.message : String(err));
743
+ return await this.refuseMissingBase(blockId, actionId, rev, storage, `local rev ${latest.rev} is not materializable here`);
744
+ }
745
+ }
746
+ /**
747
+ * Refuse a commit this node cannot materialize. Always throws {@link MissingBaseRevisionError};
748
+ * nothing durable has been written at this point, so the block is left exactly as it was minus the
749
+ * pending record.
750
+ *
751
+ * The pending is dropped because it can never be promoted here: promotion needs a base this node
752
+ * must obtain out-of-band, and once the healing path lands that revision `latest` is already >= rev,
753
+ * so a commit retry partitions the block as already-done/stale and never revisits the pending.
754
+ * Leaving it would also report a phantom conflicting action from {@link pend} for every later write.
755
+ */
756
+ async refuseMissingBase(blockId, actionId, rev, storage, detail) {
757
+ await storage.deletePendingTransaction(actionId);
758
+ log('commit:missing-base blockId=%s rev=%d actionId=%s detail=%s', blockId, rev, actionId, detail);
759
+ throw new MissingBaseRevisionError(blockId, rev, detail);
760
+ }
619
761
  }
620
762
  /**
621
763
  * Converts list of missing actions per block into a list of missing actions across blocks.