@optimystic/db-p2p 0.14.0 → 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
package/dist/src/rn.d.ts CHANGED
@@ -7,12 +7,15 @@ export * from './repo/cluster-coordinator.js';
7
7
  export * from './repo/coordinator-repo.js';
8
8
  export * from './repo/service.js';
9
9
  export * from './storage/block-storage.js';
10
+ export * from './storage/raw-store-driver.js';
11
+ export * from './storage/kv-raw-storage.js';
12
+ export * from './storage/memory-store-driver.js';
10
13
  export * from './storage/memory-storage.js';
11
14
  export * from './storage/i-block-storage.js';
12
15
  export * from './storage/i-raw-storage.js';
13
16
  export * from './storage/struct.js';
14
17
  export * from './storage/storage-repo.js';
15
- export * from './storage/restoration-coordinator-v2.js';
18
+ export * from './storage/restoration-coordinator.js';
16
19
  export * from './storage/ring-selector.js';
17
20
  export * from './storage/storage-monitor.js';
18
21
  export * from './storage/arachnode-fret-adapter.js';
@@ -26,4 +29,5 @@ export * from './routing/responsibility.js';
26
29
  export * from './routing/libp2p-known-peers.js';
27
30
  export * from './network/network-manager-service.js';
28
31
  export * from './network/get-network-manager.js';
32
+ export * from './cohort-topic/peer-sig.js';
29
33
  //# sourceMappingURL=rn.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rn.d.ts","sourceRoot":"","sources":["../../src/rn.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yCAAyC,CAAC;AACxD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qCAAqC,CAAC;AACpD,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AACrD,cAAc,kCAAkC,CAAC"}
