@optimystic/db-p2p 0.13.4 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (352) hide show
  1. package/README.md +6 -6
  2. package/dist/src/cluster/block-transfer-service.d.ts +67 -8
  3. package/dist/src/cluster/block-transfer-service.d.ts.map +1 -1
  4. package/dist/src/cluster/block-transfer-service.js +101 -62
  5. package/dist/src/cluster/block-transfer-service.js.map +1 -1
  6. package/dist/src/cluster/client.d.ts +18 -1
  7. package/dist/src/cluster/client.d.ts.map +1 -1
  8. package/dist/src/cluster/client.js +55 -39
  9. package/dist/src/cluster/client.js.map +1 -1
  10. package/dist/src/cluster/cluster-error.d.ts +38 -0
  11. package/dist/src/cluster/cluster-error.d.ts.map +1 -0
  12. package/dist/src/cluster/cluster-error.js +51 -0
  13. package/dist/src/cluster/cluster-error.js.map +1 -0
  14. package/dist/src/cluster/cluster-repo.d.ts +135 -3
  15. package/dist/src/cluster/cluster-repo.d.ts.map +1 -1
  16. package/dist/src/cluster/cluster-repo.js +333 -58
  17. package/dist/src/cluster/cluster-repo.js.map +1 -1
  18. package/dist/src/cluster/commit-cert.d.ts +63 -0
  19. package/dist/src/cluster/commit-cert.d.ts.map +1 -0
  20. package/dist/src/cluster/commit-cert.js +108 -0
  21. package/dist/src/cluster/commit-cert.js.map +1 -0
  22. package/dist/src/cluster/service.d.ts +46 -11
  23. package/dist/src/cluster/service.d.ts.map +1 -1
  24. package/dist/src/cluster/service.js +97 -33
  25. package/dist/src/cluster/service.js.map +1 -1
  26. package/dist/src/cluster/spread-on-churn.d.ts +13 -0
  27. package/dist/src/cluster/spread-on-churn.d.ts.map +1 -1
  28. package/dist/src/cluster/spread-on-churn.js +34 -4
  29. package/dist/src/cluster/spread-on-churn.js.map +1 -1
  30. package/dist/src/cohort-topic/bootstrap-evidence-builder.d.ts +59 -0
  31. package/dist/src/cohort-topic/bootstrap-evidence-builder.d.ts.map +1 -0
  32. package/dist/src/cohort-topic/bootstrap-evidence-builder.js +79 -0
  33. package/dist/src/cohort-topic/bootstrap-evidence-builder.js.map +1 -0
  34. package/dist/src/cohort-topic/bootstrap-evidence-verifiers.d.ts +81 -0
  35. package/dist/src/cohort-topic/bootstrap-evidence-verifiers.d.ts.map +1 -0
  36. package/dist/src/cohort-topic/bootstrap-evidence-verifiers.js +93 -0
  37. package/dist/src/cohort-topic/bootstrap-evidence-verifiers.js.map +1 -0
  38. package/dist/src/cohort-topic/bootstrap-parent-reference.d.ts +108 -0
  39. package/dist/src/cohort-topic/bootstrap-parent-reference.d.ts.map +1 -0
  40. package/dist/src/cohort-topic/bootstrap-parent-reference.js +108 -0
  41. package/dist/src/cohort-topic/bootstrap-parent-reference.js.map +1 -0
  42. package/dist/src/cohort-topic/change-bridge.d.ts +65 -0
  43. package/dist/src/cohort-topic/change-bridge.d.ts.map +1 -0
  44. package/dist/src/cohort-topic/change-bridge.js +76 -0
  45. package/dist/src/cohort-topic/change-bridge.js.map +1 -0
  46. package/dist/src/cohort-topic/cohort-gossip-driver.d.ts +74 -0
  47. package/dist/src/cohort-topic/cohort-gossip-driver.d.ts.map +1 -0
  48. package/dist/src/cohort-topic/cohort-gossip-driver.js +87 -0
  49. package/dist/src/cohort-topic/cohort-gossip-driver.js.map +1 -0
  50. package/dist/src/cohort-topic/cohort-gossip-transport.d.ts +42 -0
  51. package/dist/src/cohort-topic/cohort-gossip-transport.d.ts.map +1 -0
  52. package/dist/src/cohort-topic/cohort-gossip-transport.js +57 -0
  53. package/dist/src/cohort-topic/cohort-gossip-transport.js.map +1 -0
  54. package/dist/src/cohort-topic/fret-trust-anchor.d.ts +100 -0
  55. package/dist/src/cohort-topic/fret-trust-anchor.d.ts.map +1 -0
  56. package/dist/src/cohort-topic/fret-trust-anchor.js +115 -0
  57. package/dist/src/cohort-topic/fret-trust-anchor.js.map +1 -0
  58. package/dist/src/cohort-topic/host.d.ts +573 -0
  59. package/dist/src/cohort-topic/host.d.ts.map +1 -0
  60. package/dist/src/cohort-topic/host.js +1460 -0
  61. package/dist/src/cohort-topic/host.js.map +1 -0
  62. package/dist/src/cohort-topic/index.d.ts +14 -0
  63. package/dist/src/cohort-topic/index.d.ts.map +1 -0
  64. package/dist/src/cohort-topic/index.js +14 -0
  65. package/dist/src/cohort-topic/index.js.map +1 -0
  66. package/dist/src/cohort-topic/membership-publish-sink.d.ts +14 -0
  67. package/dist/src/cohort-topic/membership-publish-sink.d.ts.map +1 -0
  68. package/dist/src/cohort-topic/membership-publish-sink.js +17 -0
  69. package/dist/src/cohort-topic/membership-publish-sink.js.map +1 -0
  70. package/dist/src/cohort-topic/membership-source.d.ts +36 -0
  71. package/dist/src/cohort-topic/membership-source.d.ts.map +1 -0
  72. package/dist/src/cohort-topic/membership-source.js +58 -0
  73. package/dist/src/cohort-topic/membership-source.js.map +1 -0
  74. package/dist/src/cohort-topic/peer-codec.d.ts +18 -0
  75. package/dist/src/cohort-topic/peer-codec.d.ts.map +1 -0
  76. package/dist/src/cohort-topic/peer-codec.js +26 -0
  77. package/dist/src/cohort-topic/peer-codec.js.map +1 -0
  78. package/dist/src/cohort-topic/peer-sig.d.ts +52 -0
  79. package/dist/src/cohort-topic/peer-sig.d.ts.map +1 -0
  80. package/dist/src/cohort-topic/peer-sig.js +83 -0
  81. package/dist/src/cohort-topic/peer-sig.js.map +1 -0
  82. package/dist/src/cohort-topic/protocols.d.ts +49 -0
  83. package/dist/src/cohort-topic/protocols.d.ts.map +1 -0
  84. package/dist/src/cohort-topic/protocols.js +58 -0
  85. package/dist/src/cohort-topic/protocols.js.map +1 -0
  86. package/dist/src/cohort-topic/reactivity-membership-gate.d.ts +49 -0
  87. package/dist/src/cohort-topic/reactivity-membership-gate.d.ts.map +1 -0
  88. package/dist/src/cohort-topic/reactivity-membership-gate.js +42 -0
  89. package/dist/src/cohort-topic/reactivity-membership-gate.js.map +1 -0
  90. package/dist/src/cohort-topic/size-estimator.d.ts +16 -0
  91. package/dist/src/cohort-topic/size-estimator.d.ts.map +1 -0
  92. package/dist/src/cohort-topic/size-estimator.js +16 -0
  93. package/dist/src/cohort-topic/size-estimator.js.map +1 -0
  94. package/dist/src/cohort-topic/stream-util.d.ts +19 -0
  95. package/dist/src/cohort-topic/stream-util.d.ts.map +1 -0
  96. package/dist/src/cohort-topic/stream-util.js +76 -0
  97. package/dist/src/cohort-topic/stream-util.js.map +1 -0
  98. package/dist/src/cohort-topic/threshold-crypto.d.ts +94 -0
  99. package/dist/src/cohort-topic/threshold-crypto.d.ts.map +1 -0
  100. package/dist/src/cohort-topic/threshold-crypto.js +178 -0
  101. package/dist/src/cohort-topic/threshold-crypto.js.map +1 -0
  102. package/dist/src/cohort-topic/topic-router.d.ts +41 -0
  103. package/dist/src/cohort-topic/topic-router.d.ts.map +1 -0
  104. package/dist/src/cohort-topic/topic-router.js +63 -0
  105. package/dist/src/cohort-topic/topic-router.js.map +1 -0
  106. package/dist/src/dispute/cascade.d.ts +179 -0
  107. package/dist/src/dispute/cascade.d.ts.map +1 -0
  108. package/dist/src/dispute/cascade.js +315 -0
  109. package/dist/src/dispute/cascade.js.map +1 -0
  110. package/dist/src/dispute/client.d.ts +2 -1
  111. package/dist/src/dispute/client.d.ts.map +1 -1
  112. package/dist/src/dispute/client.js +12 -3
  113. package/dist/src/dispute/client.js.map +1 -1
  114. package/dist/src/dispute/dispute-service.d.ts +41 -1
  115. package/dist/src/dispute/dispute-service.d.ts.map +1 -1
  116. package/dist/src/dispute/dispute-service.js +147 -21
  117. package/dist/src/dispute/dispute-service.js.map +1 -1
  118. package/dist/src/dispute/index.d.ts +2 -0
  119. package/dist/src/dispute/index.d.ts.map +1 -1
  120. package/dist/src/dispute/index.js +2 -0
  121. package/dist/src/dispute/index.js.map +1 -1
  122. package/dist/src/dispute/invalidation.d.ts +266 -0
  123. package/dist/src/dispute/invalidation.d.ts.map +1 -0
  124. package/dist/src/dispute/invalidation.js +405 -0
  125. package/dist/src/dispute/invalidation.js.map +1 -0
  126. package/dist/src/dispute/types.d.ts +14 -0
  127. package/dist/src/dispute/types.d.ts.map +1 -1
  128. package/dist/src/dispute/types.js.map +1 -1
  129. package/dist/src/index.d.ts +4 -0
  130. package/dist/src/index.d.ts.map +1 -1
  131. package/dist/src/index.js +4 -0
  132. package/dist/src/index.js.map +1 -1
  133. package/dist/src/libp2p-key-network.d.ts +8 -1
  134. package/dist/src/libp2p-key-network.d.ts.map +1 -1
  135. package/dist/src/libp2p-key-network.js +67 -8
  136. package/dist/src/libp2p-key-network.js.map +1 -1
  137. package/dist/src/libp2p-node-base.d.ts +57 -3
  138. package/dist/src/libp2p-node-base.d.ts.map +1 -1
  139. package/dist/src/libp2p-node-base.js +523 -6
  140. package/dist/src/libp2p-node-base.js.map +1 -1
  141. package/dist/src/matchmaking/aggregate-counts.d.ts +67 -0
  142. package/dist/src/matchmaking/aggregate-counts.d.ts.map +1 -0
  143. package/dist/src/matchmaking/aggregate-counts.js +60 -0
  144. package/dist/src/matchmaking/aggregate-counts.js.map +1 -0
  145. package/dist/src/matchmaking/index.d.ts +20 -0
  146. package/dist/src/matchmaking/index.d.ts.map +1 -0
  147. package/dist/src/matchmaking/index.js +20 -0
  148. package/dist/src/matchmaking/index.js.map +1 -0
  149. package/dist/src/matchmaking/module.d.ts +181 -0
  150. package/dist/src/matchmaking/module.d.ts.map +1 -0
  151. package/dist/src/matchmaking/module.js +221 -0
  152. package/dist/src/matchmaking/module.js.map +1 -0
  153. package/dist/src/matchmaking/protocols.d.ts +37 -0
  154. package/dist/src/matchmaking/protocols.d.ts.map +1 -0
  155. package/dist/src/matchmaking/protocols.js +42 -0
  156. package/dist/src/matchmaking/protocols.js.map +1 -0
  157. package/dist/src/matchmaking/provider-manager.d.ts +52 -0
  158. package/dist/src/matchmaking/provider-manager.d.ts.map +1 -0
  159. package/dist/src/matchmaking/provider-manager.js +74 -0
  160. package/dist/src/matchmaking/provider-manager.js.map +1 -0
  161. package/dist/src/matchmaking/query-handler.d.ts +34 -0
  162. package/dist/src/matchmaking/query-handler.d.ts.map +1 -0
  163. package/dist/src/matchmaking/query-handler.js +62 -0
  164. package/dist/src/matchmaking/query-handler.js.map +1 -0
  165. package/dist/src/matchmaking/query-transport.d.ts +180 -0
  166. package/dist/src/matchmaking/query-transport.d.ts.map +1 -0
  167. package/dist/src/matchmaking/query-transport.js +315 -0
  168. package/dist/src/matchmaking/query-transport.js.map +1 -0
  169. package/dist/src/matchmaking/seeker-manager.d.ts +39 -0
  170. package/dist/src/matchmaking/seeker-manager.d.ts.map +1 -0
  171. package/dist/src/matchmaking/seeker-manager.js +49 -0
  172. package/dist/src/matchmaking/seeker-manager.js.map +1 -0
  173. package/dist/src/matchmaking/seeker-walk-client.d.ts +127 -0
  174. package/dist/src/matchmaking/seeker-walk-client.d.ts.map +1 -0
  175. package/dist/src/matchmaking/seeker-walk-client.js +189 -0
  176. package/dist/src/matchmaking/seeker-walk-client.js.map +1 -0
  177. package/dist/src/matchmaking/traffic-validation.d.ts +128 -0
  178. package/dist/src/matchmaking/traffic-validation.d.ts.map +1 -0
  179. package/dist/src/matchmaking/traffic-validation.js +105 -0
  180. package/dist/src/matchmaking/traffic-validation.js.map +1 -0
  181. package/dist/src/network/network-manager-service.d.ts +4 -2
  182. package/dist/src/network/network-manager-service.d.ts.map +1 -1
  183. package/dist/src/network/network-manager-service.js +9 -3
  184. package/dist/src/network/network-manager-service.js.map +1 -1
  185. package/dist/src/protocol-client.d.ts +25 -0
  186. package/dist/src/protocol-client.d.ts.map +1 -1
  187. package/dist/src/protocol-client.js +126 -4
  188. package/dist/src/protocol-client.js.map +1 -1
  189. package/dist/src/reactivity/forwarder-host.d.ts +198 -0
  190. package/dist/src/reactivity/forwarder-host.d.ts.map +1 -0
  191. package/dist/src/reactivity/forwarder-host.js +355 -0
  192. package/dist/src/reactivity/forwarder-host.js.map +1 -0
  193. package/dist/src/reactivity/index.d.ts +19 -0
  194. package/dist/src/reactivity/index.d.ts.map +1 -0
  195. package/dist/src/reactivity/index.js +19 -0
  196. package/dist/src/reactivity/index.js.map +1 -0
  197. package/dist/src/reactivity/notify-transport.d.ts +70 -0
  198. package/dist/src/reactivity/notify-transport.d.ts.map +1 -0
  199. package/dist/src/reactivity/notify-transport.js +111 -0
  200. package/dist/src/reactivity/notify-transport.js.map +1 -0
  201. package/dist/src/reactivity/origination-manager.d.ts +110 -0
  202. package/dist/src/reactivity/origination-manager.d.ts.map +1 -0
  203. package/dist/src/reactivity/origination-manager.js +129 -0
  204. package/dist/src/reactivity/origination-manager.js.map +1 -0
  205. package/dist/src/reactivity/protocols.d.ts +43 -0
  206. package/dist/src/reactivity/protocols.d.ts.map +1 -0
  207. package/dist/src/reactivity/protocols.js +50 -0
  208. package/dist/src/reactivity/protocols.js.map +1 -0
  209. package/dist/src/reactivity/push-state-gossip.d.ts +132 -0
  210. package/dist/src/reactivity/push-state-gossip.d.ts.map +1 -0
  211. package/dist/src/reactivity/push-state-gossip.js +231 -0
  212. package/dist/src/reactivity/push-state-gossip.js.map +1 -0
  213. package/dist/src/reactivity/recover-transport.d.ts +167 -0
  214. package/dist/src/reactivity/recover-transport.d.ts.map +1 -0
  215. package/dist/src/reactivity/recover-transport.js +308 -0
  216. package/dist/src/reactivity/recover-transport.js.map +1 -0
  217. package/dist/src/reactivity/rotation-rereg-scheduler.d.ts +142 -0
  218. package/dist/src/reactivity/rotation-rereg-scheduler.d.ts.map +1 -0
  219. package/dist/src/reactivity/rotation-rereg-scheduler.js +223 -0
  220. package/dist/src/reactivity/rotation-rereg-scheduler.js.map +1 -0
  221. package/dist/src/reactivity/subscriber-registry.d.ts +47 -0
  222. package/dist/src/reactivity/subscriber-registry.d.ts.map +1 -0
  223. package/dist/src/reactivity/subscriber-registry.js +87 -0
  224. package/dist/src/reactivity/subscriber-registry.js.map +1 -0
  225. package/dist/src/reactivity/subscription-manager.d.ts +221 -0
  226. package/dist/src/reactivity/subscription-manager.d.ts.map +1 -0
  227. package/dist/src/reactivity/subscription-manager.js +302 -0
  228. package/dist/src/reactivity/subscription-manager.js.map +1 -0
  229. package/dist/src/reactivity/topic-bytes.d.ts +32 -0
  230. package/dist/src/reactivity/topic-bytes.d.ts.map +1 -0
  231. package/dist/src/reactivity/topic-bytes.js +34 -0
  232. package/dist/src/reactivity/topic-bytes.js.map +1 -0
  233. package/dist/src/repo/client.d.ts.map +1 -1
  234. package/dist/src/repo/client.js +51 -19
  235. package/dist/src/repo/client.js.map +1 -1
  236. package/dist/src/repo/cluster-coordinator.d.ts +9 -0
  237. package/dist/src/repo/cluster-coordinator.d.ts.map +1 -1
  238. package/dist/src/repo/cluster-coordinator.js +65 -22
  239. package/dist/src/repo/cluster-coordinator.js.map +1 -1
  240. package/dist/src/repo/coordinator-repo.d.ts +20 -0
  241. package/dist/src/repo/coordinator-repo.d.ts.map +1 -1
  242. package/dist/src/repo/coordinator-repo.js +101 -16
  243. package/dist/src/repo/coordinator-repo.js.map +1 -1
  244. package/dist/src/repo/service.d.ts +46 -1
  245. package/dist/src/repo/service.d.ts.map +1 -1
  246. package/dist/src/repo/service.js +79 -45
  247. package/dist/src/repo/service.js.map +1 -1
  248. package/dist/src/rpc-deadline.d.ts +37 -0
  249. package/dist/src/rpc-deadline.d.ts.map +1 -0
  250. package/dist/src/rpc-deadline.js +31 -0
  251. package/dist/src/rpc-deadline.js.map +1 -0
  252. package/dist/src/storage/block-storage.d.ts +2 -0
  253. package/dist/src/storage/block-storage.d.ts.map +1 -1
  254. package/dist/src/storage/block-storage.js +95 -2
  255. package/dist/src/storage/block-storage.js.map +1 -1
  256. package/dist/src/storage/i-block-storage.d.ts +25 -0
  257. package/dist/src/storage/i-block-storage.d.ts.map +1 -1
  258. package/dist/src/storage/storage-repo.d.ts +53 -2
  259. package/dist/src/storage/storage-repo.d.ts.map +1 -1
  260. package/dist/src/storage/storage-repo.js +193 -9
  261. package/dist/src/storage/storage-repo.js.map +1 -1
  262. package/dist/src/sync/client.d.ts +4 -1
  263. package/dist/src/sync/client.d.ts.map +1 -1
  264. package/dist/src/sync/client.js +5 -2
  265. package/dist/src/sync/client.js.map +1 -1
  266. package/dist/src/testing/cohort-topic-mesh-harness.d.ts +219 -0
  267. package/dist/src/testing/cohort-topic-mesh-harness.d.ts.map +1 -0
  268. package/dist/src/testing/cohort-topic-mesh-harness.js +467 -0
  269. package/dist/src/testing/cohort-topic-mesh-harness.js.map +1 -0
  270. package/dist/src/testing/matchmaking-mesh-harness.d.ts +187 -0
  271. package/dist/src/testing/matchmaking-mesh-harness.d.ts.map +1 -0
  272. package/dist/src/testing/matchmaking-mesh-harness.js +358 -0
  273. package/dist/src/testing/matchmaking-mesh-harness.js.map +1 -0
  274. package/dist/src/testing/mesh-harness.d.ts.map +1 -1
  275. package/dist/src/testing/mesh-harness.js +23 -1
  276. package/dist/src/testing/mesh-harness.js.map +1 -1
  277. package/dist/src/testing/reactivity-mesh-harness.d.ts +298 -0
  278. package/dist/src/testing/reactivity-mesh-harness.d.ts.map +1 -0
  279. package/dist/src/testing/reactivity-mesh-harness.js +663 -0
  280. package/dist/src/testing/reactivity-mesh-harness.js.map +1 -0
  281. package/package.json +7 -4
  282. package/src/cluster/block-transfer-service.ts +133 -68
  283. package/src/cluster/client.ts +64 -45
  284. package/src/cluster/cluster-error.ts +64 -0
  285. package/src/cluster/cluster-repo.ts +405 -55
  286. package/src/cluster/commit-cert.ts +139 -0
  287. package/src/cluster/service.ts +116 -44
  288. package/src/cluster/spread-on-churn.ts +328 -285
  289. package/src/cohort-topic/bootstrap-evidence-builder.ts +122 -0
  290. package/src/cohort-topic/bootstrap-evidence-verifiers.ts +132 -0
  291. package/src/cohort-topic/bootstrap-parent-reference.ts +159 -0
  292. package/src/cohort-topic/change-bridge.ts +109 -0
  293. package/src/cohort-topic/cohort-gossip-driver.ts +144 -0
  294. package/src/cohort-topic/cohort-gossip-transport.ts +74 -0
  295. package/src/cohort-topic/fret-trust-anchor.ts +153 -0
  296. package/src/cohort-topic/host.ts +2175 -0
  297. package/src/cohort-topic/index.ts +13 -0
  298. package/src/cohort-topic/membership-publish-sink.ts +20 -0
  299. package/src/cohort-topic/membership-source.ts +68 -0
  300. package/src/cohort-topic/peer-codec.ts +31 -0
  301. package/src/cohort-topic/peer-sig.ts +86 -0
  302. package/src/cohort-topic/protocols.ts +71 -0
  303. package/src/cohort-topic/reactivity-membership-gate.ts +77 -0
  304. package/src/cohort-topic/size-estimator.ts +16 -0
  305. package/src/cohort-topic/stream-util.ts +87 -0
  306. package/src/cohort-topic/threshold-crypto.ts +239 -0
  307. package/src/cohort-topic/topic-router.ts +77 -0
  308. package/src/dispute/cascade.ts +517 -0
  309. package/src/dispute/client.ts +12 -2
  310. package/src/dispute/dispute-service.ts +171 -24
  311. package/src/dispute/index.ts +42 -0
  312. package/src/dispute/invalidation.ts +587 -0
  313. package/src/dispute/types.ts +14 -0
  314. package/src/index.ts +4 -0
  315. package/src/libp2p-key-network.ts +67 -9
  316. package/src/libp2p-node-base.ts +633 -14
  317. package/src/matchmaking/aggregate-counts.ts +104 -0
  318. package/src/matchmaking/index.ts +20 -0
  319. package/src/matchmaking/module.ts +363 -0
  320. package/src/matchmaking/protocols.ts +51 -0
  321. package/src/matchmaking/provider-manager.ts +95 -0
  322. package/src/matchmaking/query-handler.ts +88 -0
  323. package/src/matchmaking/query-transport.ts +483 -0
  324. package/src/matchmaking/seeker-manager.ts +64 -0
  325. package/src/matchmaking/seeker-walk-client.ts +293 -0
  326. package/src/matchmaking/traffic-validation.ts +195 -0
  327. package/src/network/network-manager-service.ts +9 -2
  328. package/src/protocol-client.ts +119 -5
  329. package/src/reactivity/forwarder-host.ts +438 -0
  330. package/src/reactivity/index.ts +19 -0
  331. package/src/reactivity/notify-transport.ts +144 -0
  332. package/src/reactivity/origination-manager.ts +192 -0
  333. package/src/reactivity/protocols.ts +61 -0
  334. package/src/reactivity/push-state-gossip.ts +291 -0
  335. package/src/reactivity/recover-transport.ts +408 -0
  336. package/src/reactivity/rotation-rereg-scheduler.ts +256 -0
  337. package/src/reactivity/subscriber-registry.ts +96 -0
  338. package/src/reactivity/subscription-manager.ts +450 -0
  339. package/src/reactivity/topic-bytes.ts +37 -0
  340. package/src/repo/client.ts +54 -19
  341. package/src/repo/cluster-coordinator.ts +66 -26
  342. package/src/repo/coordinator-repo.ts +99 -15
  343. package/src/repo/service.ts +90 -42
  344. package/src/rpc-deadline.ts +45 -0
  345. package/src/storage/block-storage.ts +106 -3
  346. package/src/storage/i-block-storage.ts +27 -0
  347. package/src/storage/storage-repo.ts +209 -13
  348. package/src/sync/client.ts +5 -2
  349. package/src/testing/cohort-topic-mesh-harness.ts +613 -0
  350. package/src/testing/matchmaking-mesh-harness.ts +475 -0
  351. package/src/testing/mesh-harness.ts +22 -2
  352. package/src/testing/reactivity-mesh-harness.ts +922 -0
