@optimystic/db-p2p 0.14.1 → 0.16.2

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 (275) hide show
  1. package/README.md +616 -609
  2. package/dist/src/cluster/block-transfer-service.d.ts.map +1 -1
  3. package/dist/src/cluster/block-transfer-service.js +4 -3
  4. package/dist/src/cluster/block-transfer-service.js.map +1 -1
  5. package/dist/src/cluster/block-transfer.d.ts +52 -3
  6. package/dist/src/cluster/block-transfer.d.ts.map +1 -1
  7. package/dist/src/cluster/block-transfer.js +129 -6
  8. package/dist/src/cluster/block-transfer.js.map +1 -1
  9. package/dist/src/cluster/client.d.ts.map +1 -1
  10. package/dist/src/cluster/client.js +3 -1
  11. package/dist/src/cluster/client.js.map +1 -1
  12. package/dist/src/cluster/cluster-repo.d.ts +182 -11
  13. package/dist/src/cluster/cluster-repo.d.ts.map +1 -1
  14. package/dist/src/cluster/cluster-repo.js +429 -69
  15. package/dist/src/cluster/cluster-repo.js.map +1 -1
  16. package/dist/src/cluster/peer-key-binding.d.ts +25 -0
  17. package/dist/src/cluster/peer-key-binding.d.ts.map +1 -0
  18. package/dist/src/cluster/peer-key-binding.js +39 -0
  19. package/dist/src/cluster/peer-key-binding.js.map +1 -0
  20. package/dist/src/cluster/quorum-restore.d.ts +72 -0
  21. package/dist/src/cluster/quorum-restore.d.ts.map +1 -0
  22. package/dist/src/cluster/quorum-restore.js +0 -0
  23. package/dist/src/cluster/quorum-restore.js.map +1 -0
  24. package/dist/src/cluster/rebalance-monitor.d.ts +23 -1
  25. package/dist/src/cluster/rebalance-monitor.d.ts.map +1 -1
  26. package/dist/src/cluster/rebalance-monitor.js +17 -2
  27. package/dist/src/cluster/rebalance-monitor.js.map +1 -1
  28. package/dist/src/cluster/service.d.ts.map +1 -1
  29. package/dist/src/cluster/service.js +7 -1
  30. package/dist/src/cluster/service.js.map +1 -1
  31. package/dist/src/cluster/spread-on-churn.d.ts +7 -0
  32. package/dist/src/cluster/spread-on-churn.d.ts.map +1 -1
  33. package/dist/src/cluster/spread-on-churn.js +4 -1
  34. package/dist/src/cluster/spread-on-churn.js.map +1 -1
  35. package/dist/src/cluster/supermajority-coupling.d.ts +22 -0
  36. package/dist/src/cluster/supermajority-coupling.d.ts.map +1 -0
  37. package/dist/src/cluster/supermajority-coupling.js +27 -0
  38. package/dist/src/cluster/supermajority-coupling.js.map +1 -0
  39. package/dist/src/cohort-topic/cohort-gossip-driver.d.ts +46 -4
  40. package/dist/src/cohort-topic/cohort-gossip-driver.d.ts.map +1 -1
  41. package/dist/src/cohort-topic/cohort-gossip-driver.js +62 -7
  42. package/dist/src/cohort-topic/cohort-gossip-driver.js.map +1 -1
  43. package/dist/src/cohort-topic/cohort-gossip-transport.d.ts +7 -0
  44. package/dist/src/cohort-topic/cohort-gossip-transport.d.ts.map +1 -1
  45. package/dist/src/cohort-topic/cohort-gossip-transport.js +9 -0
  46. package/dist/src/cohort-topic/cohort-gossip-transport.js.map +1 -1
  47. package/dist/src/cohort-topic/host.d.ts +197 -27
  48. package/dist/src/cohort-topic/host.d.ts.map +1 -1
  49. package/dist/src/cohort-topic/host.js +643 -87
  50. package/dist/src/cohort-topic/host.js.map +1 -1
  51. package/dist/src/dispute/arbitrator-selection.d.ts +68 -7
  52. package/dist/src/dispute/arbitrator-selection.d.ts.map +1 -1
  53. package/dist/src/dispute/arbitrator-selection.js +105 -16
  54. package/dist/src/dispute/arbitrator-selection.js.map +1 -1
  55. package/dist/src/dispute/cascade.d.ts +7 -0
  56. package/dist/src/dispute/cascade.d.ts.map +1 -1
  57. package/dist/src/dispute/cascade.js +1 -1
  58. package/dist/src/dispute/cascade.js.map +1 -1
  59. package/dist/src/dispute/client.d.ts.map +1 -1
  60. package/dist/src/dispute/client.js +3 -2
  61. package/dist/src/dispute/client.js.map +1 -1
  62. package/dist/src/dispute/dispute-service.d.ts +32 -3
  63. package/dist/src/dispute/dispute-service.d.ts.map +1 -1
  64. package/dist/src/dispute/dispute-service.js +82 -9
  65. package/dist/src/dispute/dispute-service.js.map +1 -1
  66. package/dist/src/dispute/index.d.ts +1 -1
  67. package/dist/src/dispute/index.d.ts.map +1 -1
  68. package/dist/src/dispute/index.js +1 -1
  69. package/dist/src/dispute/index.js.map +1 -1
  70. package/dist/src/dispute/invalidation.d.ts +25 -0
  71. package/dist/src/dispute/invalidation.d.ts.map +1 -1
  72. package/dist/src/dispute/invalidation.js +14 -2
  73. package/dist/src/dispute/invalidation.js.map +1 -1
  74. package/dist/src/dispute/service.d.ts.map +1 -1
  75. package/dist/src/dispute/service.js +7 -1
  76. package/dist/src/dispute/service.js.map +1 -1
  77. package/dist/src/index.d.ts +4 -1
  78. package/dist/src/index.d.ts.map +1 -1
  79. package/dist/src/index.js +4 -1
  80. package/dist/src/index.js.map +1 -1
  81. package/dist/src/it-utility.d.ts +1 -1
  82. package/dist/src/it-utility.d.ts.map +1 -1
  83. package/dist/src/it-utility.js +4 -13
  84. package/dist/src/it-utility.js.map +1 -1
  85. package/dist/src/libp2p-key-network.d.ts +98 -1
  86. package/dist/src/libp2p-key-network.d.ts.map +1 -1
  87. package/dist/src/libp2p-key-network.js +272 -17
  88. package/dist/src/libp2p-key-network.js.map +1 -1
  89. package/dist/src/libp2p-node-base.d.ts +12 -0
  90. package/dist/src/libp2p-node-base.d.ts.map +1 -1
  91. package/dist/src/libp2p-node-base.js +415 -87
  92. package/dist/src/libp2p-node-base.js.map +1 -1
  93. package/dist/src/matchmaking/query-transport.d.ts +2 -0
  94. package/dist/src/matchmaking/query-transport.d.ts.map +1 -1
  95. package/dist/src/matchmaking/query-transport.js +6 -0
  96. package/dist/src/matchmaking/query-transport.js.map +1 -1
  97. package/dist/src/matchmaking/traffic-validation.js +1 -0
  98. package/dist/src/matchmaking/traffic-validation.js.map +1 -1
  99. package/dist/src/network/network-manager-service.d.ts +2 -2
  100. package/dist/src/network/network-manager-service.d.ts.map +1 -1
  101. package/dist/src/network/network-manager-service.js +8 -4
  102. package/dist/src/network/network-manager-service.js.map +1 -1
  103. package/dist/src/owned-block-seed.d.ts +27 -0
  104. package/dist/src/owned-block-seed.d.ts.map +1 -0
  105. package/dist/src/owned-block-seed.js +37 -0
  106. package/dist/src/owned-block-seed.js.map +1 -0
  107. package/dist/src/protocol-client.d.ts +1 -0
  108. package/dist/src/protocol-client.d.ts.map +1 -1
  109. package/dist/src/protocol-client.js +9 -2
  110. package/dist/src/protocol-client.js.map +1 -1
  111. package/dist/src/protocol-limits.d.ts +32 -0
  112. package/dist/src/protocol-limits.d.ts.map +1 -0
  113. package/dist/src/protocol-limits.js +32 -0
  114. package/dist/src/protocol-limits.js.map +1 -0
  115. package/dist/src/repo/client.d.ts.map +1 -1
  116. package/dist/src/repo/client.js +3 -0
  117. package/dist/src/repo/client.js.map +1 -1
  118. package/dist/src/repo/cluster-coordinator.d.ts +41 -4
  119. package/dist/src/repo/cluster-coordinator.d.ts.map +1 -1
  120. package/dist/src/repo/cluster-coordinator.js +128 -80
  121. package/dist/src/repo/cluster-coordinator.js.map +1 -1
  122. package/dist/src/repo/coordinator-repo.d.ts +38 -1
  123. package/dist/src/repo/coordinator-repo.d.ts.map +1 -1
  124. package/dist/src/repo/coordinator-repo.js +92 -13
  125. package/dist/src/repo/coordinator-repo.js.map +1 -1
  126. package/dist/src/repo/service.d.ts.map +1 -1
  127. package/dist/src/repo/service.js +7 -1
  128. package/dist/src/repo/service.js.map +1 -1
  129. package/dist/src/reputation/peer-reputation.js +1 -1
  130. package/dist/src/reputation/peer-reputation.js.map +1 -1
  131. package/dist/src/reputation/types.d.ts +3 -1
  132. package/dist/src/reputation/types.d.ts.map +1 -1
  133. package/dist/src/reputation/types.js +3 -0
  134. package/dist/src/reputation/types.js.map +1 -1
  135. package/dist/src/rn.d.ts +5 -1
  136. package/dist/src/rn.d.ts.map +1 -1
  137. package/dist/src/rn.js +7 -1
  138. package/dist/src/rn.js.map +1 -1
  139. package/dist/src/storage/arachnode-fret-adapter.d.ts +30 -1
  140. package/dist/src/storage/arachnode-fret-adapter.d.ts.map +1 -1
  141. package/dist/src/storage/arachnode-fret-adapter.js +15 -2
  142. package/dist/src/storage/arachnode-fret-adapter.js.map +1 -1
  143. package/dist/src/storage/arachnode-partition.d.ts +49 -0
  144. package/dist/src/storage/arachnode-partition.d.ts.map +1 -0
  145. package/dist/src/storage/arachnode-partition.js +61 -0
  146. package/dist/src/storage/arachnode-partition.js.map +1 -0
  147. package/dist/src/storage/block-storage.d.ts +40 -1
  148. package/dist/src/storage/block-storage.d.ts.map +1 -1
  149. package/dist/src/storage/block-storage.js +150 -57
  150. package/dist/src/storage/block-storage.js.map +1 -1
  151. package/dist/src/storage/i-block-storage.d.ts +8 -0
  152. package/dist/src/storage/i-block-storage.d.ts.map +1 -1
  153. package/dist/src/storage/i-raw-storage.d.ts +13 -0
  154. package/dist/src/storage/i-raw-storage.d.ts.map +1 -1
  155. package/dist/src/storage/kv-raw-storage.d.ts +45 -0
  156. package/dist/src/storage/kv-raw-storage.d.ts.map +1 -0
  157. package/dist/src/storage/kv-raw-storage.js +113 -0
  158. package/dist/src/storage/kv-raw-storage.js.map +1 -0
  159. package/dist/src/storage/memory-storage.d.ts +20 -58
  160. package/dist/src/storage/memory-storage.d.ts.map +1 -1
  161. package/dist/src/storage/memory-storage.js +22 -148
  162. package/dist/src/storage/memory-storage.js.map +1 -1
  163. package/dist/src/storage/memory-store-driver.d.ts +39 -0
  164. package/dist/src/storage/memory-store-driver.d.ts.map +1 -0
  165. package/dist/src/storage/memory-store-driver.js +129 -0
  166. package/dist/src/storage/memory-store-driver.js.map +1 -0
  167. package/dist/src/storage/raw-store-codec.d.ts +10 -0
  168. package/dist/src/storage/raw-store-codec.d.ts.map +1 -0
  169. package/dist/src/storage/raw-store-codec.js +36 -0
  170. package/dist/src/storage/raw-store-codec.js.map +1 -0
  171. package/dist/src/storage/raw-store-driver.d.ts +69 -0
  172. package/dist/src/storage/raw-store-driver.d.ts.map +1 -0
  173. package/dist/src/storage/raw-store-driver.js +2 -0
  174. package/dist/src/storage/raw-store-driver.js.map +1 -0
  175. package/dist/src/storage/restoration-coordinator-v2.d.ts.map +1 -1
  176. package/dist/src/storage/restoration-coordinator-v2.js +1 -1
  177. package/dist/src/storage/restoration-coordinator-v2.js.map +1 -1
  178. package/dist/src/storage/restoration-coordinator.d.ts +73 -0
  179. package/dist/src/storage/restoration-coordinator.d.ts.map +1 -0
  180. package/dist/src/storage/restoration-coordinator.js +181 -0
  181. package/dist/src/storage/restoration-coordinator.js.map +1 -0
  182. package/dist/src/storage/ring-selector.d.ts +92 -5
  183. package/dist/src/storage/ring-selector.d.ts.map +1 -1
  184. package/dist/src/storage/ring-selector.js +153 -51
  185. package/dist/src/storage/ring-selector.js.map +1 -1
  186. package/dist/src/storage/ring-shift-coordinator.d.ts +128 -0
  187. package/dist/src/storage/ring-shift-coordinator.d.ts.map +1 -0
  188. package/dist/src/storage/ring-shift-coordinator.js +196 -0
  189. package/dist/src/storage/ring-shift-coordinator.js.map +1 -0
  190. package/dist/src/storage/storage-monitor.d.ts +28 -0
  191. package/dist/src/storage/storage-monitor.d.ts.map +1 -1
  192. package/dist/src/storage/storage-monitor.js +42 -2
  193. package/dist/src/storage/storage-monitor.js.map +1 -1
  194. package/dist/src/storage/storage-repo.d.ts +19 -0
  195. package/dist/src/storage/storage-repo.d.ts.map +1 -1
  196. package/dist/src/storage/storage-repo.js +172 -22
  197. package/dist/src/storage/storage-repo.js.map +1 -1
  198. package/dist/src/sync/client.d.ts.map +1 -1
  199. package/dist/src/sync/client.js +5 -1
  200. package/dist/src/sync/client.js.map +1 -1
  201. package/dist/src/sync/service.d.ts.map +1 -1
  202. package/dist/src/sync/service.js +2 -1
  203. package/dist/src/sync/service.js.map +1 -1
  204. package/dist/src/testing/cohort-topic-mesh-harness.d.ts +28 -4
  205. package/dist/src/testing/cohort-topic-mesh-harness.d.ts.map +1 -1
  206. package/dist/src/testing/cohort-topic-mesh-harness.js +51 -10
  207. package/dist/src/testing/cohort-topic-mesh-harness.js.map +1 -1
  208. package/dist/src/testing/index.d.ts +1 -0
  209. package/dist/src/testing/index.d.ts.map +1 -1
  210. package/dist/src/testing/index.js +1 -0
  211. package/dist/src/testing/index.js.map +1 -1
  212. package/dist/src/testing/mesh-harness.d.ts.map +1 -1
  213. package/dist/src/testing/mesh-harness.js +15 -7
  214. package/dist/src/testing/mesh-harness.js.map +1 -1
  215. package/dist/src/testing/raw-storage-conformance.d.ts +24 -0
  216. package/dist/src/testing/raw-storage-conformance.d.ts.map +1 -0
  217. package/dist/src/testing/raw-storage-conformance.js +313 -0
  218. package/dist/src/testing/raw-storage-conformance.js.map +1 -0
  219. package/package.json +4 -4
  220. package/src/cluster/block-transfer-service.ts +4 -3
  221. package/src/cluster/block-transfer.ts +424 -265
  222. package/src/cluster/client.ts +3 -1
  223. package/src/cluster/cluster-repo.ts +481 -71
  224. package/src/cluster/peer-key-binding.ts +37 -0
  225. package/src/cluster/quorum-restore.ts +0 -0
  226. package/src/cluster/rebalance-monitor.ts +34 -3
  227. package/src/cluster/service.ts +7 -1
  228. package/src/cluster/spread-on-churn.ts +11 -1
  229. package/src/cluster/supermajority-coupling.ts +37 -0
  230. package/src/cohort-topic/cohort-gossip-driver.ts +96 -9
  231. package/src/cohort-topic/cohort-gossip-transport.ts +10 -0
  232. package/src/cohort-topic/host.ts +831 -105
  233. package/src/dispute/arbitrator-selection.ts +138 -28
  234. package/src/dispute/cascade.ts +8 -1
  235. package/src/dispute/client.ts +3 -2
  236. package/src/dispute/dispute-service.ts +94 -9
  237. package/src/dispute/index.ts +7 -1
  238. package/src/dispute/invalidation.ts +40 -2
  239. package/src/dispute/service.ts +7 -1
  240. package/src/index.ts +46 -43
  241. package/src/it-utility.ts +5 -13
  242. package/src/libp2p-key-network.ts +281 -18
  243. package/src/libp2p-node-base.ts +485 -79
  244. package/src/matchmaking/query-transport.ts +9 -0
  245. package/src/network/network-manager-service.ts +8 -2
  246. package/src/owned-block-seed.ts +40 -0
  247. package/src/protocol-client.ts +10 -3
  248. package/src/protocol-limits.ts +33 -0
  249. package/src/repo/client.ts +3 -0
  250. package/src/repo/cluster-coordinator.ts +145 -82
  251. package/src/repo/coordinator-repo.ts +96 -16
  252. package/src/repo/service.ts +7 -1
  253. package/src/reputation/types.ts +3 -0
  254. package/src/rn.ts +7 -1
  255. package/src/storage/arachnode-fret-adapter.ts +33 -2
  256. package/src/storage/arachnode-partition.ts +74 -0
  257. package/src/storage/block-storage.ts +169 -61
  258. package/src/storage/i-block-storage.ts +9 -0
  259. package/src/storage/i-raw-storage.ts +14 -0
  260. package/src/storage/kv-raw-storage.ts +135 -0
  261. package/src/storage/memory-storage.ts +25 -173
  262. package/src/storage/memory-store-driver.ts +157 -0
  263. package/src/storage/raw-store-codec.ts +42 -0
  264. package/src/storage/raw-store-driver.ts +80 -0
  265. package/src/storage/{restoration-coordinator-v2.ts → restoration-coordinator.ts} +43 -37
  266. package/src/storage/ring-selector.ts +317 -176
  267. package/src/storage/ring-shift-coordinator.ts +271 -0
  268. package/src/storage/storage-monitor.ts +70 -3
  269. package/src/storage/storage-repo.ts +710 -558
  270. package/src/sync/client.ts +5 -1
  271. package/src/sync/service.ts +2 -1
  272. package/src/testing/cohort-topic-mesh-harness.ts +61 -11
  273. package/src/testing/index.ts +1 -0
  274. package/src/testing/mesh-harness.ts +14 -6
  275. package/src/testing/raw-storage-conformance.ts +397 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ring-shift-coordinator.js","sourceRoot":"","sources":["../../../src/storage/ring-shift-coordinator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAKnC,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;AACvC,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAmDtC;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,oBAAoB;IAMd;IALD,eAAe,CAAS;IACzC,yFAAyF;IACjF,QAAQ,GAAG,KAAK,CAAC;IAEzB,YACkB,IAAmB,EACpC,SAA0B,EAAE;QADX,SAAI,GAAJ,IAAI,CAAe;QAGpC,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,CAAC,CAAC;IACpD,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,YAAY,CAAC,UAA6D;QAC/E,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;QACzD,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE,CAAC;QAC3D,IAAI,OAAO,EAAE,MAAM,KAAK,QAAQ,EAAE,CAAC;YAClC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;QACxD,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC;YACJ,OAAO,UAAU,CAAC,SAAS,KAAK,KAAK;gBACpC,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,OAAO,CAAC;gBACtD,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACxD,CAAC;gBAAS,CAAC;YACV,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACvB,CAAC;IACF,CAAC;IAED;;;;;;OAMG;IACH,gBAAgB;QACf,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE,CAAC;QACxD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACvC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;QAC9B,CAAC;QACD,mGAAmG;QACnG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CACrC,IAAI,CAAC,QAAQ;YACZ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;YACvH,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAChD,CAAC;QACF,GAAG,CAAC,qCAAqC,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;QACvF,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,kDAAkD;IAE1C,KAAK,CAAC,OAAO,CAAC,YAAoB,EAAE,OAAkC;QAC7E,MAAM,OAAO,GAAG,OAAO,EAAE,SAAS,IAAI,CAAC,CAAC;QAExC,yFAAyF;QACzF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QACpG,MAAM,UAAU,GAAkB;YACjC,GAAG,MAAM;YACT,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE;SAC/D,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACnD,GAAG,CAAC,gCAAgC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;QAE7D,yEAAyE;QACzE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAChF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACzD,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;YACjB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACvB,GAAG,CAAC,iDAAiD,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAChF,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;QACzE,CAAC;QAED,sGAAsG;QACtG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QACxF,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QACD,GAAG,CAAC,sCAAsC,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAChF,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjF,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,gBAAgB,CAAC,IAAc,EAAE,KAAa;QAC3D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,mCAAmC;QACzD,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE,EAAE,CAAC;YACnD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QAC3C,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACtD,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACpG,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;QACnE,CAAC;QACD,uFAAuF;QACvF,OAAO,SAAS,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAC9F,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,iBAAiB,CAC9B,YAAwC,EACxC,YAAwC;QAExC,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YACzD,IAAI,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC;gBACnF,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpB,CAAC;QACF,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,cAAc,CAAC,IAAc,EAAE,KAAa;QACzD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;QAC3C,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,sCAAsC;QACrF,KAAK,MAAM,OAAO,IAAI,IAAI,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YACzD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC1D,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;gBACzC,IAAI,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU;oBAAE,OAAO,KAAK,CAAC;gBAClD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBAC5D,OAAO,IAAI,KAAK,SAAS,IAAI,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IAED,kDAAkD;IAE1C,KAAK,CAAC,MAAM,CAAC,YAAoB,EAAE,OAAkC;QAC5E,MAAM,OAAO,GAAG,OAAO,EAAE,SAAS,IAAI,CAAC,CAAC;QACxC,6FAA6F;QAC7F,8FAA8F;QAC9F,oEAAoE;QACpE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QACpG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QACxF,GAAG,CAAC,gCAAgC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;QAC7D,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC;IAChE,CAAC;IAED,yBAAyB;IAEzB,wFAAwF;IAChF,QAAQ,CAAC,OAAkC;QAClD,IAAI,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;YACzF,OAAO;QACR,CAAC;QACD,6FAA6F;QAC7F,8FAA8F;QAC9F,6FAA6F;QAC7F,wFAAwF;QACxF,iGAAiG;QACjG,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE,CAAC;QACvD,IAAI,GAAG,EAAE,CAAC;YACT,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC1H,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC3C,CAAC;IACF,CAAC;IAED,kGAAkG;IAC1F,SAAS,CAAC,IAAmB;QACpC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;QAC1C,OAAO,IAAI,CAAC;IACb,CAAC;CACD"}
