@origintrail-official/dkg-agent 10.0.20 → 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 (535) 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/context-graph-member-proof.d.ts +13 -0
  18. package/dist/context-graph-member-proof.d.ts.map +1 -1
  19. package/dist/context-graph-member-proof.js +36 -0
  20. package/dist/context-graph-member-proof.js.map +1 -1
  21. package/dist/context-graph-membership-persist-scheduler.d.ts +7 -23
  22. package/dist/context-graph-membership-persist-scheduler.d.ts.map +1 -1
  23. package/dist/context-graph-membership-persist-scheduler.js +12 -88
  24. package/dist/context-graph-membership-persist-scheduler.js.map +1 -1
  25. package/dist/context-graph-meta-projection.d.ts +13 -2
  26. package/dist/context-graph-meta-projection.d.ts.map +1 -1
  27. package/dist/context-graph-meta-projection.js +61 -24
  28. package/dist/context-graph-meta-projection.js.map +1 -1
  29. package/dist/context-graph-private-meta-proof.d.ts +5 -0
  30. package/dist/context-graph-private-meta-proof.d.ts.map +1 -1
  31. package/dist/context-graph-private-meta-proof.js +23 -0
  32. package/dist/context-graph-private-meta-proof.js.map +1 -1
  33. package/dist/context-graph-read-authority.d.ts +13 -0
  34. package/dist/context-graph-read-authority.d.ts.map +1 -1
  35. package/dist/context-graph-read-authority.js +23 -3
  36. package/dist/context-graph-read-authority.js.map +1 -1
  37. package/dist/context-graph-storage-discovery.d.ts +11 -2
  38. package/dist/context-graph-storage-discovery.d.ts.map +1 -1
  39. package/dist/context-graph-storage-discovery.js +11 -2
  40. package/dist/context-graph-storage-discovery.js.map +1 -1
  41. package/dist/context-graph-subscription-persist-scheduler.d.ts +52 -0
  42. package/dist/context-graph-subscription-persist-scheduler.d.ts.map +1 -0
  43. package/dist/context-graph-subscription-persist-scheduler.js +78 -0
  44. package/dist/context-graph-subscription-persist-scheduler.js.map +1 -0
  45. package/dist/curator-dial-address.d.ts +16 -0
  46. package/dist/curator-dial-address.d.ts.map +1 -0
  47. package/dist/curator-dial-address.js +58 -0
  48. package/dist/curator-dial-address.js.map +1 -0
  49. package/dist/curator-meta-refresh.d.ts +2 -0
  50. package/dist/curator-meta-refresh.d.ts.map +1 -1
  51. package/dist/curator-meta-refresh.js +2 -44
  52. package/dist/curator-meta-refresh.js.map +1 -1
  53. package/dist/curator-peer-connection.d.ts +21 -0
  54. package/dist/curator-peer-connection.d.ts.map +1 -0
  55. package/dist/curator-peer-connection.js +41 -0
  56. package/dist/curator-peer-connection.js.map +1 -0
  57. package/dist/dkg-agent-base.d.ts +94 -22
  58. package/dist/dkg-agent-base.d.ts.map +1 -1
  59. package/dist/dkg-agent-base.js +97 -144
  60. package/dist/dkg-agent-base.js.map +1 -1
  61. package/dist/dkg-agent-cg-registry.d.ts +10 -0
  62. package/dist/dkg-agent-cg-registry.d.ts.map +1 -1
  63. package/dist/dkg-agent-cg-registry.js +176 -115
  64. package/dist/dkg-agent-cg-registry.js.map +1 -1
  65. package/dist/dkg-agent-cg-resolve.d.ts +6 -4
  66. package/dist/dkg-agent-cg-resolve.d.ts.map +1 -1
  67. package/dist/dkg-agent-cg-resolve.js +22 -16
  68. package/dist/dkg-agent-cg-resolve.js.map +1 -1
  69. package/dist/dkg-agent-constants.d.ts +4 -2
  70. package/dist/dkg-agent-constants.d.ts.map +1 -1
  71. package/dist/dkg-agent-constants.js +4 -2
  72. package/dist/dkg-agent-constants.js.map +1 -1
  73. package/dist/dkg-agent-crypto.d.ts +101 -21
  74. package/dist/dkg-agent-crypto.d.ts.map +1 -1
  75. package/dist/dkg-agent-crypto.js +670 -152
  76. package/dist/dkg-agent-crypto.js.map +1 -1
  77. package/dist/dkg-agent-helpers.d.ts +2 -2
  78. package/dist/dkg-agent-helpers.d.ts.map +1 -1
  79. package/dist/dkg-agent-helpers.js +3 -3
  80. package/dist/dkg-agent-helpers.js.map +1 -1
  81. package/dist/dkg-agent-join.d.ts +12 -1
  82. package/dist/dkg-agent-join.d.ts.map +1 -1
  83. package/dist/dkg-agent-join.js +80 -92
  84. package/dist/dkg-agent-join.js.map +1 -1
  85. package/dist/dkg-agent-lifecycle.d.ts +58 -15
  86. package/dist/dkg-agent-lifecycle.d.ts.map +1 -1
  87. package/dist/dkg-agent-lifecycle.js +295 -114
  88. package/dist/dkg-agent-lifecycle.js.map +1 -1
  89. package/dist/dkg-agent-publish.d.ts +33 -40
  90. package/dist/dkg-agent-publish.d.ts.map +1 -1
  91. package/dist/dkg-agent-publish.js +190 -256
  92. package/dist/dkg-agent-publish.js.map +1 -1
  93. package/dist/dkg-agent-query.d.ts +7 -0
  94. package/dist/dkg-agent-query.d.ts.map +1 -1
  95. package/dist/dkg-agent-query.js +75 -63
  96. package/dist/dkg-agent-query.js.map +1 -1
  97. package/dist/dkg-agent-registered-private-empty-vm.d.ts +70 -0
  98. package/dist/dkg-agent-registered-private-empty-vm.d.ts.map +1 -0
  99. package/dist/dkg-agent-registered-private-empty-vm.js +133 -0
  100. package/dist/dkg-agent-registered-private-empty-vm.js.map +1 -0
  101. package/dist/dkg-agent-rfc64-catalog-auto-publish.d.ts +8 -3
  102. package/dist/dkg-agent-rfc64-catalog-auto-publish.d.ts.map +1 -1
  103. package/dist/dkg-agent-rfc64-catalog-auto-publish.js +45 -51
  104. package/dist/dkg-agent-rfc64-catalog-auto-publish.js.map +1 -1
  105. package/dist/dkg-agent-rfc64-catalog.d.ts +63 -87
  106. package/dist/dkg-agent-rfc64-catalog.d.ts.map +1 -1
  107. package/dist/dkg-agent-rfc64-catalog.js +595 -551
  108. package/dist/dkg-agent-rfc64-catalog.js.map +1 -1
  109. package/dist/dkg-agent-swm-host.d.ts +43 -52
  110. package/dist/dkg-agent-swm-host.d.ts.map +1 -1
  111. package/dist/dkg-agent-swm-host.js +629 -812
  112. package/dist/dkg-agent-swm-host.js.map +1 -1
  113. package/dist/dkg-agent-swm-state.d.ts +15 -0
  114. package/dist/dkg-agent-swm-state.d.ts.map +1 -1
  115. package/dist/dkg-agent-swm-state.js +43 -0
  116. package/dist/dkg-agent-swm-state.js.map +1 -1
  117. package/dist/dkg-agent-swm-substrate.d.ts +2 -0
  118. package/dist/dkg-agent-swm-substrate.d.ts.map +1 -1
  119. package/dist/dkg-agent-swm-substrate.js +110 -53
  120. package/dist/dkg-agent-swm-substrate.js.map +1 -1
  121. package/dist/dkg-agent-types.d.ts +62 -26
  122. package/dist/dkg-agent-types.d.ts.map +1 -1
  123. package/dist/dkg-agent-types.js.map +1 -1
  124. package/dist/dkg-agent-vm-promotion.d.ts +2 -0
  125. package/dist/dkg-agent-vm-promotion.d.ts.map +1 -1
  126. package/dist/dkg-agent-vm-promotion.js +39 -5
  127. package/dist/dkg-agent-vm-promotion.js.map +1 -1
  128. package/dist/dkg-agent.d.ts +8 -1
  129. package/dist/dkg-agent.d.ts.map +1 -1
  130. package/dist/dkg-agent.js +75 -45
  131. package/dist/dkg-agent.js.map +1 -1
  132. package/dist/exact-graph-content-verifier.d.ts.map +1 -1
  133. package/dist/exact-graph-content-verifier.js +3 -2
  134. package/dist/exact-graph-content-verifier.js.map +1 -1
  135. package/dist/finalization-handler.d.ts +19 -207
  136. package/dist/finalization-handler.d.ts.map +1 -1
  137. package/dist/finalization-handler.js +79 -1646
  138. package/dist/finalization-handler.js.map +1 -1
  139. package/dist/finalization-recovery-worker.js +1 -1
  140. package/dist/finalization-recovery-worker.js.map +1 -1
  141. package/dist/finalized-authority-cold-resolution.d.ts +6 -1
  142. package/dist/finalized-authority-cold-resolution.d.ts.map +1 -1
  143. package/dist/finalized-authority-cold-resolution.js +22 -3
  144. package/dist/finalized-authority-cold-resolution.js.map +1 -1
  145. package/dist/gossip-session.d.ts +29 -0
  146. package/dist/gossip-session.d.ts.map +1 -0
  147. package/dist/gossip-session.js +48 -0
  148. package/dist/gossip-session.js.map +1 -0
  149. package/dist/index.d.ts +3 -0
  150. package/dist/index.d.ts.map +1 -1
  151. package/dist/index.js +4 -0
  152. package/dist/index.js.map +1 -1
  153. package/dist/internal/context-graph-authority/context-graph-agent-gate-authority.d.ts +5 -5
  154. package/dist/internal/context-graph-authority/context-graph-agent-gate-authority.d.ts.map +1 -1
  155. package/dist/internal/context-graph-authority/context-graph-agent-gate-authority.js +59 -49
  156. package/dist/internal/context-graph-authority/context-graph-agent-gate-authority.js.map +1 -1
  157. package/dist/internal/context-graph-authority/finalized-target-projection.d.ts +17 -0
  158. package/dist/internal/context-graph-authority/finalized-target-projection.d.ts.map +1 -0
  159. package/dist/internal/context-graph-authority/finalized-target-projection.js +36 -0
  160. package/dist/internal/context-graph-authority/finalized-target-projection.js.map +1 -0
  161. package/dist/internal/context-graph-authority/swm-transport-authority.d.ts +43 -7
  162. package/dist/internal/context-graph-authority/swm-transport-authority.d.ts.map +1 -1
  163. package/dist/internal/context-graph-authority/swm-transport-authority.js +135 -18
  164. package/dist/internal/context-graph-authority/swm-transport-authority.js.map +1 -1
  165. package/dist/internal/context-graph-binding-abort.d.ts +3 -0
  166. package/dist/internal/context-graph-binding-abort.d.ts.map +1 -0
  167. package/dist/internal/context-graph-binding-abort.js +32 -0
  168. package/dist/internal/context-graph-binding-abort.js.map +1 -0
  169. package/dist/internal/context-graph-cache-invalidating-store.d.ts +3 -0
  170. package/dist/internal/context-graph-cache-invalidating-store.d.ts.map +1 -0
  171. package/dist/internal/context-graph-cache-invalidating-store.js +167 -0
  172. package/dist/internal/context-graph-cache-invalidating-store.js.map +1 -0
  173. package/dist/internal/context-graph-meta-record-copy.d.ts +3 -0
  174. package/dist/internal/context-graph-meta-record-copy.d.ts.map +1 -0
  175. package/dist/internal/context-graph-meta-record-copy.js +21 -0
  176. package/dist/internal/context-graph-meta-record-copy.js.map +1 -0
  177. package/dist/internal/gossip/host-mode-handler.d.ts +11 -0
  178. package/dist/internal/gossip/host-mode-handler.d.ts.map +1 -0
  179. package/dist/internal/gossip/host-mode-handler.js +41 -0
  180. package/dist/internal/gossip/host-mode-handler.js.map +1 -0
  181. package/dist/internal/join-encryption-key-bundle.d.ts +10 -0
  182. package/dist/internal/join-encryption-key-bundle.d.ts.map +1 -0
  183. package/dist/internal/join-encryption-key-bundle.js +72 -0
  184. package/dist/internal/join-encryption-key-bundle.js.map +1 -0
  185. package/dist/internal/knowledge-asset-vm-publish-request.d.ts +31 -0
  186. package/dist/internal/knowledge-asset-vm-publish-request.d.ts.map +1 -0
  187. package/dist/internal/knowledge-asset-vm-publish-request.js +91 -0
  188. package/dist/internal/knowledge-asset-vm-publish-request.js.map +1 -0
  189. package/dist/internal/lifecycle-sync-policy.d.ts +5 -0
  190. package/dist/internal/lifecycle-sync-policy.d.ts.map +1 -0
  191. package/dist/internal/lifecycle-sync-policy.js +12 -0
  192. package/dist/internal/lifecycle-sync-policy.js.map +1 -0
  193. package/dist/internal/local-private-member.d.ts +14 -0
  194. package/dist/internal/local-private-member.d.ts.map +1 -0
  195. package/dist/internal/local-private-member.js +21 -0
  196. package/dist/internal/local-private-member.js.map +1 -0
  197. package/dist/internal/promote/assertion-promote-precommit.d.ts +41 -1
  198. package/dist/internal/promote/assertion-promote-precommit.d.ts.map +1 -1
  199. package/dist/internal/promote/assertion-promote-precommit.js +74 -5
  200. package/dist/internal/promote/assertion-promote-precommit.js.map +1 -1
  201. package/dist/internal/storage-ack-owned-request.d.ts +16 -0
  202. package/dist/internal/storage-ack-owned-request.d.ts.map +1 -0
  203. package/dist/internal/storage-ack-owned-request.js +16 -0
  204. package/dist/internal/storage-ack-owned-request.js.map +1 -0
  205. package/dist/internal/vm-reconcile-local-admission-wait.d.ts +96 -0
  206. package/dist/internal/vm-reconcile-local-admission-wait.d.ts.map +1 -0
  207. package/dist/internal/vm-reconcile-local-admission-wait.js +226 -0
  208. package/dist/internal/vm-reconcile-local-admission-wait.js.map +1 -0
  209. package/dist/internal/vm-reconcile-read-authority.d.ts +27 -0
  210. package/dist/internal/vm-reconcile-read-authority.d.ts.map +1 -0
  211. package/dist/internal/vm-reconcile-read-authority.js +33 -0
  212. package/dist/internal/vm-reconcile-read-authority.js.map +1 -0
  213. package/dist/internal/vm-reconcile-sweep-admission.d.ts +2 -0
  214. package/dist/internal/vm-reconcile-sweep-admission.d.ts.map +1 -1
  215. package/dist/internal/vm-reconcile-sweep.d.ts +16 -4
  216. package/dist/internal/vm-reconcile-sweep.d.ts.map +1 -1
  217. package/dist/internal/vm-reconcile-sweep.js +91 -50
  218. package/dist/internal/vm-reconcile-sweep.js.map +1 -1
  219. package/dist/internal/workspace-projected-delegatees.d.ts +3 -0
  220. package/dist/internal/workspace-projected-delegatees.d.ts.map +1 -0
  221. package/dist/internal/workspace-projected-delegatees.js +34 -0
  222. package/dist/internal/workspace-projected-delegatees.js.map +1 -0
  223. package/dist/join-approval-restart-projection.d.ts +14 -0
  224. package/dist/join-approval-restart-projection.d.ts.map +1 -0
  225. package/dist/join-approval-restart-projection.js +32 -0
  226. package/dist/join-approval-restart-projection.js.map +1 -0
  227. package/dist/keyed-persist-scheduler.d.ts +72 -0
  228. package/dist/keyed-persist-scheduler.d.ts.map +1 -0
  229. package/dist/keyed-persist-scheduler.js +140 -0
  230. package/dist/keyed-persist-scheduler.js.map +1 -0
  231. package/dist/map-with-concurrency.d.ts +7 -0
  232. package/dist/map-with-concurrency.d.ts.map +1 -1
  233. package/dist/map-with-concurrency.js +36 -0
  234. package/dist/map-with-concurrency.js.map +1 -1
  235. package/dist/p2p/network-admission-coordinator.d.ts +15 -0
  236. package/dist/p2p/network-admission-coordinator.d.ts.map +1 -1
  237. package/dist/p2p/network-admission-coordinator.js +20 -2
  238. package/dist/p2p/network-admission-coordinator.js.map +1 -1
  239. package/dist/prepare-unscoped-context-graph-read-checks.d.ts.map +1 -1
  240. package/dist/prepare-unscoped-context-graph-read-checks.js +12 -0
  241. package/dist/prepare-unscoped-context-graph-read-checks.js.map +1 -1
  242. package/dist/registered-context-graph-authority.d.ts +7 -0
  243. package/dist/registered-context-graph-authority.d.ts.map +1 -1
  244. package/dist/registered-private-empty-vm-attempt-v1.d.ts +34 -0
  245. package/dist/registered-private-empty-vm-attempt-v1.d.ts.map +1 -0
  246. package/dist/registered-private-empty-vm-attempt-v1.js +120 -0
  247. package/dist/registered-private-empty-vm-attempt-v1.js.map +1 -0
  248. package/dist/reserved-ka-id-allocation.d.ts +12 -0
  249. package/dist/reserved-ka-id-allocation.d.ts.map +1 -0
  250. package/dist/reserved-ka-id-allocation.js +25 -0
  251. package/dist/reserved-ka-id-allocation.js.map +1 -0
  252. package/dist/rfc64/authority-rpc-circuit-breaker-v1.d.ts +5 -3
  253. package/dist/rfc64/authority-rpc-circuit-breaker-v1.d.ts.map +1 -1
  254. package/dist/rfc64/authority-rpc-circuit-breaker-v1.js +9 -0
  255. package/dist/rfc64/authority-rpc-circuit-breaker-v1.js.map +1 -1
  256. package/dist/rfc64/catalog-completion-evidence-v1.d.ts +38 -0
  257. package/dist/rfc64/catalog-completion-evidence-v1.d.ts.map +1 -0
  258. package/dist/rfc64/catalog-completion-evidence-v1.js +49 -0
  259. package/dist/rfc64/catalog-completion-evidence-v1.js.map +1 -0
  260. package/dist/rfc64/catalog-operational-applied-heads-v1.d.ts +6 -3
  261. package/dist/rfc64/catalog-operational-applied-heads-v1.d.ts.map +1 -1
  262. package/dist/rfc64/catalog-operational-applied-heads-v1.js +6 -3
  263. package/dist/rfc64/catalog-operational-applied-heads-v1.js.map +1 -1
  264. package/dist/rfc64/catalog-operational-reads-v1.d.ts +13 -0
  265. package/dist/rfc64/catalog-operational-reads-v1.d.ts.map +1 -0
  266. package/dist/rfc64/catalog-operational-reads-v1.js +56 -0
  267. package/dist/rfc64/catalog-operational-reads-v1.js.map +1 -0
  268. package/dist/rfc64/catalog-operational-targets-v1.d.ts +55 -0
  269. package/dist/rfc64/catalog-operational-targets-v1.d.ts.map +1 -0
  270. package/dist/rfc64/catalog-operational-targets-v1.js +379 -0
  271. package/dist/rfc64/catalog-operational-targets-v1.js.map +1 -0
  272. package/dist/rfc64/catalog-replay-recovery-runtime-v1.d.ts +2 -0
  273. package/dist/rfc64/catalog-replay-recovery-runtime-v1.d.ts.map +1 -1
  274. package/dist/rfc64/catalog-replay-recovery-runtime-v1.js +18 -25
  275. package/dist/rfc64/catalog-replay-recovery-runtime-v1.js.map +1 -1
  276. package/dist/rfc64/legacy-swm-boundary-codec-v1.d.ts +25 -0
  277. package/dist/rfc64/legacy-swm-boundary-codec-v1.d.ts.map +1 -0
  278. package/dist/rfc64/legacy-swm-boundary-codec-v1.js +127 -0
  279. package/dist/rfc64/legacy-swm-boundary-codec-v1.js.map +1 -0
  280. package/dist/rfc64/legacy-swm-boundary-v1.d.ts +12 -0
  281. package/dist/rfc64/legacy-swm-boundary-v1.d.ts.map +1 -1
  282. package/dist/rfc64/legacy-swm-boundary-v1.js +83 -144
  283. package/dist/rfc64/legacy-swm-boundary-v1.js.map +1 -1
  284. package/dist/rfc64/private-catalog-subscription-readiness-v1.d.ts +33 -0
  285. package/dist/rfc64/private-catalog-subscription-readiness-v1.d.ts.map +1 -0
  286. package/dist/rfc64/private-catalog-subscription-readiness-v1.js +97 -0
  287. package/dist/rfc64/private-catalog-subscription-readiness-v1.js.map +1 -0
  288. package/dist/rfc64/private-read-roster-v1.d.ts +14 -0
  289. package/dist/rfc64/private-read-roster-v1.d.ts.map +1 -0
  290. package/dist/rfc64/private-read-roster-v1.js +57 -0
  291. package/dist/rfc64/private-read-roster-v1.js.map +1 -0
  292. package/dist/rfc64/registered-private-empty-vm-proof-v1.d.ts +20 -0
  293. package/dist/rfc64/registered-private-empty-vm-proof-v1.d.ts.map +1 -0
  294. package/dist/rfc64/registered-private-empty-vm-proof-v1.js +26 -0
  295. package/dist/rfc64/registered-private-empty-vm-proof-v1.js.map +1 -0
  296. package/dist/rfc64/swm-inventory-shadow-runtime-v1.d.ts +3 -1
  297. package/dist/rfc64/swm-inventory-shadow-runtime-v1.d.ts.map +1 -1
  298. package/dist/rfc64/swm-inventory-shadow-runtime-v1.js +34 -0
  299. package/dist/rfc64/swm-inventory-shadow-runtime-v1.js.map +1 -1
  300. package/dist/sync/auth/pipe-request-tail.d.ts +5 -1
  301. package/dist/sync/auth/pipe-request-tail.d.ts.map +1 -1
  302. package/dist/sync/auth/pipe-request-tail.js +13 -3
  303. package/dist/sync/auth/pipe-request-tail.js.map +1 -1
  304. package/dist/sync/auth/request-build.d.ts +3 -0
  305. package/dist/sync/auth/request-build.d.ts.map +1 -1
  306. package/dist/sync/auth/request-build.js +11 -2
  307. package/dist/sync/auth/request-build.js.map +1 -1
  308. package/dist/sync/backpressure.d.ts +27 -16
  309. package/dist/sync/backpressure.d.ts.map +1 -1
  310. package/dist/sync/backpressure.js +66 -40
  311. package/dist/sync/backpressure.js.map +1 -1
  312. package/dist/sync/catchup-policy.d.ts +2 -0
  313. package/dist/sync/catchup-policy.d.ts.map +1 -1
  314. package/dist/sync/catchup-policy.js +2 -0
  315. package/dist/sync/catchup-policy.js.map +1 -1
  316. package/dist/sync/exact-assets.d.ts +7 -5
  317. package/dist/sync/exact-assets.d.ts.map +1 -1
  318. package/dist/sync/exact-assets.js +13 -8
  319. package/dist/sync/exact-assets.js.map +1 -1
  320. package/dist/sync/exact-batch-observation.d.ts +3 -0
  321. package/dist/sync/exact-batch-observation.d.ts.map +1 -0
  322. package/dist/sync/exact-batch-observation.js +13 -0
  323. package/dist/sync/exact-batch-observation.js.map +1 -0
  324. package/dist/sync/exact-batch-stream-capability.d.ts +24 -0
  325. package/dist/sync/exact-batch-stream-capability.d.ts.map +1 -0
  326. package/dist/sync/exact-batch-stream-capability.js +88 -0
  327. package/dist/sync/exact-batch-stream-capability.js.map +1 -0
  328. package/dist/sync/exact-batch-stream-contract.d.ts +78 -0
  329. package/dist/sync/exact-batch-stream-contract.d.ts.map +1 -0
  330. package/dist/sync/exact-batch-stream-contract.js +206 -0
  331. package/dist/sync/exact-batch-stream-contract.js.map +1 -0
  332. package/dist/sync/peer-connection.d.ts.map +1 -1
  333. package/dist/sync/peer-connection.js +11 -2
  334. package/dist/sync/peer-connection.js.map +1 -1
  335. package/dist/sync/priority-admission-queue.d.ts +17 -0
  336. package/dist/sync/priority-admission-queue.d.ts.map +1 -1
  337. package/dist/sync/priority-admission-queue.js +58 -37
  338. package/dist/sync/priority-admission-queue.js.map +1 -1
  339. package/dist/sync/requester/admission-boundary.d.ts +12 -0
  340. package/dist/sync/requester/admission-boundary.d.ts.map +1 -0
  341. package/dist/sync/requester/admission-boundary.js +22 -0
  342. package/dist/sync/requester/admission-boundary.js.map +1 -0
  343. package/dist/sync/requester/durable-sync.d.ts +2 -1
  344. package/dist/sync/requester/durable-sync.d.ts.map +1 -1
  345. package/dist/sync/requester/durable-sync.js +3 -188
  346. package/dist/sync/requester/durable-sync.js.map +1 -1
  347. package/dist/sync/requester/exact-batch-stream-driver.d.ts +83 -0
  348. package/dist/sync/requester/exact-batch-stream-driver.d.ts.map +1 -0
  349. package/dist/sync/requester/exact-batch-stream-driver.js +299 -0
  350. package/dist/sync/requester/exact-batch-stream-driver.js.map +1 -0
  351. package/dist/sync/requester/exact-batch-stream.d.ts +72 -0
  352. package/dist/sync/requester/exact-batch-stream.d.ts.map +1 -0
  353. package/dist/sync/requester/exact-batch-stream.js +267 -0
  354. package/dist/sync/requester/exact-batch-stream.js.map +1 -0
  355. package/dist/sync/requester/exact-recovery-transport.d.ts +19 -0
  356. package/dist/sync/requester/exact-recovery-transport.d.ts.map +1 -0
  357. package/dist/sync/requester/exact-recovery-transport.js +3 -0
  358. package/dist/sync/requester/exact-recovery-transport.js.map +1 -0
  359. package/dist/sync/requester/finalized-swm-twin-reconciliation.js +12 -3
  360. package/dist/sync/requester/finalized-swm-twin-reconciliation.js.map +1 -1
  361. package/dist/sync/requester/graph-scoped-materialization.d.ts.map +1 -1
  362. package/dist/sync/requester/graph-scoped-materialization.js +58 -24
  363. package/dist/sync/requester/graph-scoped-materialization.js.map +1 -1
  364. package/dist/sync/requester/page-fetch.d.ts +7 -0
  365. package/dist/sync/requester/page-fetch.d.ts.map +1 -1
  366. package/dist/sync/requester/page-fetch.js +103 -49
  367. package/dist/sync/requester/page-fetch.js.map +1 -1
  368. package/dist/sync/requester/shared-memory-sync.d.ts +10 -5
  369. package/dist/sync/requester/shared-memory-sync.d.ts.map +1 -1
  370. package/dist/sync/requester/shared-memory-sync.js +149 -150
  371. package/dist/sync/requester/shared-memory-sync.js.map +1 -1
  372. package/dist/sync/requester/swm-materialization-memo.d.ts +12 -0
  373. package/dist/sync/requester/swm-materialization-memo.d.ts.map +1 -0
  374. package/dist/sync/requester/swm-materialization-memo.js +54 -0
  375. package/dist/sync/requester/swm-materialization-memo.js.map +1 -0
  376. package/dist/sync/requester/swm-recovery.d.ts +3 -29
  377. package/dist/sync/requester/swm-recovery.d.ts.map +1 -1
  378. package/dist/sync/requester/swm-recovery.js +11 -10
  379. package/dist/sync/requester/swm-recovery.js.map +1 -1
  380. package/dist/sync/requester/swm-snapshot-materializer.d.ts.map +1 -1
  381. package/dist/sync/requester/swm-snapshot-materializer.js +18 -0
  382. package/dist/sync/requester/swm-snapshot-materializer.js.map +1 -1
  383. package/dist/sync/requester/swm-target-executor.d.ts +6 -0
  384. package/dist/sync/requester/swm-target-executor.d.ts.map +1 -1
  385. package/dist/sync/requester/swm-target-executor.js +24 -3
  386. package/dist/sync/requester/swm-target-executor.js.map +1 -1
  387. package/dist/sync/requester/verified-asset-preparation.d.ts +9 -0
  388. package/dist/sync/requester/verified-asset-preparation.d.ts.map +1 -0
  389. package/dist/sync/requester/verified-asset-preparation.js +190 -0
  390. package/dist/sync/requester/verified-asset-preparation.js.map +1 -0
  391. package/dist/sync/responder/asset-metadata.d.ts +18 -0
  392. package/dist/sync/responder/asset-metadata.d.ts.map +1 -0
  393. package/dist/sync/responder/asset-metadata.js +27 -0
  394. package/dist/sync/responder/asset-metadata.js.map +1 -0
  395. package/dist/sync/responder/durable-data-request-policy.d.ts +2 -16
  396. package/dist/sync/responder/durable-data-request-policy.d.ts.map +1 -1
  397. package/dist/sync/responder/durable-data-request-policy.js +1 -31
  398. package/dist/sync/responder/durable-data-request-policy.js.map +1 -1
  399. package/dist/sync/responder/exact-asset-export-cache.d.ts +89 -0
  400. package/dist/sync/responder/exact-asset-export-cache.d.ts.map +1 -0
  401. package/dist/sync/responder/exact-asset-export-cache.js +550 -0
  402. package/dist/sync/responder/exact-asset-export-cache.js.map +1 -0
  403. package/dist/sync/responder/exact-batch-stream.d.ts +47 -0
  404. package/dist/sync/responder/exact-batch-stream.d.ts.map +1 -0
  405. package/dist/sync/responder/exact-batch-stream.js +151 -0
  406. package/dist/sync/responder/exact-batch-stream.js.map +1 -0
  407. package/dist/sync/responder/exact-data-session.d.ts +67 -0
  408. package/dist/sync/responder/exact-data-session.d.ts.map +1 -0
  409. package/dist/sync/responder/exact-data-session.js +130 -0
  410. package/dist/sync/responder/exact-data-session.js.map +1 -0
  411. package/dist/sync/responder/exact-graph-cursor-filter.d.ts +9 -0
  412. package/dist/sync/responder/exact-graph-cursor-filter.d.ts.map +1 -0
  413. package/dist/sync/responder/exact-graph-cursor-filter.js +101 -0
  414. package/dist/sync/responder/exact-graph-cursor-filter.js.map +1 -0
  415. package/dist/sync/responder/exact-graph-reader.d.ts +95 -0
  416. package/dist/sync/responder/exact-graph-reader.d.ts.map +1 -0
  417. package/dist/sync/responder/exact-graph-reader.js +623 -0
  418. package/dist/sync/responder/exact-graph-reader.js.map +1 -0
  419. package/dist/sync/responder/exact-page-reader.d.ts +37 -0
  420. package/dist/sync/responder/exact-page-reader.d.ts.map +1 -0
  421. package/dist/sync/responder/exact-page-reader.js +130 -0
  422. package/dist/sync/responder/exact-page-reader.js.map +1 -0
  423. package/dist/sync/responder/graph-plan.d.ts +19 -85
  424. package/dist/sync/responder/graph-plan.d.ts.map +1 -1
  425. package/dist/sync/responder/graph-plan.js +51 -988
  426. package/dist/sync/responder/graph-plan.js.map +1 -1
  427. package/dist/sync/responder/page-framing-policy.d.ts +31 -0
  428. package/dist/sync/responder/page-framing-policy.d.ts.map +1 -0
  429. package/dist/sync/responder/page-framing-policy.js +41 -0
  430. package/dist/sync/responder/page-framing-policy.js.map +1 -0
  431. package/dist/sync/responder/responder-row-page.d.ts +85 -0
  432. package/dist/sync/responder/responder-row-page.d.ts.map +1 -0
  433. package/dist/sync/responder/responder-row-page.js +181 -0
  434. package/dist/sync/responder/responder-row-page.js.map +1 -0
  435. package/dist/sync/responder/row-serialization.d.ts +34 -0
  436. package/dist/sync/responder/row-serialization.d.ts.map +1 -0
  437. package/dist/sync/responder/row-serialization.js +69 -0
  438. package/dist/sync/responder/row-serialization.js.map +1 -0
  439. package/dist/sync/responder/session-plan-memo.d.ts +20 -0
  440. package/dist/sync/responder/session-plan-memo.d.ts.map +1 -0
  441. package/dist/sync/responder/session-plan-memo.js +135 -0
  442. package/dist/sync/responder/session-plan-memo.js.map +1 -0
  443. package/dist/sync/responder/sync-handler.d.ts +18 -1
  444. package/dist/sync/responder/sync-handler.d.ts.map +1 -1
  445. package/dist/sync/responder/sync-handler.js +101 -57
  446. package/dist/sync/responder/sync-handler.js.map +1 -1
  447. package/dist/sync/shared-memory-completion.d.ts +30 -0
  448. package/dist/sync/shared-memory-completion.d.ts.map +1 -1
  449. package/dist/sync/shared-memory-completion.js +13 -0
  450. package/dist/sync/shared-memory-completion.js.map +1 -1
  451. package/dist/sync/wire-compression.d.ts +47 -0
  452. package/dist/sync/wire-compression.d.ts.map +1 -0
  453. package/dist/sync/wire-compression.js +111 -0
  454. package/dist/sync/wire-compression.js.map +1 -0
  455. package/dist/unscoped-query-consistency.d.ts +12 -0
  456. package/dist/unscoped-query-consistency.d.ts.map +1 -1
  457. package/dist/unscoped-query-consistency.js +17 -1
  458. package/dist/unscoped-query-consistency.js.map +1 -1
  459. package/dist/vm-promotion-audit.d.ts +2 -2
  460. package/dist/vm-promotion-audit.d.ts.map +1 -1
  461. package/dist/vm-promotion-audit.js +26 -9
  462. package/dist/vm-promotion-audit.js.map +1 -1
  463. package/dist/vm-reconcile-dispatcher.d.ts +42 -1
  464. package/dist/vm-reconcile-dispatcher.d.ts.map +1 -1
  465. package/dist/vm-reconcile-dispatcher.js +103 -4
  466. package/dist/vm-reconcile-dispatcher.js.map +1 -1
  467. package/dist/vm-reconcile-peer-topology.d.ts +7 -9
  468. package/dist/vm-reconcile-peer-topology.d.ts.map +1 -1
  469. package/dist/vm-reconcile-peer-topology.js +1 -37
  470. package/dist/vm-reconcile-peer-topology.js.map +1 -1
  471. package/dist/vm-recovery-candidate-order.d.ts +16 -0
  472. package/dist/vm-recovery-candidate-order.d.ts.map +1 -0
  473. package/dist/vm-recovery-candidate-order.js +24 -0
  474. package/dist/vm-recovery-candidate-order.js.map +1 -0
  475. package/dist/vm-recovery-core-transport-preference.d.ts +69 -0
  476. package/dist/vm-recovery-core-transport-preference.d.ts.map +1 -0
  477. package/dist/vm-recovery-core-transport-preference.js +131 -0
  478. package/dist/vm-recovery-core-transport-preference.js.map +1 -0
  479. package/dist/vm-recovery-experiment-policy.d.ts +24 -0
  480. package/dist/vm-recovery-experiment-policy.d.ts.map +1 -0
  481. package/dist/vm-recovery-experiment-policy.js +18 -0
  482. package/dist/vm-recovery-experiment-policy.js.map +1 -0
  483. package/dist/vm-recovery-footprint.d.ts +54 -0
  484. package/dist/vm-recovery-footprint.d.ts.map +1 -1
  485. package/dist/vm-recovery-footprint.js +88 -24
  486. package/dist/vm-recovery-footprint.js.map +1 -1
  487. package/dist/vm-recovery-microbatch.d.ts +2 -0
  488. package/dist/vm-recovery-microbatch.d.ts.map +1 -1
  489. package/dist/vm-recovery-microbatch.js +7 -3
  490. package/dist/vm-recovery-microbatch.js.map +1 -1
  491. package/dist/vm-recovery-pass-authority.d.ts +84 -0
  492. package/dist/vm-recovery-pass-authority.d.ts.map +1 -0
  493. package/dist/vm-recovery-pass-authority.js +126 -0
  494. package/dist/vm-recovery-pass-authority.js.map +1 -0
  495. package/dist/vm-recovery-phase-timing.d.ts +75 -0
  496. package/dist/vm-recovery-phase-timing.d.ts.map +1 -0
  497. package/dist/vm-recovery-phase-timing.js +236 -0
  498. package/dist/vm-recovery-phase-timing.js.map +1 -0
  499. package/dist/vm-recovery-preparation.d.ts +143 -0
  500. package/dist/vm-recovery-preparation.d.ts.map +1 -0
  501. package/dist/vm-recovery-preparation.js +433 -0
  502. package/dist/vm-recovery-preparation.js.map +1 -0
  503. package/dist/vm-recovery-provider-policy.d.ts +13 -1
  504. package/dist/vm-recovery-provider-policy.d.ts.map +1 -1
  505. package/dist/vm-recovery-provider-policy.js +37 -5
  506. package/dist/vm-recovery-provider-policy.js.map +1 -1
  507. package/dist/vm-recovery-stream-profile.d.ts +15 -0
  508. package/dist/vm-recovery-stream-profile.d.ts.map +1 -0
  509. package/dist/vm-recovery-stream-profile.js +53 -0
  510. package/dist/vm-recovery-stream-profile.js.map +1 -0
  511. package/dist/vm-recovery-stream-setback-policy.d.ts +54 -0
  512. package/dist/vm-recovery-stream-setback-policy.d.ts.map +1 -0
  513. package/dist/vm-recovery-stream-setback-policy.js +85 -0
  514. package/dist/vm-recovery-stream-setback-policy.js.map +1 -0
  515. package/dist/vm-recovery-timing-observer.d.ts +27 -0
  516. package/dist/vm-recovery-timing-observer.d.ts.map +1 -0
  517. package/dist/vm-recovery-timing-observer.js +49 -0
  518. package/dist/vm-recovery-timing-observer.js.map +1 -0
  519. package/dist/vm-recovery-transport-budget-policy.d.ts +32 -0
  520. package/dist/vm-recovery-transport-budget-policy.d.ts.map +1 -0
  521. package/dist/vm-recovery-transport-budget-policy.js +55 -0
  522. package/dist/vm-recovery-transport-budget-policy.js.map +1 -0
  523. package/dist/vm-recovery-transport-plan.d.ts +83 -0
  524. package/dist/vm-recovery-transport-plan.d.ts.map +1 -0
  525. package/dist/vm-recovery-transport-plan.js +117 -0
  526. package/dist/vm-recovery-transport-plan.js.map +1 -0
  527. package/package.json +17 -9
  528. package/dist/finalization-annotations.d.ts +0 -5
  529. package/dist/finalization-annotations.d.ts.map +0 -1
  530. package/dist/finalization-annotations.js +0 -6
  531. package/dist/finalization-annotations.js.map +0 -1
  532. package/dist/swm-ka-bound.d.ts +0 -21
  533. package/dist/swm-ka-bound.d.ts.map +0 -1
  534. package/dist/swm-ka-bound.js +0 -36
  535. package/dist/swm-ka-bound.js.map +0 -1