@@ -0,0 +1,266 @@
1
+ import type { ActionId, BlockId, IBlock, Log, DisputeResolutionProof, RevertedBlock } from '@optimystic/db-core';
2
+ import type { IBlockStorage } from '../storage/i-block-storage.js';
3
+ import type { DisputeResolution } from './types.js';
4
+ /**
5
+ * Accepted arbitration-vote wire-format version. The v3 signed payload binds each vote to BOTH the
6
+ * specific reversed transaction (`targetHash`, #2) and the legitimately-selected arbitrator set
7
+ * (`setHash`, #1); v1/v2 (un-set-bound) votes are rejected, never accepted-by-default.
8
+ */
9
+ export declare const VOTE_VERSION: "v3";
10
+ /**
11
+ * The transaction an invalidation certificate's votes are bound to — the committed action being
12
+ * reversed and the blocks it wrote. Threaded into {@link verifyInvalidationCertificate} so a genuine
13
+ * `challenger-wins` proof for transaction X cannot be replayed to revert an unrelated transaction Y:
14
+ * the arbitrators signed over X's `targetHash`, so verifying against any other target makes every
15
+ * signature fail → 0 decisive votes → reject.
16
+ */
17
+ export type CertificateTarget = {
18
+ readonly invalidatedActionId: ActionId;
19
+ readonly blockIds: ReadonlyArray<BlockId>;
20
+ };
21
+ /**
22
+ * Binds a vote to its reversal target: `hashString(`${messageHash}|${invalidatedActionId}|${sortedBlockIds}`)`.
23
+ * `blockIds` are lexically sorted so the binding is independent of the order a member happens to list
24
+ * them, and {@link hashString} is the same db-core helper the compensating-state computation uses, so
25
+ * every member recomputes an identical `targetHash`.
26
+ */
27
+ export declare function computeTargetHash(messageHash: string, target: CertificateTarget): Promise<string>;
28
+ /**
29
+ * Digest of the legitimately-selected arbitrator set (#1) — `hashString(sortedArbitratorSet.join(','))`.
30
+ * Peer-ids are lexically sorted so the digest is independent of the order any party happens to list the
31
+ * set in, and every member (arbitrators signing votes, the challenger signing the set, the verifier)
32
+ * recomputes an identical `setHash`.
33
+ */
34
+ export declare function computeArbitratorSetHash(arbitratorSet: ReadonlyArray<string>): Promise<string>;
35
+ /**
36
+ * The exact bytes an arbitrator signs for a v3 vote — `utf8(`v3:${disputeId}:${vote}:${computedHash}:${targetHash}:${setHash}`)`.
37
+ * Shared by the origination path ({@link makeVote in dispute-service}) and {@link verifyVoteSignature}
38
+ * so the signed and verified preimages can never drift.
39
+ */
40
+ export declare function voteSigningPayload(disputeId: string, vote: string, computedHash: string, targetHash: string, setHash: string): Uint8Array;
41
+ /**
42
+ * The exact bytes the **challenger** signs to bind `(disputeId, target, arbitratorSet)` —
43
+ * `utf8(`v3set:${disputeId}:${targetHash}:${setHash}`)`. Verified against the challenger's embedded key
44
+ * ({@link DisputeResolutionProof.challengerPeerId}); shared with the origination path so it can never drift.
45
+ * The version marker is derived from {@link VOTE_VERSION} (currently `v3` → `v3set`) so a future format
46
+ * bump moves the vote and set preimages together — a proof is wholly one wire version, never a mix.
47
+ */
48
+ export declare function arbitratorSetSigningPayload(disputeId: string, targetHash: string, setHash: string): Uint8Array;
49
+ /**
50
+ * Context handed to an {@link ArbitratorSetRecompute} capability: everything it needs to re-derive the
51
+ * legitimate arbitrator set from the verifying member's own topology and judge the carried set against it.
52
+ */
53
+ export type ArbitratorSetRecomputeContext = {
54
+ readonly disputeId: string;
55
+ readonly messageHash: string;
56
+ readonly invalidatedActionId: ActionId;
57
+ readonly blockIds: ReadonlyArray<BlockId>;
58
+ /** The carried set being judged (peer-id strings). */
59
+ readonly arbitratorSet: ReadonlyArray<string>;
60
+ };
61
+ /**
62
+ * Verdict from an {@link ArbitratorSetRecompute}:
63
+ * - `{ feasible: false }` — the member could not reconstruct the historical selection (late-joiner,
64
+ * churned DHT view); the verifier falls through to the degradation posture (layer-1 accept + log).
65
+ * - `{ feasible: true, legitimate }` — it recomputed the eligible set and judged whether the carried
66
+ * `arbitratorSet` matches it (within whatever churn tolerance the capability applies).
67
+ */
68
+ export type ArbitratorSetVerdict = {
69
+ readonly feasible: false;
70
+ } | {
71
+ readonly feasible: true;
72
+ readonly legitimate: boolean;
73
+ };
74
+ /**
75
+ * Injected **layer-2** capability: re-derives the legitimately-selected arbitrator set from the verifying
76
+ * member's topology view (it has `peerNetwork` / FRET routing) and judges the carried set. Supplied by
77
+ * callers that hold a network (e.g. `ClusterMember.applyConsensusInvalidation`); the pure
78
+ * {@link verifyInvalidationCertificate} stays usable without it (layer-1 + degradation). Closing the
79
+ * fully-malicious-challenger vector requires this layer (or the layer-3 trust anchor).
80
+ */
81
+ export type ArbitratorSetRecompute = (ctx: ArbitratorSetRecomputeContext) => Promise<ArbitratorSetVerdict>;
82
+ /** Reported when a certificate is accepted on layer-1 alone — see {@link VerifyCertificateOptions.onUnanchored}. */
83
+ export type UnanchoredAcceptanceInfo = {
84
+ readonly disputeId: string;
85
+ readonly arbitratorSet: ReadonlyArray<string>;
86
+ /** Why the stronger layers did not apply. */
87
+ readonly reason: 'no-recompute-capability' | 'recompute-infeasible';
88
+ };
89
+ /** Optional capabilities a caller threads into {@link verifyInvalidationCertificate} when it has a network. */
90
+ export type VerifyCertificateOptions = {
91
+ /** Layer-2 recompute capability; omitted → pure layer-1 verification with the documented degradation. */
92
+ readonly recomputeArbitratorSet?: ArbitratorSetRecompute;
93
+ /**
94
+ * Invoked when the certificate is accepted on the challenger-bound set + membership + dedup ALONE —
95
+ * the interim posture when neither recompute (layer 2) nor a trust anchor (layer 3) resolved the set.
96
+ * Lets a caller surface "applied an invalidation it could not fully anchor" alongside the internal log.
97
+ */
98
+ readonly onUnanchored?: (info: UnanchoredAcceptanceInfo) => void;
99
+ };
100
+ /**
101
+ * Marks a `reverted` block whose as-if-`T_inv`-absent state is a *deletion* (T_inv created the
102
+ * block, so there is no prior content to restore). {@link applyInvalidation} now physically removes
103
+ * such blocks (a forward tombstone via {@link IBlockStorage.saveDeletion}); this sentinel is the
104
+ * `restoredContentHash` it records for the deleted block, telling read-dependents "the observed
105
+ * content no longer exists → invalidate" (a created block can never equal "absent"). Greppable so it
106
+ * is never mistaken for a real content hash.
107
+ */
108
+ export declare const DELETED_BLOCK_RESTORE = "deleted:block-creation-reverted";
109
+ /**
110
+ * The arbitrator-set binding a proof carries (#1): the legitimately-selected set, the challenger that
111
+ * selected it, and the challenger's signature over `(disputeId, target, arbitratorSet)`. Assembled by
112
+ * the originator ({@link DisputeService.maybeInvalidate}), which holds the selected set from
113
+ * `initiateDispute` and signs it with the challenger's key.
114
+ */
115
+ export type ArbitratorSetBinding = {
116
+ readonly arbitratorSet: ReadonlyArray<string>;
117
+ readonly challengerPeerId: string;
118
+ readonly arbitratorSetSignature: string;
119
+ };
120
+ /**
121
+ * Projects a db-p2p {@link DisputeResolution} onto the db-core {@link DisputeResolutionProof} —
122
+ * the independently-verifiable subset (outcome + signed votes + arbitrator-set binding) that an
123
+ * {@link InvalidationEntry} carries. `messageHash` is the original transaction's hash (from the
124
+ * challenge), the anchor the proof pins the reversal to; `binding` carries the legitimately-selected
125
+ * arbitrator set and the challenger's signature over it (#1).
126
+ */
127
+ export declare function buildDisputeResolutionProof(resolution: DisputeResolution, messageHash: string, binding: ArbitratorSetBinding): DisputeResolutionProof;
128
+ /**
129
+ * Verifies that a {@link DisputeResolutionProof} is a valid invalidation certificate — the reversal
130
+ * analogue of the commit certificate. A member accepts an invalidation **only** if this returns true.
131
+ * Defense-in-depth, strongest-available-layer-wins:
132
+ *
133
+ * **Target binding (#2).** `target` is the transaction actually being reverted; the verifier recomputes
134
+ * `targetHash` from `proof.messageHash` + `target` and checks each vote's signature over the v3 payload
135
+ * `v3:${disputeId}:${vote}:${computedHash}:${targetHash}:${setHash}`. Because the arbitrators signed the
136
+ * *real* transaction's `targetHash`, feeding any other target (a replay against an innocent transaction)
137
+ * makes every signature fail. A vote whose version is absent/unrecognized (legacy/v1/v2) is rejected
138
+ * before counting — never accepted-by-default.
139
+ *
140
+ * **Arbitrator-set binding (#1) — layer 1 (always).** The proof carries `arbitratorSet` (the K peer-ids
141
+ * the challenger selected) and `arbitratorSetSignature` (the challenger's signature over
142
+ * `(disputeId, target, arbitratorSet)`, verified against `challengerPeerId`'s embedded key). The verifier:
143
+ * - rejects a proof missing the set / challenger fields;
144
+ * - rejects a proof whose challenger signature does not validate over the recomputed `(targetHash, setHash)`
145
+ * — so tampering with the set (adding sybils) breaks the certificate;
146
+ * - counts only votes whose `arbitratorPeerId` ∈ `arbitratorSet` (a signature-valid vote from a peer
147
+ * outside the set is dropped), and whose vote payload also commits to the same `setHash`.
148
+ * This closes the third-party-relay / originator sybil vector and binds the originator. It does NOT by
149
+ * itself stop a *fully-malicious* challenger (who legitimately holds its own key and signs a sybil set it
150
+ * minted) — that needs layer 2 or 3.
151
+ *
152
+ * **Per-arbitrator dedup (#3).** Among the in-set votes, decisive verdicts are tallied at most once per
153
+ * `arbitratorPeerId`: a repeated identical decisive vote counts once; an arbitrator with conflicting
154
+ * decisive votes (equivocation) is dropped from both sides. `inconclusive` votes are non-decisive.
155
+ *
156
+ * **Recompute — layer 2 (best effort).** When `options.recomputeArbitratorSet` is supplied (the caller
157
+ * holds a topology view), the carried set is re-derived and judged. A `{feasible:true, legitimate:false}`
158
+ * verdict rejects the certificate even though layer 1 passed — closing the malicious-challenger vector.
159
+ * `{feasible:false}` (member can't reconstruct the historical topology) falls through to degradation.
160
+ *
161
+ * **Degradation (layer 3 / none-available).** With no recompute capability (or an infeasible recompute)
162
+ * and no trust anchor yet, a layer-1-valid certificate is **accepted and logged** as not-fully-anchored
163
+ * (and `options.onUnanchored` is invoked) — never a silent accept-by-default, and never a false reject
164
+ * that would break liveness for late-joiners. This is the interim posture until the cohort-topic
165
+ * membership-cert trust-anchor chain lands (`tickets/plan/cohort-topic-membership-cert-trust-anchoring.md`),
166
+ * at which point it is upgraded to a hard gate.
167
+ */
168
+ export declare function verifyInvalidationCertificate(proof: DisputeResolutionProof, target: CertificateTarget, options?: VerifyCertificateOptions): Promise<boolean>;
169
+ /**
170
+ * The recomputed "as-if-`T_inv`-never-committed" state for a single block.
171
+ * - `restore`: the block existed before `T_inv`; `block` is its recomputed content (the revision
172
+ * immediately before `T_inv`, with any surviving later actions replayed on top).
173
+ * - `delete`: `T_inv` created the block, so the as-if-absent state is a deletion (physically removed
174
+ * by {@link applyInvalidation} via a tombstone — see {@link DELETED_BLOCK_RESTORE}).
175
+ */
176
+ export type RevertedComputation = {
177
+ kind: 'restore';
178
+ block: IBlock;
179
+ restoredContentHash: string;
180
+ fromRev: number;
181
+ laterActions: number;
182
+ } | {
183
+ kind: 'delete';
184
+ fromRev: number;
185
+ };
186
+ /**
187
+ * Reconstructs the compensating content for one block from stored revisions only (never by re-running
188
+ * the engine — so it does not depend on engine availability and stays deterministic across members).
189
+ *
190
+ * Base = the block's content at the highest stored revision strictly before `T_inv` (no such revision
191
+ * ⇒ `T_inv` created the block ⇒ a deletion). In the single-collection/no-cascade core, "surviving later
192
+ * actions" = every committed action after `T_inv` on this block, replayed verbatim on the rolled-back
193
+ * base. The cascade (see `cascade.ts`) layers true read-dependent re-evaluation on top of this blind
194
+ * replay — it reverts the genuine successors this primitive leaves as-is and logs.
195
+ */
196
+ export declare function computeRevertedBlock(blockStorage: IBlockStorage, invalidatedRev: number): Promise<RevertedComputation>;
197
+ /**
198
+ * Deterministic content hash for a materialized block — the single hashing convention shared by
199
+ * the compensating-state computation ({@link computeRevertedBlock}) and the cascade re-evaluator
200
+ * (`db-p2p/src/dispute/cascade.ts`). Both must agree byte-for-byte: the cascade decides whether a
201
+ * read-dependent still holds by comparing the hash of the content it *observed* against the
202
+ * `restoredContentHash` an invalidation recorded — so the two hashes have to be produced the same way.
203
+ */
204
+ export declare function hashBlockContent(block: IBlock): Promise<string>;
205
+ /** Everything the apply primitive needs from the host: the collection log and per-block storage. */
206
+ export type InvalidationContext = {
207
+ /** The collection log of the collection `T_inv` wrote (where the compensating entry is appended). */
208
+ readonly log: Log<unknown>;
209
+ /** Resolves a block's storage so the compensating revision can be written. */
210
+ readonly createBlockStorage: (blockId: BlockId) => IBlockStorage;
211
+ };
212
+ export type ApplyInvalidationParams = {
213
+ readonly invalidatedActionId: ActionId;
214
+ readonly invalidatedRev: number;
215
+ /** Blocks `T_inv` wrote (its commit's blockIds). */
216
+ readonly blockIds: ReadonlyArray<BlockId>;
217
+ /** The invalidation certificate. */
218
+ readonly proof: DisputeResolutionProof;
219
+ /**
220
+ * Consensus-assigned revision slot for the compensating revision (collection-global). When
221
+ * omitted, computed as one past the highest current tip across the reverted blocks — the value a
222
+ * local/single-node apply uses; the consensus path passes the agreed slot.
223
+ */
224
+ readonly rev?: number;
225
+ /**
226
+ * When this invalidation is a cascade step (a read-dependent of an already-invalidated root being
227
+ * reverted), the `actionId` of the root invalidation that triggered the cascade. Recorded on the
228
+ * resulting {@link InvalidationEntry} (`cascadeRoot`) so the reversal is auditable as part of one
229
+ * logical cascade event. Absent for a root invalidation.
230
+ */
231
+ readonly cascadeRoot?: ActionId;
232
+ /**
233
+ * The target the proof's votes are bound to — the transaction the dispute actually resolved. For a
234
+ * **root** invalidation this equals this call's own `(invalidatedActionId, blockIds)` and may be
235
+ * omitted (defaulted below). A **cascade child** reuses the *root's* proof to authorize reverting a
236
+ * read-dependent whose own target differs, so it MUST pass the root's target here: the votes were
237
+ * signed over the root's `targetHash`, not the child's. The child-specific justification is the
238
+ * deterministic cascade derivation every member replays — not the certificate, which only attests
239
+ * the root is invalid. (The network-facing apply path `applyConsensusInvalidation` never sets this:
240
+ * it verifies against the request's *own* target, which is the replay boundary this ticket closes.)
241
+ */
242
+ readonly certificateTarget?: CertificateTarget;
243
+ readonly timestamp?: number;
244
+ };
245
+ export type ApplyInvalidationResult = {
246
+ readonly applied: boolean;
247
+ readonly reason?: 'already-applied' | 'invalid-certificate';
248
+ readonly rev?: number;
249
+ readonly reverted: ReadonlyArray<RevertedBlock>;
250
+ };
251
+ /**
252
+ * Deterministically applies a single-collection invalidation: the durable reversal primitive every
253
+ * cluster member runs identically (it carries the `reverted` targets and proof, exactly as the
254
+ * consensus-apply path runs committed operations on every peer).
255
+ *
256
+ * Steps, in order:
257
+ * 1. **Dedup** — if the log already holds an invalidation for `(invalidatedActionId, disputeId)`,
258
+ * this is a re-receipt (rebroadcast / sync / retry): no-op, append nothing.
259
+ * 2. **Certificate** — reject (append nothing) unless `proof` is a valid challenger-wins certificate.
260
+ * 3. **Reverted revisions** — for each block, recompute the as-if-`T_inv`-absent content and write a
261
+ * new monotonic revision (a forward compensating transform; prior revisions are retained).
262
+ * 4. **Log entry** — append the {@link InvalidationEntry} carrying the proof and `reverted` targets,
263
+ * making `committed-invalidated` durable and recoverable on sync.
264
+ */
265
+ export declare function applyInvalidation(ctx: InvalidationContext, params: ApplyInvalidationParams): Promise<ApplyInvalidationResult>;
266
+ //# sourceMappingURL=invalidation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invalidation.d.ts","sourceRoot":"","sources":["../../../src/dispute/invalidation.ts"],"names":[],"mappings":"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"}