@@ -8,6 +8,22 @@ export interface StorageMonitorConfig {
8
8
  totalBytes?: number;
9
9
  usedBytes?: number;
10
10
  availableBytes?: number;
11
+ /**
12
+ * Lifetime (ms) of the memoized used-bytes scan. `getApproximateBytesUsed` is a full-store scan
13
+ * (LevelDB iterates every key+value, the fs adapter stats the whole tree), and ring selection
14
+ * calls `getCapacity` several times per operation, so the scan is memoized for this window.
15
+ * Default {@link DEFAULT_USED_BYTES_CACHE_TTL_MS} (60_000). `0` disables caching — every call
16
+ * scans (the pre-cache behavior; opt-out for tests). The cached value may lag reality by up to
17
+ * the TTL; that staleness is acceptable because the consumer (ring selection) is EWMA-smoothed,
18
+ * dead-banded, and gated by a 10-minute dwell — see `docs/repository.md`.
19
+ */
20
+ usedBytesCacheTtlMs?: number;
21
+ /**
22
+ * Injectable clock (Unix ms), used only for the used-bytes cache TTL. Defaults to `Date.now`;
23
+ * mirrors `RingSelector`'s injectable clock so TTL expiry is testable without sleeping on
24
+ * wall time.
25
+ */
26
+ now?: () => number;
11
27
  }
