@origintrail-official/dkg-agent 10.0.19 → 10.0.21

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 (733) hide show
  1. package/dist/approved-private-replica.d.ts +54 -0
  2. package/dist/approved-private-replica.d.ts.map +1 -0
  3. package/dist/approved-private-replica.js +148 -0
  4. package/dist/approved-private-replica.js.map +1 -0
  5. package/dist/bounded-operation.d.ts +2 -0
  6. package/dist/bounded-operation.d.ts.map +1 -1
  7. package/dist/bounded-operation.js +5 -0
  8. package/dist/bounded-operation.js.map +1 -1
  9. package/dist/chain-finality-confirmations-v1.d.ts +7 -0
  10. package/dist/chain-finality-confirmations-v1.d.ts.map +1 -0
  11. package/dist/chain-finality-confirmations-v1.js +9 -0
  12. package/dist/chain-finality-confirmations-v1.js.map +1 -0
  13. package/dist/chain-reconciler.d.ts +23 -0
  14. package/dist/chain-reconciler.d.ts.map +1 -1
  15. package/dist/chain-reconciler.js +35 -0
  16. package/dist/chain-reconciler.js.map +1 -1
  17. package/dist/confirmed-graph-scoped-vm-resolver.d.ts +7 -1
  18. package/dist/confirmed-graph-scoped-vm-resolver.d.ts.map +1 -1
  19. package/dist/confirmed-graph-scoped-vm-resolver.js +5 -3
  20. package/dist/confirmed-graph-scoped-vm-resolver.js.map +1 -1
  21. package/dist/context-graph-authority-dependency.d.ts +11 -0
  22. package/dist/context-graph-authority-dependency.d.ts.map +1 -0
  23. package/dist/context-graph-authority-dependency.js +50 -0
  24. package/dist/context-graph-authority-dependency.js.map +1 -0
  25. package/dist/context-graph-binding-state.d.ts +6 -0
  26. package/dist/context-graph-binding-state.d.ts.map +1 -1
  27. package/dist/context-graph-binding-state.js +17 -10
  28. package/dist/context-graph-binding-state.js.map +1 -1
  29. package/dist/context-graph-claim-proof.d.ts +74 -0
  30. package/dist/context-graph-claim-proof.d.ts.map +1 -0
  31. package/dist/context-graph-claim-proof.js +137 -0
  32. package/dist/context-graph-claim-proof.js.map +1 -0
  33. package/dist/context-graph-member-proof.d.ts +33 -0
  34. package/dist/context-graph-member-proof.d.ts.map +1 -0
  35. package/dist/context-graph-member-proof.js +142 -0
  36. package/dist/context-graph-member-proof.js.map +1 -0
  37. package/dist/context-graph-membership-persist-scheduler.d.ts +7 -23
  38. package/dist/context-graph-membership-persist-scheduler.d.ts.map +1 -1
  39. package/dist/context-graph-membership-persist-scheduler.js +12 -88
  40. package/dist/context-graph-membership-persist-scheduler.js.map +1 -1
  41. package/dist/context-graph-meta-confirmation.d.ts +22 -2
  42. package/dist/context-graph-meta-confirmation.d.ts.map +1 -1
  43. package/dist/context-graph-meta-confirmation.js +54 -23
  44. package/dist/context-graph-meta-confirmation.js.map +1 -1
  45. package/dist/context-graph-meta-projection.d.ts +13 -2
  46. package/dist/context-graph-meta-projection.d.ts.map +1 -1
  47. package/dist/context-graph-meta-projection.js +61 -24
  48. package/dist/context-graph-meta-projection.js.map +1 -1
  49. package/dist/context-graph-metadata-relocation.d.ts +18 -30
  50. package/dist/context-graph-metadata-relocation.d.ts.map +1 -1
  51. package/dist/context-graph-metadata-relocation.js +32 -2
  52. package/dist/context-graph-metadata-relocation.js.map +1 -1
  53. package/dist/context-graph-private-meta-proof.d.ts +8 -9
  54. package/dist/context-graph-private-meta-proof.d.ts.map +1 -1
  55. package/dist/context-graph-private-meta-proof.js +25 -89
  56. package/dist/context-graph-private-meta-proof.js.map +1 -1
  57. package/dist/context-graph-public-meta-proof.d.ts +11 -1
  58. package/dist/context-graph-public-meta-proof.d.ts.map +1 -1
  59. package/dist/context-graph-public-meta-proof.js +23 -3
  60. package/dist/context-graph-public-meta-proof.js.map +1 -1
  61. package/dist/context-graph-read-authority.d.ts +30 -3
  62. package/dist/context-graph-read-authority.d.ts.map +1 -1
  63. package/dist/context-graph-read-authority.js +62 -18
  64. package/dist/context-graph-read-authority.js.map +1 -1
  65. package/dist/context-graph-storage-discovery.d.ts +14 -4
  66. package/dist/context-graph-storage-discovery.d.ts.map +1 -1
  67. package/dist/context-graph-storage-discovery.js +27 -7
  68. package/dist/context-graph-storage-discovery.js.map +1 -1
  69. package/dist/context-graph-subscription-authority-recovery.d.ts +7 -0
  70. package/dist/context-graph-subscription-authority-recovery.d.ts.map +1 -1
  71. package/dist/context-graph-subscription-authority-recovery.js +1 -0
  72. package/dist/context-graph-subscription-authority-recovery.js.map +1 -1
  73. package/dist/context-graph-subscription-persist-scheduler.d.ts +52 -0
  74. package/dist/context-graph-subscription-persist-scheduler.d.ts.map +1 -0
  75. package/dist/context-graph-subscription-persist-scheduler.js +78 -0
  76. package/dist/context-graph-subscription-persist-scheduler.js.map +1 -0
  77. package/dist/curator-dial-address.d.ts +16 -0
  78. package/dist/curator-dial-address.d.ts.map +1 -0
  79. package/dist/curator-dial-address.js +58 -0
  80. package/dist/curator-dial-address.js.map +1 -0
  81. package/dist/curator-meta-refresh.d.ts +18 -4
  82. package/dist/curator-meta-refresh.d.ts.map +1 -1
  83. package/dist/curator-meta-refresh.js +61 -58
  84. package/dist/curator-meta-refresh.js.map +1 -1
  85. package/dist/curator-peer-connection.d.ts +21 -0
  86. package/dist/curator-peer-connection.d.ts.map +1 -0
  87. package/dist/curator-peer-connection.js +41 -0
  88. package/dist/curator-peer-connection.js.map +1 -0
  89. package/dist/dkg-agent-agents-phonebook.d.ts +41 -0
  90. package/dist/dkg-agent-agents-phonebook.d.ts.map +1 -0
  91. package/dist/dkg-agent-agents-phonebook.js +155 -0
  92. package/dist/dkg-agent-agents-phonebook.js.map +1 -0
  93. package/dist/dkg-agent-base.d.ts +162 -24
  94. package/dist/dkg-agent-base.d.ts.map +1 -1
  95. package/dist/dkg-agent-base.js +175 -147
  96. package/dist/dkg-agent-base.js.map +1 -1
  97. package/dist/dkg-agent-cg-chain-observation.d.ts +6 -1
  98. package/dist/dkg-agent-cg-chain-observation.d.ts.map +1 -1
  99. package/dist/dkg-agent-cg-chain-observation.js +20 -5
  100. package/dist/dkg-agent-cg-chain-observation.js.map +1 -1
  101. package/dist/dkg-agent-cg-name-resolution.d.ts +38 -2
  102. package/dist/dkg-agent-cg-name-resolution.d.ts.map +1 -1
  103. package/dist/dkg-agent-cg-name-resolution.js +100 -8
  104. package/dist/dkg-agent-cg-name-resolution.js.map +1 -1
  105. package/dist/dkg-agent-cg-registry.d.ts +43 -3
  106. package/dist/dkg-agent-cg-registry.d.ts.map +1 -1
  107. package/dist/dkg-agent-cg-registry.js +267 -129
  108. package/dist/dkg-agent-cg-registry.js.map +1 -1
  109. package/dist/dkg-agent-cg-resolve.d.ts +6 -4
  110. package/dist/dkg-agent-cg-resolve.d.ts.map +1 -1
  111. package/dist/dkg-agent-cg-resolve.js +40 -18
  112. package/dist/dkg-agent-cg-resolve.js.map +1 -1
  113. package/dist/dkg-agent-constants.d.ts +10 -2
  114. package/dist/dkg-agent-constants.d.ts.map +1 -1
  115. package/dist/dkg-agent-constants.js +10 -2
  116. package/dist/dkg-agent-constants.js.map +1 -1
  117. package/dist/dkg-agent-context-graph.d.ts.map +1 -1
  118. package/dist/dkg-agent-context-graph.js +1 -5
  119. package/dist/dkg-agent-context-graph.js.map +1 -1
  120. package/dist/dkg-agent-crypto.d.ts +128 -21
  121. package/dist/dkg-agent-crypto.d.ts.map +1 -1
  122. package/dist/dkg-agent-crypto.js +824 -176
  123. package/dist/dkg-agent-crypto.js.map +1 -1
  124. package/dist/dkg-agent-diagnostics.d.ts.map +1 -1
  125. package/dist/dkg-agent-diagnostics.js +4 -3
  126. package/dist/dkg-agent-diagnostics.js.map +1 -1
  127. package/dist/dkg-agent-helpers.d.ts +2 -2
  128. package/dist/dkg-agent-helpers.d.ts.map +1 -1
  129. package/dist/dkg-agent-helpers.js +3 -3
  130. package/dist/dkg-agent-helpers.js.map +1 -1
  131. package/dist/dkg-agent-join.d.ts +12 -1
  132. package/dist/dkg-agent-join.d.ts.map +1 -1
  133. package/dist/dkg-agent-join.js +80 -92
  134. package/dist/dkg-agent-join.js.map +1 -1
  135. package/dist/dkg-agent-lifecycle.d.ts +129 -22
  136. package/dist/dkg-agent-lifecycle.d.ts.map +1 -1
  137. package/dist/dkg-agent-lifecycle.js +690 -211
  138. package/dist/dkg-agent-lifecycle.js.map +1 -1
  139. package/dist/dkg-agent-publish.d.ts +33 -40
  140. package/dist/dkg-agent-publish.d.ts.map +1 -1
  141. package/dist/dkg-agent-publish.js +194 -281
  142. package/dist/dkg-agent-publish.js.map +1 -1
  143. package/dist/dkg-agent-query.d.ts +7 -0
  144. package/dist/dkg-agent-query.d.ts.map +1 -1
  145. package/dist/dkg-agent-query.js +102 -86
  146. package/dist/dkg-agent-query.js.map +1 -1
  147. package/dist/dkg-agent-registered-private-empty-vm.d.ts +70 -0
  148. package/dist/dkg-agent-registered-private-empty-vm.d.ts.map +1 -0
  149. package/dist/dkg-agent-registered-private-empty-vm.js +133 -0
  150. package/dist/dkg-agent-registered-private-empty-vm.js.map +1 -0
  151. package/dist/dkg-agent-rfc64-catalog-auto-publish.d.ts +8 -3
  152. package/dist/dkg-agent-rfc64-catalog-auto-publish.d.ts.map +1 -1
  153. package/dist/dkg-agent-rfc64-catalog-auto-publish.js +45 -51
  154. package/dist/dkg-agent-rfc64-catalog-auto-publish.js.map +1 -1
  155. package/dist/dkg-agent-rfc64-catalog.d.ts +87 -80
  156. package/dist/dkg-agent-rfc64-catalog.d.ts.map +1 -1
  157. package/dist/dkg-agent-rfc64-catalog.js +726 -476
  158. package/dist/dkg-agent-rfc64-catalog.js.map +1 -1
  159. package/dist/dkg-agent-rfc64-meta-bootstrap.d.ts +6 -1
  160. package/dist/dkg-agent-rfc64-meta-bootstrap.d.ts.map +1 -1
  161. package/dist/dkg-agent-rfc64-meta-bootstrap.js +29 -13
  162. package/dist/dkg-agent-rfc64-meta-bootstrap.js.map +1 -1
  163. package/dist/dkg-agent-rfc64-swm-catalog-projection-supervisor.d.ts +8 -0
  164. package/dist/dkg-agent-rfc64-swm-catalog-projection-supervisor.d.ts.map +1 -1
  165. package/dist/dkg-agent-rfc64-swm-catalog-projection-supervisor.js +249 -40
  166. package/dist/dkg-agent-rfc64-swm-catalog-projection-supervisor.js.map +1 -1
  167. package/dist/dkg-agent-rfc64-swm-catalog-projection.d.ts.map +1 -1
  168. package/dist/dkg-agent-rfc64-swm-catalog-projection.js +3 -2
  169. package/dist/dkg-agent-rfc64-swm-catalog-projection.js.map +1 -1
  170. package/dist/dkg-agent-swm-host.d.ts +217 -52
  171. package/dist/dkg-agent-swm-host.d.ts.map +1 -1
  172. package/dist/dkg-agent-swm-host.js +1305 -858
  173. package/dist/dkg-agent-swm-host.js.map +1 -1
  174. package/dist/dkg-agent-swm-state.d.ts +15 -0
  175. package/dist/dkg-agent-swm-state.d.ts.map +1 -1
  176. package/dist/dkg-agent-swm-state.js +43 -0
  177. package/dist/dkg-agent-swm-state.js.map +1 -1
  178. package/dist/dkg-agent-swm-substrate.d.ts +49 -8
  179. package/dist/dkg-agent-swm-substrate.d.ts.map +1 -1
  180. package/dist/dkg-agent-swm-substrate.js +219 -46
  181. package/dist/dkg-agent-swm-substrate.js.map +1 -1
  182. package/dist/dkg-agent-types.d.ts +86 -27
  183. package/dist/dkg-agent-types.d.ts.map +1 -1
  184. package/dist/dkg-agent-types.js.map +1 -1
  185. package/dist/dkg-agent-vm-promotion.d.ts +4 -0
  186. package/dist/dkg-agent-vm-promotion.d.ts.map +1 -1
  187. package/dist/dkg-agent-vm-promotion.js +40 -5
  188. package/dist/dkg-agent-vm-promotion.js.map +1 -1
  189. package/dist/dkg-agent-vm-reconcile-scheduling.d.ts +7 -0
  190. package/dist/dkg-agent-vm-reconcile-scheduling.d.ts.map +1 -1
  191. package/dist/dkg-agent-vm-reconcile-scheduling.js +18 -0
  192. package/dist/dkg-agent-vm-reconcile-scheduling.js.map +1 -1
  193. package/dist/dkg-agent.d.ts +31 -2
  194. package/dist/dkg-agent.d.ts.map +1 -1
  195. package/dist/dkg-agent.js +188 -72
  196. package/dist/dkg-agent.js.map +1 -1
  197. package/dist/exact-graph-content-verifier.d.ts.map +1 -1
  198. package/dist/exact-graph-content-verifier.js +3 -2
  199. package/dist/exact-graph-content-verifier.js.map +1 -1
  200. package/dist/finalization-handler.d.ts +26 -211
  201. package/dist/finalization-handler.d.ts.map +1 -1
  202. package/dist/finalization-handler.js +94 -1652
  203. package/dist/finalization-handler.js.map +1 -1
  204. package/dist/finalization-recovery-sqlite-displacement.d.ts +37 -0
  205. package/dist/finalization-recovery-sqlite-displacement.d.ts.map +1 -0
  206. package/dist/finalization-recovery-sqlite-displacement.js +102 -0
  207. package/dist/finalization-recovery-sqlite-displacement.js.map +1 -0
  208. package/dist/finalization-recovery-sqlite-policy.d.ts +20 -4
  209. package/dist/finalization-recovery-sqlite-policy.d.ts.map +1 -1
  210. package/dist/finalization-recovery-sqlite-policy.js +21 -5
  211. package/dist/finalization-recovery-sqlite-policy.js.map +1 -1
  212. package/dist/finalization-recovery-sqlite-rows.d.ts +53 -0
  213. package/dist/finalization-recovery-sqlite-rows.d.ts.map +1 -0
  214. package/dist/finalization-recovery-sqlite-rows.js +77 -0
  215. package/dist/finalization-recovery-sqlite-rows.js.map +1 -0
  216. package/dist/finalization-recovery-sqlite-store.d.ts +10 -4
  217. package/dist/finalization-recovery-sqlite-store.d.ts.map +1 -1
  218. package/dist/finalization-recovery-sqlite-store.js +49 -50
  219. package/dist/finalization-recovery-sqlite-store.js.map +1 -1
  220. package/dist/finalization-recovery-store.d.ts +18 -0
  221. package/dist/finalization-recovery-store.d.ts.map +1 -1
  222. package/dist/finalization-recovery-store.js +24 -0
  223. package/dist/finalization-recovery-store.js.map +1 -1
  224. package/dist/finalization-recovery-worker.js +1 -1
  225. package/dist/finalization-recovery-worker.js.map +1 -1
  226. package/dist/finalization-recovery.d.ts +2 -3
  227. package/dist/finalization-recovery.d.ts.map +1 -1
  228. package/dist/finalization-recovery.js +12 -9
  229. package/dist/finalization-recovery.js.map +1 -1
  230. package/dist/finalized-authority-cold-resolution.d.ts +6 -1
  231. package/dist/finalized-authority-cold-resolution.d.ts.map +1 -1
  232. package/dist/finalized-authority-cold-resolution.js +22 -3
  233. package/dist/finalized-authority-cold-resolution.js.map +1 -1
  234. package/dist/gossip-publish-handler.d.ts.map +1 -1
  235. package/dist/gossip-publish-handler.js +4 -2
  236. package/dist/gossip-publish-handler.js.map +1 -1
  237. package/dist/gossip-session.d.ts +29 -0
  238. package/dist/gossip-session.d.ts.map +1 -0
  239. package/dist/gossip-session.js +48 -0
  240. package/dist/gossip-session.js.map +1 -0
  241. package/dist/index.d.ts +4 -1
  242. package/dist/index.d.ts.map +1 -1
  243. package/dist/index.js +4 -0
  244. package/dist/index.js.map +1 -1
  245. package/dist/internal/context-graph-authority/approved-member-acceptance.d.ts +61 -0
  246. package/dist/internal/context-graph-authority/approved-member-acceptance.d.ts.map +1 -0
  247. package/dist/internal/context-graph-authority/approved-member-acceptance.js +75 -0
  248. package/dist/internal/context-graph-authority/approved-member-acceptance.js.map +1 -0
  249. package/dist/internal/context-graph-authority/context-graph-agent-gate-authority.d.ts +5 -5
  250. package/dist/internal/context-graph-authority/context-graph-agent-gate-authority.d.ts.map +1 -1
  251. package/dist/internal/context-graph-authority/context-graph-agent-gate-authority.js +59 -49
  252. package/dist/internal/context-graph-authority/context-graph-agent-gate-authority.js.map +1 -1
  253. package/dist/internal/context-graph-authority/context-graph-authority.d.ts +1 -0
  254. package/dist/internal/context-graph-authority/context-graph-authority.d.ts.map +1 -1
  255. package/dist/internal/context-graph-authority/context-graph-authority.js +25 -0
  256. package/dist/internal/context-graph-authority/context-graph-authority.js.map +1 -1
  257. package/dist/internal/context-graph-authority/finalized-target-projection.d.ts +17 -0
  258. package/dist/internal/context-graph-authority/finalized-target-projection.d.ts.map +1 -0
  259. package/dist/internal/context-graph-authority/finalized-target-projection.js +36 -0
  260. package/dist/internal/context-graph-authority/finalized-target-projection.js.map +1 -0
  261. package/dist/internal/context-graph-authority/swm-transport-authority.d.ts +84 -0
  262. package/dist/internal/context-graph-authority/swm-transport-authority.d.ts.map +1 -0
  263. package/dist/internal/context-graph-authority/swm-transport-authority.js +175 -0
  264. package/dist/internal/context-graph-authority/swm-transport-authority.js.map +1 -0
  265. package/dist/internal/context-graph-binding-abort.d.ts +3 -0
  266. package/dist/internal/context-graph-binding-abort.d.ts.map +1 -0
  267. package/dist/internal/context-graph-binding-abort.js +32 -0
  268. package/dist/internal/context-graph-binding-abort.js.map +1 -0
  269. package/dist/internal/context-graph-cache-invalidating-store.d.ts +3 -0
  270. package/dist/internal/context-graph-cache-invalidating-store.d.ts.map +1 -0
  271. package/dist/internal/context-graph-cache-invalidating-store.js +167 -0
  272. package/dist/internal/context-graph-cache-invalidating-store.js.map +1 -0
  273. package/dist/internal/context-graph-meta-record-copy.d.ts +3 -0
  274. package/dist/internal/context-graph-meta-record-copy.d.ts.map +1 -0
  275. package/dist/internal/context-graph-meta-record-copy.js +21 -0
  276. package/dist/internal/context-graph-meta-record-copy.js.map +1 -0
  277. package/dist/internal/gossip/host-mode-handler.d.ts +11 -0
  278. package/dist/internal/gossip/host-mode-handler.d.ts.map +1 -0
  279. package/dist/internal/gossip/host-mode-handler.js +41 -0
  280. package/dist/internal/gossip/host-mode-handler.js.map +1 -0
  281. package/dist/internal/join-encryption-key-bundle.d.ts +10 -0
  282. package/dist/internal/join-encryption-key-bundle.d.ts.map +1 -0
  283. package/dist/internal/join-encryption-key-bundle.js +72 -0
  284. package/dist/internal/join-encryption-key-bundle.js.map +1 -0
  285. package/dist/internal/knowledge-asset-vm-publish-request.d.ts +31 -0
  286. package/dist/internal/knowledge-asset-vm-publish-request.d.ts.map +1 -0
  287. package/dist/internal/knowledge-asset-vm-publish-request.js +91 -0
  288. package/dist/internal/knowledge-asset-vm-publish-request.js.map +1 -0
  289. package/dist/internal/lifecycle-sync-policy.d.ts +5 -0
  290. package/dist/internal/lifecycle-sync-policy.d.ts.map +1 -0
  291. package/dist/internal/lifecycle-sync-policy.js +12 -0
  292. package/dist/internal/lifecycle-sync-policy.js.map +1 -0
  293. package/dist/internal/local-private-member.d.ts +14 -0
  294. package/dist/internal/local-private-member.d.ts.map +1 -0
  295. package/dist/internal/local-private-member.js +21 -0
  296. package/dist/internal/local-private-member.js.map +1 -0
  297. package/dist/internal/promote/assertion-promote-precommit.d.ts +41 -1
  298. package/dist/internal/promote/assertion-promote-precommit.d.ts.map +1 -1
  299. package/dist/internal/promote/assertion-promote-precommit.js +79 -22
  300. package/dist/internal/promote/assertion-promote-precommit.js.map +1 -1
  301. package/dist/internal/storage-ack-owned-request.d.ts +16 -0
  302. package/dist/internal/storage-ack-owned-request.d.ts.map +1 -0
  303. package/dist/internal/storage-ack-owned-request.js +16 -0
  304. package/dist/internal/storage-ack-owned-request.js.map +1 -0
  305. package/dist/internal/vm-reconcile-local-admission-wait.d.ts +96 -0
  306. package/dist/internal/vm-reconcile-local-admission-wait.d.ts.map +1 -0
  307. package/dist/internal/vm-reconcile-local-admission-wait.js +226 -0
  308. package/dist/internal/vm-reconcile-local-admission-wait.js.map +1 -0
  309. package/dist/internal/vm-reconcile-read-authority.d.ts +27 -0
  310. package/dist/internal/vm-reconcile-read-authority.d.ts.map +1 -0
  311. package/dist/internal/vm-reconcile-read-authority.js +33 -0
  312. package/dist/internal/vm-reconcile-read-authority.js.map +1 -0
  313. package/dist/internal/vm-reconcile-sweep-admission.d.ts +2 -0
  314. package/dist/internal/vm-reconcile-sweep-admission.d.ts.map +1 -1
  315. package/dist/internal/vm-reconcile-sweep.d.ts +16 -4
  316. package/dist/internal/vm-reconcile-sweep.d.ts.map +1 -1
  317. package/dist/internal/vm-reconcile-sweep.js +91 -50
  318. package/dist/internal/vm-reconcile-sweep.js.map +1 -1
  319. package/dist/internal/workspace-projected-delegatees.d.ts +3 -0
  320. package/dist/internal/workspace-projected-delegatees.d.ts.map +1 -0
  321. package/dist/internal/workspace-projected-delegatees.js +34 -0
  322. package/dist/internal/workspace-projected-delegatees.js.map +1 -0
  323. package/dist/join-approval-restart-projection.d.ts +14 -0
  324. package/dist/join-approval-restart-projection.d.ts.map +1 -0
  325. package/dist/join-approval-restart-projection.js +32 -0
  326. package/dist/join-approval-restart-projection.js.map +1 -0
  327. package/dist/keyed-persist-scheduler.d.ts +72 -0
  328. package/dist/keyed-persist-scheduler.d.ts.map +1 -0
  329. package/dist/keyed-persist-scheduler.js +140 -0
  330. package/dist/keyed-persist-scheduler.js.map +1 -0
  331. package/dist/map-with-concurrency.d.ts +7 -0
  332. package/dist/map-with-concurrency.d.ts.map +1 -1
  333. package/dist/map-with-concurrency.js +36 -0
  334. package/dist/map-with-concurrency.js.map +1 -1
  335. package/dist/p2p/network-admission-coordinator.d.ts +15 -0
  336. package/dist/p2p/network-admission-coordinator.d.ts.map +1 -1
  337. package/dist/p2p/network-admission-coordinator.js +20 -2
  338. package/dist/p2p/network-admission-coordinator.js.map +1 -1
  339. package/dist/p2p/peer-connect.d.ts +10 -1
  340. package/dist/p2p/peer-connect.d.ts.map +1 -1
  341. package/dist/p2p/peer-connect.js +11 -2
  342. package/dist/p2p/peer-connect.js.map +1 -1
  343. package/dist/p2p/peer-selection.d.ts +8 -0
  344. package/dist/p2p/peer-selection.d.ts.map +1 -1
  345. package/dist/p2p/peer-selection.js +21 -12
  346. package/dist/p2p/peer-selection.js.map +1 -1
  347. package/dist/p2p/protocol-readiness.d.ts +3 -3
  348. package/dist/p2p/protocol-readiness.d.ts.map +1 -1
  349. package/dist/p2p/protocol-readiness.js +4 -3
  350. package/dist/p2p/protocol-readiness.js.map +1 -1
  351. package/dist/prepare-unscoped-context-graph-read-checks.d.ts.map +1 -1
  352. package/dist/prepare-unscoped-context-graph-read-checks.js +12 -0
  353. package/dist/prepare-unscoped-context-graph-read-checks.js.map +1 -1
  354. package/dist/registered-context-graph-authority.d.ts +19 -0
  355. package/dist/registered-context-graph-authority.d.ts.map +1 -1
  356. package/dist/registered-private-empty-vm-attempt-v1.d.ts +34 -0
  357. package/dist/registered-private-empty-vm-attempt-v1.d.ts.map +1 -0
  358. package/dist/registered-private-empty-vm-attempt-v1.js +120 -0
  359. package/dist/registered-private-empty-vm-attempt-v1.js.map +1 -0
  360. package/dist/reserved-ka-id-allocation.d.ts +12 -0
  361. package/dist/reserved-ka-id-allocation.d.ts.map +1 -0
  362. package/dist/reserved-ka-id-allocation.js +25 -0
  363. package/dist/reserved-ka-id-allocation.js.map +1 -0
  364. package/dist/rfc64/applied-catalog-authority-transition-v1.d.ts.map +1 -1
  365. package/dist/rfc64/applied-catalog-authority-transition-v1.js +15 -17
  366. package/dist/rfc64/applied-catalog-authority-transition-v1.js.map +1 -1
  367. package/dist/rfc64/authority-rpc-circuit-breaker-v1.d.ts +5 -3
  368. package/dist/rfc64/authority-rpc-circuit-breaker-v1.d.ts.map +1 -1
  369. package/dist/rfc64/authority-rpc-circuit-breaker-v1.js +9 -0
  370. package/dist/rfc64/authority-rpc-circuit-breaker-v1.js.map +1 -1
  371. package/dist/rfc64/catalog-completion-evidence-v1.d.ts +38 -0
  372. package/dist/rfc64/catalog-completion-evidence-v1.d.ts.map +1 -0
  373. package/dist/rfc64/catalog-completion-evidence-v1.js +49 -0
  374. package/dist/rfc64/catalog-completion-evidence-v1.js.map +1 -0
  375. package/dist/rfc64/catalog-operational-applied-heads-v1.d.ts +12 -13
  376. package/dist/rfc64/catalog-operational-applied-heads-v1.d.ts.map +1 -1
  377. package/dist/rfc64/catalog-operational-applied-heads-v1.js +17 -52
  378. package/dist/rfc64/catalog-operational-applied-heads-v1.js.map +1 -1
  379. package/dist/rfc64/catalog-operational-reads-v1.d.ts +13 -0
  380. package/dist/rfc64/catalog-operational-reads-v1.d.ts.map +1 -0
  381. package/dist/rfc64/catalog-operational-reads-v1.js +56 -0
  382. package/dist/rfc64/catalog-operational-reads-v1.js.map +1 -0
  383. package/dist/rfc64/catalog-operational-targets-v1.d.ts +55 -0
  384. package/dist/rfc64/catalog-operational-targets-v1.d.ts.map +1 -0
  385. package/dist/rfc64/catalog-operational-targets-v1.js +379 -0
  386. package/dist/rfc64/catalog-operational-targets-v1.js.map +1 -0
  387. package/dist/rfc64/catalog-repair-diagnostics-v1.d.ts +28 -0
  388. package/dist/rfc64/catalog-repair-diagnostics-v1.d.ts.map +1 -0
  389. package/dist/rfc64/catalog-repair-diagnostics-v1.js +93 -0
  390. package/dist/rfc64/catalog-repair-diagnostics-v1.js.map +1 -0
  391. package/dist/rfc64/catalog-repair-retry-v1.d.ts +13 -0
  392. package/dist/rfc64/catalog-repair-retry-v1.d.ts.map +1 -0
  393. package/dist/rfc64/catalog-repair-retry-v1.js +39 -0
  394. package/dist/rfc64/catalog-repair-retry-v1.js.map +1 -0
  395. package/dist/rfc64/catalog-replay-recovery-runtime-v1.d.ts +52 -0
  396. package/dist/rfc64/catalog-replay-recovery-runtime-v1.d.ts.map +1 -1
  397. package/dist/rfc64/catalog-replay-recovery-runtime-v1.js +188 -32
  398. package/dist/rfc64/catalog-replay-recovery-runtime-v1.js.map +1 -1
  399. package/dist/rfc64/catalog-replay-snapshot-runtime-v1.d.ts +2 -8
  400. package/dist/rfc64/catalog-replay-snapshot-runtime-v1.d.ts.map +1 -1
  401. package/dist/rfc64/catalog-replay-snapshot-runtime-v1.js +10 -37
  402. package/dist/rfc64/catalog-replay-snapshot-runtime-v1.js.map +1 -1
  403. package/dist/rfc64/catalog-rollout-authority-v1.d.ts +13 -0
  404. package/dist/rfc64/catalog-rollout-authority-v1.d.ts.map +1 -1
  405. package/dist/rfc64/catalog-rollout-authority-v1.js +11 -0
  406. package/dist/rfc64/catalog-rollout-authority-v1.js.map +1 -1
  407. package/dist/rfc64/catalog-row-authorship.d.ts +12 -0
  408. package/dist/rfc64/catalog-row-authorship.d.ts.map +1 -1
  409. package/dist/rfc64/catalog-row-authorship.js +110 -57
  410. package/dist/rfc64/catalog-row-authorship.js.map +1 -1
  411. package/dist/rfc64/inventory-v1/candidate.d.ts +31 -10
  412. package/dist/rfc64/inventory-v1/candidate.d.ts.map +1 -1
  413. package/dist/rfc64/inventory-v1/candidate.js +51 -16
  414. package/dist/rfc64/inventory-v1/candidate.js.map +1 -1
  415. package/dist/rfc64/inventory-v1/index.d.ts +1 -1
  416. package/dist/rfc64/inventory-v1/index.d.ts.map +1 -1
  417. package/dist/rfc64/inventory-v1/index.js +1 -1
  418. package/dist/rfc64/inventory-v1/index.js.map +1 -1
  419. package/dist/rfc64/inventory-v1/open.d.ts.map +1 -1
  420. package/dist/rfc64/inventory-v1/open.js +7 -4
  421. package/dist/rfc64/inventory-v1/open.js.map +1 -1
  422. package/dist/rfc64/inventory-v1/swm-author-inventory-persistence.d.ts +3 -1
  423. package/dist/rfc64/inventory-v1/swm-author-inventory-persistence.d.ts.map +1 -1
  424. package/dist/rfc64/inventory-v1/swm-author-inventory-persistence.js +15 -0
  425. package/dist/rfc64/inventory-v1/swm-author-inventory-persistence.js.map +1 -1
  426. package/dist/rfc64/legacy-swm-boundary-codec-v1.d.ts +25 -0
  427. package/dist/rfc64/legacy-swm-boundary-codec-v1.d.ts.map +1 -0
  428. package/dist/rfc64/legacy-swm-boundary-codec-v1.js +127 -0
  429. package/dist/rfc64/legacy-swm-boundary-codec-v1.js.map +1 -0
  430. package/dist/rfc64/legacy-swm-boundary-v1.d.ts +12 -0
  431. package/dist/rfc64/legacy-swm-boundary-v1.d.ts.map +1 -1
  432. package/dist/rfc64/legacy-swm-boundary-v1.js +83 -144
  433. package/dist/rfc64/legacy-swm-boundary-v1.js.map +1 -1
  434. package/dist/rfc64/private-catalog-subscription-readiness-v1.d.ts +33 -0
  435. package/dist/rfc64/private-catalog-subscription-readiness-v1.d.ts.map +1 -0
  436. package/dist/rfc64/private-catalog-subscription-readiness-v1.js +97 -0
  437. package/dist/rfc64/private-catalog-subscription-readiness-v1.js.map +1 -0
  438. package/dist/rfc64/private-read-roster-v1.d.ts +14 -0
  439. package/dist/rfc64/private-read-roster-v1.d.ts.map +1 -0
  440. package/dist/rfc64/private-read-roster-v1.js +57 -0
  441. package/dist/rfc64/private-read-roster-v1.js.map +1 -0
  442. package/dist/rfc64/public-catalog-native-receiver-v1.d.ts.map +1 -1
  443. package/dist/rfc64/public-catalog-native-receiver-v1.js +26 -21
  444. package/dist/rfc64/public-catalog-native-receiver-v1.js.map +1 -1
  445. package/dist/rfc64/public-catalog-native-reconciler-v1.d.ts +17 -11
  446. package/dist/rfc64/public-catalog-native-reconciler-v1.d.ts.map +1 -1
  447. package/dist/rfc64/public-catalog-native-reconciler-v1.js +10 -8
  448. package/dist/rfc64/public-catalog-native-reconciler-v1.js.map +1 -1
  449. package/dist/rfc64/public-catalog-receiver-v1.d.ts +9 -0
  450. package/dist/rfc64/public-catalog-receiver-v1.d.ts.map +1 -1
  451. package/dist/rfc64/public-catalog-receiver-v1.js +11 -2
  452. package/dist/rfc64/public-catalog-receiver-v1.js.map +1 -1
  453. package/dist/rfc64/public-catalog-service-v1.d.ts.map +1 -1
  454. package/dist/rfc64/public-catalog-service-v1.js +21 -22
  455. package/dist/rfc64/public-catalog-service-v1.js.map +1 -1
  456. package/dist/rfc64/public-catalog-successor-producer-v1.d.ts.map +1 -1
  457. package/dist/rfc64/public-catalog-successor-producer-v1.js +5 -4
  458. package/dist/rfc64/public-catalog-successor-producer-v1.js.map +1 -1
  459. package/dist/rfc64/registered-private-empty-vm-proof-v1.d.ts +20 -0
  460. package/dist/rfc64/registered-private-empty-vm-proof-v1.d.ts.map +1 -0
  461. package/dist/rfc64/registered-private-empty-vm-proof-v1.js +26 -0
  462. package/dist/rfc64/registered-private-empty-vm-proof-v1.js.map +1 -0
  463. package/dist/rfc64/swm-catalog-durable-asset-resolver-v1.d.ts.map +1 -1
  464. package/dist/rfc64/swm-catalog-durable-asset-resolver-v1.js +60 -53
  465. package/dist/rfc64/swm-catalog-durable-asset-resolver-v1.js.map +1 -1
  466. package/dist/rfc64/swm-inventory-catalog-reconciler-v1.d.ts +2 -1
  467. package/dist/rfc64/swm-inventory-catalog-reconciler-v1.d.ts.map +1 -1
  468. package/dist/rfc64/swm-inventory-catalog-reconciler-v1.js +44 -4
  469. package/dist/rfc64/swm-inventory-catalog-reconciler-v1.js.map +1 -1
  470. package/dist/rfc64/swm-inventory-shadow-runtime-v1.d.ts +3 -1
  471. package/dist/rfc64/swm-inventory-shadow-runtime-v1.d.ts.map +1 -1
  472. package/dist/rfc64/swm-inventory-shadow-runtime-v1.js +34 -0
  473. package/dist/rfc64/swm-inventory-shadow-runtime-v1.js.map +1 -1
  474. package/dist/sync/auth/pipe-request-tail.d.ts +5 -1
  475. package/dist/sync/auth/pipe-request-tail.d.ts.map +1 -1
  476. package/dist/sync/auth/pipe-request-tail.js +13 -3
  477. package/dist/sync/auth/pipe-request-tail.js.map +1 -1
  478. package/dist/sync/auth/request-build.d.ts +3 -0
  479. package/dist/sync/auth/request-build.d.ts.map +1 -1
  480. package/dist/sync/auth/request-build.js +11 -2
  481. package/dist/sync/auth/request-build.js.map +1 -1
  482. package/dist/sync/backpressure.d.ts +27 -16
  483. package/dist/sync/backpressure.d.ts.map +1 -1
  484. package/dist/sync/backpressure.js +66 -40
  485. package/dist/sync/backpressure.js.map +1 -1
  486. package/dist/sync/catchup-policy.d.ts +2 -0
  487. package/dist/sync/catchup-policy.d.ts.map +1 -1
  488. package/dist/sync/catchup-policy.js +2 -0
  489. package/dist/sync/catchup-policy.js.map +1 -1
  490. package/dist/sync/exact-asset-fetch.d.ts +22 -0
  491. package/dist/sync/exact-asset-fetch.d.ts.map +1 -1
  492. package/dist/sync/exact-asset-fetch.js +30 -3
  493. package/dist/sync/exact-asset-fetch.js.map +1 -1
  494. package/dist/sync/exact-assets.d.ts +7 -5
  495. package/dist/sync/exact-assets.d.ts.map +1 -1
  496. package/dist/sync/exact-assets.js +13 -8
  497. package/dist/sync/exact-assets.js.map +1 -1
  498. package/dist/sync/exact-batch-observation.d.ts +3 -0
  499. package/dist/sync/exact-batch-observation.d.ts.map +1 -0
  500. package/dist/sync/exact-batch-observation.js +13 -0
  501. package/dist/sync/exact-batch-observation.js.map +1 -0
  502. package/dist/sync/exact-batch-stream-capability.d.ts +24 -0
  503. package/dist/sync/exact-batch-stream-capability.d.ts.map +1 -0
  504. package/dist/sync/exact-batch-stream-capability.js +88 -0
  505. package/dist/sync/exact-batch-stream-capability.js.map +1 -0
  506. package/dist/sync/exact-batch-stream-contract.d.ts +78 -0
  507. package/dist/sync/exact-batch-stream-contract.d.ts.map +1 -0
  508. package/dist/sync/exact-batch-stream-contract.js +206 -0
  509. package/dist/sync/exact-batch-stream-contract.js.map +1 -0
  510. package/dist/sync/on-connect/sync-on-connect.d.ts +1 -1
  511. package/dist/sync/on-connect/sync-on-connect.d.ts.map +1 -1
  512. package/dist/sync/on-connect/sync-on-connect.js +3 -3
  513. package/dist/sync/on-connect/sync-on-connect.js.map +1 -1
  514. package/dist/sync/on-demand-agents-phonebook.d.ts +162 -0
  515. package/dist/sync/on-demand-agents-phonebook.d.ts.map +1 -0
  516. package/dist/sync/on-demand-agents-phonebook.js +571 -0
  517. package/dist/sync/on-demand-agents-phonebook.js.map +1 -0
  518. package/dist/sync/peer-connection.d.ts.map +1 -1
  519. package/dist/sync/peer-connection.js +11 -2
  520. package/dist/sync/peer-connection.js.map +1 -1
  521. package/dist/sync/priority-admission-queue.d.ts +17 -0
  522. package/dist/sync/priority-admission-queue.d.ts.map +1 -1
  523. package/dist/sync/priority-admission-queue.js +58 -37
  524. package/dist/sync/priority-admission-queue.js.map +1 -1
  525. package/dist/sync/requester/admission-boundary.d.ts +12 -0
  526. package/dist/sync/requester/admission-boundary.d.ts.map +1 -0
  527. package/dist/sync/requester/admission-boundary.js +22 -0
  528. package/dist/sync/requester/admission-boundary.js.map +1 -0
  529. package/dist/sync/requester/durable-sync.d.ts +2 -1
  530. package/dist/sync/requester/durable-sync.d.ts.map +1 -1
  531. package/dist/sync/requester/durable-sync.js +3 -188
  532. package/dist/sync/requester/durable-sync.js.map +1 -1
  533. package/dist/sync/requester/exact-batch-stream-driver.d.ts +83 -0
  534. package/dist/sync/requester/exact-batch-stream-driver.d.ts.map +1 -0
  535. package/dist/sync/requester/exact-batch-stream-driver.js +299 -0
  536. package/dist/sync/requester/exact-batch-stream-driver.js.map +1 -0
  537. package/dist/sync/requester/exact-batch-stream.d.ts +72 -0
  538. package/dist/sync/requester/exact-batch-stream.d.ts.map +1 -0
  539. package/dist/sync/requester/exact-batch-stream.js +267 -0
  540. package/dist/sync/requester/exact-batch-stream.js.map +1 -0
  541. package/dist/sync/requester/exact-recovery-transport.d.ts +19 -0
  542. package/dist/sync/requester/exact-recovery-transport.d.ts.map +1 -0
  543. package/dist/sync/requester/exact-recovery-transport.js +3 -0
  544. package/dist/sync/requester/exact-recovery-transport.js.map +1 -0
  545. package/dist/sync/requester/finalized-swm-twin-reconciliation.js +12 -3
  546. package/dist/sync/requester/finalized-swm-twin-reconciliation.js.map +1 -1
  547. package/dist/sync/requester/graph-scoped-materialization.d.ts.map +1 -1
  548. package/dist/sync/requester/graph-scoped-materialization.js +61 -27
  549. package/dist/sync/requester/graph-scoped-materialization.js.map +1 -1
  550. package/dist/sync/requester/page-fetch.d.ts +7 -0
  551. package/dist/sync/requester/page-fetch.d.ts.map +1 -1
  552. package/dist/sync/requester/page-fetch.js +103 -49
  553. package/dist/sync/requester/page-fetch.js.map +1 -1
  554. package/dist/sync/requester/shared-memory-sync.d.ts +10 -5
  555. package/dist/sync/requester/shared-memory-sync.d.ts.map +1 -1
  556. package/dist/sync/requester/shared-memory-sync.js +149 -150
  557. package/dist/sync/requester/shared-memory-sync.js.map +1 -1
  558. package/dist/sync/requester/swm-materialization-memo.d.ts +12 -0
  559. package/dist/sync/requester/swm-materialization-memo.d.ts.map +1 -0
  560. package/dist/sync/requester/swm-materialization-memo.js +54 -0
  561. package/dist/sync/requester/swm-materialization-memo.js.map +1 -0
  562. package/dist/sync/requester/swm-recovery.d.ts +3 -29
  563. package/dist/sync/requester/swm-recovery.d.ts.map +1 -1
  564. package/dist/sync/requester/swm-recovery.js +11 -10
  565. package/dist/sync/requester/swm-recovery.js.map +1 -1
  566. package/dist/sync/requester/swm-snapshot-materializer.d.ts.map +1 -1
  567. package/dist/sync/requester/swm-snapshot-materializer.js +18 -0
  568. package/dist/sync/requester/swm-snapshot-materializer.js.map +1 -1
  569. package/dist/sync/requester/swm-target-executor.d.ts +6 -0
  570. package/dist/sync/requester/swm-target-executor.d.ts.map +1 -1
  571. package/dist/sync/requester/swm-target-executor.js +24 -3
  572. package/dist/sync/requester/swm-target-executor.js.map +1 -1
  573. package/dist/sync/requester/verified-asset-preparation.d.ts +9 -0
  574. package/dist/sync/requester/verified-asset-preparation.d.ts.map +1 -0
  575. package/dist/sync/requester/verified-asset-preparation.js +190 -0
  576. package/dist/sync/requester/verified-asset-preparation.js.map +1 -0
  577. package/dist/sync/responder/asset-metadata.d.ts +18 -0
  578. package/dist/sync/responder/asset-metadata.d.ts.map +1 -0
  579. package/dist/sync/responder/asset-metadata.js +27 -0
  580. package/dist/sync/responder/asset-metadata.js.map +1 -0
  581. package/dist/sync/responder/durable-data-request-policy.d.ts +2 -16
  582. package/dist/sync/responder/durable-data-request-policy.d.ts.map +1 -1
  583. package/dist/sync/responder/durable-data-request-policy.js +1 -31
  584. package/dist/sync/responder/durable-data-request-policy.js.map +1 -1
  585. package/dist/sync/responder/exact-asset-export-cache.d.ts +89 -0
  586. package/dist/sync/responder/exact-asset-export-cache.d.ts.map +1 -0
  587. package/dist/sync/responder/exact-asset-export-cache.js +550 -0
  588. package/dist/sync/responder/exact-asset-export-cache.js.map +1 -0
  589. package/dist/sync/responder/exact-batch-stream.d.ts +47 -0
  590. package/dist/sync/responder/exact-batch-stream.d.ts.map +1 -0
  591. package/dist/sync/responder/exact-batch-stream.js +151 -0
  592. package/dist/sync/responder/exact-batch-stream.js.map +1 -0
  593. package/dist/sync/responder/exact-data-session.d.ts +67 -0
  594. package/dist/sync/responder/exact-data-session.d.ts.map +1 -0
  595. package/dist/sync/responder/exact-data-session.js +130 -0
  596. package/dist/sync/responder/exact-data-session.js.map +1 -0
  597. package/dist/sync/responder/exact-graph-cursor-filter.d.ts +9 -0
  598. package/dist/sync/responder/exact-graph-cursor-filter.d.ts.map +1 -0
  599. package/dist/sync/responder/exact-graph-cursor-filter.js +101 -0
  600. package/dist/sync/responder/exact-graph-cursor-filter.js.map +1 -0
  601. package/dist/sync/responder/exact-graph-reader.d.ts +95 -0
  602. package/dist/sync/responder/exact-graph-reader.d.ts.map +1 -0
  603. package/dist/sync/responder/exact-graph-reader.js +623 -0
  604. package/dist/sync/responder/exact-graph-reader.js.map +1 -0
  605. package/dist/sync/responder/exact-page-reader.d.ts +37 -0
  606. package/dist/sync/responder/exact-page-reader.d.ts.map +1 -0
  607. package/dist/sync/responder/exact-page-reader.js +130 -0
  608. package/dist/sync/responder/exact-page-reader.js.map +1 -0
  609. package/dist/sync/responder/graph-plan.d.ts +19 -85
  610. package/dist/sync/responder/graph-plan.d.ts.map +1 -1
  611. package/dist/sync/responder/graph-plan.js +51 -988
  612. package/dist/sync/responder/graph-plan.js.map +1 -1
  613. package/dist/sync/responder/page-framing-policy.d.ts +31 -0
  614. package/dist/sync/responder/page-framing-policy.d.ts.map +1 -0
  615. package/dist/sync/responder/page-framing-policy.js +41 -0
  616. package/dist/sync/responder/page-framing-policy.js.map +1 -0
  617. package/dist/sync/responder/responder-row-page.d.ts +85 -0
  618. package/dist/sync/responder/responder-row-page.d.ts.map +1 -0
  619. package/dist/sync/responder/responder-row-page.js +181 -0
  620. package/dist/sync/responder/responder-row-page.js.map +1 -0
  621. package/dist/sync/responder/row-serialization.d.ts +34 -0
  622. package/dist/sync/responder/row-serialization.d.ts.map +1 -0
  623. package/dist/sync/responder/row-serialization.js +69 -0
  624. package/dist/sync/responder/row-serialization.js.map +1 -0
  625. package/dist/sync/responder/session-plan-memo.d.ts +20 -0
  626. package/dist/sync/responder/session-plan-memo.d.ts.map +1 -0
  627. package/dist/sync/responder/session-plan-memo.js +135 -0
  628. package/dist/sync/responder/session-plan-memo.js.map +1 -0
  629. package/dist/sync/responder/sync-handler.d.ts +26 -1
  630. package/dist/sync/responder/sync-handler.d.ts.map +1 -1
  631. package/dist/sync/responder/sync-handler.js +107 -58
  632. package/dist/sync/responder/sync-handler.js.map +1 -1
  633. package/dist/sync/shared-memory-completion.d.ts +30 -0
  634. package/dist/sync/shared-memory-completion.d.ts.map +1 -1
  635. package/dist/sync/shared-memory-completion.js +13 -0
  636. package/dist/sync/shared-memory-completion.js.map +1 -1
  637. package/dist/sync/system-context-graph-policy.d.ts +10 -0
  638. package/dist/sync/system-context-graph-policy.d.ts.map +1 -1
  639. package/dist/sync/system-context-graph-policy.js +11 -0
  640. package/dist/sync/system-context-graph-policy.js.map +1 -1
  641. package/dist/sync/wire-compression.d.ts +47 -0
  642. package/dist/sync/wire-compression.d.ts.map +1 -0
  643. package/dist/sync/wire-compression.js +111 -0
  644. package/dist/sync/wire-compression.js.map +1 -0
  645. package/dist/unscoped-query-consistency.d.ts +12 -0
  646. package/dist/unscoped-query-consistency.d.ts.map +1 -1
  647. package/dist/unscoped-query-consistency.js +17 -1
  648. package/dist/unscoped-query-consistency.js.map +1 -1
  649. package/dist/vm-promotion-audit.d.ts +2 -2
  650. package/dist/vm-promotion-audit.d.ts.map +1 -1
  651. package/dist/vm-promotion-audit.js +26 -9
  652. package/dist/vm-promotion-audit.js.map +1 -1
  653. package/dist/vm-publish-snapshot-preflight.d.ts +13 -0
  654. package/dist/vm-publish-snapshot-preflight.d.ts.map +1 -0
  655. package/dist/vm-publish-snapshot-preflight.js +94 -0
  656. package/dist/vm-publish-snapshot-preflight.js.map +1 -0
  657. package/dist/vm-reconcile-dispatcher.d.ts +42 -1
  658. package/dist/vm-reconcile-dispatcher.d.ts.map +1 -1
  659. package/dist/vm-reconcile-dispatcher.js +103 -4
  660. package/dist/vm-reconcile-dispatcher.js.map +1 -1
  661. package/dist/vm-reconcile-peer-topology.d.ts +7 -9
  662. package/dist/vm-reconcile-peer-topology.d.ts.map +1 -1
  663. package/dist/vm-reconcile-peer-topology.js +1 -37
  664. package/dist/vm-reconcile-peer-topology.js.map +1 -1
  665. package/dist/vm-recovery-candidate-order.d.ts +16 -0
  666. package/dist/vm-recovery-candidate-order.d.ts.map +1 -0
  667. package/dist/vm-recovery-candidate-order.js +24 -0
  668. package/dist/vm-recovery-candidate-order.js.map +1 -0
  669. package/dist/vm-recovery-core-transport-preference.d.ts +69 -0
  670. package/dist/vm-recovery-core-transport-preference.d.ts.map +1 -0
  671. package/dist/vm-recovery-core-transport-preference.js +131 -0
  672. package/dist/vm-recovery-core-transport-preference.js.map +1 -0
  673. package/dist/vm-recovery-experiment-policy.d.ts +24 -0
  674. package/dist/vm-recovery-experiment-policy.d.ts.map +1 -0
  675. package/dist/vm-recovery-experiment-policy.js +18 -0
  676. package/dist/vm-recovery-experiment-policy.js.map +1 -0
  677. package/dist/vm-recovery-footprint.d.ts +54 -0
  678. package/dist/vm-recovery-footprint.d.ts.map +1 -1
  679. package/dist/vm-recovery-footprint.js +88 -24
  680. package/dist/vm-recovery-footprint.js.map +1 -1
  681. package/dist/vm-recovery-microbatch.d.ts +2 -0
  682. package/dist/vm-recovery-microbatch.d.ts.map +1 -1
  683. package/dist/vm-recovery-microbatch.js +7 -3
  684. package/dist/vm-recovery-microbatch.js.map +1 -1
  685. package/dist/vm-recovery-pass-authority.d.ts +84 -0
  686. package/dist/vm-recovery-pass-authority.d.ts.map +1 -0
  687. package/dist/vm-recovery-pass-authority.js +126 -0
  688. package/dist/vm-recovery-pass-authority.js.map +1 -0
  689. package/dist/vm-recovery-phase-timing.d.ts +75 -0
  690. package/dist/vm-recovery-phase-timing.d.ts.map +1 -0
  691. package/dist/vm-recovery-phase-timing.js +236 -0
  692. package/dist/vm-recovery-phase-timing.js.map +1 -0
  693. package/dist/vm-recovery-preparation.d.ts +143 -0
  694. package/dist/vm-recovery-preparation.d.ts.map +1 -0
  695. package/dist/vm-recovery-preparation.js +433 -0
  696. package/dist/vm-recovery-preparation.js.map +1 -0
  697. package/dist/vm-recovery-provider-policy.d.ts +13 -1
  698. package/dist/vm-recovery-provider-policy.d.ts.map +1 -1
  699. package/dist/vm-recovery-provider-policy.js +37 -5
  700. package/dist/vm-recovery-provider-policy.js.map +1 -1
  701. package/dist/vm-recovery-stream-profile.d.ts +15 -0
  702. package/dist/vm-recovery-stream-profile.d.ts.map +1 -0
  703. package/dist/vm-recovery-stream-profile.js +53 -0
  704. package/dist/vm-recovery-stream-profile.js.map +1 -0
  705. package/dist/vm-recovery-stream-setback-policy.d.ts +54 -0
  706. package/dist/vm-recovery-stream-setback-policy.d.ts.map +1 -0
  707. package/dist/vm-recovery-stream-setback-policy.js +85 -0
  708. package/dist/vm-recovery-stream-setback-policy.js.map +1 -0
  709. package/dist/vm-recovery-timing-observer.d.ts +27 -0
  710. package/dist/vm-recovery-timing-observer.d.ts.map +1 -0
  711. package/dist/vm-recovery-timing-observer.js +49 -0
  712. package/dist/vm-recovery-timing-observer.js.map +1 -0
  713. package/dist/vm-recovery-transport-budget-policy.d.ts +32 -0
  714. package/dist/vm-recovery-transport-budget-policy.d.ts.map +1 -0
  715. package/dist/vm-recovery-transport-budget-policy.js +55 -0
  716. package/dist/vm-recovery-transport-budget-policy.js.map +1 -0
  717. package/dist/vm-recovery-transport-plan.d.ts +83 -0
  718. package/dist/vm-recovery-transport-plan.d.ts.map +1 -0
  719. package/dist/vm-recovery-transport-plan.js +117 -0
  720. package/dist/vm-recovery-transport-plan.js.map +1 -0
  721. package/dist/vm-refresh.d.ts +138 -0
  722. package/dist/vm-refresh.d.ts.map +1 -0
  723. package/dist/vm-refresh.js +201 -0
  724. package/dist/vm-refresh.js.map +1 -0
  725. package/package.json +19 -9
  726. package/dist/finalization-annotations.d.ts +0 -5
  727. package/dist/finalization-annotations.d.ts.map +0 -1
  728. package/dist/finalization-annotations.js +0 -6
  729. package/dist/finalization-annotations.js.map +0 -1
  730. package/dist/swm-ka-bound.d.ts +0 -21
  731. package/dist/swm-ka-bound.d.ts.map +0 -1
  732. package/dist/swm-ka-bound.js +0 -36
  733. package/dist/swm-ka-bound.js.map +0 -1