@@ -0,0 +1,433 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ import { withOwnedRpcRequestContext } from '@origintrail-official/dkg-chain';
3
+ import { runBoundedOperation } from './bounded-operation.js';
4
+ import { resolveBooleanSwitch } from './sync/backpressure.js';
5
+ import { MAX_EXACT_SYNC_ASSETS } from './sync/exact-assets.js';
6
+ import { VM_RECOVERY_FOOTPRINT_READ_TIMEOUT_MS, vmRecoveryFootprintFromUpdateContext, } from './vm-recovery-footprint.js';
7
+ /**
8
+ * Advisory preparation of the NEXT recovery batch's sizing metadata.
9
+ *
10
+ * While one exact batch transfers and commits, this owner reads the update
11
+ * context of a bounded stable prefix of the still-pending candidates, so the
12
+ * next planning pass finds those hints ready instead of re-reading them (or
13
+ * losing them to the local RPC governor's queue and truncating the batch).
14
+ *
15
+ * What it is NOT. A hint is planning evidence of exactly the kind a live
16
+ * `latest-bounded` read yields: it can change how work is packed and nothing
17
+ * else. It earns no holder credit, consumes no peer attempt, records no
18
+ * admission, touches no negative cache and marks no ordinal handled, attempted,
19
+ * reconciled or materialized. The chain root count/version/binding and the
20
+ * guarded atomic write that follow authenticate every asset independently.
21
+ *
22
+ * Bounds. One prepared batch (at most {@link MAX_EXACT_SYNC_ASSETS} KAs) is
23
+ * retained at a time; at most `maxSpeculativeReads` speculative reads are in
24
+ * flight, each a single RPC in the BACKGROUND class bound to the owner's
25
+ * signal; descriptors hold a handful of scalars (no quads or payloads) and are
26
+ * byte-accounted. Hints are single-use and expire; a stale generation, a lost
27
+ * recovery ownership or an abort turns every hint into a miss, and the caller's
28
+ * live path runs unchanged.
29
+ */
30
+ export const VM_RECOVERY_PREPARATION_LIMITS = Object.freeze({
31
+ /** One future batch, never more than the exact-asset hard selector limit. */
32
+ maxPreparedAssets: MAX_EXACT_SYNC_ASSETS,
33
+ /** Speculative KA-read tasks in flight at once (each is one RPC). */
34
+ maxSpeculativeReads: 2,
35
+ /**
36
+ * Per-read deadline of a speculative read. It runs off the critical path, so
37
+ * it may wait out a busy local RPC governor longer than a planning read could.
38
+ */
39
+ readTimeoutMs: 2 * VM_RECOVERY_FOOTPRINT_READ_TIMEOUT_MS,
40
+ /** A hint older than this at consumption is a miss. */
41
+ maxHintAgeMs: 60_000,
42
+ /** Explicit ceiling for retained descriptor memory. */
43
+ maxRetainedBytes: 16 * 1024,
44
+ /** Live planning reads in flight at once when preparation is enabled. */
45
+ planningReadConcurrency: 3,
46
+ /**
47
+ * Deadline of a live planning read when preparation is enabled. Admission
48
+ * wait in the local RPC governor counts inside it, and one unresolved first
49
+ * candidate truncates the whole batch to a single asset, so a busy lane is
50
+ * given longer than the unprepared path's limit before a read is abandoned.
51
+ */
52
+ planningReadTimeoutMs: 2 * VM_RECOVERY_FOOTPRINT_READ_TIMEOUT_MS,
53
+ /**
54
+ * Minimum spacing between reads of the registered-public observation that gates the
55
+ * stream wire when an earlier read in the same pass was unavailable.
56
+ */
57
+ authorityRetryMinIntervalMs: 5_000,
58
+ });
59
+ function entryBytes(kaId, footprint) {
60
+ // Fixed bookkeeping plus the string/bigint scalars the descriptor retains.
61
+ const scalars = footprint?.kind === 'public-v10'
62
+ ? footprint.assertionVersion.length + footprint.byteSize.toString().length
63
+ + footprint.merkleLeafCount.toString().length
64
+ : 0;
65
+ return 96 + 2 * kaId.length + 2 * scalars;
66
+ }
67
+ /** Typed opt-in switch: env `DKG_VM_RECOVERY_PREFETCH_ENABLED`, then config, default off. */
68
+ export function resolveVmRecoveryPrefetchEnabled(configValue) {
69
+ return resolveBooleanSwitch(configValue, 'DKG_VM_RECOVERY_PREFETCH_ENABLED', false);
70
+ }
71
+ export class VmRecoveryPreparation {
72
+ #sizing;
73
+ #limits;
74
+ #now;
75
+ #batch;
76
+ #closed = false;
77
+ #activeReads = 0;
78
+ #retainedBytes = 0;
79
+ /** Underlying reads that have been issued and have not yet physically settled. */
80
+ #physical = new Set();
81
+ #counters = {
82
+ prepareCalls: 0, refused: 0, accepted: 0, readsStarted: 0, readsReady: 0, readsUnusable: 0,
83
+ hits: 0, misses: 0, staleMisses: 0, discardedUnused: 0, lateDropped: 0,
84
+ maxActiveReads: 0, maxRetainedBytes: 0,
85
+ };
86
+ constructor(sizing, limits = {}, now = () => performance.now()) {
87
+ this.#sizing = sizing;
88
+ this.#limits = { ...VM_RECOVERY_PREPARATION_LIMITS, ...limits };
89
+ this.#now = now;
90
+ }
91
+ get limits() {
92
+ return this.#limits;
93
+ }
94
+ /**
95
+ * Begin preparing hints for a stable prefix of future candidates. Never
96
+ * throws and never blocks; a refusal leaves the caller's live path intact.
97
+ * No second batch is accepted until the first is consumed or discarded.
98
+ */
99
+ prepare(scope, candidates) {
100
+ this.#counters.prepareCalls += 1;
101
+ const refuse = (refused) => {
102
+ this.#counters.refused += 1;
103
+ return { accepted: 0, refused };
104
+ };
105
+ if (this.#closed)
106
+ return refuse('closed');
107
+ if (this.#sizing === null)
108
+ return refuse('no-reader');
109
+ if (scope.signal?.aborted || !this.#scopeIsCurrent(scope))
110
+ return refuse('stale-scope');
111
+ const existing = this.#batch;
112
+ if (existing && !existing.released && this.#batchIsDead(existing))
113
+ this.#dropBatch(existing, true);
114
+ if (this.#batch && !this.#batch.released)
115
+ return refuse('busy');
116
+ const picked = [];
117
+ const seen = new Set();
118
+ for (const candidate of candidates) {
119
+ if (picked.length >= this.#limits.maxPreparedAssets)
120
+ break;
121
+ if (!/^[0-9]+$/.test(candidate.kaId) || seen.has(candidate.kaId))
122
+ continue;
123
+ seen.add(candidate.kaId);
124
+ picked.push(candidate);
125
+ }
126
+ if (picked.length === 0)
127
+ return refuse('no-candidates');
128
+ const controller = new AbortController();
129
+ const batch = {
130
+ scope,
131
+ createdAt: this.#now(),
132
+ controller,
133
+ entries: new Map(),
134
+ detachScopeSignal: () => undefined,
135
+ released: false,
136
+ };
137
+ if (scope.signal) {
138
+ const onAbort = () => controller.abort(scope.signal?.reason);
139
+ scope.signal.addEventListener('abort', onAbort, { once: true });
140
+ batch.detachScopeSignal = () => scope.signal?.removeEventListener('abort', onAbort);
141
+ }
142
+ let retained = 0;
143
+ for (const candidate of picked) {
144
+ const ready = candidate.footprint?.kind === 'public-v10' ? candidate.footprint : undefined;
145
+ const bytes = entryBytes(candidate.kaId, ready);
146
+ if (this.#retainedBytes + retained + bytes > this.#limits.maxRetainedBytes)
147
+ break;
148
+ retained += bytes;
149
+ batch.entries.set(candidate.kaId, {
150
+ kaId: candidate.kaId,
151
+ state: ready ? { kind: 'ready', footprint: ready } : { kind: 'queued' },
152
+ bytes,
153
+ });
154
+ }
155
+ if (batch.entries.size === 0) {
156
+ batch.detachScopeSignal();
157
+ return refuse('no-candidates');
158
+ }
159
+ this.#batch = batch;
160
+ this.#retainedBytes += retained;
161
+ this.#counters.accepted += batch.entries.size;
162
+ this.#counters.maxRetainedBytes = Math.max(this.#counters.maxRetainedBytes, this.#retainedBytes);
163
+ this.#pump(batch);
164
+ return { accepted: batch.entries.size };
165
+ }
166
+ /** Hints bound to `scope`, for the planner. Hints are single-use; see {@link release}. */
167
+ hintsFor(scope) {
168
+ return {
169
+ take: (kaId, options) => this.#take(scope, kaId, options),
170
+ };
171
+ }
172
+ /**
173
+ * The consumer is done with its prepared hints: whatever it did not take is
174
+ * discarded (and any read still in flight is cancelled), freeing the single
175
+ * batch slot for the next preparation.
176
+ */
177
+ release(scope) {
178
+ const batch = this.#batch;
179
+ if (!batch || batch.released)
180
+ return;
181
+ if (!this.#sameOperation(batch.scope, scope))
182
+ return;
183
+ this.#dropBatch(batch, true);
184
+ }
185
+ /**
186
+ * Drop the prepared batch (generation change, unsubscribe, binding change,
187
+ * shutdown). With a `localCgId` only that graph's batch is dropped.
188
+ */
189
+ discard(localCgId) {
190
+ const batch = this.#batch;
191
+ if (!batch || batch.released)
192
+ return;
193
+ if (localCgId !== undefined && batch.scope.localCgId !== localCgId)
194
+ return;
195
+ this.#dropBatch(batch, true);
196
+ }
197
+ get closed() {
198
+ return this.#closed;
199
+ }
200
+ /**
201
+ * Stop for good: cancel speculative reads, drop hints and wait for every
202
+ * physical read this owner started to settle. Late results are never applied.
203
+ */
204
+ async close() {
205
+ this.#closed = true;
206
+ this.discard();
207
+ await Promise.allSettled(this.#physical);
208
+ }
209
+ stats() {
210
+ return Object.freeze({
211
+ ...this.#counters,
212
+ retainedBytes: this.#retainedBytes,
213
+ activeReads: this.#activeReads,
214
+ });
215
+ }
216
+ /** An unconsumed batch whose operation ended, expired or lost ownership no longer holds the slot. */
217
+ #batchIsDead(batch) {
218
+ return batch.scope.signal?.aborted === true
219
+ || !this.#scopeIsCurrent(batch.scope)
220
+ || this.#now() - batch.createdAt > this.#limits.maxHintAgeMs;
221
+ }
222
+ #sameOperation(left, right) {
223
+ return left.localCgId === right.localCgId
224
+ && left.onChainCgId === right.onChainCgId
225
+ && left.generation === right.generation;
226
+ }
227
+ #scopeIsCurrent(scope) {
228
+ try {
229
+ return scope.isCurrent();
230
+ }
231
+ catch {
232
+ return false;
233
+ }
234
+ }
235
+ #dropBatch(batch, abortInflight) {
236
+ if (batch.released)
237
+ return;
238
+ batch.released = true;
239
+ if (this.#batch === batch)
240
+ this.#batch = undefined;
241
+ batch.detachScopeSignal();
242
+ for (const entry of batch.entries.values()) {
243
+ if (entry.state.kind !== 'taken')
244
+ this.#counters.discardedUnused += 1;
245
+ this.#retainedBytes = Math.max(0, this.#retainedBytes - entry.bytes);
246
+ entry.bytes = 0;
247
+ if (entry.state.kind === 'ready' || entry.state.kind === 'queued')
248
+ entry.state = { kind: 'unusable' };
249
+ }
250
+ if (abortInflight && !batch.controller.signal.aborted) {
251
+ batch.controller.abort(new Error('VM recovery preparation discarded'));
252
+ }
253
+ }
254
+ #pump(batch) {
255
+ while (!batch.released
256
+ && !batch.controller.signal.aborted
257
+ && this.#activeReads < this.#limits.maxSpeculativeReads) {
258
+ // Recovery ownership can end without the lifecycle signal aborting (a stale generation, a
259
+ // rebind). A read started now would spend shared background capacity on a result that is
260
+ // discarded, so a dead batch stops here; reads already issued stay tracked until they settle.
261
+ if (this.#batchIsDead(batch)) {
262
+ this.#dropBatch(batch, true);
263
+ return;
264
+ }
265
+ const next = [...batch.entries.values()].find((entry) => entry.state.kind === 'queued');
266
+ if (!next)
267
+ return;
268
+ this.#startRead(batch, next);
269
+ }
270
+ }
271
+ #startRead(batch, entry) {
272
+ const sizing = this.#sizing;
273
+ if (sizing === null)
274
+ return;
275
+ this.#activeReads += 1;
276
+ this.#counters.readsStarted += 1;
277
+ this.#counters.maxActiveReads = Math.max(this.#counters.maxActiveReads, this.#activeReads);
278
+ const finish = (footprint) => {
279
+ // A result for a batch that was released, closed or aborted is never applied.
280
+ if (batch.released || batch.controller.signal.aborted || !this.#scopeIsCurrent(batch.scope)) {
281
+ this.#counters.lateDropped += 1;
282
+ if (entry.state.kind === 'reading')
283
+ entry.state = { kind: 'unusable' };
284
+ return;
285
+ }
286
+ if (footprint) {
287
+ const bytes = entryBytes(entry.kaId, footprint);
288
+ if (this.#retainedBytes - entry.bytes + bytes > this.#limits.maxRetainedBytes) {
289
+ entry.state = { kind: 'unusable' };
290
+ this.#counters.readsUnusable += 1;
291
+ return;
292
+ }
293
+ this.#retainedBytes += bytes - entry.bytes;
294
+ entry.bytes = bytes;
295
+ entry.state = { kind: 'ready', footprint };
296
+ this.#counters.readsReady += 1;
297
+ this.#counters.maxRetainedBytes = Math.max(this.#counters.maxRetainedBytes, this.#retainedBytes);
298
+ }
299
+ else {
300
+ entry.state = { kind: 'unusable' };
301
+ this.#counters.readsUnusable += 1;
302
+ }
303
+ };
304
+ let issued = false;
305
+ const issue = (readSignal) => {
306
+ issued = true;
307
+ let read;
308
+ try {
309
+ read = sizing.readUpdateContext(BigInt(entry.kaId), { signal: readSignal });
310
+ }
311
+ catch (error) {
312
+ read = Promise.reject(error);
313
+ }
314
+ // Capacity is released when the underlying request really settles, not
315
+ // when the race below returns after an abort or a deadline.
316
+ const settled = Promise.resolve(read).then(() => undefined, () => undefined).finally(() => {
317
+ this.#physical.delete(settled);
318
+ this.#activeReads -= 1;
319
+ // Freed capacity serves whichever batch is current now, not the (possibly
320
+ // already released) batch that issued this read.
321
+ const current = this.#batch;
322
+ if (current && !current.released)
323
+ this.#pump(current);
324
+ });
325
+ this.#physical.add(settled);
326
+ return read;
327
+ };
328
+ const settled = (async () => {
329
+ let footprint;
330
+ try {
331
+ const context = await withOwnedRpcRequestContext({ requestClass: 'background', signal: batch.controller.signal }, () => runBoundedOperation(issue, {
332
+ label: 'VM recovery speculative sizing',
333
+ signal: batch.controller.signal,
334
+ timeoutMs: this.#limits.readTimeoutMs,
335
+ }));
336
+ const observed = vmRecoveryFootprintFromUpdateContext(context);
337
+ if (observed?.kind === 'public-v10')
338
+ footprint = observed;
339
+ }
340
+ catch {
341
+ footprint = undefined;
342
+ }
343
+ // A pre-aborted boundary starts no physical read. Ordinary issued reads
344
+ // release capacity only in issue()'s physical-settlement callback.
345
+ if (!issued)
346
+ this.#activeReads -= 1;
347
+ finish(footprint);
348
+ })();
349
+ entry.state = { kind: 'reading', settled };
350
+ }
351
+ async #take(scope, kaId, options) {
352
+ const miss = (stale = false) => {
353
+ this.#counters.misses += 1;
354
+ if (stale)
355
+ this.#counters.staleMisses += 1;
356
+ return undefined;
357
+ };
358
+ const batch = this.#batch;
359
+ if (!batch || batch.released || this.#closed)
360
+ return miss();
361
+ if (!this.#sameOperation(batch.scope, scope))
362
+ return miss(true);
363
+ if (scope.signal?.aborted
364
+ || !this.#scopeIsCurrent(scope)
365
+ || this.#now() - batch.createdAt > this.#limits.maxHintAgeMs)
366
+ return miss(true);
367
+ const entry = batch.entries.get(kaId);
368
+ if (!entry || entry.state.kind === 'taken' || entry.state.kind === 'unusable')
369
+ return miss();
370
+ if (entry.state.kind === 'queued') {
371
+ // The consumer reads this candidate live now; never start a duplicate read.
372
+ entry.state = { kind: 'unusable' };
373
+ return miss();
374
+ }
375
+ if (entry.state.kind === 'reading') {
376
+ await this.#settleWithin(entry.state.settled, options);
377
+ }
378
+ // Re-check everything after any wait: ownership may have changed meanwhile.
379
+ if (batch.released || this.#closed || options.signal?.aborted || !this.#scopeIsCurrent(scope)) {
380
+ return miss(true);
381
+ }
382
+ const state = batch.entries.get(kaId)?.state;
383
+ if (state?.kind !== 'ready')
384
+ return miss();
385
+ entry.state = { kind: 'taken' };
386
+ this.#retainedBytes = Math.max(0, this.#retainedBytes - entry.bytes);
387
+ entry.bytes = 0;
388
+ this.#counters.hits += 1;
389
+ return state.footprint;
390
+ }
391
+ /**
392
+ * Wait for a speculative read to settle, never longer than the consumer's own bound. A
393
+ * timeout, a cancellation or a failed read is a plain hint miss; none of them cancels the
394
+ * physical read, which stays accounted for until it really settles.
395
+ */
396
+ async #settleWithin(settled, options) {
397
+ if (options.signal?.aborted || options.maxWaitMs <= 0)
398
+ return;
399
+ try {
400
+ await runBoundedOperation(() => settled, {
401
+ label: 'VM recovery prepared sizing hint',
402
+ timeoutMs: options.maxWaitMs,
403
+ ...(options.signal ? { signal: options.signal } : {}),
404
+ });
405
+ }
406
+ catch { /* a miss, not an error */ }
407
+ }
408
+ }
409
+ export { vmRecoveryRetryDelay } from './vm-recovery-pass-authority.js';
410
+ const hostOwners = new WeakMap();
411
+ /** The host's preparation owner, created on first use and replaced after a close. */
412
+ export function vmRecoveryPreparationFor(host, sizing, limits = {}, now) {
413
+ const existing = hostOwners.get(host);
414
+ if (existing && !existing.closed)
415
+ return existing;
416
+ const created = new VmRecoveryPreparation(sizing, limits, now);
417
+ hostOwners.set(host, created);
418
+ return created;
419
+ }
420
+ /** The host's owner if one was ever created; never creates one. */
421
+ export function existingVmRecoveryPreparation(host) {
422
+ const existing = hostOwners.get(host);
423
+ return existing && !existing.closed ? existing : undefined;
424
+ }
425
+ /** Cumulative preparation counters as one logfmt-style fragment (secret-free). */
426
+ export function formatVmRecoveryPreparationStats(stats) {
427
+ return `prepAccepted=${stats.accepted} prepRefused=${stats.refused} prepReads=${stats.readsStarted} `
428
+ + `prepReady=${stats.readsReady} prepUnusable=${stats.readsUnusable} prepHits=${stats.hits} `
429
+ + `prepMisses=${stats.misses} prepStale=${stats.staleMisses} prepDiscarded=${stats.discardedUnused} `
430
+ + `prepLate=${stats.lateDropped} prepMaxActive=${stats.maxActiveReads} `
431
+ + `prepMaxBytes=${stats.maxRetainedBytes}`;
432
+ }
433
+ //# sourceMappingURL=vm-recovery-preparation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vm-recovery-preparation.js","sourceRoot":"","sources":["../src/vm-recovery-preparation.ts"],"names":[],"mappings":"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"}
@@ -7,10 +7,22 @@ export interface VmRecoveryProviderAttempt {
7
7
  /** One recovery slice's explicit provider-affinity state machine. */
8
8
  export declare class VmRecoveryProviderPolicy {
9
9
  #private;
10
- selectNextCandidate(candidatePeerIds: readonly string[], maxPeers: number): string | undefined;
10
+ /**
11
+ * `deferredPeerIds` names candidates that cannot be attempted yet. They are
12
+ * passed over, and each keeps a place among the peers this slice may
13
+ * consider, so the peers tried meanwhile cannot crowd it out of the slice.
14
+ */
15
+ selectNextCandidate(candidatePeerIds: readonly string[], maxPeers: number, deferredPeerIds?: ReadonlySet<string>): string | undefined;
11
16
  markUnavailable(peerId: string): void;
17
+ /** The host must prove a current carried holder; one reuse still spends it. */
18
+ seedProvenHolder(peerId: string): void;
12
19
  beginAttempt(peerId: string): VmRecoveryProviderAttempt | undefined;
13
20
  finishAttempt(attempt: VmRecoveryProviderAttempt, aggregateDisposition: VmRecoveryUalDisposition, perUalDispositions: ReadonlyMap<string, VmRecoveryUalDisposition>): void;
21
+ /**
22
+ * The attempt ended without a verdict on the peer's data. The peer may be
23
+ * attempted again in this slice, and has to earn reuse again with a probe.
24
+ */
25
+ releaseAttempt(attempt: VmRecoveryProviderAttempt): void;
14
26
  unavailablePeerIds(): ReadonlySet<string>;
15
27
  }
16
28
  //# sourceMappingURL=vm-recovery-provider-policy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"vm-recovery-provider-policy.d.ts","sourceRoot":"","sources":["../src/vm-recovery-provider-policy.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,wBAAwB,GAAG,OAAO,GAAG,cAAc,GAAG,YAAY,CAAC;AAC/E,MAAM,MAAM,6BAA6B,GAAG,OAAO,GAAG,qBAAqB,CAAC;AAE5E,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,6BAA6B,CAAC;CAC9C;AAcD,qEAAqE;AACrE,qBAAa,wBAAwB;;IAkBnC,mBAAmB,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAgB9F,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIrC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,yBAAyB,GAAG,SAAS;IAanE,aAAa,CACX,OAAO,EAAE,yBAAyB,EAClC,oBAAoB,EAAE,wBAAwB,EAC9C,kBAAkB,EAAE,WAAW,CAAC,MAAM,EAAE,wBAAwB,CAAC,GAChE,IAAI;IAgBP,kBAAkB,IAAI,WAAW,CAAC,MAAM,CAAC;CAK1C"}
1
+ {"version":3,"file":"vm-recovery-provider-policy.d.ts","sourceRoot":"","sources":["../src/vm-recovery-provider-policy.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,wBAAwB,GAAG,OAAO,GAAG,cAAc,GAAG,YAAY,CAAC;AAC/E,MAAM,MAAM,6BAA6B,GAAG,OAAO,GAAG,qBAAqB,CAAC;AAE5E,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,6BAA6B,CAAC;CAC9C;AAgBD,qEAAqE;AACrE,qBAAa,wBAAwB;;IAkBnC;;;;OAIG;IACH,mBAAmB,CACjB,gBAAgB,EAAE,SAAS,MAAM,EAAE,EACnC,QAAQ,EAAE,MAAM,EAChB,eAAe,GAAE,WAAW,CAAC,MAAM,CAAqB,GACvD,MAAM,GAAG,SAAS;IAyBrB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIrC,+EAA+E;IAC/E,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKtC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,yBAAyB,GAAG,SAAS;IAyBnE,aAAa,CACX,OAAO,EAAE,yBAAyB,EAClC,oBAAoB,EAAE,wBAAwB,EAC9C,kBAAkB,EAAE,WAAW,CAAC,MAAM,EAAE,wBAAwB,CAAC,GAChE,IAAI;IASP;;;OAGG;IACH,cAAc,CAAC,OAAO,EAAE,yBAAyB,GAAG,IAAI;IAIxD,kBAAkB,IAAI,WAAW,CAAC,MAAM,CAAC;CAK1C"}
@@ -1,3 +1,4 @@
1
+ const NO_DEFERRED_PEERS = new Set();
1
2
  /** One recovery slice's explicit provider-affinity state machine. */
2
3
  export class VmRecoveryProviderPolicy {
3
4
  #peers = new Map();
@@ -14,17 +15,31 @@ export class VmRecoveryProviderPolicy {
14
15
  const kind = this.#peers.get(peerId)?.phase.kind ?? 'fresh';
15
16
  return kind === 'fresh' || kind === 'holder-reusable';
16
17
  }
17
- selectNextCandidate(candidatePeerIds, maxPeers) {
18
+ /**
19
+ * `deferredPeerIds` names candidates that cannot be attempted yet. They are
20
+ * passed over, and each keeps a place among the peers this slice may
21
+ * consider, so the peers tried meanwhile cannot crowd it out of the slice.
22
+ */
23
+ selectNextCandidate(candidatePeerIds, maxPeers, deferredPeerIds = NO_DEFERRED_PEERS) {
24
+ for (const peerId of candidatePeerIds) {
25
+ if (deferredPeerIds.has(peerId) && !this.#consideredPeerIds.has(peerId)
26
+ && this.#consideredPeerIds.size < maxPeers) {
27
+ this.#consideredPeerIds.add(peerId);
28
+ }
29
+ }
30
+ const attemptablePeerIds = candidatePeerIds.filter((peerId) => !deferredPeerIds.has(peerId));
18
31
  const ordered = [
19
- ...candidatePeerIds.filter((peerId) => this.#peers.get(peerId)?.phase.kind === 'holder-reusable'),
20
- ...candidatePeerIds.filter((peerId) => this.#peers.get(peerId)?.phase.kind !== 'holder-reusable'),
32
+ ...attemptablePeerIds.filter((peerId) => this.#peers.get(peerId)?.phase.kind === 'holder-reusable'),
33
+ ...attemptablePeerIds.filter((peerId) => this.#peers.get(peerId)?.phase.kind !== 'holder-reusable'),
21
34
  ];
22
35
  for (const peerId of ordered) {
23
36
  if (!this.#canAttempt(peerId))
24
37
  continue;
25
38
  if (!this.#consideredPeerIds.has(peerId)) {
39
+ // The cap excludes this peer. One that already has a place (it kept
40
+ // one while deferred, or was released) may still follow it.
26
41
  if (this.#consideredPeerIds.size >= maxPeers)
27
- return undefined;
42
+ continue;
28
43
  this.#consideredPeerIds.add(peerId);
29
44
  }
30
45
  return peerId;
@@ -34,6 +49,12 @@ export class VmRecoveryProviderPolicy {
34
49
  markUnavailable(peerId) {
35
50
  this.#state(peerId).phase = { kind: 'unavailable' };
36
51
  }
52
+ /** The host must prove a current carried holder; one reuse still spends it. */
53
+ seedProvenHolder(peerId) {
54
+ const state = this.#state(peerId);
55
+ if (state.phase.kind === 'fresh')
56
+ state.phase = { kind: 'holder-reusable' };
57
+ }
37
58
  beginAttempt(peerId) {
38
59
  const state = this.#state(peerId);
39
60
  if (!this.#canAttempt(peerId))
@@ -47,7 +68,7 @@ export class VmRecoveryProviderPolicy {
47
68
  : { kind: 'attempting-reuse', attempt };
48
69
  return attempt;
49
70
  }
50
- finishAttempt(attempt, aggregateDisposition, perUalDispositions) {
71
+ #activeState(attempt) {
51
72
  const state = this.#state(attempt.peerId);
52
73
  const activeAttempt = state.phase.kind === 'attempting-probe'
53
74
  || state.phase.kind === 'attempting-reuse'
@@ -56,12 +77,23 @@ export class VmRecoveryProviderPolicy {
56
77
  if (activeAttempt !== attempt) {
57
78
  throw new Error(`VM recovery provider attempt is not active for ${attempt.peerId}`);
58
79
  }
80
+ return state;
81
+ }
82
+ finishAttempt(attempt, aggregateDisposition, perUalDispositions) {
83
+ const state = this.#activeState(attempt);
59
84
  const earnedReuse = state.phase.kind === 'attempting-probe'
60
85
  && aggregateDisposition === 'found'
61
86
  && perUalDispositions.size > 0
62
87
  && [...perUalDispositions.values()].every((disposition) => disposition === 'found');
63
88
  state.phase = earnedReuse ? { kind: 'holder-reusable' } : { kind: 'spent' };
64
89
  }
90
+ /**
91
+ * The attempt ended without a verdict on the peer's data. The peer may be
92
+ * attempted again in this slice, and has to earn reuse again with a probe.
93
+ */
94
+ releaseAttempt(attempt) {
95
+ this.#activeState(attempt).phase = { kind: 'fresh' };
96
+ }
65
97
  unavailablePeerIds() {
66
98
  return new Set([...this.#peers]
67
99
  .filter(([, state]) => state.phase.kind === 'unavailable')
@@ -1 +1 @@
1
- {"version":3,"file":"vm-recovery-provider-policy.js","sourceRoot":"","sources":["../src/vm-recovery-provider-policy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vm-recovery-provider-policy.js","sourceRoot":"","sources":["../src/vm-recovery-provider-policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { type VmRecoveryMicrobatchLimits, type VmRecoveryMicrobatchPlan, type VmRecoveryTargetFootprint } from './vm-recovery-microbatch.js';
2
+ export declare const VM_RECOVERY_STREAM_MAX_ASSET_ESTIMATED_BYTES: bigint;
3
+ export declare const VM_RECOVERY_STREAM_MAX_ASSET_LEAVES = 16384n;
4
+ /** The executor still checks the actual encoded, signed START request. */
5
+ export declare const VM_RECOVERY_STREAM_MAX_START_BYTES: number;
6
+ /** Fixed pilot profile; ordinary recovery configuration cannot widen it. */
7
+ export declare const VM_RECOVERY_STREAM_MICROBATCH_LIMITS: Readonly<VmRecoveryMicrobatchLimits>;
8
+ /**
9
+ * Select only a stable prefix with complete, nonzero public-v10 sizing hints.
10
+ * Unknown or oversize work stays on the existing legacy singleton path; it
11
+ * must never be skipped to stream a later asset. The caller separately proves
12
+ * opt-in, current Core capability and public authority. This is sizing only.
13
+ */
14
+ export declare function planVmRecoveryStreamMicrobatch<T extends VmRecoveryTargetFootprint>(candidates: readonly T[], selectorBytesFor: (targets: readonly T[]) => number): VmRecoveryMicrobatchPlan<T> | undefined;
15
+ //# sourceMappingURL=vm-recovery-stream-profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vm-recovery-stream-profile.d.ts","sourceRoot":"","sources":["../src/vm-recovery-stream-profile.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC/B,MAAM,6BAA6B,CAAC;AAErC,eAAO,MAAM,4CAA4C,QAAqB,CAAC;AAC/E,eAAO,MAAM,mCAAmC,SAAU,CAAC;AAC3D,0EAA0E;AAC1E,eAAO,MAAM,kCAAkC,QAAW,CAAC;AAE3D,4EAA4E;AAC5E,eAAO,MAAM,oCAAoC,EAAE,QAAQ,CAAC,0BAA0B,CASpF,CAAC;AAuBH;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAAC,CAAC,SAAS,yBAAyB,EAChF,UAAU,EAAE,SAAS,CAAC,EAAE,EACxB,gBAAgB,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,KAAK,MAAM,GAClD,wBAAwB,CAAC,CAAC,CAAC,GAAG,SAAS,CAczC"}