12
28
  /**
13
29
  * Monitors storage capacity for ring selection.
@@ -16,8 +32,20 @@ export interface StorageMonitorConfig {
16
32
  export declare class StorageMonitor {
17
33
  private readonly storage;
18
34
  private readonly config;
35
+ private readonly now;
36
+ /** Memoized used-bytes scan; undefined until the first scan resolves, then re-armed each miss. */
37
+ private usedBytesCache;
38
+ /** In-flight scan Promise so concurrent misses share one scan (single-flight). */
39
+ private inFlightScan;
19
40
  constructor(storage: IRawStorage, config?: StorageMonitorConfig);
20
41
  getCapacity(): Promise<StorageCapacity>;
42
+ /**
43
+ * Used-bytes with a short TTL cache + single-flight. Within the TTL a cached value is returned;
44
+ * on a cold/expired cache exactly one scan runs even under concurrent callers, and the result is
45
+ * memoized until `now() + ttl`. A rejected scan is neither cached nor left wedged in the
46
+ * single-flight slot, so the next call retries.
47
+ */
48
+ private getCachedUsedBytes;
21
49
  private estimateUsedSpace;
22
50
  }
23
51
  //# sourceMappingURL=storage-monitor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage-monitor.d.ts","sourceRoot":"","sources":["../../../src/storage/storage-monitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,WAAW,eAAe;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;GAGG;AACH,qBAAa,cAAc;IAEzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,OAAO,EAAE,WAAW,EACpB,MAAM,GAAE,oBAAyB;IAG7C,WAAW,IAAI,OAAO,CAAC,eAAe,CAAC;YAuB/B,iBAAiB;CAG/B"}