1
+ {"version":3,"file":"rn.d.ts","sourceRoot":"","sources":["../../src/rn.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC;AACjD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sCAAsC,CAAC;AACrD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qCAAqC,CAAC;AACpD,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AACrD,cAAc,kCAAkC,CAAC;AAGjD,cAAc,4BAA4B,CAAC"}
package/dist/src/rn.js CHANGED
@@ -7,12 +7,15 @@ export * from './repo/cluster-coordinator.js';
7
7
  export * from './repo/coordinator-repo.js';
8
8
  export * from './repo/service.js';
9
9
  export * from './storage/block-storage.js';
10
+ export * from './storage/raw-store-driver.js';
11
+ export * from './storage/kv-raw-storage.js';
12
+ export * from './storage/memory-store-driver.js';
10
13
  export * from './storage/memory-storage.js';
11
14
  export * from './storage/i-block-storage.js';
12
15
  export * from './storage/i-raw-storage.js';
13
16
  export * from './storage/struct.js';
14
17
  export * from './storage/storage-repo.js';
15
- export * from './storage/restoration-coordinator-v2.js';
18
+ export * from './storage/restoration-coordinator.js';
16
19
  export * from './storage/ring-selector.js';
17
20
  export * from './storage/storage-monitor.js';
18
21
  export * from './storage/arachnode-fret-adapter.js';
@@ -26,4 +29,7 @@ export * from './routing/responsibility.js';
26
29
  export * from './routing/libp2p-known-peers.js';
27
30
  export * from './network/network-manager-service.js';
28
31
  export * from './network/get-network-manager.js';
32
+ // Browser-safe peer signing seam. The rest of ./cohort-topic pulls node-heavy host.js,
33
+ // so only peer-sig (@noble/curves + peer-id) is surfaced through the RN/browser entry.
34
+ export * from './cohort-topic/peer-sig.js';
29
35
  //# sourceMappingURL=rn.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rn.js","sourceRoot":"","sources":["../../src/rn.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yCAAyC,CAAC;AACxD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qCAAqC,CAAC;AACpD,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AACrD,cAAc,kCAAkC,CAAC"}
1
+ {"version":3,"file":"rn.js","sourceRoot":"","sources":["../../src/rn.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC;AACjD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sCAAsC,CAAC;AACrD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qCAAqC,CAAC;AACpD,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AACrD,cAAc,kCAAkC,CAAC;AACjD,uFAAuF;AACvF,uFAAuF;AACvF,cAAc,4BAA4B,CAAC"}
@@ -19,6 +19,23 @@ export interface ArachnodeInfo {
19
19
  };
20
20
  /** Ring membership status */
21
21
  status: 'joining' | 'active' | 'moving' | 'leaving';
22
+ /**
23
+ * The ring/partition this node is moving *from*, present only while `status === 'moving'`.
24
+ *
25
+ * During a ring shift the node advertises its **target** `ringDepth`/`partition` (Phase A) but
26
+ * keeps serving its old range until it has confirmed the shed range is replicated elsewhere
27
+ * (Phase B) and releases it (Phase C). `moveFrom` records that old range so peers can treat a
28
+ * `moving` node as *still responsible for its old range* (fail-toward-old-holder), and so a
29
+ * crash between advertise and release is recoverable. Cleared on release/rollback (→ `active`).
30
+ * See `docs/arachnode-ring-handoff.md` § Part 2 & Part 3.
31
+ */
32
+ moveFrom?: {
33
+ ringDepth: number;
34
+ partition?: {
35
+ prefixBits: number;
36
+ prefixValue: number;
37
+ };
38
+ };
22
39
  }
23
40
  /**
24
41
  * Adapter that provides Arachnode-specific methods on top of FRET's generic metadata.
@@ -27,8 +44,20 @@ export interface ArachnodeInfo {
27
44
  */
28
45
  export declare class ArachnodeFretAdapter {
29
46
  private readonly fret;
47
+ /**
48
+ * This node's own peer id string. When provided, {@link getMyArachnodeInfo} uses it
49
+ * directly instead of reaching into the concrete FretService impl's private `.node` —
50
+ * {@link FretService} (the public interface) exposes no self-peer accessor.
51
+ */
52
+ private readonly selfPeerId?;
30
53
  private static readonly ARACHNODE_KEY;
31
- constructor(fret: FretService);
54
+ constructor(fret: FretService,
55
+ /**
56
+ * This node's own peer id string. When provided, {@link getMyArachnodeInfo} uses it
57
+ * directly instead of reaching into the concrete FretService impl's private `.node` —
58
+ * {@link FretService} (the public interface) exposes no self-peer accessor.
59
+ */
60
+ selfPeerId?: string | undefined);
32
61
  /**
33
62
  * Set this node's Arachnode ring membership.
34
63
  */
@@ -1 +1 @@
1
- {"version":3,"file":"arachnode-fret-adapter.d.ts","sourceRoot":"","sources":["../../../src/storage/arachnode-fret-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC7B,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAElB,8DAA8D;IAC9D,SAAS,CAAC,EAAE;QACX,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;KACpB,CAAC;IAEF,gCAAgC;IAChC,QAAQ,EAAE;QACT,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KAClB,CAAC;IAEF,6BAA6B;IAC7B,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;CACpD;AAED;;;;GAIG;AACH,qBAAa,oBAAoB;IAGpB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAe;gBAEvB,IAAI,EAAE,WAAW;IAE9C;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAM3C;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAK3D;;OAEG;IACH,kBAAkB,IAAI,aAAa,GAAG,SAAS;IAM/C;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAU5C;;OAEG;IACH,aAAa,IAAI,MAAM,EAAE;IAczB;;OAEG;IACH,YAAY,IAAI,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAwBpF;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI;IAOhD;;OAEG;IACH,OAAO,IAAI,WAAW;CAGtB"}
1
+ {"version":3,"file":"arachnode-fret-adapter.d.ts","sourceRoot":"","sources":["../../../src/storage/arachnode-fret-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC7B,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAElB,8DAA8D;IAC9D,SAAS,CAAC,EAAE;QACX,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;KACpB,CAAC;IAEF,gCAAgC;IAChC,QAAQ,EAAE;QACT,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KAClB,CAAC;IAEF,6BAA6B;IAC7B,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAEpD;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE;QACV,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE;YACX,UAAU,EAAE,MAAM,CAAC;YACnB,WAAW,EAAE,MAAM,CAAC;SACpB,CAAC;KACF,CAAC;CACF;AAED;;;;GAIG;AACH,qBAAa,oBAAoB;IAI/B,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;IAT7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAe;gBAGlC,IAAI,EAAE,WAAW;IAClC;;;;OAIG;IACc,UAAU,CAAC,EAAE,MAAM,YAAA;IAGrC;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAM3C;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAK3D;;OAEG;IACH,kBAAkB,IAAI,aAAa,GAAG,SAAS;IAW/C;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAU5C;;OAEG;IACH,aAAa,IAAI,MAAM,EAAE;IAczB;;OAEG;IACH,YAAY,IAAI,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAwBpF;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI;IAOhD;;OAEG;IACH,OAAO,IAAI,WAAW;CAGtB"}
@@ -5,9 +5,17 @@
5
5
  */
6
6
  export class ArachnodeFretAdapter {
7
7
  fret;
8
+ selfPeerId;
8
9
  static ARACHNODE_KEY = 'arachnode';
9
- constructor(fret) {
10
+ constructor(fret,
11
+ /**
12
+ * This node's own peer id string. When provided, {@link getMyArachnodeInfo} uses it
13
+ * directly instead of reaching into the concrete FretService impl's private `.node` —
14
+ * {@link FretService} (the public interface) exposes no self-peer accessor.
15
+ */
16
+ selfPeerId) {
10
17
  this.fret = fret;
18
+ this.selfPeerId = selfPeerId;
11
19
  }
12
20
  /**
13
21
  * Set this node's Arachnode ring membership.
@@ -28,7 +36,12 @@ export class ArachnodeFretAdapter {
28
36
  * Get my own Arachnode info.
29
37
  */
30
38
  getMyArachnodeInfo() {
31
- const myPeerId = this.fret.node?.peerId?.toString();
39
+ // Prefer the injected self peer id. Fall back to the concrete Libp2pFretService's private
40
+ // `.node.peerId` only when no id was injected — this cast is load-bearing (it depends on the
41
+ // concrete impl's shape, not the public FretService interface) and silently yields undefined
42
+ // for any impl lacking `.node`, so injection is the intended path.
43
+ const myPeerId = this.selfPeerId
44
+ ?? this.fret.node?.peerId?.toString();
32
45
  if (!myPeerId)
33
46
  return undefined;
34
47
  return this.getArachnodeInfo(myPeerId);
@@ -1 +1 @@
1
- {"version":3,"file":"arachnode-fret-adapter.js","sourceRoot":"","sources":["../../../src/storage/arachnode-fret-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"arachnode-fret-adapter.js","sourceRoot":"","sources":["../../../src/storage/arachnode-fret-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { ArachnodeInfo } from './arachnode-fret-adapter.js';
2
+ /**
3
+ * An Arachnode ring partition: the first `prefixBits` bits of a hashed coordinate must equal
4
+ * `prefixValue` for a key to fall inside it. Structurally identical to `ArachnodeInfo.partition`.
5
+ */
6
+ export interface RingPartition {
7
+ prefixBits: number;
8
+ prefixValue: number;
9
+ }
10
+ /**
11
+ * Extract the first `bits` bits of a hashed coordinate as an integer (MSB-first).
12
+ *
13
+ * The single source of truth for the block/peer prefix comparison Arachnode uses to decide
14
+ * responsibility. `RingSelector.calculatePartition` (peer side) and `RestorationCoordinator`
15
+ * (block side) both route through this, so a peer's advertised partition and a block's derived
16
+ * prefix are computed the same way — otherwise "this peer owns this block's slice" would silently
17
+ * stop meaning what it says.
18
+ */
19
+ export declare function extractPrefix(coord: Uint8Array, bits: number): number;
20
+ /**
21
+ * Does `partition` cover the key at `coord`? Ring 0 (an undefined partition) covers the whole
22
+ * keyspace, so it always returns true.
23
+ */
24
+ export declare function partitionCovers(partition: RingPartition | undefined, coord: Uint8Array): boolean;
25
+ /**
26
+ * Is the node described by `info` a currently-serving responsible holder for the key at `coord`?
27
+ *
28
+ * **Fail-toward-old-holder.** A node mid-move (`status === 'moving'`) advertises its *target*
29
+ * `partition`, but it keeps serving its *old* range (`moveFrom`) until it releases. So a moving
30
+ * node covers the key if EITHER its old range or its target range covers it — it is still counted
31
+ * as a serving holder for everything it served before the move until it transitions to `active` at
32
+ * the new ring. This is what keeps a shed key covered through Phases A–B and across a mid-handoff
33
+ * crash. See `docs/arachnode-ring-handoff.md` § Part 3.
34
+ */
35
+ export declare function isServingHolder(info: ArachnodeInfo, coord: Uint8Array): boolean;
36
+ /**
37
+ * Does the node described by `info` qualify toward *another* mover's Phase-B replication floor for
38
+ * the key at `coord`?
39
+ *
40
+ * A qualifying holder must still cover the key **after its own advertised move** — i.e. its
41
+ * *target* `partition` (the one it currently advertises) must cover it. A concurrent mover that is
42
+ * shedding the same sub-range advertises a target that does NOT cover the key, so it is excluded:
43
+ * two adjacent movers can never both count the other, so at most one reaches "confirmed" on the
44
+ * shared overlap and the other rolls back. For a non-moving (`active`) node, the advertised
45
+ * partition IS its serving range, so this reduces to plain partition coverage. See
46
+ * `docs/arachnode-ring-handoff.md` § Part 3 (concurrent moves).
47
+ */
48
+ export declare function qualifiesForFloor(info: ArachnodeInfo, coord: Uint8Array): boolean;
49
+ //# sourceMappingURL=arachnode-partition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arachnode-partition.d.ts","sourceRoot":"","sources":["../../../src/storage/arachnode-partition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEjE;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CASrE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,aAAa,GAAG,SAAS,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAKhG;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAK/E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAEjF"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Extract the first `bits` bits of a hashed coordinate as an integer (MSB-first).
3
+ *
4
+ * The single source of truth for the block/peer prefix comparison Arachnode uses to decide
5
+ * responsibility. `RingSelector.calculatePartition` (peer side) and `RestorationCoordinator`
6
+ * (block side) both route through this, so a peer's advertised partition and a block's derived
7
+ * prefix are computed the same way — otherwise "this peer owns this block's slice" would silently
8
+ * stop meaning what it says.
9
+ */
10
+ export function extractPrefix(coord, bits) {
11
+ let value = 0;
12
+ for (let i = 0; i < bits; i++) {
13
+ const byteIndex = Math.floor(i / 8);
14
+ const bitIndex = 7 - (i % 8);
15
+ const bit = (coord[byteIndex] >> bitIndex) & 1;
16
+ value = (value << 1) | bit;
17
+ }
18
+ return value;
19
+ }
20
+ /**
21
+ * Does `partition` cover the key at `coord`? Ring 0 (an undefined partition) covers the whole
22
+ * keyspace, so it always returns true.
23
+ */
24
+ export function partitionCovers(partition, coord) {
25
+ if (!partition) {
26
+ return true;
27
+ }
28
+ return extractPrefix(coord, partition.prefixBits) === partition.prefixValue;
29
+ }
30
+ /**
31
+ * Is the node described by `info` a currently-serving responsible holder for the key at `coord`?
32
+ *
33
+ * **Fail-toward-old-holder.** A node mid-move (`status === 'moving'`) advertises its *target*
34
+ * `partition`, but it keeps serving its *old* range (`moveFrom`) until it releases. So a moving
35
+ * node covers the key if EITHER its old range or its target range covers it — it is still counted
36
+ * as a serving holder for everything it served before the move until it transitions to `active` at
37
+ * the new ring. This is what keeps a shed key covered through Phases A–B and across a mid-handoff
38
+ * crash. See `docs/arachnode-ring-handoff.md` § Part 3.
39
+ */
40
+ export function isServingHolder(info, coord) {
41
+ if (info.status === 'moving' && info.moveFrom) {
42
+ return partitionCovers(info.moveFrom.partition, coord) || partitionCovers(info.partition, coord);
43
+ }
44
+ return partitionCovers(info.partition, coord);
45
+ }
46
+ /**
47
+ * Does the node described by `info` qualify toward *another* mover's Phase-B replication floor for
48
+ * the key at `coord`?
49
+ *
50
+ * A qualifying holder must still cover the key **after its own advertised move** — i.e. its
51
+ * *target* `partition` (the one it currently advertises) must cover it. A concurrent mover that is
52
+ * shedding the same sub-range advertises a target that does NOT cover the key, so it is excluded:
53
+ * two adjacent movers can never both count the other, so at most one reaches "confirmed" on the
54
+ * shared overlap and the other rolls back. For a non-moving (`active`) node, the advertised
55
+ * partition IS its serving range, so this reduces to plain partition coverage. See
56
+ * `docs/arachnode-ring-handoff.md` § Part 3 (concurrent moves).
57
+ */
58
+ export function qualifiesForFloor(info, coord) {
59
+ return partitionCovers(info.partition, coord);
60
+ }
61
+ //# sourceMappingURL=arachnode-partition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arachnode-partition.js","sourceRoot":"","sources":["../../../src/storage/arachnode-partition.ts"],"names":[],"mappings":"AAWA;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,KAAiB,EAAE,IAAY;IAC5D,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAE,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC;QAChD,KAAK,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;IAC5B,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,SAAoC,EAAE,KAAiB;IACtF,IAAI,CAAC,SAAS,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IACb,CAAC;IACD,OAAO,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,UAAU,CAAC,KAAK,SAAS,CAAC,WAAW,CAAC;AAC7E,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,IAAmB,EAAE,KAAiB;IACrE,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC/C,OAAO,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAClG,CAAC;IACD,OAAO,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAmB,EAAE,KAAiB;IACvE,OAAO,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AAC/C,CAAC"}
@@ -6,7 +6,19 @@ export declare class BlockStorage implements IBlockStorage {
6
6
  private readonly blockId;
7
7
  private readonly storage;
8
8
  private readonly restoreCallback?;
9
- constructor(blockId: BlockId, storage: IRawStorage, restoreCallback?: RestoreCallback | undefined);
9
+ /**
10
+ * Revisions where `rev % checkpointInterval === 0` retain a full materialization even after they
11
+ * stop being the tip. Optional (default {@link CHECKPOINT_INTERVAL}); tests inject a small value
12
+ * to exercise sweeping without committing 32+ revisions.
13
+ */
14
+ private readonly checkpointInterval;
15
+ constructor(blockId: BlockId, storage: IRawStorage, restoreCallback?: RestoreCallback | undefined,
16
+ /**
17
+ * Revisions where `rev % checkpointInterval === 0` retain a full materialization even after they
18
+ * stop being the tip. Optional (default {@link CHECKPOINT_INTERVAL}); tests inject a small value
19
+ * to exercise sweeping without committing 32+ revisions.
20
+ */
21
+ checkpointInterval?: number);
10
22
  getLatest(): Promise<ActionRev | undefined>;
11
23
  getBlock(rev?: number): Promise<{
12
24
  block: IBlock;
@@ -19,6 +31,7 @@ export declare class BlockStorage implements IBlockStorage {
19
31
  deletePendingTransaction(actionId: ActionId): Promise<void>;
20
32
  listRevisions(startRev: number, endRev: number): AsyncIterable<ActionRev>;
21
33
  saveMaterializedBlock(actionId: ActionId, block: IBlock | undefined): Promise<void>;
34
+ pruneSupersededMaterialization(prior: ActionRev): Promise<void>;
22
35
  saveRevision(rev: number, actionId: ActionId): Promise<void>;
23
36
  promotePendingTransaction(actionId: ActionId): Promise<void>;
24
37
  setLatest(latest: ActionRev): Promise<void>;
@@ -28,10 +41,36 @@ export declare class BlockStorage implements IBlockStorage {
28
41
  }>;
29
42
  saveReplica(block: IBlock, source?: ActionRev): Promise<ActionRev>;
30
43
  saveDeletion(source: ActionRev): Promise<ActionRev>;
44
+ /**
45
+ * Shared forward-write path for saveReplica and saveDeletion. Both append a single new revision
46
+ * that ADVANCES `latest` (never rewrites history): acquire the block's metadata latch, apply the
47
+ * monotonic guard, saveRestored a one-revision archive, then seed/advance/merge metadata.
48
+ *
49
+ * The only per-caller difference is the revision `body`: a replica carries `{ insert: block }`
50
+ * plus the materialized `block`; a deletion carries `{ delete: true }` and no block. `rev` and
51
+ * `actionId` are passed alongside `body` because the guard and the `latest` advance need them
52
+ * independently of the archive body.
53
+ */
54
+ private saveForwardRevision;
31
55
  private ensureRevision;
32
56
  private materializeBlock;
33
57
  private restoreBlock;
34
58
  private saveRestored;
35
59
  private inRanges;
60
+ /**
61
+ * Checkpoint retention predicate. A materialization at `rev` must be kept iff it is the tip
62
+ * (`latestRev` — the common read target and the replay base for the next commit), the floor of its
63
+ * contiguous range (`rangeFloor` — the descending walk in {@link materializeBlock} has nothing below
64
+ * the floor to fall back to), or a periodic checkpoint (`rev % checkpointInterval === 0`, which bounds
65
+ * replay depth). Otherwise the materialization is prunable — its forward transform is retained, so the
66
+ * rev stays reconstructible by replay from the nearest retained materialization below it. The floor
67
+ * clause is SEPARATE and mandatory: absolute `rev % K` checkpoints do not automatically land on the
68
+ * floor (e.g. floor `E = 1`, `K = 32`).
69
+ */
70
+ private isRetainedRev;
71
+ /** Start of the contiguous `ranges` span containing `rev`. Falls back to `rev` itself when no span
72
+ * contains it — unreachable for a committed rev (setLatest always merges the containing span before a
73
+ * prune/read runs), and the conservative direction (treats `rev` as its own floor ⇒ retained). */
74
+ private rangeFloorOf;
36
75
  }
37
76
  //# sourceMappingURL=block-storage.d.ts.map
@@ -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,EAAE,MAAM,qBAAqB,CAAC;AAE3F,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;AAK1D,qBAAa,YAAa,YAAW,aAAa;IAEhD,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;gBAFhB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,WAAW,EACpB,eAAe,CAAC,EAAE,eAAe,YAAA;IAG7C,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;IAU/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,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;IAS3C,OAAO,IAAI,OAAO,CAAC;QAAE,UAAU,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,SAAS,CAAA;KAAE,CAAC;IAgC/D,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAoDlE,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;YA+C3C,cAAc;YA+Bd,gBAAgB;YA8ChB,YAAY;YAKZ,YAAY;IAc1B,OAAO,CAAC,QAAQ;CAKhB"}
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"}