@@ -0,0 +1,571 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ /**
3
+ * On-demand, bounded fetch of the `agents` phonebook for nodes that do not
4
+ * sync it on every connect (Edge nodes by default).
5
+ *
6
+ * VM exact recovery ranks a wallet-scoped Context Graph's holders through its
7
+ * curator tier: owner wallet -> `agents` profile -> peer id plus the relay or
8
+ * circuit addresses the profile advertises. An Edge keeps no durable copy of
9
+ * the phonebook by default (`resolveAutomaticSystemContextGraphSync`), so for
10
+ * a public graph whose only holder is the publisher's own Edge that tier is
11
+ * empty and recovery asks only the peers it already happens to be connected
12
+ * to. This module fetches the phonebook once, when a public graph actually
13
+ * needs it, instead of making every Edge sync it on every connect.
14
+ *
15
+ * Bounds, all per process:
16
+ * - at most one fetch in flight; concurrent requests join it;
17
+ * - one fetch tries at most `maxPeers` connected, network-admitted peers
18
+ * (known Cores first) inside one shared wall-clock budget;
19
+ * - a cooldown after every fetch that reached a peer, longer after one that
20
+ * obtained data than after one that failed;
21
+ * - a graph whose curator a complete Core phonebook did not contain stops
22
+ * asking for hours (live `agents` gossip still delivers later profiles);
23
+ * an empty or near-empty "complete" answer does not count as one;
24
+ * - finding no usable peer starts no cooldown, and its re-check is bounded.
25
+ *
26
+ * Only wallet-scoped (`0x<wallet>/<slug>`) graphs whose on-chain access policy
27
+ * is public can trigger a fetch: the phonebook feeds the curator tier only
28
+ * through the owner wallet, and curated graphs are never resolved through it.
29
+ */
30
+ import { getMetrics, SYSTEM_CONTEXT_GRAPHS } from '@origintrail-official/dkg-core';
31
+ import { orderCoresFirst } from '../p2p/peer-selection.js';
32
+ import { parseBooleanEnv } from './agents-meta-policy.js';
33
+ import { resolveAutomaticSystemContextGraphSync, } from './system-context-graph-policy.js';
34
+ /**
35
+ * Whether this node may fetch the phonebook on demand.
36
+ *
37
+ * A node that already syncs the system graphs on every connect (Cores by
38
+ * default, or `DKG_SYNC_SYSTEM_CONTEXT_GRAPHS_ON_CONNECT=1`) has nothing to
39
+ * fetch. Otherwise the kill switch follows the same precedence as that flag:
40
+ * the environment wins over config, and the default is on.
41
+ */
42
+ export function resolveOnDemandAgentsPhonebookFetch(options) {
43
+ if (resolveAutomaticSystemContextGraphSync(options))
44
+ return false;
45
+ const envValue = parseBooleanEnv(options.onDemandEnvValue);
46
+ if (envValue !== undefined)
47
+ return envValue;
48
+ return options.onDemandConfigValue ?? true;
49
+ }
50
+ /**
51
+ * Minimum spacing between fetches that obtained data. A full fetch is one
52
+ * durable sync of the whole `agents` graph (~75k triples, ~24 s from one Core
53
+ * on Base mainnet in September 2026). Profiles are re-published every 20
54
+ * minutes and arrive over live `agents` gossip while the node is online, so a
55
+ * phonebook fetched less than 30 minutes ago is not meaningfully stale; this
56
+ * caps the worst case at two full fetches per hour per node.
57
+ */
58
+ export const AGENTS_PHONEBOOK_FETCH_COOLDOWN_MS = 30 * 60_000;
59
+ /** Spacing after a fetch that reached peers but obtained nothing. */
60
+ export const AGENTS_PHONEBOOK_FETCH_FAILURE_COOLDOWN_MS = 10 * 60_000;
61
+ /** Wall-clock budget one fetch shares across every peer it tries. */
62
+ export const AGENTS_PHONEBOOK_FETCH_BUDGET_MS = 120_000;
63
+ /** Peers one fetch may transfer from. */
64
+ export const AGENTS_PHONEBOOK_FETCH_MAX_PEERS = 3;
65
+ /** Connected peers one fetch may examine (admission and protocol checks). */
66
+ export const AGENTS_PHONEBOOK_FETCH_MAX_CANDIDATES = 8;
67
+ /**
68
+ * How long a graph stops asking after a complete Core phonebook did not
69
+ * contain its curator. Fetching the same phonebook again cannot add a profile
70
+ * that live gossip has not already delivered.
71
+ */
72
+ export const AGENTS_PHONEBOOK_CURATOR_MISS_SUPPRESSION_MS = 6 * 60 * 60_000;
73
+ /**
74
+ * Triples a known Core's complete answer must carry before it counts as the
75
+ * network's phonebook: before it ends the peer walk or earns a graph the
76
+ * miss suppression above. "Known Core" only means the peer advertises the
77
+ * storage-ACK protocol, and a just-started Core, one with a reset store, or
78
+ * one that does not sync `agents` answers a full scan as complete with no
79
+ * rows, or with little more than its own profile. Base mainnet's phonebook
80
+ * was 75,141 triples (about 39 per profile), so this is roughly 25 profiles.
81
+ */
82
+ export const AGENTS_PHONEBOOK_MIN_NETWORK_TRIPLES = 1_000;
83
+ /** Re-check cadence while wanted graphs wait for a first usable peer. */
84
+ export const AGENTS_PHONEBOOK_NO_PEER_RETRY_MS = 30_000;
85
+ /** No-peer re-checks one wait may use before waiting for the next trigger. */
86
+ export const AGENTS_PHONEBOOK_NO_PEER_MAX_RETRIES = 20;
87
+ /** Reuse window for an on-chain access-policy answer. */
88
+ export const AGENTS_PHONEBOOK_POLICY_VERDICT_TTL_MS = 30 * 60_000;
89
+ /** Bound for every per-graph map this module keeps. */
90
+ export const AGENTS_PHONEBOOK_STATE_MAX_ENTRIES = 1_024;
91
+ /**
92
+ * New dials one catch-up connection-priming walk may attempt on a node in
93
+ * on-demand mode. Such a node ends up holding every relay-advertising profile
94
+ * (1,910 on Base mainnet in September 2026), and the unbounded walk dialled
95
+ * 150-500 relay circuits per minute there, against about 6 per minute on an
96
+ * Edge without the phonebook. Catch-up peers still come from admitted
97
+ * connections and the curator tier.
98
+ */
99
+ export const AGENTS_PHONEBOOK_PRIME_MAX_DIALS = 8;
100
+ const SYSTEM_CONTEXT_GRAPH_IDS = new Set(Object.values(SYSTEM_CONTEXT_GRAPHS));
101
+ function shortPeerId(peerId) {
102
+ return peerId.slice(-8);
103
+ }
104
+ function errorMessage(error) {
105
+ return error instanceof Error ? error.message : String(error);
106
+ }
107
+ /** Wait for `promise`, or stop waiting (without rejecting) once `signal` aborts. */
108
+ async function waitUnlessAborted(promise, signal) {
109
+ if (signal === undefined) {
110
+ await promise.catch(() => undefined);
111
+ return;
112
+ }
113
+ if (signal.aborted)
114
+ return;
115
+ await new Promise((resolve) => {
116
+ const done = () => resolve();
117
+ signal.addEventListener('abort', done, { once: true });
118
+ promise.then(done, done).finally(() => signal.removeEventListener('abort', done));
119
+ });
120
+ }
121
+ function setBounded(map, key, value, maxEntries) {
122
+ map.delete(key);
123
+ map.set(key, value);
124
+ while (map.size > maxEntries) {
125
+ const oldest = map.keys().next().value;
126
+ if (oldest === undefined)
127
+ break;
128
+ map.delete(oldest);
129
+ }
130
+ }
131
+ /** Process-local owner of on-demand phonebook fetches. */
132
+ export class OnDemandAgentsPhonebookFetcher {
133
+ #deps;
134
+ #now;
135
+ #cooldownMs;
136
+ #failureCooldownMs;
137
+ #budgetMs;
138
+ #maxPeers;
139
+ #maxCandidates;
140
+ #curatorMissSuppressionMs;
141
+ #minNetworkTriples;
142
+ #noPeerRetryMs;
143
+ #noPeerMaxRetries;
144
+ #policyVerdictTtlMs;
145
+ #maxStateEntries;
146
+ #closed = false;
147
+ #lifetime = new AbortController();
148
+ #inFlight;
149
+ #nextEligibleAt = 0;
150
+ /** Graph -> first trigger that wanted it; drained by the next fetch. */
151
+ #wants = new Map();
152
+ /** Lower-cased wallets a waiting share needs; drained by the next fetch. */
153
+ #wantedWallets = new Set();
154
+ #evaluating = new Set();
155
+ #evaluations = new Set();
156
+ #curatorMissUntil = new Map();
157
+ #policyVerdicts = new Map();
158
+ #recheckTimer;
159
+ #rechecks = 0;
160
+ constructor(deps, options = {}) {
161
+ this.#deps = deps;
162
+ this.#now = options.now ?? Date.now;
163
+ this.#cooldownMs = options.cooldownMs ?? AGENTS_PHONEBOOK_FETCH_COOLDOWN_MS;
164
+ this.#failureCooldownMs = options.failureCooldownMs ?? AGENTS_PHONEBOOK_FETCH_FAILURE_COOLDOWN_MS;
165
+ this.#budgetMs = options.budgetMs ?? AGENTS_PHONEBOOK_FETCH_BUDGET_MS;
166
+ this.#maxPeers = options.maxPeers ?? AGENTS_PHONEBOOK_FETCH_MAX_PEERS;
167
+ this.#maxCandidates = options.maxCandidates ?? AGENTS_PHONEBOOK_FETCH_MAX_CANDIDATES;
168
+ this.#curatorMissSuppressionMs = options.curatorMissSuppressionMs
169
+ ?? AGENTS_PHONEBOOK_CURATOR_MISS_SUPPRESSION_MS;
170
+ this.#minNetworkTriples = options.minNetworkTriples ?? AGENTS_PHONEBOOK_MIN_NETWORK_TRIPLES;
171
+ this.#noPeerRetryMs = options.noPeerRetryMs ?? AGENTS_PHONEBOOK_NO_PEER_RETRY_MS;
172
+ this.#noPeerMaxRetries = options.noPeerMaxRetries ?? AGENTS_PHONEBOOK_NO_PEER_MAX_RETRIES;
173
+ this.#policyVerdictTtlMs = options.policyVerdictTtlMs ?? AGENTS_PHONEBOOK_POLICY_VERDICT_TTL_MS;
174
+ this.#maxStateEntries = options.maxStateEntries ?? AGENTS_PHONEBOOK_STATE_MAX_ENTRIES;
175
+ }
176
+ /**
177
+ * Ask for the phonebook on behalf of one graph. Synchronous, O(1) and never
178
+ * throws: the subscribe path calls it. Everything that reads the store, the
179
+ * chain or the network runs detached.
180
+ */
181
+ request(contextGraphId, trigger) {
182
+ try {
183
+ if (this.#closed || SYSTEM_CONTEXT_GRAPH_IDS.has(contextGraphId))
184
+ return;
185
+ if (!this.#deps.isEnabled())
186
+ return;
187
+ const wallet = this.#deps.remoteCuratorWallet(contextGraphId);
188
+ if (wallet === null)
189
+ return;
190
+ const now = this.#now();
191
+ if ((this.#curatorMissUntil.get(contextGraphId) ?? 0) > now)
192
+ return;
193
+ if (this.#wants.has(contextGraphId) || this.#evaluating.has(contextGraphId))
194
+ return;
195
+ // An in-flight fetch still adopts a graph that qualifies; a cooling-down
196
+ // one does not, and the graph's next reconcile pass asks again later.
197
+ if (this.#inFlight === undefined && now < this.#nextEligibleAt)
198
+ return;
199
+ this.#evaluating.add(contextGraphId);
200
+ // Start on a later turn, so a caller's synchronous path (subscribe, a
201
+ // VM recovery pass) does no store or chain work here.
202
+ const evaluation = Promise.resolve()
203
+ .then(() => this.#evaluate(contextGraphId, wallet, trigger))
204
+ .catch((error) => {
205
+ this.#deps.logDebug(`On-demand agents phonebook check for "${contextGraphId}" failed: ${errorMessage(error)}`);
206
+ })
207
+ .finally(() => {
208
+ this.#evaluating.delete(contextGraphId);
209
+ this.#evaluations.delete(evaluation);
210
+ });
211
+ this.#evaluations.add(evaluation);
212
+ }
213
+ catch {
214
+ // The trigger is advisory; a broken dependency must never fail its caller.
215
+ }
216
+ }
217
+ /**
218
+ * Fetch the phonebook for agents a private share needs keys for (#2849), and
219
+ * wait for that fetch. Resolves with the lower-cased wallets whose key the
220
+ * local store holds afterwards. A disabled, closed or cooling-down fetcher
221
+ * fetches nothing and only reports, so the cost stays within the existing
222
+ * cooldowns. The share is judged on the keys it then finds, never on this
223
+ * answer alone. Never throws; aborting `signal` stops the wait, not a fetch
224
+ * other callers share.
225
+ */
226
+ async ensureWallets(wallets, signal) {
227
+ const wanted = [...new Set(wallets.map((wallet) => wallet.toLowerCase()))];
228
+ const known = new Set();
229
+ const refresh = async () => {
230
+ for (const wallet of wanted) {
231
+ if (known.has(wallet))
232
+ continue;
233
+ const present = await this.#deps
234
+ .recipientKeyKnown(wallet, signal ?? this.#lifetime.signal)
235
+ .catch(() => false);
236
+ if (present)
237
+ known.add(wallet);
238
+ }
239
+ };
240
+ try {
241
+ await refresh();
242
+ if (known.size === wanted.length || this.#closed || !this.#deps.isEnabled())
243
+ return known;
244
+ for (const wallet of wanted) {
245
+ if (known.has(wallet))
246
+ continue;
247
+ this.#wantedWallets.add(wallet);
248
+ while (this.#wantedWallets.size > this.#maxStateEntries) {
249
+ const oldest = this.#wantedWallets.values().next().value;
250
+ if (oldest === undefined)
251
+ break;
252
+ this.#wantedWallets.delete(oldest);
253
+ }
254
+ }
255
+ this.#maybeStart();
256
+ const inFlight = this.#inFlight;
257
+ if (inFlight !== undefined)
258
+ await waitUnlessAborted(inFlight, signal);
259
+ await refresh();
260
+ }
261
+ catch {
262
+ // Advisory: the caller resolves keys and fails closed on its own.
263
+ }
264
+ return known;
265
+ }
266
+ /** Resolves once no evaluation or fetch started before this call is running. */
267
+ async whenIdle() {
268
+ while (this.#evaluations.size > 0 || this.#inFlight !== undefined) {
269
+ await Promise.allSettled([...this.#evaluations, this.#inFlight]);
270
+ }
271
+ }
272
+ /** Abort the in-flight fetch and the no-peer re-check; resolves once idle. */
273
+ close() {
274
+ this.#closed = true;
275
+ this.#lifetime.abort(new DOMException('On-demand agents phonebook closed', 'AbortError'));
276
+ this.#clearRecheck();
277
+ this.#wants.clear();
278
+ this.#wantedWallets.clear();
279
+ return this.whenIdle();
280
+ }
281
+ /** Admit requests again after a restart. Cooldowns and suppressions survive. */
282
+ reopen() {
283
+ if (!this.#closed)
284
+ return;
285
+ this.#closed = false;
286
+ this.#lifetime = new AbortController();
287
+ this.#rechecks = 0;
288
+ }
289
+ async #evaluate(contextGraphId, wallet, trigger) {
290
+ const signal = this.#lifetime.signal;
291
+ if (!this.#deps.isActiveSubscription(contextGraphId))
292
+ return;
293
+ if (await this.#deps.phonebookHasWallet(wallet, signal))
294
+ return;
295
+ if (this.#closed)
296
+ return;
297
+ if (!(await this.#isPublic(contextGraphId, signal)))
298
+ return;
299
+ if (this.#closed || !this.#deps.isActiveSubscription(contextGraphId))
300
+ return;
301
+ if (!this.#wants.has(contextGraphId)) {
302
+ // The first wanted graph starts a new wait: it gets the whole no-peer
303
+ // re-check budget, whatever an earlier wait spent.
304
+ if (this.#wants.size === 0)
305
+ this.#rechecks = 0;
306
+ setBounded(this.#wants, contextGraphId, trigger, this.#maxStateEntries);
307
+ }
308
+ this.#maybeStart();
309
+ }
310
+ async #isPublic(contextGraphId, signal) {
311
+ const now = this.#now();
312
+ const cached = this.#policyVerdicts.get(contextGraphId);
313
+ if (cached !== undefined && cached.expiresAt > now)
314
+ return cached.publicPolicy;
315
+ const policy = await this.#deps.readAccessPolicy(contextGraphId, signal);
316
+ // An unanswered read is not a verdict: the next trigger reads again.
317
+ if (policy === 'unknown')
318
+ return false;
319
+ const publicPolicy = policy === 'public';
320
+ setBounded(this.#policyVerdicts, contextGraphId, { publicPolicy, expiresAt: now + this.#policyVerdictTtlMs }, this.#maxStateEntries);
321
+ return publicPolicy;
322
+ }
323
+ #maybeStart() {
324
+ if (this.#closed
325
+ || this.#inFlight !== undefined
326
+ || (this.#wants.size === 0 && this.#wantedWallets.size === 0))
327
+ return;
328
+ if (this.#now() < this.#nextEligibleAt) {
329
+ this.#wants.clear();
330
+ this.#wantedWallets.clear();
331
+ return;
332
+ }
333
+ this.#clearRecheck();
334
+ const fetch = this.#fetch()
335
+ .catch((error) => {
336
+ this.#deps.logDebug(`On-demand agents phonebook fetch stopped: ${errorMessage(error)}`);
337
+ })
338
+ .finally(() => {
339
+ if (this.#inFlight === fetch)
340
+ this.#inFlight = undefined;
341
+ // A share that asked late already has its answer and retries itself.
342
+ this.#wantedWallets.clear();
343
+ if (this.#closed || this.#wants.size === 0)
344
+ return;
345
+ // A graph that qualified after this fetch read its wanted list must
346
+ // not stay parked there. Inside the cooldown it is dropped and asks
347
+ // again on its next trigger; otherwise a bounded re-check picks it up.
348
+ if (this.#now() < this.#nextEligibleAt)
349
+ this.#wants.clear();
350
+ else
351
+ this.#scheduleRecheck();
352
+ });
353
+ this.#inFlight = fetch;
354
+ }
355
+ async #fetch() {
356
+ const lifetime = this.#lifetime.signal;
357
+ const startedAt = this.#now();
358
+ const trigger = this.#wants.values().next().value
359
+ ?? (this.#wantedWallets.size > 0 ? 'share-recipient' : 'vm-reconcile');
360
+ const candidates = orderCoresFirst(this.#deps.listConnectedPeers(), (peer) => peer.core)
361
+ .slice(0, this.#maxCandidates);
362
+ const budget = new AbortController();
363
+ const abortBudget = () => budget.abort(lifetime.reason);
364
+ lifetime.addEventListener('abort', abortBudget, { once: true });
365
+ const budgetTimer = setTimeout(() => {
366
+ budget.abort(new DOMException('On-demand agents phonebook budget exhausted', 'TimeoutError'));
367
+ }, this.#budgetMs);
368
+ budgetTimer.unref?.();
369
+ const peerSummaries = [];
370
+ let attemptedPeers = 0;
371
+ let fetchedTriples = 0;
372
+ let insertedTriples = 0;
373
+ let answeredEmpty = false;
374
+ // A known Core's complete answer that carried a real phonebook. Only this
375
+ // ends the walk early or suppresses a graph whose owner it lacks.
376
+ let networkPhonebook = false;
377
+ try {
378
+ for (const { peerId, core } of candidates) {
379
+ if (attemptedPeers >= this.#maxPeers || budget.signal.aborted)
380
+ break;
381
+ let ready = false;
382
+ try {
383
+ ready = await this.#deps.preparePeer(peerId, budget.signal);
384
+ }
385
+ catch {
386
+ ready = false;
387
+ }
388
+ if (budget.signal.aborted)
389
+ break;
390
+ if (!ready)
391
+ continue;
392
+ const remainingMs = startedAt + this.#budgetMs - this.#now();
393
+ if (remainingMs <= 0)
394
+ break;
395
+ attemptedPeers += 1;
396
+ const role = core ? 'core' : 'peer';
397
+ try {
398
+ const result = await this.#deps.syncAgentsFromPeer(peerId, {
399
+ signal: budget.signal,
400
+ totalTimeoutMs: remainingMs,
401
+ });
402
+ fetchedTriples += result.fetchedTriples;
403
+ insertedTriples += result.insertedTriples;
404
+ if (result.fetchedTriples === 0)
405
+ answeredEmpty = true;
406
+ if (core && result.complete && result.fetchedTriples >= this.#minNetworkTriples) {
407
+ networkPhonebook = true;
408
+ }
409
+ peerSummaries.push(`${shortPeerId(peerId)}:${role}:${result.complete ? 'complete' : 'partial'}:${result.fetchedTriples}`);
410
+ }
411
+ catch (error) {
412
+ peerSummaries.push(`${shortPeerId(peerId)}:${role}:failed`);
413
+ this.#deps.logDebug(`On-demand agents phonebook sync from ${shortPeerId(peerId)} failed: ${errorMessage(error)}`);
414
+ }
415
+ // A complete Core phonebook is the network's phonebook; another Core
416
+ // would send the same rows. An empty or near-empty "complete" answer
417
+ // is not. Also stop once every wanted curator is in.
418
+ if (networkPhonebook || budget.signal.aborted)
419
+ break;
420
+ if ((await this.#unresolvedWants(budget.signal)).length === 0
421
+ && (await this.#unresolvedWallets(budget.signal)).length === 0)
422
+ break;
423
+ }
424
+ }
425
+ finally {
426
+ clearTimeout(budgetTimer);
427
+ lifetime.removeEventListener('abort', abortBudget);
428
+ }
429
+ if (lifetime.aborted)
430
+ return;
431
+ if (attemptedPeers === 0) {
432
+ // Nothing was asked of any peer: keep the wanted graphs and re-check
433
+ // soon, without starting a cooldown. A waiting share has its answer
434
+ // already and asks again on its next attempt.
435
+ this.#wantedWallets.clear();
436
+ this.#recordMetrics(trigger, 'no-peers', false, this.#now() - startedAt);
437
+ this.#deps.logDebug(`On-demand agents phonebook fetch deferred: no usable connected peer `
438
+ + `(trigger=${trigger} candidates=${candidates.length} wanted=${this.#wants.size})`);
439
+ this.#scheduleRecheck();
440
+ return;
441
+ }
442
+ // Graphs that asked while this fetch ran are served by the same phonebook.
443
+ const wanted = [...this.#wants.keys()];
444
+ this.#wants.clear();
445
+ const wantedWallets = [...this.#wantedWallets];
446
+ this.#wantedWallets.clear();
447
+ const unresolved = new Set(await this.#unresolvedWantsOf(wanted, lifetime));
448
+ const unresolvedWallets = await this.#unresolvedWalletsOf(wantedWallets, lifetime);
449
+ // Closed (stop()) while checking: a closed fetcher reports nothing, meters
450
+ // nothing and schedules no recovery for a host that is shutting down.
451
+ if (lifetime.aborted)
452
+ return;
453
+ const resolved = wanted.filter((contextGraphId) => !unresolved.has(contextGraphId));
454
+ const now = this.#now();
455
+ // `empty`: peers answered but served no rows (a just-started or lean Core);
456
+ // like `failed`, it keeps the short cooldown so another peer is asked soon.
457
+ const outcome = networkPhonebook
458
+ || (fetchedTriples > 0 && unresolved.size === 0 && unresolvedWallets.length === 0)
459
+ ? 'complete'
460
+ : fetchedTriples > 0 ? 'partial' : answeredEmpty ? 'empty' : 'failed';
461
+ this.#nextEligibleAt = now + (outcome === 'failed' || outcome === 'empty'
462
+ ? this.#failureCooldownMs
463
+ : this.#cooldownMs);
464
+ if (networkPhonebook) {
465
+ for (const contextGraphId of unresolved) {
466
+ setBounded(this.#curatorMissUntil, contextGraphId, now + this.#curatorMissSuppressionMs, this.#maxStateEntries);
467
+ }
468
+ }
469
+ const durationMs = now - startedAt;
470
+ this.#recordMetrics(trigger, outcome, resolved.length > 0, durationMs);
471
+ const firstWanted = wanted[0] ?? 'none';
472
+ this.#deps.logInfo(`On-demand agents phonebook fetch: trigger=${trigger} `
473
+ + `graph=${firstWanted}${wanted.length > 1 ? ` (+${wanted.length - 1})` : ''} `
474
+ + `peers=[${peerSummaries.join(' ')}] fetched=${fetchedTriples} inserted=${insertedTriples} `
475
+ + `durationMs=${durationMs} `
476
+ + `curatorResolved=${resolved.length}/${wanted.length} outcome=${outcome} `
477
+ + `nextFetchInMs=${this.#nextEligibleAt - now}`
478
+ + (wantedWallets.length > 0
479
+ ? ` recipientsResolved=${wantedWallets.length - unresolvedWallets.length}/${wantedWallets.length}`
480
+ : ''));
481
+ if (resolved.length > 0)
482
+ this.#deps.onCuratorsResolved(resolved);
483
+ }
484
+ async #unresolvedWallets(signal) {
485
+ return this.#unresolvedWalletsOf([...this.#wantedWallets], signal);
486
+ }
487
+ async #unresolvedWalletsOf(wallets, signal) {
488
+ const unresolved = [];
489
+ for (const wallet of wallets) {
490
+ const known = await this.#deps.recipientKeyKnown(wallet, signal).catch(() => false);
491
+ if (!known)
492
+ unresolved.push(wallet);
493
+ }
494
+ return unresolved;
495
+ }
496
+ async #unresolvedWants(signal) {
497
+ return this.#unresolvedWantsOf([...this.#wants.keys()], signal);
498
+ }
499
+ async #unresolvedWantsOf(contextGraphIds, signal) {
500
+ const unresolved = [];
501
+ for (const contextGraphId of contextGraphIds) {
502
+ const wallet = this.#deps.remoteCuratorWallet(contextGraphId);
503
+ if (wallet === null)
504
+ continue;
505
+ const known = await this.#deps.phonebookHasWallet(wallet, signal).catch(() => false);
506
+ if (!known)
507
+ unresolved.push(contextGraphId);
508
+ }
509
+ return unresolved;
510
+ }
511
+ /** Re-check the wanted graphs later; bounded, and a no-op while one is armed. */
512
+ #scheduleRecheck() {
513
+ if (this.#closed || this.#recheckTimer !== undefined)
514
+ return;
515
+ if (this.#rechecks >= this.#noPeerMaxRetries) {
516
+ // Stop polling; the next subscribe or reconcile pass asks again.
517
+ this.#wants.clear();
518
+ return;
519
+ }
520
+ this.#rechecks += 1;
521
+ const timer = setTimeout(() => {
522
+ if (this.#recheckTimer === timer)
523
+ this.#recheckTimer = undefined;
524
+ this.#maybeStart();
525
+ }, this.#noPeerRetryMs);
526
+ timer.unref?.();
527
+ this.#recheckTimer = timer;
528
+ }
529
+ #clearRecheck() {
530
+ if (this.#recheckTimer === undefined)
531
+ return;
532
+ clearTimeout(this.#recheckTimer);
533
+ this.#recheckTimer = undefined;
534
+ }
535
+ #recordMetrics(trigger, outcome, curatorResolved, durationMs) {
536
+ try {
537
+ const metrics = getMetrics();
538
+ metrics.agentsPhonebookFetchTotal.add(1, {
539
+ trigger,
540
+ outcome,
541
+ curator_resolved: curatorResolved ? 'true' : 'false',
542
+ });
543
+ if (outcome !== 'no-peers') {
544
+ metrics.agentsPhonebookFetchDurationMs.record(durationMs, { trigger, outcome });
545
+ }
546
+ }
547
+ catch {
548
+ // Telemetry never changes fetch behaviour.
549
+ }
550
+ }
551
+ }
552
+ /**
553
+ * One fetcher per agent-like host, created on first use. Keyed by host
554
+ * identity rather than stored on the class, so prototype-bound test hosts own
555
+ * one exactly as a constructed agent does (the same pattern as the finalized
556
+ * authority cold-resolution runtime).
557
+ */
558
+ const fetchersByHost = new WeakMap();
559
+ export function onDemandAgentsPhonebookFor(host, create) {
560
+ let fetcher = fetchersByHost.get(host);
561
+ if (fetcher === undefined) {
562
+ fetcher = create();
563
+ fetchersByHost.set(host, fetcher);
564
+ }
565
+ return fetcher;
566
+ }
567
+ /** The host's fetcher if one was ever created; lifecycle hooks never create one. */
568
+ export function peekOnDemandAgentsPhonebook(host) {
569
+ return fetchersByHost.get(host);
570
+ }
571
+ //# sourceMappingURL=on-demand-agents-phonebook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"on-demand-agents-phonebook.js","sourceRoot":"","sources":["../../src/sync/on-demand-agents-phonebook.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"peer-connection.d.ts","sourceRoot":"","sources":["../../src/sync/peer-connection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,iFAAiF;IACjF,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,CAAC;QACjD,KAAK,IAAI,IAAI,CAAC;QACd,MAAM,IAAI,IAAI,CAAC;KAChB,CAAC,GAAG,IAAI,CAAC;IACV,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACjG,eAAe,CAAC,UAAU,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAClF,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC;CACzF;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,uBAAuB,CAAC;IAC/B,OAAO,EAAE,eAAe,CAAC;IACzB,GAAG,EAAE,gBAAgB,CAAC;IACtB,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;CACpC;AAED,qFAAqF;AACrF,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,yBAAyB,EAClC,UAAU,EAAE,kBAAkB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAkEf"}
1
+ {"version":3,"file":"peer-connection.d.ts","sourceRoot":"","sources":["../../src/sync/peer-connection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,iFAAiF;IACjF,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,CAAC;QACjD,KAAK,IAAI,IAAI,CAAC;QACd,MAAM,IAAI,IAAI,CAAC;KAChB,CAAC,GAAG,IAAI,CAAC;IACV,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACjG,eAAe,CAAC,UAAU,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAClF,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC;CACzF;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,uBAAuB,CAAC;IAC/B,OAAO,EAAE,eAAe,CAAC;IACzB,GAAG,EAAE,gBAAgB,CAAC;IACtB,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;CACpC;AAED,qFAAqF;AACrF,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,yBAAyB,EAClC,UAAU,EAAE,kBAAkB,GAC7B,OAAO,CAAC,IAAI,CAAC,CA0Ef"}
@@ -1,3 +1,4 @@
1
+ import { NetworkAdmissionProbeError } from '../p2p/network-admission-coordinator.js';
1
2
  /** Connection policy belongs to sync; the generic lifetime owns only supervision. */
2
3
  export async function syncOpenedPeerConnection(context, connection) {
3
4
  const { ports, session, ctx, log } = context;
@@ -22,8 +23,16 @@ export async function syncOpenedPeerConnection(context, connection) {
22
23
  }
23
24
  catch (err) {
24
25
  signal.throwIfAborted();
25
- const message = err instanceof Error ? err.message : String(err);
26
- log.warn(ctx, `Network admission probe failed for ${remotePeer.slice(-8)} on connect: ${message}`);
26
+ // The coordinator logs a failed probe itself, once, with the reason and
27
+ // the backoff it starts (see NetworkAdmissionProbeError). Logging the
28
+ // error again here ran once per connection callback, including every
29
+ // reconnect skipped inside that backoff, which made this the hottest
30
+ // network-churn warning (GH#1578). Any other failure has no owner that
31
+ // reports it, so it is still logged here.
32
+ if (!(err instanceof NetworkAdmissionProbeError)) {
33
+ const message = err instanceof Error ? err.message : String(err);
34
+ log.warn(ctx, `Network admission probe failed for ${remotePeer.slice(-8)} on connect: ${message}`);
35
+ }
27
36
  rejectCatalogReplay();
28
37
  return;
29
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"peer-connection.js","sourceRoot":"","sources":["../../src/sync/peer-connection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"peer-connection.js","sourceRoot":"","sources":["../../src/sync/peer-connection.ts"],"names":[],"mappings":"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"}