1
+ {"version":3,"file":"storage-monitor.d.ts","sourceRoot":"","sources":["../../../src/storage/storage-monitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,WAAW,eAAe;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CAClB;AAKD,MAAM,WAAW,oBAAoB;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;;;;;;OAQG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,qBAAa,cAAc;IAQzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IARxB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,kGAAkG;IAClG,OAAO,CAAC,cAAc,CAAmD;IACzE,kFAAkF;IAClF,OAAO,CAAC,YAAY,CAA8B;gBAGhC,OAAO,EAAE,WAAW,EACpB,MAAM,GAAE,oBAAyB;IAK7C,WAAW,IAAI,OAAO,CAAC,eAAe,CAAC;IAwB7C;;;;;OAKG;YACW,kBAAkB;YA+BlB,iBAAiB;CAG/B"}
@@ -1,3 +1,5 @@
1
+ /** Default lifetime (ms) of the memoized used-bytes scan. `0` disables caching. */
2
+ const DEFAULT_USED_BYTES_CACHE_TTL_MS = 60_000;
1
3
  /**
2
4
  * Monitors storage capacity for ring selection.
3
5
  * Provides estimates based on storage backend or supplied overrides.
@@ -5,9 +7,15 @@
5
7
  export class StorageMonitor {
6
8
  storage;
7
9
  config;
10
+ now;
11
+ /** Memoized used-bytes scan; undefined until the first scan resolves, then re-armed each miss. */
12
+ usedBytesCache;
13
+ /** In-flight scan Promise so concurrent misses share one scan (single-flight). */
14
+ inFlightScan;
8
15
  constructor(storage, config = {}) {
9
16
  this.storage = storage;
10
17
  this.config = config;
18
+ this.now = config.now ?? (() => Date.now());
11
19
  }
12
20
  async getCapacity() {
13
21
  const defaultTotal = 10 * 1024 * 1024 * 1024; // 10GB default
@@ -16,9 +24,10 @@ export class StorageMonitor {
16
24
  const availableOverride = this.config.availableBytes;
17
25
  // Only short-circuit the backend when used/available is explicitly supplied;
18
26
  // a bare `totalBytes` is just the disk-size hint and should still let the
19
- // backend report actual used bytes.
27
+ // backend report actual used bytes. The override path never scans, so the
28
+ // cache is bypassed entirely (nothing to cache, nothing to serve).
20
29
  const rawUsed = usedOverride
21
- ?? (availableOverride !== undefined ? total - availableOverride : await this.estimateUsedSpace());
30
+ ?? (availableOverride !== undefined ? total - availableOverride : await this.getCachedUsedBytes());
22
31
  const used = Math.min(total, Math.max(0, rawUsed));
23
32
  const available = availableOverride !== undefined
24
33
  ? Math.max(0, Math.min(total, availableOverride))
@@ -29,6 +38,37 @@ export class StorageMonitor {
29
38
  available
30
39
  };
31
40
  }
41
+ /**
42
+ * Used-bytes with a short TTL cache + single-flight. Within the TTL a cached value is returned;
43
+ * on a cold/expired cache exactly one scan runs even under concurrent callers, and the result is
44
+ * memoized until `now() + ttl`. A rejected scan is neither cached nor left wedged in the
45
+ * single-flight slot, so the next call retries.
46
+ */
47
+ async getCachedUsedBytes() {
48
+ const ttl = this.config.usedBytesCacheTtlMs ?? DEFAULT_USED_BYTES_CACHE_TTL_MS;
49
+ // Caching disabled: every call scans (the pre-cache behavior; opt-out for tests).
50
+ if (ttl <= 0) {
51
+ return this.estimateUsedSpace();
52
+ }
53
+ if (this.usedBytesCache !== undefined && this.now() < this.usedBytesCache.expiresAt) {
54
+ return this.usedBytesCache.value;
55
+ }
56
+ // Single-flight: concurrent misses share one scan instead of launching several.
57
+ if (this.inFlightScan !== undefined) {
58
+ return this.inFlightScan;
59
+ }
60
+ const scan = this.estimateUsedSpace()
61
+ .then((value) => {
62
+ this.usedBytesCache = { value, expiresAt: this.now() + ttl };
63
+ return value;
64
+ })
65
+ .finally(() => {
66
+ // Clear on both resolve and reject: a failed scan must not wedge the slot.
67
+ this.inFlightScan = undefined;
68
+ });
69
+ this.inFlightScan = scan;
70
+ return scan;
71
+ }
32
72
  async estimateUsedSpace() {
33
73
  return (await this.storage.getApproximateBytesUsed?.()) ?? 0;
34
74
  }
@@ -1 +1 @@
1
- {"version":3,"file":"storage-monitor.js","sourceRoot":"","sources":["../../../src/storage/storage-monitor.ts"],"names":[],"mappings":"AAcA;;;GAGG;AACH,MAAM,OAAO,cAAc;IAER;IACA;IAFlB,YACkB,OAAoB,EACpB,SAA+B,EAAE;QADjC,YAAO,GAAP,OAAO,CAAa;QACpB,WAAM,GAAN,MAAM,CAA2B;IAChD,CAAC;IAEJ,KAAK,CAAC,WAAW;QAChB,MAAM,YAAY,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,eAAe;QAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,YAAY,CAAC;QACrD,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;QAC3C,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;QAErD,6EAA6E;QAC7E,0EAA0E;QAC1E,oCAAoC;QACpC,MAAM,OAAO,GAAG,YAAY;eACxB,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,iBAAiB,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;QACnG,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,iBAAiB,KAAK,SAAS;YAChD,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;YACjD,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC;QAE7B,OAAO;YACN,KAAK;YACL,IAAI;YACJ,SAAS;SACT,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,iBAAiB;QAC9B,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAC9D,CAAC;CACD"}
1
+ {"version":3,"file":"storage-monitor.js","sourceRoot":"","sources":["../../../src/storage/storage-monitor.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,25 @@
1
1
  import type { IRepo, MessageOptions, BlockId, CommitRequest, CommitResult, GetBlockResults, PendRequest, PendResult, ActionBlocks, BlockGets, IBlock, ActionRev, PendValidationHook, CollectionId, IBlockChangeNotifier, CollectionChangeListener } from "@optimystic/db-core";
2
2
  import type { IBlockStorage } from "./i-block-storage.js";
3
3
  import type { IBlockReplicaStore } from "../cluster/block-transfer-service.js";
4
+ /**
5
+ * Single source of truth for the per-block commit latch key. Held by {@link StorageRepo.commit} and
6
+ * {@link StorageRepo.saveReplicatedBlock}, and — through an injected runner ({@link withBlockCommitLatch})
7
+ * — by the invalidation-apply path. Every out-of-band writer of a block's `meta.latest` must serialize
8
+ * on this key against a concurrent local commit on the same block; keeping all call sites on this helper
9
+ * is what prevents the key from drifting between them.
10
+ */
11
+ export declare const commitLatchKey: (blockId: BlockId) => string;
12
+ /**
13
+ * Runs `fn` while holding the per-block commit latch {@link commitLatchKey}. This is the capability the
14
+ * dispute module's `applyInvalidation` is handed (through its context) so its compensating
15
+ * `saveReplica`/`saveDeletion` read-modify-write of `meta.latest` is mutually exclusive with a concurrent
16
+ * {@link StorageRepo.commit} on the same block — otherwise an invalidation advancing `latest` outside
17
+ * that latch is invisible to commit's staleness guard and can be clobbered (a non-monotonic regression).
18
+ *
19
+ * Acquire/release is per call, so a caller holds at most one block latch at any instant and cannot
20
+ * deadlock against commit's sorted, up-front multi-latch acquisition.
21
+ */
22
+ export declare function withBlockCommitLatch<T>(blockId: BlockId, fn: () => Promise<T>): Promise<T>;
4
23
  export type StorageRepoOptions = {
5
24
  /** Optional hook to validate transactions in PendRequests */
6
25
  validatePend?: PendValidationHook;
@@ -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,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;IAuEhG;;;;;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;IAwHtF;;;;;;OAMG;IACG,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnD;;;;;;;;;;OAUG;IACG,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;YAgC/E,cAAc;CA0C5B"}
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"}
@@ -2,6 +2,33 @@ import { Latches, transformForBlockId, applyTransform, groupBy, concatTransform,
2
2
  import { asyncIteratorToArray } from "../it-utility.js";
3
3
  import { createLogger } from "../logger.js";
4
4
  const log = createLogger('storage-repo');
5
+ /**
6
+ * Single source of truth for the per-block commit latch key. Held by {@link StorageRepo.commit} and
7
+ * {@link StorageRepo.saveReplicatedBlock}, and — through an injected runner ({@link withBlockCommitLatch})
8
+ * — by the invalidation-apply path. Every out-of-band writer of a block's `meta.latest` must serialize
9
+ * on this key against a concurrent local commit on the same block; keeping all call sites on this helper
10
+ * is what prevents the key from drifting between them.
11
+ */
12
+ export const commitLatchKey = (blockId) => `StorageRepo.commit:${blockId}`;
13
+ /**
14
+ * Runs `fn` while holding the per-block commit latch {@link commitLatchKey}. This is the capability the
15
+ * dispute module's `applyInvalidation` is handed (through its context) so its compensating
16
+ * `saveReplica`/`saveDeletion` read-modify-write of `meta.latest` is mutually exclusive with a concurrent
17
+ * {@link StorageRepo.commit} on the same block — otherwise an invalidation advancing `latest` outside
18
+ * that latch is invisible to commit's staleness guard and can be clobbered (a non-monotonic regression).
19
+ *
20
+ * Acquire/release is per call, so a caller holds at most one block latch at any instant and cannot
21
+ * deadlock against commit's sorted, up-front multi-latch acquisition.
22
+ */
23
+ export async function withBlockCommitLatch(blockId, fn) {
24
+ const release = await Latches.acquire(commitLatchKey(blockId));
25
+ try {
26
+ return await fn();
27
+ }
28
+ finally {
29
+ release();
30
+ }
31
+ }
5
32
  export class StorageRepo {
6
33
  createBlockStorage;
7
34
  validatePend;
@@ -104,22 +131,54 @@ export class StorageRepo {
104
131
  const promotions = [];
105
132
  const results = await Promise.all(distinctBlockIds.map(async (blockId) => {
106
133
  const blockStorage = this.createBlockStorage(blockId);
107
- // Ensure that all outstanding transactions in the context are committed
134
+ // Ensure that all outstanding transactions in the context are committed.
135
+ // This promotes a landed-elsewhere pending via internalCommit, which mutates
136
+ // meta.latest — the same read-modify-write commit()/saveReplicatedBlock guard
137
+ // with the per-block commit latch. It MUST hold that latch too, or a promotion
138
+ // racing a concurrent commit on the block regresses latest non-monotonically /
139
+ // cross-writes a revision. Cheap unlatched pre-scan first so the common
140
+ // contextless read and no-pending read never pay for latch acquisition; the
141
+ // authoritative decision is re-made inside the latch.
108
142
  if (context) {
109
- const latest = await blockStorage.getLatest();
110
- const missing = latest
111
- ? context.committed.filter(c => c.rev > latest.rev)
143
+ const preLatest = await blockStorage.getLatest();
144
+ const preMissing = preLatest
145
+ ? context.committed.filter(c => c.rev > preLatest.rev)
112
146
  : context.committed;
113
- for (const { actionId, rev } of missing.sort((a, b) => a.rev - b.rev)) {
114
- const pending = await blockStorage.getPendingTransaction(actionId);
115
- if (pending) {
116
- const collectionId = await this.internalCommit(blockId, actionId, rev, blockStorage);
117
- if (collectionId !== undefined) {
118
- promotions.push({ collectionId, blockId, actionId, rev });
147
+ if (preMissing.length > 0) {
148
+ await withBlockCommitLatch(blockId, async () => {
149
+ // Re-read authoritative state under the latch: a concurrent commit may have
150
+ // promoted or superseded a pending between the unlatched pre-scan and here.
151
+ // Recompute which committed entries are still ahead of `latest` (drops the
152
+ // superseded, rev <= latest.rev) and re-fetch each pending inside the loop
153
+ // (skips the already-promoted, pending gone). This makes read-driven
154
+ // promotion idempotent under races, mirroring commit()'s alreadyDone/stale
155
+ // partitioning.
156
+ const latest = await blockStorage.getLatest();
157
+ const missing = latest
158
+ ? context.committed.filter(c => c.rev > latest.rev)
159
+ : context.committed;
160
+ // Sort a COPY: when `latest` is undefined, `missing` aliases the caller's
161
+ // `context.committed` array, and an in-place `.sort()` would reorder the shared
162
+ // 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 });
169
+ }
170
+ }
119
171
  }
120
- }
172
+ });
121
173
  }
122
174
  }
175
+ // NOTE: a Crash-D3 block (durably promoted + revision saved, but the setLatest lost so
176
+ // meta.latest is stale and the pending record is gone) reads as empty/stale here — a
177
+ // context-driven get skips promotion (pending gone) and a default getBlock() sees the
178
+ // stale latest. It is soft-wedged (stale), not hard-wedged: the next commit-retry for
179
+ // (actionId, rev) self-heals it via storage.recover() in commit(). Not repaired lazily on
180
+ // the read path because get() holds no commit latch; if stale reads on unwritten blocks
181
+ // ever become a problem, add a latched lazy recover() here.
123
182
  const blockRev = await blockStorage.getBlock(context?.rev);
124
183
  // Include pending action if requested — handled first so a pending-only
125
184
  // insert (no committed revision yet) can still be served by applying the
@@ -292,7 +351,7 @@ export class StorageRepo {
292
351
  try {
293
352
  // Acquire locks sequentially based on sorted IDs to prevent deadlocks
294
353
  for (const id of uniqueBlockIds) {
295
- const lockId = `StorageRepo.commit:${id}`;
354
+ const lockId = commitLatchKey(id);
296
355
  const release = await Latches.acquire(lockId);
297
356
  releases.push(release);
298
357
  }
@@ -345,19 +404,81 @@ export class StorageRepo {
345
404
  // Check for missing pending actions only on blocks that still need to commit.
346
405
  // Already-done blocks will have had their pending promoted, so skipping them here
347
406
  // is what makes the idempotent rollforward work.
407
+ //
408
+ // A toCommit block whose pending is absent is one of two states:
409
+ // - Crash-D3: the action was durably promoted and its revision saved, but the crash
410
+ // lost the setLatest, so meta.latest is still < request.rev and the pending record
411
+ // is gone. getTransaction(actionId) returns the promoted transform. Self-heal here
412
+ // via storage.recover() (redoes the lost setLatest, advancing latest to the highest
413
+ // contiguous promoted rev, >= request.rev). recover() is idempotent + monotonic, so
414
+ // calling it under the already-held commit latch is safe. Recovered blocks are then
415
+ // excluded from the internalCommit loop below — their pending is gone, so
416
+ // internalCommit would throw.
417
+ // - Genuine missing pend: the action was never promoted (getTransaction → undefined),
418
+ // so the pend is truly missing. Throw exactly as before.
419
+ // Crash-D2 never reaches this branch: its pending record is still present.
348
420
  const missingPends = [];
421
+ const recovered = new Set();
349
422
  for (const { blockId, storage } of toCommit) {
350
423
  const pendingAction = await storage.getPendingTransaction(request.actionId);
351
- if (!pendingAction) {
424
+ if (pendingAction) {
425
+ continue;
426
+ }
427
+ const promoted = await storage.getTransaction(request.actionId);
428
+ if (!promoted) {
429
+ missingPends.push({ blockId, actionId: request.actionId });
430
+ continue;
431
+ }
432
+ // Crash-D3 signature (pending absent + action durably promoted). Redo the lost setLatest.
433
+ const result = await storage.recover();
434
+ if (result.latest !== undefined && result.latest.rev >= request.rev) {
435
+ recovered.add(blockId);
436
+ }
437
+ else {
438
+ // Torn/partial state: recover() could not advance latest to request.rev (metadata
439
+ // absent, or a revision entry missing despite the promoted transaction). Fall back
440
+ // to treating the block as a genuine missing-pend error rather than silently succeeding.
352
441
  missingPends.push({ blockId, actionId: request.actionId });
353
442
  }
354
443
  }
444
+ // NOTE: if a batch ever held BOTH a recovered D3 block and a genuine missing-pend block,
445
+ // this throw fires after recover() already advanced the D3 block durably, so that block's
446
+ // change event is skipped (the retry then treats it as alreadyDone and never re-emits;
447
+ // durable state stays correct, only the emit is lost). Judged unreachable today: a single
448
+ // crash mid-internalCommit leaves exactly one D3 block, with the rest alreadyDone or
449
+ // pending-present — a never-pended block cannot coexist with it in one retry. If a path
450
+ // ever produces that mix, emit recovered blocks' events before throwing here.
355
451
  if (missingPends.length) {
356
452
  throw new Error(`Pending action ${request.actionId} not found for block(s): ${missingPends.map(p => p.blockId).join(', ')}`);
357
453
  }
454
+ // The original commit crashed before setLatest, so it also never emitted a change event
455
+ // for a recovered (Crash-D3) block. Now that recover() has committed it at request.rev,
456
+ // report its collection so downstream watchers wake — mirroring internalCommit. Resolve
457
+ // the collectionId from the now-materialized block; a delete materializes to a tombstone
458
+ // (getBlock → undefined), so fall back to the prior materialized block's header exactly as
459
+ // internalCommit does — otherwise a recovered delete would silently fail to wake watchers.
460
+ // Only when neither resolves (a delete-only block with no prior materialization) is the
461
+ // emit skipped, the same terminal fallback internalCommit uses.
462
+ for (const { blockId, storage } of toCommit) {
463
+ if (!recovered.has(blockId)) {
464
+ continue;
465
+ }
466
+ const collectionId = (await storage.getBlock(request.rev))?.block.header.collectionId
467
+ ?? (await storage.getBlock(request.rev - 1))?.block.header.collectionId;
468
+ if (collectionId !== undefined) {
469
+ const list = collectionBlocks.get(collectionId) ?? [];
470
+ list.push(blockId);
471
+ collectionBlocks.set(collectionId, list);
472
+ }
473
+ }
358
474
  // Commit the action for each block that still needs it.
359
475
  // This loop will execute atomically for all blocks due to the acquired locks.
476
+ // Recovered (Crash-D3) blocks are already committed at request.rev and their pending is
477
+ // gone, so skip them — internalCommit would throw on the missing pending record.
360
478
  for (const { blockId, storage } of toCommit) {
479
+ if (recovered.has(blockId)) {
480
+ continue;
481
+ }
361
482
  try {
362
483
  // internalCommit will throw if it encounters an issue
363
484
  const collectionId = await this.internalCommit(blockId, request.actionId, request.rev, storage);
@@ -397,7 +518,13 @@ export class StorageRepo {
397
518
  async recoverBlock(blockId) {
398
519
  log('recoverBlock blockId=%s', blockId);
399
520
  const storage = this.createBlockStorage(blockId);
400
- await storage.recover();
521
+ // Hold the per-block commit latch: recover() is a read-modify-write of meta.latest that
522
+ // blindly writes back the metadata object it read, so its "advance only" guard is TOCTOU —
523
+ // racing a concurrent commit()/saveReplicatedBlock that advanced latest in between would
524
+ // clobber it (a non-monotonic regression). Same latching invariant as every other
525
+ // latest-mutating site. commit() calls storage.recover() directly under its own held latch,
526
+ // so it never routes through here — no double-acquire / deadlock.
527
+ await withBlockCommitLatch(blockId, () => storage.recover());
401
528
  }
402
529
  /**
403
530
  * Persist a replica of a block received out-of-band (churn re-replication) into
@@ -413,7 +540,7 @@ export class StorageRepo {
413
540
  async saveReplicatedBlock(blockId, block, source) {
414
541
  log('saveReplicatedBlock blockId=%s rev=%s', blockId, source?.rev);
415
542
  const storage = this.createBlockStorage(blockId);
416
- const release = await Latches.acquire(`StorageRepo.commit:${blockId}`);
543
+ const release = await Latches.acquire(commitLatchKey(blockId));
417
544
  // Captured under the latch; emitted after release to match commit's ordering.
418
545
  let landed;
419
546
  try {
@@ -439,10 +566,11 @@ export class StorageRepo {
439
566
  }
440
567
  }
441
568
  async internalCommit(blockId, actionId, rev, storage) {
442
- // Note: This method is called within the locked critical section of commit()
443
- // So, operations like getPendingTransaction, getLatest, getBlock, saveMaterializedBlock,
444
- // saveRevision, promotePendingTransaction, setLatest are protected against
445
- // concurrent commits for the *same blockId*.
569
+ // Note: This method is called under the per-block commit latch by commit() (within its
570
+ // locked critical section) and by the read-driven promotion in get() (which now takes the
571
+ // same latch). So, operations like getPendingTransaction, getLatest, getBlock,
572
+ // saveMaterializedBlock, saveRevision, promotePendingTransaction, setLatest are protected
573
+ // against concurrent commits for the *same blockId*.
446
574
  const transform = await storage.getPendingTransaction(actionId);
447
575
  // No need to check if !transform here, as the caller (commit) already verified this.
448
576
  // If it's null here, it indicates a logic error or race condition bypassed the lock (unlikely).
@@ -467,6 +595,21 @@ export class StorageRepo {
467
595
  await storage.promotePendingTransaction(actionId);
468
596
  // Update latest revision *last*
469
597
  await storage.setLatest({ actionId, rev });
598
+ // Prune the now-superseded prior materialization (checkpoint retention). Runs LAST — after the
599
+ // new rev's materialization + revision + transform + setLatest are all durable — so no crash
600
+ // point can leave a rev unrecoverable: a crash BEFORE this leaves a redundant (harmless)
601
+ // materialization the next commit's prune reclaims; a crash AFTER is fully consistent. The prune
602
+ // only ever deletes a materialization reconstructible from the retained floor + transforms. Runs
603
+ // under the per-block commit latch already held here, so it serializes against concurrent commits.
604
+ // NOTE: prune targets ONLY the immediate prior. A crash between setLatest and this call leaves that
605
+ // one prior materialization un-pruned; since a later commit prunes ITS OWN prior (never the earlier
606
+ // leaked rev), that copy is NOT auto-reclaimed — a bounded (≤1 block-copy per crash), harmless leak
607
+ // (state stays consistent + reconstructible). If crash-before-prune leaks ever accumulate materially,
608
+ // add a bounded look-back (prune non-retained mats in [rev-checkpointInterval, rev)) here, or a
609
+ // periodic reconciliation sweep — do NOT reintroduce a per-read re-cache.
610
+ if (latest !== undefined) {
611
+ await storage.pruneSupersededMaterialization(latest);
612
+ }
470
613
  // Report the affected collection for change-event routing. For a delete the
471
614
  // materialized block is undefined, so fall back to the prior block's header.
472
615
  // Either may be absent only for a malformed/headerless block — return
@@ -474,16 +617,23 @@ export class StorageRepo {
474
617
  return newBlock?.header.collectionId ?? priorBlock?.header.collectionId;
475
618
  }
476
619
  }
477
- /** Converts list of missing actions per block into a list of missing actions across blocks. */
620
+ /**
621
+ * Converts list of missing actions per block into a list of missing actions across blocks.
622
+ *
623
+ * NOTE: relies on each (actionId, blockId) pair appearing at most once — one revision per action
624
+ * per block. If a block ever records two revisions under the same actionId, concatTransform's
625
+ * last-wins merge would silently drop the earlier revision's ops for that block; group by
626
+ * (actionId, rev) instead. See debt-concat-transform-overlapping-updates.
627
+ */
478
628
  function perBlockActionTransformsToPerAction(missing) {
479
629
  const missingFlat = missing.flatMap(({ blockId, transforms }) => transforms.map(transform => ({ blockId, transform })));
480
630
  const missingByActionId = groupBy(missingFlat, ({ transform }) => transform.actionId);
481
631
  return Object.entries(missingByActionId).map(([actionId, items]) => items.reduce((acc, { blockId, transform }) => {
482
- concatTransform(acc.transforms, blockId, transform.transform);
632
+ acc.transforms = concatTransform(acc.transforms, blockId, transform.transform);
483
633
  return acc;
484
634
  }, {
485
635
  actionId: actionId,
486
- rev: items[0].transform.rev, // Assumption: all missing actionIds share the same revision
636
+ rev: items[0].transform.rev, // Assumption: an action commits at one revision, so every block's entry for this actionId agrees. Distinct actionIds may still carry distinct revs.
487
637
  transforms: emptyTransforms()
488
638
  }));
489
639
  }
@@ -1 +1 @@
1
- {"version":3,"file":"storage-repo.js","sourceRoot":"","sources":["../../../src/storage/storage-repo.ts"],"names":[],"mappings":"AAOA,OAAO,EACN,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,OAAO,EAAE,eAAe,EAAE,eAAe,EACvF,qBAAqB,EAAE,uBAAuB,EAC9C,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAGxD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,GAAG,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;AAOzC,MAAM,OAAO,WAAW;IAQL;IAPD,YAAY,CAAsB;IACnD,6EAA6E;IAC5D,eAAe,GAAG,IAAI,GAAG,EAA+C,CAAC;IAC1F,oFAAoF;IACnE,kBAAkB,GAAG,IAAI,GAAG,EAA4B,CAAC;IAE1E,YACkB,kBAAuD,EACxE,OAA4B;QADX,uBAAkB,GAAlB,kBAAkB,CAAqC;QAGxE,IAAI,CAAC,YAAY,GAAG,OAAO,EAAE,YAAY,CAAC;IAC3C,CAAC;IAED;;;OAGG;IACH,kBAAkB,CAAC,YAA0B,EAAE,QAAkC;QAChF,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACjD,IAAI,CAAC,GAAG,EAAE,CAAC;YACV,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QAC7C,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClB,IAAI,YAAY,GAAG,KAAK,CAAC;QACzB,OAAO,GAAG,EAAE;YACX,IAAI,YAAY;gBAAE,OAAO;YACzB,YAAY,GAAG,IAAI,CAAC;YACpB,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACvD,IAAI,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACzB,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;oBACxB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAC3C,CAAC;YACF,CAAC;QACF,CAAC,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,qBAAqB,CAAC,QAAkC;QACvD,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,YAAY,GAAG,KAAK,CAAC;QACzB,OAAO,GAAG,EAAE;YACX,IAAI,YAAY;gBAAE,OAAO;YACzB,YAAY,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC,CAAC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACK,qBAAqB,CAAC,gBAA8C,EAAE,QAAkB,EAAE,GAAW,EAAE,MAAgB;QAC9H,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC,CAAC;QACrD,KAAK,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,IAAI,gBAAgB,EAAE,CAAC;YACzD,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACzD,IAAI,CAAC,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC1D,SAAS;YACV,CAAC;YACD,MAAM,KAAK,GAA0B,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;YACvF,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBACrC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC5C,CAAC;YACD,IAAI,WAAW,EAAE,CAAC;gBACjB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;YAC1D,CAAC;QACF,CAAC;IACF,CAAC;IAED,wHAAwH;IAChH,mBAAmB,CAAC,SAAwC,EAAE,KAA4B;QACjG,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9C,IAAI,CAAC;gBACJ,QAAQ,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,GAAG,CAAC,yDAAyD,EAAE,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;YACzF,CAAC;QACF,CAAC;IACF,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAa,EAAE,QAAyB;QACpE,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QACvD,GAAG,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAChD,2EAA2E;QAC3E,8EAA8E;QAC9E,2EAA2E;QAC3E,6EAA6E;QAC7E,wDAAwD;QACxD,MAAM,UAAU,GAAwF,EAAE,CAAC;QAC3G,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YACxE,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAEtD,wEAAwE;YACxE,IAAI,OAAO,EAAE,CAAC;gBACb,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,CAAC;gBAC9C,MAAM,OAAO,GAAG,MAAM;oBACrB,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;oBACnD,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;gBACrB,KAAK,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvE,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;oBACnE,IAAI,OAAO,EAAE,CAAC;wBACb,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;wBACrF,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;4BAChC,UAAU,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;wBAC3D,CAAC;oBACF,CAAC;gBACF,CAAC;YACF,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAE3D,wEAAwE;YACxE,yEAAyE;YACzE,iDAAiD;YACjD,IAAI,OAAO,EAAE,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACrC,MAAM,gBAAgB,GAAG,MAAM,YAAY,CAAC,qBAAqB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACpF,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACvB,MAAM,IAAI,KAAK,CAAC,kBAAkB,OAAO,CAAC,QAAQ,YAAY,CAAC,CAAC;gBACjE,CAAC;gBACD,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC;gBAChE,OAAO,CAAC,OAAO,EAAE;wBAChB,KAAK;wBACL,KAAK,EAAE;4BACN,MAAM,EAAE,MAAM,YAAY,CAAC,SAAS,EAAE;4BACtC,QAAQ,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;yBAC5B;qBACD,CAAC,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACf,OAAO,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,EAAoB,CAAC,CAAC;YACnD,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,YAAY,CAAC,uBAAuB,EAAE,CAAC,CAAC;YACpF,OAAO,CAAC,OAAO,EAAE;oBAChB,KAAK,EAAE,QAAQ,CAAC,KAAK;oBACrB,KAAK,EAAE;wBACN,MAAM,EAAE,MAAM,YAAY,CAAC,SAAS,EAAE;wBACtC,QAAQ;qBACR;iBACD,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC,CAAC;QAEJ,iFAAiF;QACjF,iFAAiF;QACjF,sDAAsD;QACtD,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAEhC,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAED;;;;;OAKG;IACK,cAAc,CAAC,UAA+F;QACrH,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO;QACR,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,GAAG,EAA+F,CAAC;QACtH,KAAK,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,UAAU,EAAE,CAAC;YACnE,MAAM,GAAG,GAAG,GAAG,QAAQ,IAAI,GAAG,EAAE,CAAC;YACjC,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACZ,KAAK,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,gBAAgB,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;gBACvD,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACxB,CAAC;YACD,MAAM,IAAI,GAAG,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;YAC5D,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnB,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAChD,CAAC;QACD,KAAK,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,gBAAgB,EAAE,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YACnE,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC7D,CAAC;IACF,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAoB,EAAE,QAAyB;QACzD,oEAAoE;QACpE,IAAI,IAAI,CAAC,YAAY,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YACxE,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;YAC9F,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;gBAC7B,OAAO;oBACN,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,gBAAgB,CAAC,MAAM,IAAI,+BAA+B;iBAClE,CAAC;YACH,CAAC;QACF,CAAC;QAED,MAAM,QAAQ,GAAG,qBAAqB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC3D,GAAG,CAAC,qCAAqC,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3F,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,MAAM,OAAO,GAAuB,EAAE,CAAC;QAEvC,yEAAyE;QACzE,4EAA4E;QAC5E,gFAAgF;QAChF,0EAA0E;QAC1E,gFAAgF;QAChF,0EAA0E;QAC1E,2CAA2C;QAC3C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAChC,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YACtD,MAAM,UAAU,GAAG,mBAAmB,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAEpE,mCAAmC;YACnC,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,YAAY,CAAC,uBAAuB,EAAE,CAAC,CAAC;YACnF,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;YAEnE,mCAAmC;YACnC,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;gBACpD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,CAAC;gBAC9C,IAAI,MAAM,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC;oBAChD,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAAC,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;oBACxG,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;wBACpC,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;wBACxE,IAAI,CAAC,SAAS,EAAE,CAAC;4BAChB,MAAM,IAAI,KAAK,CAAC,kBAAkB,SAAS,CAAC,QAAQ,cAAc,OAAO,EAAE,CAAC,CAAC;wBAC9E,CAAC;wBACD,OAAO,CAAC,IAAI,CAAC;4BACZ,QAAQ,EAAE,SAAS,CAAC,QAAQ;4BAC5B,GAAG,EAAE,SAAS,CAAC,GAAG;4BAClB,UAAU,EAAE,uBAAuB,CAAC,SAAS,EAAE,OAAO,CAAC;yBACvD,CAAC,CAAC;oBACJ,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,GAAG,CAAC,mCAAmC,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YAC3E,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,OAAO;aACP,CAAC;QACH,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC,CAAC,0BAA0B;gBACvD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;YAC9C,CAAC;iBAAM,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC,CAAC,mCAAmC;gBACvE,OAAO;oBACN,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAC,MAAM,EAAC,EAAE;wBACtD,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;wBAC7D,OAAO;4BACN,OAAO,EAAE,MAAM,CAAC,OAAO;4BACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;4BACzB,SAAS,EAAE,CAAC,MAAM,YAAY,CAAC,qBAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;mCAClE,CAAC,MAAM,YAAY,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAE,CAAC,gEAAgE;yBAC1H,CAAA;oBACF,CAAC,CAAC,CAAC;iBACH,CAAC;YACH,CAAC;QACF,CAAC;QAGD,oDAAoD;QACpD,oFAAoF;QACpF,+EAA+E;QAC/E,0CAA0C;QAC1C,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YACxC,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YACtD,MAAM,cAAc,GAAG,mBAAmB,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACxE,OAAO,YAAY,CAAC,sBAAsB,CAAC,OAAO,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAC9E,CAAC,CAAC,CAAC,CAAC;QAEJ,OAAO;YACN,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,QAAQ;YACjB,QAAQ;SACO,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,SAAuB,EAAE,QAAyB;QAC9D,GAAG,CAAC,gCAAgC,EAAE,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrF,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YAClD,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YACtD,OAAO,YAAY,CAAC,wBAAwB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAsB,EAAE,QAAyB;QAC7D,GAAG,CAAC,uCAAuC,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrG,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACpE,MAAM,QAAQ,GAAmB,EAAE,CAAC;QACpC,2EAA2E;QAC3E,gFAAgF;QAChF,gFAAgF;QAChF,sEAAsE;QACtE,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA2B,CAAC;QAC5D,8EAA8E;QAC9E,iFAAiF;QACjF,IAAI,OAAuC,CAAC;QAE5C,IAAI,CAAC;YACJ,sEAAsE;YACtE,KAAK,MAAM,EAAE,IAAI,cAAc,EAAE,CAAC;gBACjC,MAAM,MAAM,GAAG,sBAAsB,EAAE,EAAE,CAAC;gBAC1C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC9C,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxB,CAAC;YAED,oCAAoC;YAEpC,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACtD,OAAO;gBACP,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;aACzC,CAAC,CAAC,CAAC;YAEJ,yBAAyB;YACzB,sFAAsF;YACtF,kFAAkF;YAClF,kFAAkF;YAClF,kEAAkE;YAClE,gGAAgG;YAChG,gFAAgF;YAChF,MAAM,QAAQ,GAAmD,EAAE,CAAC;YACpE,MAAM,aAAa,GAA0D,EAAE,CAAC;YAChF,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;gBACnC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;gBACnC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;gBACzC,IAAI,MAAM,IAAI,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;oBACzC,IAAI,MAAM,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;wBACxE,uFAAuF;wBACvF,SAAS;oBACV,CAAC;oBACD,MAAM,UAAU,GAAsB,EAAE,CAAC;oBACzC,IAAI,KAAK,EAAE,MAAM,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC9E,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;wBACnE,IAAI,CAAC,SAAS,EAAE,CAAC;4BAChB,MAAM,IAAI,KAAK,CAAC,kBAAkB,SAAS,CAAC,QAAQ,cAAc,OAAO,EAAE,CAAC,CAAC;wBAC9E,CAAC;wBACD,UAAU,CAAC,IAAI,CAAC;4BACf,QAAQ,EAAE,SAAS,CAAC,QAAQ;4BAC5B,GAAG,EAAE,SAAS,CAAC,GAAG;4BAClB,SAAS;yBACT,CAAC,CAAC;oBACJ,CAAC;oBACD,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,iFAAiF;oBAC9H,SAAS;gBACV,CAAC;gBACD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;YAED,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;gBAC1B,GAAG,CAAC,oCAAoC,EAAE,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;gBAClF,OAAO;oBACN,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,mCAAmC,CAAC,aAAa,CAAC;iBAC3D,CAAC;YACH,CAAC;YAED,8EAA8E;YAC9E,kFAAkF;YAClF,iDAAiD;YACjD,MAAM,YAAY,GAA+C,EAAE,CAAC;YACpE,KAAK,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,QAAQ,EAAE,CAAC;gBAC7C,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,qBAAqB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC5E,IAAI,CAAC,aAAa,EAAE,CAAC;oBACpB,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC5D,CAAC;YACF,CAAC;YAED,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,kBAAkB,OAAO,CAAC,QAAQ,4BAA4B,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC9H,CAAC;YAED,wDAAwD;YACxD,8EAA8E;YAC9E,KAAK,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,QAAQ,EAAE,CAAC;gBAC7C,IAAI,CAAC;oBACJ,sDAAsD;oBACtD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;oBAChG,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;wBAChC,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;wBACtD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;wBACnB,gBAAgB,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;oBAC1C,CAAC;gBACF,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACd,uEAAuE;oBACvE,qEAAqE;oBACrE,qEAAqE;oBACrE,uEAAuE;oBACvE,OAAO,GAAG,EAAE,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B,EAAE,CAAC;oBACzF,MAAM;gBACP,CAAC;YACF,CAAC;QACF,CAAC;gBACO,CAAC;YACR,gDAAgD;YAChD,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QAClD,CAAC;QAED,4EAA4E;QAC5E,6EAA6E;QAC7E,8CAA8C;QAC9C,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAE5F,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACjF,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,YAAY,CAAC,OAAgB;QAClC,GAAG,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IACzB,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,mBAAmB,CAAC,OAAgB,EAAE,KAAa,EAAE,MAAkB;QAC5E,GAAG,CAAC,uCAAuC,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,sBAAsB,OAAO,EAAE,CAAC,CAAC;QACvE,8EAA8E;QAC9E,IAAI,MAAmF,CAAC;QACxF,IAAI,CAAC;YACJ,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;YAC9C,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC3D,sFAAsF;YACtF,sGAAsG;YACtG,MAAM,QAAQ,GAAG,WAAW,KAAK,SAAS,IAAI,SAAS,CAAC,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC;YAC9E,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC;YAChD,IAAI,QAAQ,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;gBAC5C,MAAM,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,CAAC;YAC7E,CAAC;QACF,CAAC;gBAAS,CAAC;YACV,OAAO,EAAE,CAAC;QACX,CAAC;QACD,wFAAwF;QACxF,qFAAqF;QACrF,0FAA0F;QAC1F,mBAAmB;QACnB,IAAI,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,qBAAqB,CACzB,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAC3C,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,GAAG,CACV,CAAC;QACH,CAAC;IACF,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,OAAgB,EAAE,QAAkB,EAAE,GAAW,EAAE,OAAsB;QACrG,6EAA6E;QAC7E,yFAAyF;QACzF,2EAA2E;QAC3E,6CAA6C;QAE7C,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QAChE,qFAAqF;QACrF,gGAAgG;QAChG,IAAI,CAAC,SAAS,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,qCAAqC,QAAQ,0BAA0B,OAAO,2BAA2B,CAAC,CAAC;QAC5H,CAAC;QAED,4CAA4C;QAC5C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;QACzC,MAAM,UAAU,GAAG,MAAM;YACxB,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK;YAC7C,CAAC,CAAC,SAAS,CAAC;QAEb,8CAA8C;QAC9C,oEAAoE;QACpE,MAAM,QAAQ,GAAG,cAAc,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAEvD,IAAI,QAAQ,EAAE,CAAC;YACd,MAAM,OAAO,CAAC,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACzD,CAAC;QAED,4DAA4D;QAC5D,gEAAgE;QAChE,oFAAoF;QACpF,MAAM,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC1C,MAAM,OAAO,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;QAElD,gCAAgC;QAChC,MAAM,OAAO,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QAE3C,4EAA4E;QAC5E,6EAA6E;QAC7E,sEAAsE;QACtE,uEAAuE;QACvE,OAAO,QAAQ,EAAE,MAAM,CAAC,YAAY,IAAI,UAAU,EAAE,MAAM,CAAC,YAAY,CAAC;IACzE,CAAC;CACD;AAED,+FAA+F;AAC/F,SAAS,mCAAmC,CAAC,OAA+D;IAC3G,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,CAC/D,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CACrD,CAAC;IACF,MAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACtF,OAAO,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,CAClE,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE;QAC5C,eAAe,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;QAC9D,OAAO,GAAG,CAAC;IACZ,CAAC,EAAE;QACF,QAAQ,EAAE,QAAoB;QAC9B,GAAG,EAAE,KAAK,CAAC,CAAC,CAAE,CAAC,SAAS,CAAC,GAAG,EAAE,4DAA4D;QAC1F,UAAU,EAAE,eAAe,EAAE;KAC7B,CAAC,CACF,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"storage-repo.js","sourceRoot":"","sources":["../../../src/storage/storage-repo.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/sync/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAqB,KAAK,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AACvF,OAAO,EAA2B,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAEtF;;;;;GAKG;AACH,qBAAa,UAAW,SAAQ,cAAc;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAGjC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,YAAY,EACzB,cAAc,GAAE,MAAW;IAM5B;;;;;;;;OAQG;IACG,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC;IAI7F;;OAEG;IACH,WAAW,IAAI,MAAM;CAGrB"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/sync/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAqB,KAAK,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AACvF,OAAO,EAA2B,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGtF;;;;;GAKG;AACH,qBAAa,UAAW,SAAQ,cAAc;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAGjC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,YAAY,EACzB,cAAc,GAAE,MAAW;IAM5B;;;;;;;;OAQG;IACG,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC;IAO7F;;OAEG;IACH,WAAW,IAAI,MAAM;CAGrB"}
@@ -1,6 +1,7 @@
1
1
  import { ProtocolClient } from '../protocol-client.js';
2
2
  import { buildSyncProtocol } from './protocol.js';
3
3
  import { withRpcDeadlineDefaults } from '../rpc-deadline.js';
4
+ import { MAX_BLOCK_MESSAGE_BYTES } from '../protocol-limits.js';
4
5
  /**
5
6
  * Client for sending sync requests to remote peers.
6
7
  *
@@ -23,7 +24,10 @@ export class SyncClient extends ProtocolClient {
23
24
  * @throws Error if request fails or times out
24
25
  */
25
26
  async requestBlock(request, options) {
26
- return await this.processMessage(request, this.protocol, withRpcDeadlineDefaults(options));
27
+ // Asymmetry: the *request* the server reads is a tiny SyncRequest (control cap
28
+ // on the server side), but the *response* read here is a BlockArchive carrying
29
+ // block data → block cap.
30
+ return await this.processMessage(request, this.protocol, { ...withRpcDeadlineDefaults(options), maxDataLength: MAX_BLOCK_MESSAGE_BYTES });
27
31
  }
28
32
  /**
29
33
  * Get the protocol string used by this client.
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/sync/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAuC,MAAM,eAAe,CAAC;AACvF,OAAO,EAAE,uBAAuB,EAA2B,MAAM,oBAAoB,CAAC;AAEtF;;;;;GAKG;AACH,MAAM,OAAO,UAAW,SAAQ,cAAc;IAC5B,QAAQ,CAAS;IAElC,YACC,MAAc,EACd,WAAyB,EACzB,iBAAyB,EAAE;QAE3B,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAC;IACnD,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,YAAY,CAAC,OAAoB,EAAE,OAA4B;QACpE,OAAO,MAAM,IAAI,CAAC,cAAc,CAAe,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1G,CAAC;IAED;;OAEG;IACH,WAAW;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;CACD"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/sync/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAuC,MAAM,eAAe,CAAC;AACvF,OAAO,EAAE,uBAAuB,EAA2B,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE;;;;;GAKG;AACH,MAAM,OAAO,UAAW,SAAQ,cAAc;IAC5B,QAAQ,CAAS;IAElC,YACC,MAAc,EACd,WAAyB,EACzB,iBAAyB,EAAE;QAE3B,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAC;IACnD,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,YAAY,CAAC,OAAoB,EAAE,OAA4B;QACpE,+EAA+E;QAC/E,+EAA+E;QAC/E,0BAA0B;QAC1B,OAAO,MAAM,IAAI,CAAC,cAAc,CAAe,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,GAAG,uBAAuB,CAAC,OAAO,CAAC,EAAE,aAAa,EAAE,uBAAuB,EAAE,CAAC,CAAC;IACzJ,CAAC;IAED;;OAEG;IACH,WAAW;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;CACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/sync/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAOjD,MAAM,WAAW,eAAe;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACrC,MAAM,EAAE,eAAe,CAAC;IACxB,SAAS,EAAE;QAAE,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC;IACtG,IAAI,EAAE,KAAK,CAAC;CACZ;AAID;;;;;;;;;GASG;AACH,qBAAa,WAAY,YAAW,SAAS;IAC5C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6F;gBAGtH,UAAU,EAAE,qBAAqB,EACjC,IAAI,GAAE,eAAoB;IAQrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAStB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B;;;;;OAKG;IACH;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IA0DzB;;;;;;;;OAQG;YACW,YAAY;CA6C1B;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,OAAM,eAAoB,MACpD,YAAY,qBAAqB,gBAAsC,CAAC"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/sync/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAQjD,MAAM,WAAW,eAAe;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACrC,MAAM,EAAE,eAAe,CAAC;IACxB,SAAS,EAAE;QAAE,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC;IACtG,IAAI,EAAE,KAAK,CAAC;CACZ;AAID;;;;;;;;;GASG;AACH,qBAAa,WAAY,YAAW,SAAS;IAC5C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6F;gBAGtH,UAAU,EAAE,qBAAqB,EACjC,IAAI,GAAE,eAAoB;IAQrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAStB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B;;;;;OAKG;IACH;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IA0DzB;;;;;;;;OAQG;YACW,YAAY;CA6C1B;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,OAAM,eAAoB,MACpD,YAAY,qBAAqB,gBAAsC,CAAC"}
@@ -2,6 +2,7 @@ import { buildSyncProtocol } from './protocol.js';
2
2
  import { pipe } from 'it-pipe';
3
3
  import { toString as u8ToString } from 'uint8arrays/to-string';
4
4
  import * as lp from 'it-length-prefixed';
5
+ import { MAX_CONTROL_MESSAGE_BYTES } from '../protocol-limits.js';
5
6
  /**
6
7
  * Service for handling incoming sync requests from other cluster peers.
7
8
  *
@@ -70,7 +71,7 @@ export class SyncService {
70
71
  // Use the same streaming pipeline pattern as the repo service.
71
72
  // The registrar handler receives the stream (or data object) directly.
72
73
  const actualStream = stream.stream ?? stream;
73
- const responses = pipe(actualStream, (source) => lp.decode(source), processStream, (source) => lp.encode(source));
74
+ const responses = pipe(actualStream, (source) => lp.decode(source, { maxDataLength: MAX_CONTROL_MESSAGE_BYTES }), processStream, (source) => lp.encode(source));
74
75
  for await (const chunk of responses) {
75
76
  actualStream.send(chunk);
76
77
  }