@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
@@ -1,18 +1,23 @@
1
1
  import { DKG_ONTOLOGY, GRAPH_KA_CONTENT_SCOPE_VERSION, MemoryLayer, assertSafeIri, sparqlString, validateSubGraphName, contextGraphCatalogUri, createGraphKnowledgeAssetScope, knowledgeAssetLayerGraphUri, } from '@origintrail-official/dkg-core';
2
2
  import { asGraphWriteRevisionSource, loadSortedGraphCatalog, StoreResponseTooLargeError, } from '@origintrail-official/dkg-storage';
3
3
  import { isSharedMemoryBucketDescendantDataGraph } from '../shared-memory-graphs.js';
4
- import { SYNC_RESPONDER_SNAPSHOT_BUILD_MAX_BYTES_ESTIMATE, SYNC_RESPONDER_SNAPSHOT_BUILD_MAX_ROWS, SYNC_RESPONDER_SNAPSHOT_BUILD_PAGE_ROWS, isSyncRowSnapshotPagingRequiredError, } from './snapshot-cache.js';
4
+ import { SYNC_RESPONDER_SNAPSHOT_BUILD_MAX_BYTES_ESTIMATE, SYNC_RESPONDER_SNAPSHOT_BUILD_MAX_ROWS, SYNC_RESPONDER_SNAPSHOT_BUILD_PAGE_ROWS, } from './snapshot-cache.js';
5
5
  import { bytesToHex } from '@noble/hashes/utils.js';
6
6
  import { sha256 } from '@noble/hashes/sha2.js';
7
- import { SyncRowSnapshotBudgetError, } from './snapshot-budget.js';
8
7
  import { estimateStringRowHeapBytes } from '../memory-telemetry.js';
9
- import { SYNC_BYTE_BUDGET_RESPONSE_BYTES } from '../../dkg-agent-constants.js';
8
+ import { SYNC_BYTE_BUDGET_RESPONSE_BYTES, } from '../../dkg-agent-constants.js';
10
9
  import { durableMetaDelegationSubjectAdmissionExpression } from './durable-meta-admission.js';
11
- import { exactAssetFilterKey } from '../exact-assets.js';
12
10
  import { isIriTerm } from '../iri-term.js';
13
11
  import { compareCodePoint } from '@origintrail-official/dkg-core';
14
12
  import { isLegacySyncGraphCandidateV1 } from '../legacy-sync-graph-candidate.js';
15
13
  import { createGraphMembershipSnapshotFromSortedCatalog, } from '../graph-membership-snapshot.js';
14
+ import { readExactDataSessionPage, durableDataRowListCacheKey, createStoreOnlyDataSession, } from './exact-data-session.js';
15
+ import { createSessionPlanMemo, createPageOnlySessionPlanMemo } from './session-plan-memo.js';
16
+ import { buildExactGraphPagePlan, readRowsPageFromExactGraphPlan, readExactGraphPlanSnapshot, readGraphScopedVmManifest, snapshotResponseByteLimit, storeResponseActualBytes, snapshotBudgetError, } from './exact-graph-reader.js';
17
+ import { createSessionPlanGetter, readResponderRowsPage, raceAgainstAbort, throwIfAborted, } from './responder-row-page.js';
18
+ export { createResponderExactDataSessionMemo, createResponderPageOnlyExactDataSessionMemo } from './exact-data-session.js';
19
+ import { compareRows, metaSubjectKey, serializeResponderRows, serializedResponderRowByteLength, } from './row-serialization.js';
20
+ export { compareRows, serializeResponderRows, serializeResponderRowsWithinByteBudget } from './row-serialization.js';
16
21
  export { createResponderSyncRowListMemo, SyncRowSnapshotLimitError, } from './snapshot-cache.js';
17
22
  export { compareCodePoint } from '../code-point-order.js';
18
23
  const DKG = 'http://dkg.io/ontology/';
@@ -27,12 +32,8 @@ const DKG_SHARE_OPERATION_ID = `${DKG}shareOperationId`;
27
32
  const DKG_ASSERTION_GRAPH = `${DKG}assertionGraph`;
28
33
  const DKG_ASSERTION_NAME = `${DKG}assertionName`;
29
34
  const DKG_MEMORY_LAYER = `${DKG}memoryLayer`;
30
- const DKG_CONTEXT_GRAPH = `${DKG}contextGraph`;
31
35
  const DKG_CONTEXT_GRAPH_ID = `${DKG}contextGraphId`;
32
- const DKG_PUBLIC_TRIPLE_COUNT = `${DKG}publicTripleCount`;
33
- const DKG_PRIVATE_TRIPLE_COUNT = `${DKG}privateTripleCount`;
34
36
  const DKG_STATUS = `${DKG}status`;
35
- const DKG_SUB_GRAPH_NAME = `${DKG}subGraphName`;
36
37
  const DETERMINISTIC_KA_UAL_SHAPE = /^did:dkg:[^/]+\/0x[0-9A-Fa-f]{40}\/[0-9]+$/;
37
38
  const DKG_PART_OF = `${DKG}partOf`;
38
39
  const DKG_BATCH_ID = `${DKG}batchId`;
@@ -40,7 +41,6 @@ const SCHEMA_NAME = 'http://schema.org/name';
40
41
  const PROV_GENERATED = 'http://www.w3.org/ns/prov#generated';
41
42
  const PROV_USED = 'http://www.w3.org/ns/prov#used';
42
43
  const DKG_JOIN_REQUEST_SUBJECT_PREFIX = 'did:dkg:join-request:';
43
- const COMPLETED_SYNC_RESPONDER_SESSION_GRACE_MS = 30_000;
44
44
  function syncResponderStoreOptions(signal, source) {
45
45
  return { signal, priority: 'background', source };
46
46
  }
@@ -199,82 +199,6 @@ export function createResponderFreshSwmMetaPlanMemo(ttlMs = 10 * 60_000, maxEntr
199
199
  bytesEstimate: (plan) => plan.bytesEstimate,
200
200
  });
201
201
  }
202
- function createSessionPlanMemo(ttlMs, maxEntries, accounting) {
203
- const cached = new Map();
204
- const inflight = new Map();
205
- const deleteEntry = (key, reason) => {
206
- const entry = cached.get(key);
207
- if (!entry)
208
- return;
209
- cached.delete(key);
210
- if (entry.budgetEntryId)
211
- accounting?.budget.remove(entry.budgetEntryId, reason);
212
- };
213
- const prune = (now = Date.now()) => {
214
- for (const [key, entry] of cached) {
215
- if (now - entry.cachedAt >= ttlMs)
216
- deleteEntry(key, 'expired');
217
- }
218
- };
219
- return {
220
- async get(key, load, options) {
221
- throwIfAborted(options?.signal);
222
- const now = Date.now();
223
- prune(now);
224
- const pending = inflight.get(key);
225
- if (pending)
226
- return raceAgainstAbort(pending, options?.signal);
227
- const existing = cached.get(key);
228
- if (!options?.refresh && existing) {
229
- cached.delete(key);
230
- cached.set(key, { ...existing, cachedAt: now });
231
- if (existing.budgetEntryId) {
232
- // Refresh the global-budget LRU position, then stay evictable: an
233
- // entry pinned forever would let idle plans exempt themselves from
234
- // memory-pressure eviction.
235
- accounting?.budget.touch(existing.budgetEntryId);
236
- accounting?.budget.release(existing.budgetEntryId);
237
- }
238
- return existing.value;
239
- }
240
- if (options?.requireExisting)
241
- return null;
242
- if (!existing && cached.size >= maxEntries) {
243
- deleteEntry(cached.keys().next().value, 'released');
244
- }
245
- const pendingLoad = load()
246
- .then((value) => {
247
- const replaced = cached.get(key);
248
- let budgetEntryId;
249
- if (accounting) {
250
- budgetEntryId = Symbol(key);
251
- // Throws the typed global budget error when the process-wide
252
- // responder budget cannot admit the plan; the failed refresh leaves
253
- // any previously-admitted plan in place (memo entry untouched).
254
- accounting.budget.admit({
255
- id: budgetEntryId,
256
- key,
257
- phase: accounting.phase,
258
- rows: 0,
259
- bytesEstimate: accounting.bytesEstimate(value),
260
- controlPlane: true,
261
- replaceId: replaced?.budgetEntryId,
262
- onEvict: () => {
263
- if (cached.get(key)?.budgetEntryId === budgetEntryId)
264
- cached.delete(key);
265
- },
266
- });
267
- accounting.budget.release(budgetEntryId);
268
- }
269
- cached.set(key, { value, cachedAt: Date.now(), budgetEntryId });
270
- return value;
271
- })
272
- .finally(() => inflight.delete(key));
273
- inflight.set(key, pendingLoad);
274
- return raceAgainstAbort(pendingLoad, options?.signal);
275
- },
276
- };
277
- }
278
202
  /**
279
203
  * Session-scoped inventory for ordinary durable/SWM graph paging. The memo
280
204
  * stores only exact graph IRIs and their row counts. Payload rows remain in the
@@ -285,6 +209,14 @@ function createSessionPlanMemo(ttlMs, maxEntries, accounting) {
285
209
  export function createResponderExactGraphPagePlanMemo(ttlMs = 10 * 60_000, maxEntries = 32) {
286
210
  return createSessionPlanMemo(ttlMs, maxEntries);
287
211
  }
212
+ /**
213
+ * Exact byte-budget sessions retain only bounded graph/count scalars and
214
+ * keyset cursors. Reserve the cursor ceiling up front so later pages cannot
215
+ * grow uncharged state outside the process-wide responder budget.
216
+ */
217
+ export function createResponderPageOnlyExactGraphPlanMemo(ttlMs, maxEntries, budget) {
218
+ return createPageOnlySessionPlanMemo(ttlMs, maxEntries, budget, plan => plan);
219
+ }
288
220
  function createSubGraphNameMemo(loadNames, ttlMs) {
289
221
  const cached = new Map();
290
222
  const inflight = new Map();
@@ -340,42 +272,6 @@ function createSubGraphNameMemo(loadNames, ttlMs) {
340
272
  },
341
273
  };
342
274
  }
343
- export function compareRows(a, b) {
344
- return (compareCodePoint(a.g, b.g) ||
345
- compareCodePoint(a.s, b.s) ||
346
- compareCodePoint(a.p, b.p) ||
347
- compareCodePoint(a.o, b.o));
348
- }
349
- /**
350
- * The `(g, s)` identity a durable `_meta` row belongs to. Durable meta is
351
- * ordered by `(g, s, p, o)`; a graph-scoped assertion seal is ONE `(g, s)`
352
- * subject whose rows — including the batch-local control field
353
- * `dkg:assertionVersion` — MUST cross the wire together in a single round, else
354
- * the receiver's per-round completeness check drops the control fields
355
- * permanently (#1788). Used to snap durable-meta page boundaries to subject
356
- * boundaries. The `\n` separator cannot occur inside an IRI, so distinct
357
- * subjects never collide.
358
- */
359
- function metaSubjectKey(row) {
360
- return `${row.g}\n${row.s}`;
361
- }
362
- function serializeResponderRow(row) {
363
- return `${formatTerm(row.s)} <${assertSafeIri(row.p)}> ${formatTerm(row.o)} <${assertSafeIri(row.g)}> .`;
364
- }
365
- export function serializeResponderRows(rows) {
366
- return rows.map(serializeResponderRow).join('\n');
367
- }
368
- const RESPONDER_ROW_ENCODER = new TextEncoder();
369
- /**
370
- * Serialized (N-Quads, UTF-8) wire byte length of one responder row — the ONE
371
- * byte model for response-frame budgets, shared by the byte-budget serializer
372
- * and the subject-atomic extend so both reason about `maxResponseBytes` the same
373
- * way (#1916). This is distinct from `estimateStringRowHeapBytes`, which
374
- * estimates retained HEAP size for snapshot memory budgets only.
375
- */
376
- function serializedResponderRowByteLength(row) {
377
- return RESPONDER_ROW_ENCODER.encode(serializeResponderRow(row)).byteLength;
378
- }
379
275
  /**
380
276
  * A non-negotiated (legacy) durable-meta request cannot be served frame-safe:
381
277
  * the subject-atomic, row-limit-bound page — a single admitted subject alone or
@@ -511,30 +407,6 @@ function subjectAtomicBudgetEnd(rows, start, maxBytes, rowLimit, trailingComplet
511
407
  }
512
408
  return lastBoundary;
513
409
  }
514
- /**
515
- * Serialize the largest prefix that fits the negotiated response target.
516
- * Pagination advances by the number of N-Quads actually parsed by the
517
- * requester, so returning a prefix is cursor-safe. Always emit one row when a
518
- * non-empty input contains an unexpectedly oversized row; that guarantees
519
- * forward progress and leaves the transport's existing hard frame limit as the
520
- * final safety boundary for that pathological single row.
521
- */
522
- export function serializeResponderRowsWithinByteBudget(rows, maxBytes) {
523
- const safeMaxBytes = Math.max(1, Math.floor(maxBytes));
524
- const page = [];
525
- let bytes = 0;
526
- for (const row of rows) {
527
- const serialized = serializeResponderRow(row);
528
- const rowBytes = serializedResponderRowByteLength(row) + (page.length > 0 ? 1 : 0);
529
- if (page.length > 0 && bytes + rowBytes > safeMaxBytes)
530
- break;
531
- page.push(serialized);
532
- bytes += rowBytes;
533
- if (bytes >= safeMaxBytes)
534
- break;
535
- }
536
- return page.join('\n');
537
- }
538
410
  export async function readSwmMetaPage(params) {
539
411
  const graphs = swmGraphsForRegisteredSubGraphs(params.contextGraphId, params.registeredSubGraphNames, true);
540
412
  const candidateGraphs = graphs.filter((graph) => params.graphMembership.has(graph));
@@ -544,6 +416,7 @@ export async function readSwmMetaPage(params) {
544
416
  key: params.rowListCacheKey,
545
417
  refresh: params.refreshRowList,
546
418
  refreshGeneration: params.refreshGeneration,
419
+ releaseOnShortPage: params.releaseCacheOnShortPage,
547
420
  expiredMessage: 'Shared-memory meta sync session snapshot expired before page completion',
548
421
  }
549
422
  : undefined;
@@ -596,6 +469,7 @@ export async function readSwmDataPage(params) {
596
469
  key: params.rowListCacheKey,
597
470
  refresh: params.refreshRowList,
598
471
  refreshGeneration: params.refreshGeneration,
472
+ releaseOnShortPage: params.releaseCacheOnShortPage,
599
473
  expiredMessage: 'Shared-memory data sync session snapshot expired before page completion',
600
474
  }
601
475
  : undefined;
@@ -625,7 +499,7 @@ export async function readDurableMetaPage(params) {
625
499
  if (params.assetUals !== undefined) {
626
500
  if (params.assetUals.length === 0)
627
501
  return [];
628
- const manifest = await readGraphScopedVmManifest(params.store, params.contextGraphId, params.signal);
502
+ const manifest = await readGraphScopedVmManifest(params.store, params.contextGraphId, params.signal, params.assetUals);
629
503
  const requested = new Set(params.assetUals);
630
504
  const confirmedUals = manifest.confirmedEntries
631
505
  .map((entry) => entry.ual)
@@ -677,242 +551,6 @@ export async function readDurableMetaPage(params) {
677
551
  * transport read cap (the requester loops for more). A single graph larger than
678
552
  * this is still emitted alone rather than split across pages. */
679
553
  const DEFAULT_CHANGELOG_PAGE_BYTES = 4 * 1024 * 1024;
680
- /**
681
- * Read the constant-size V2 control rows that already form a per-KA manifest.
682
- *
683
- * The payload graph and its row count are authenticated again by the requester,
684
- * but deriving the responder plan from these rows removes three store-wide or
685
- * per-graph discovery operations from the normal rootless path: graph-family
686
- * enumeration as authority, child-prefix probing after the reserved VM segment,
687
- * and COUNT(*)/countQuads for every KA. The query is deliberately one exact
688
- * metadata graph, standard SPARQL 1.1, unordered, row/response bounded, and
689
- * backend-neutral.
690
- */
691
- async function readGraphScopedVmManifest(store, contextGraphId, signal) {
692
- const metaGraph = contextGraphMetaGraphUri(contextGraphId);
693
- const contextGraph = contextGraphDataGraphUri(contextGraphId);
694
- const maxRows = SYNC_RESPONDER_SNAPSHOT_BUILD_MAX_ROWS;
695
- const readBoundedBindings = async (sparql, operation) => {
696
- let result;
697
- try {
698
- result = await store.query(sparql, {
699
- ...syncResponderStoreOptions(signal, operation),
700
- maxResponseBytes: snapshotResponseByteLimit(SYNC_RESPONDER_SNAPSHOT_BUILD_MAX_BYTES_ESTIMATE),
701
- });
702
- }
703
- catch (error) {
704
- if (!(error instanceof StoreResponseTooLargeError))
705
- throw error;
706
- throw snapshotBudgetError({
707
- key: `durable-v2-manifest:${contextGraphId}`,
708
- reason: 'snapshot_bytes',
709
- rows: 0,
710
- bytesEstimate: storeResponseActualBytes(error),
711
- limit: SYNC_RESPONDER_SNAPSHOT_BUILD_MAX_BYTES_ESTIMATE,
712
- });
713
- }
714
- if (result.type !== 'bindings')
715
- return [];
716
- if (result.bindings.length > maxRows) {
717
- throw snapshotBudgetError({
718
- key: `durable-v2-manifest:${contextGraphId}`,
719
- reason: 'snapshot_rows',
720
- rows: result.bindings.length,
721
- bytesEstimate: 0,
722
- limit: maxRows,
723
- });
724
- }
725
- return result.bindings;
726
- };
727
- // Read every scope marker independently of the complete descriptor join.
728
- // Without this pass, a partially written V2 descriptor would be absent from
729
- // the join below and its payload graph could incorrectly fall through the
730
- // legacy compatibility lane.
731
- const markerBindings = await readBoundedBindings(`
732
- SELECT ?ual ?scopeVersion WHERE {
733
- GRAPH <${assertSafeIri(metaGraph)}> {
734
- ?ual <${DKG_CONTENT_SCOPE_VERSION}> ?scopeVersion .
735
- }
736
- }
737
- LIMIT ${maxRows + 1}
738
- `, 'sync.responder.readGraphScopedVmManifestMarkers');
739
- const scopeVersionsByUal = new Map();
740
- for (const row of markerBindings) {
741
- const ual = row['ual'];
742
- const rawVersion = row['scopeVersion'];
743
- if (!ual || !rawVersion)
744
- continue;
745
- const versions = scopeVersionsByUal.get(ual) ?? new Set();
746
- versions.add(stripLiteral(rawVersion));
747
- scopeVersionsByUal.set(ual, versions);
748
- }
749
- const currentV2Uals = new Set();
750
- for (const [ual, versions] of scopeVersionsByUal) {
751
- // Lifecycle, assertion-graph and SWM-operation rows deliberately repeat
752
- // contentScopeVersion. Only deterministic UAL subjects are V2 descriptor
753
- // candidates; a UAL-shaped partial descriptor still fails closed below.
754
- if (!DETERMINISTIC_KA_UAL_SHAPE.test(ual))
755
- continue;
756
- if (versions.size !== 1) {
757
- throw new Error(`Rootless sync manifest ${ual} has ambiguous scopeVersion`);
758
- }
759
- const decoded = [...versions][0];
760
- if (!/^-?\d+$/.test(decoded)) {
761
- throw new Error(`Rootless sync manifest ${ual} has invalid scopeVersion: ${decoded}`);
762
- }
763
- const version = BigInt(decoded);
764
- if (version < 0n || version.toString() !== decoded) {
765
- throw new Error(`Rootless sync manifest ${ual} has non-canonical scopeVersion: ${decoded}`);
766
- }
767
- if (version === 0n || version === 1n)
768
- continue;
769
- if (version !== BigInt(GRAPH_KA_CONTENT_SCOPE_VERSION)) {
770
- throw new Error(`Rootless sync manifest ${ual} has unsupported contentScopeVersion ${decoded}`);
771
- }
772
- currentV2Uals.add(ual);
773
- }
774
- const bindings = await readBoundedBindings(`
775
- SELECT ?ual ?scopeVersion ?kaUal ?assertionVersion ?assertionGraph
776
- ?contextGraph ?publicTripleCount ?privateTripleCount ?status ?subGraphName
777
- WHERE {
778
- GRAPH <${assertSafeIri(metaGraph)}> {
779
- ?ual <${DKG_CONTENT_SCOPE_VERSION}> ?scopeVersion ;
780
- <${DKG_KA_UAL}> ?kaUal ;
781
- <${DKG_ASSERTION_VERSION}> ?assertionVersion ;
782
- <${DKG_ASSERTION_GRAPH}> ?assertionGraph ;
783
- <${DKG_CONTEXT_GRAPH}> ?contextGraph ;
784
- <${DKG_PUBLIC_TRIPLE_COUNT}> ?publicTripleCount ;
785
- <${DKG_PRIVATE_TRIPLE_COUNT}> ?privateTripleCount ;
786
- <${DKG_STATUS}> ?status .
787
- OPTIONAL { ?ual <${DKG_SUB_GRAPH_NAME}> ?subGraphName }
788
- }
789
- }
790
- LIMIT ${maxRows + 1}
791
- `, 'sync.responder.readGraphScopedVmManifest');
792
- const fields = [
793
- 'scopeVersion',
794
- 'kaUal',
795
- 'assertionVersion',
796
- 'assertionGraph',
797
- 'contextGraph',
798
- 'publicTripleCount',
799
- 'privateTripleCount',
800
- 'status',
801
- 'subGraphName',
802
- ];
803
- const byUal = new Map();
804
- for (const row of bindings) {
805
- const ual = row['ual'];
806
- if (!ual)
807
- continue;
808
- const values = byUal.get(ual) ?? new Map();
809
- for (const field of fields) {
810
- const value = row[field];
811
- if (!value)
812
- continue;
813
- const set = values.get(field) ?? new Set();
814
- set.add(value);
815
- values.set(field, set);
816
- }
817
- byUal.set(ual, values);
818
- }
819
- for (const ual of currentV2Uals) {
820
- if (!byUal.has(ual)) {
821
- throw new Error(`Rootless sync manifest ${ual} has an incomplete V2 descriptor`);
822
- }
823
- }
824
- const confirmedEntries = [];
825
- const knownGraphs = new Set();
826
- const graphOwners = new Map();
827
- for (const [ual, values] of byUal) {
828
- if (!currentV2Uals.has(ual))
829
- continue;
830
- const requireSingle = (field) => {
831
- const candidates = [...(values.get(field) ?? [])];
832
- if (candidates.length !== 1) {
833
- throw new Error(`Rootless sync manifest ${ual} has ${candidates.length === 0 ? 'missing' : 'ambiguous'} ${field}`);
834
- }
835
- return candidates[0];
836
- };
837
- const optionalSingle = (field) => {
838
- const candidates = [...(values.get(field) ?? [])];
839
- if (candidates.length > 1) {
840
- throw new Error(`Rootless sync manifest ${ual} has ambiguous ${field}`);
841
- }
842
- return candidates[0];
843
- };
844
- const parseCanonicalInteger = (field, minimum) => {
845
- const decoded = stripLiteral(requireSingle(field));
846
- if (!/^-?\d+$/.test(decoded)) {
847
- throw new Error(`Rootless sync manifest ${ual} has invalid ${field}: ${decoded}`);
848
- }
849
- const value = BigInt(decoded);
850
- if (value < minimum || value.toString() !== decoded) {
851
- throw new Error(`Rootless sync manifest ${ual} has non-canonical ${field}: ${decoded}`);
852
- }
853
- return value;
854
- };
855
- const scopeVersion = parseCanonicalInteger('scopeVersion', 0n);
856
- if (scopeVersion !== BigInt(GRAPH_KA_CONTENT_SCOPE_VERSION)) {
857
- throw new Error(`Rootless sync manifest ${ual} changed scopeVersion during projection`);
858
- }
859
- const metadataUal = requireSingle('kaUal');
860
- if (metadataUal !== ual) {
861
- throw new Error(`Rootless sync manifest UAL mismatch: subject ${ual}, kaUal ${metadataUal}`);
862
- }
863
- const assertionVersion = parseCanonicalInteger('assertionVersion', 1n);
864
- const scope = createGraphKnowledgeAssetScope(ual, assertionVersion);
865
- if (scope.ual !== ual) {
866
- throw new Error(`Rootless sync manifest contains non-canonical UAL ${ual}`);
867
- }
868
- if (requireSingle('contextGraph') !== contextGraph) {
869
- throw new Error(`Rootless sync manifest ${ual} points outside context graph ${contextGraphId}`);
870
- }
871
- const rawSubGraphName = optionalSingle('subGraphName');
872
- const subGraphName = rawSubGraphName === undefined
873
- ? undefined
874
- : stripLiteral(rawSubGraphName);
875
- if (subGraphName !== undefined && !validateSubGraphName(subGraphName).valid) {
876
- throw new Error(`Rootless sync manifest ${ual} has invalid subGraphName ${subGraphName}`);
877
- }
878
- const expectedGraph = knowledgeAssetLayerGraphUri(contextGraphId, MemoryLayer.VerifiableMemory, scope, subGraphName);
879
- const assertionGraph = requireSingle('assertionGraph');
880
- if (assertionGraph !== expectedGraph) {
881
- throw new Error(`Rootless sync manifest ${ual} assertionGraph mismatch: expected ${expectedGraph}, found ${assertionGraph}`);
882
- }
883
- const publicCount = parseCanonicalInteger('publicTripleCount', 0n);
884
- const privateCount = parseCanonicalInteger('privateTripleCount', 0n);
885
- if (publicCount > BigInt(Number.MAX_SAFE_INTEGER) || privateCount > BigInt(Number.MAX_SAFE_INTEGER)) {
886
- throw new Error(`Rootless sync manifest ${ual} has an unsafe triple count`);
887
- }
888
- if (publicCount === 0n && privateCount === 0n) {
889
- throw new Error(`Rootless sync manifest ${ual} describes an empty asset`);
890
- }
891
- const owner = graphOwners.get(assertionGraph);
892
- if (owner && owner !== ual) {
893
- throw new Error(`Rootless sync graph ${assertionGraph} has multiple UAL owners`);
894
- }
895
- graphOwners.set(assertionGraph, ual);
896
- knownGraphs.add(assertionGraph);
897
- const statuses = new Set([...(values.get('status') ?? [])].map((status) => stripLiteral(status)));
898
- if (statuses.size !== 1) {
899
- throw new Error(`Rootless sync manifest ${ual} has ambiguous status metadata`);
900
- }
901
- if (!statuses.has('confirmed'))
902
- continue;
903
- confirmedEntries.push({
904
- ual,
905
- graph: assertionGraph,
906
- rowCount: Number(publicCount),
907
- });
908
- }
909
- confirmedEntries.sort((a, b) => compareCodePoint(a.graph, b.graph));
910
- return {
911
- confirmedEntries,
912
- confirmedGraphs: new Set(confirmedEntries.map((entry) => entry.graph)),
913
- knownGraphs,
914
- };
915
- }
916
554
  /**
917
555
  * The per-CG admission boundary shared by the durable-data phase and the
918
556
  * changelog delta lane: the candidate-graph exclusions (wrong CG / top or
@@ -1045,6 +683,11 @@ export async function readChangelogDeltaPage(params) {
1045
683
  : drained ? Math.max(lastRawSeq, head.seq) : lastRawSeq;
1046
684
  return { kind: 'delta', era: headAfter.era, headSeq: headAfter.seq, nextSeq, records };
1047
685
  }
686
+ /** Compatibility dispatcher; selected exact DATA owns its reader and fences separately. */
687
+ export async function readDurableDataPageWithLease(params) {
688
+ return params.assetUals !== undefined ? readExactDataSessionPage(params) : { rows: await readDurableDataPage(params) };
689
+ }
690
+ /** Ordinary row callers use the conservative reader without acquiring a response lease. */
1048
691
  export async function readDurableDataPage(params) {
1049
692
  const cache = params.rowListMemo
1050
693
  ? {
@@ -1056,17 +699,20 @@ export async function readDurableDataPage(params) {
1056
699
  }
1057
700
  : undefined;
1058
701
  if (params.assetUals !== undefined) {
1059
- if (params.assetUals.length === 0)
1060
- return [];
1061
- const requested = new Set(params.assetUals);
1062
- return readPagedRowsFromExactGraphPlanLoader(params.store, params.offset, params.limit, cache, params.signal, params.exactGraphPlanMemo, async (planSignal) => {
1063
- const manifest = await readGraphScopedVmManifest(params.store, params.contextGraphId, planSignal);
1064
- const entries = manifest.confirmedEntries.filter((entry) => requested.has(entry.ual));
1065
- return buildExactGraphPagePlan(params.store, entries.map((entry) => entry.graph), () => Promise.resolve(true), planSignal, new Map(entries.map((entry) => [entry.graph, entry.rowCount])), params.exactGraphReadMode);
1066
- });
1067
- }
702
+ return (await readExactDataSessionPage({ ...params, exactAssetExportCache: undefined })).rows;
703
+ }
704
+ const sessionMemo = params.exactDataSessionMemo;
705
+ const planMemo = sessionMemo
706
+ ? { async get(key, load, options) {
707
+ const session = await sessionMemo.get(key, async () => createStoreOnlyDataSession(params.store, await load(), cache?.memo.snapshotLoadLimits ?? {
708
+ maxRows: SYNC_RESPONDER_SNAPSHOT_BUILD_MAX_ROWS,
709
+ maxBytesEstimate: SYNC_RESPONDER_SNAPSHOT_BUILD_MAX_BYTES_ESTIMATE,
710
+ }), options);
711
+ return session?.graphPlan ?? null;
712
+ } }
713
+ : params.exactGraphPlanMemo;
1068
714
  if (params.sinceBatchId == null) {
1069
- return readPagedRowsFromExactGraphPlanLoader(params.store, params.offset, params.limit, cache, params.signal, params.exactGraphPlanMemo, async (planSignal) => {
715
+ return readPagedRowsFromExactGraphPlanLoader(params.store, params.offset, params.limit, cache, params.signal, planMemo, async (planSignal) => {
1070
716
  const manifest = await readGraphScopedVmManifest(params.store, params.contextGraphId, planSignal);
1071
717
  const { cgPrefix, isCandidateGraph, isAdmitted } = createAdmissionContext(params.store, params.contextGraphId, { graphScopedVmManifest: manifest });
1072
718
  // A just-committed exact graph may precede a stale external graph-list
@@ -1140,413 +786,11 @@ async function readPagedRowsFromExactGraphPlanLoader(store, offset, limit, cache
1140
786
  const getPlan = createSessionPlanGetter(planMemo, cache?.key, cache?.refresh === true, (planSignal) => loadExactGraphPlan(planSignal), 'Sync session exact-graph plan expired before page completion');
1141
787
  const loadPage = async (pageOffset, pageLimit, pageSignal) => {
1142
788
  const plan = await getPlan(pageOffset, pageSignal);
1143
- return readRowsPageFromExactGraphPlan(store, plan, pageOffset, pageLimit, rowSnapshotLimits, pageSignal);
789
+ const rows = await readRowsPageFromExactGraphPlan(store, plan, pageOffset, pageLimit, rowSnapshotLimits, pageSignal);
790
+ throwIfAborted(pageSignal);
791
+ return rows;
1144
792
  };
1145
- return readResponderRowsPage(cache && {
1146
- ...cache,
1147
- expiredMessage: cache.expiredMessage ?? 'Durable data sync session snapshot expired before page completion',
1148
- }, loadPage, offset, limit, signal, cache
1149
- ? {
1150
- loadSnapshot: async () => readExactGraphPlanSnapshot(store, await getPlan(0, undefined), cache, rowSnapshotLimits),
1151
- }
1152
- : undefined);
1153
- }
1154
- async function buildExactGraphPagePlan(store, graphs, isAdmitted, signal, knownRowCounts, exactGraphReadMode = 'snapshot-or-page') {
1155
- const entries = [];
1156
- for (const graph of dedupeStrings(graphs).sort(compareCodePoint)) {
1157
- throwIfAborted(signal);
1158
- if (!(await isAdmitted(graph)))
1159
- continue;
1160
- const rowCount = knownRowCounts?.get(graph) ?? await store.countQuads(graph, syncResponderStoreOptions(signal, 'sync.responder.countExactGraphRows'));
1161
- if (rowCount > 0)
1162
- entries.push({ graph, rowCount });
1163
- }
1164
- return {
1165
- entries,
1166
- totalRows: entries.reduce((sum, entry) => sum + entry.rowCount, 0),
1167
- pagedGraphs: new Set(exactGraphReadMode === 'page-only'
1168
- ? entries.map((entry) => entry.graph)
1169
- : []),
1170
- cursors: new Map([[0, null]]),
1171
- };
1172
- }
1173
- const EXACT_GRAPH_CURSOR_CACHE_MAX_ENTRIES = 512;
1174
- /** Datatypes whose SPARQL value comparison is numeric/date-like, not lexical. */
1175
- const SPARQL_VALUE_ORDERED_DATATYPES = [
1176
- 'http://www.w3.org/2001/XMLSchema#boolean',
1177
- 'http://www.w3.org/2001/XMLSchema#date',
1178
- 'http://www.w3.org/2001/XMLSchema#dateTime',
1179
- 'http://www.w3.org/2001/XMLSchema#dateTimeStamp',
1180
- 'http://www.w3.org/2001/XMLSchema#dayTimeDuration',
1181
- 'http://www.w3.org/2001/XMLSchema#decimal',
1182
- 'http://www.w3.org/2001/XMLSchema#double',
1183
- 'http://www.w3.org/2001/XMLSchema#duration',
1184
- 'http://www.w3.org/2001/XMLSchema#float',
1185
- 'http://www.w3.org/2001/XMLSchema#gDay',
1186
- 'http://www.w3.org/2001/XMLSchema#gMonth',
1187
- 'http://www.w3.org/2001/XMLSchema#gMonthDay',
1188
- 'http://www.w3.org/2001/XMLSchema#gYear',
1189
- 'http://www.w3.org/2001/XMLSchema#gYearMonth',
1190
- 'http://www.w3.org/2001/XMLSchema#integer',
1191
- 'http://www.w3.org/2001/XMLSchema#nonNegativeInteger',
1192
- 'http://www.w3.org/2001/XMLSchema#nonPositiveInteger',
1193
- 'http://www.w3.org/2001/XMLSchema#negativeInteger',
1194
- 'http://www.w3.org/2001/XMLSchema#positiveInteger',
1195
- 'http://www.w3.org/2001/XMLSchema#long',
1196
- 'http://www.w3.org/2001/XMLSchema#int',
1197
- 'http://www.w3.org/2001/XMLSchema#short',
1198
- 'http://www.w3.org/2001/XMLSchema#time',
1199
- 'http://www.w3.org/2001/XMLSchema#byte',
1200
- 'http://www.w3.org/2001/XMLSchema#unsignedLong',
1201
- 'http://www.w3.org/2001/XMLSchema#unsignedInt',
1202
- 'http://www.w3.org/2001/XMLSchema#unsignedShort',
1203
- 'http://www.w3.org/2001/XMLSchema#unsignedByte',
1204
- 'http://www.w3.org/2001/XMLSchema#yearMonthDuration',
1205
- ];
1206
- const SPARQL_VALUE_ORDERED_DATATYPE_VALUES = SPARQL_VALUE_ORDERED_DATATYPES
1207
- .map((datatype) => `<${datatype}>`)
1208
- .join(', ');
1209
- function hasValueOrderedDatatype(term) {
1210
- return SPARQL_VALUE_ORDERED_DATATYPES
1211
- .some((datatype) => term.endsWith(`^^<${datatype}>`));
1212
- }
1213
- function hasUnsupportedExactGraphCursorTerm(cursor) {
1214
- // SPARQL exposes no portable ordering relation for blank-node identifiers.
1215
- // Ordered XSD values also cannot be continued portably with `>`: float and
1216
- // double admit NaN, duration comparison can be partial, and distinct lexical
1217
- // forms can denote the same date/time or numeric value. ORDER BY can still
1218
- // place those terms after the cursor even when `>` is false. Falling back
1219
- // preserves the pre-existing deterministic path for each unsafe boundary.
1220
- return [cursor.s, cursor.p, cursor.o].some((term) => (term.startsWith('_:') || hasValueOrderedDatatype(term)));
1221
- }
1222
- /**
1223
- * Build a SPARQL predicate for one term being strictly after a cursor term in
1224
- * the backend's `ORDER BY` order. IRI rank is explicit, while
1225
- * literal values use value comparison for ordered XSD datatypes and lexical
1226
- * comparison otherwise. The datatype/language tie-break mirrors Oxigraph's
1227
- * RDF-term ordering and is covered by the mixed-term regression fixture.
1228
- */
1229
- function termAfterExactGraphCursor(variable, cursorTerm) {
1230
- const formatted = formatTerm(cursorTerm);
1231
- if (!cursorTerm.startsWith('"')) {
1232
- return `(isLiteral(${variable}) || (isIRI(${variable}) && STR(${variable}) > STR(${formatted})))`;
1233
- }
1234
- return `(
1235
- isLiteral(${variable}) && (
1236
- (
1237
- STR(${variable}) > STR(${formatted})
1238
- && !(
1239
- DATATYPE(${variable}) = DATATYPE(${formatted})
1240
- && DATATYPE(${variable}) IN (${SPARQL_VALUE_ORDERED_DATATYPE_VALUES})
1241
- )
1242
- )
1243
- || (
1244
- STR(${variable}) = STR(${formatted}) && (
1245
- STR(DATATYPE(${variable})) > STR(DATATYPE(${formatted}))
1246
- || (
1247
- DATATYPE(${variable}) = DATATYPE(${formatted})
1248
- && LANG(${variable}) > LANG(${formatted})
1249
- )
1250
- )
1251
- )
1252
- || (
1253
- DATATYPE(${variable}) = DATATYPE(${formatted})
1254
- && DATATYPE(${variable}) IN (${SPARQL_VALUE_ORDERED_DATATYPE_VALUES})
1255
- && ${variable} > ${formatted}
1256
- )
1257
- )
1258
- )`;
1259
- }
1260
- function exactGraphCursorFilter(cursor) {
1261
- const s = formatTerm(cursor.s);
1262
- const p = formatTerm(cursor.p);
1263
- return `(
1264
- ${termAfterExactGraphCursor('?s', cursor.s)}
1265
- || (?s = ${s} && ${termAfterExactGraphCursor('?p', cursor.p)})
1266
- || (
1267
- ?s = ${s}
1268
- && ?p = ${p}
1269
- && ${termAfterExactGraphCursor('?o', cursor.o)}
1270
- )
1271
- )`;
1272
- }
1273
- function rememberExactGraphPageCursor(plan, offset, cursor) {
1274
- const existing = plan.cursors.get(offset);
1275
- if (existing && (existing.graph !== cursor.graph
1276
- || existing.graphOffset !== cursor.graphOffset
1277
- || existing.s !== cursor.s
1278
- || existing.p !== cursor.p
1279
- || existing.o !== cursor.o)) {
1280
- // A boundary changing within one memoized session means the source no
1281
- // longer describes the committed plan. Do not silently choose one cursor.
1282
- throw new Error(`Sync exact-graph cursor changed at offset ${offset}`);
1283
- }
1284
- plan.cursors.delete(offset);
1285
- plan.cursors.set(offset, cursor);
1286
- while (plan.cursors.size > EXACT_GRAPH_CURSOR_CACHE_MAX_ENTRIES) {
1287
- let evict = plan.cursors.keys().next().value;
1288
- // Offset zero is the session origin and is never evicted.
1289
- if (evict === 0) {
1290
- const next = plan.cursors.keys();
1291
- next.next();
1292
- evict = next.next().value;
1293
- }
1294
- plan.cursors.delete(evict);
1295
- }
1296
- }
1297
- function snapshotResponseByteLimit(maxBytesEstimate) {
1298
- // SPARQL JSON adds field names and escaping around each RDF term. Bound the
1299
- // transport body independently while leaving enough headroom for that wire
1300
- // overhead. HTTP adapters enforce this before parsing; embedded adapters are
1301
- // still bounded by the row LIMIT below.
1302
- return Math.max(1, Math.min(Number.MAX_SAFE_INTEGER, Math.floor(maxBytesEstimate) * 2));
1303
- }
1304
- /** Clamp a store response-cap overshoot (possibly bigint) into a safe number. */
1305
- function storeResponseActualBytes(error) {
1306
- return typeof error.actualBytes === 'bigint'
1307
- ? Number(error.actualBytes > BigInt(Number.MAX_SAFE_INTEGER)
1308
- ? BigInt(Number.MAX_SAFE_INTEGER)
1309
- : error.actualBytes)
1310
- : error.actualBytes;
1311
- }
1312
- function snapshotBudgetError(params) {
1313
- return new SyncRowSnapshotBudgetError(params);
1314
- }
1315
- async function loadExactGraphRowsSnapshot(store, plan, entry, limits, signal) {
1316
- if (entry.rowCount > limits.maxRows || plan.pagedGraphs.has(entry.graph))
1317
- return null;
1318
- if (plan.activeGraphRows?.graph === entry.graph)
1319
- return plan.activeGraphRows.rows;
1320
- if (plan.activeGraphRowsLoad?.graph === entry.graph) {
1321
- return raceAgainstAbort(plan.activeGraphRowsLoad.promise, signal);
1322
- }
1323
- const load = (async () => {
1324
- try {
1325
- const result = await store.query(`
1326
- SELECT ?s ?p ?o WHERE {
1327
- GRAPH <${assertSafeIri(entry.graph)}> { ?s ?p ?o }
1328
- }
1329
- LIMIT ${limits.maxRows + 1}
1330
- `, {
1331
- ...syncResponderStoreOptions(undefined, 'sync.responder.readExactGraphSnapshot'),
1332
- maxResponseBytes: snapshotResponseByteLimit(limits.maxBytesEstimate),
1333
- });
1334
- if (result.type !== 'bindings')
1335
- return [];
1336
- const rows = [];
1337
- let bytesEstimate = 0;
1338
- for (const row of result.bindings) {
1339
- const s = row['s'];
1340
- const p = row['p'];
1341
- const o = row['o'];
1342
- if (!s || !p || !o)
1343
- continue;
1344
- const nextBytes = bytesEstimate + estimateStringRowHeapBytes(s, p, o, entry.graph);
1345
- if (rows.length + 1 > limits.maxRows || nextBytes > limits.maxBytesEstimate) {
1346
- plan.pagedGraphs.add(entry.graph);
1347
- return null;
1348
- }
1349
- rows.push({ s, p, o, g: entry.graph });
1350
- bytesEstimate = nextBytes;
1351
- }
1352
- // The plan count and payload must describe one immutable graph snapshot.
1353
- // A mismatch means the graph changed between COUNT and SELECT; fail the
1354
- // session rather than silently skipping or duplicating rows.
1355
- if (rows.length !== entry.rowCount) {
1356
- throw new Error(`Sync exact-graph plan changed while reading ${entry.graph}: ` +
1357
- `expected ${entry.rowCount} rows, found ${rows.length}`);
1358
- }
1359
- rows.sort(compareRows);
1360
- plan.activeGraphRows = { graph: entry.graph, rows };
1361
- return rows;
1362
- }
1363
- catch (error) {
1364
- if (error instanceof StoreResponseTooLargeError) {
1365
- plan.pagedGraphs.add(entry.graph);
1366
- return null;
1367
- }
1368
- throw error;
1369
- }
1370
- })().finally(() => {
1371
- if (plan.activeGraphRowsLoad?.promise === load)
1372
- plan.activeGraphRowsLoad = undefined;
1373
- });
1374
- plan.activeGraphRowsLoad = { graph: entry.graph, promise: load };
1375
- return raceAgainstAbort(load, signal);
1376
- }
1377
- async function readExactGraphPlanSnapshot(store, plan, cache, limits) {
1378
- if (plan.totalRows > limits.maxRows) {
1379
- throw snapshotBudgetError({
1380
- key: cache.key,
1381
- reason: 'snapshot_rows',
1382
- rows: plan.totalRows,
1383
- bytesEstimate: 0,
1384
- limit: limits.maxRows,
1385
- });
1386
- }
1387
- const rows = [];
1388
- let bytesEstimate = 0;
1389
- for (const entry of plan.entries) {
1390
- const graphRows = await loadExactGraphRowsSnapshot(store, plan, entry, limits);
1391
- if (!graphRows) {
1392
- throw snapshotBudgetError({
1393
- key: cache.key,
1394
- reason: 'snapshot_bytes',
1395
- rows: rows.length,
1396
- bytesEstimate: limits.maxBytesEstimate + 1,
1397
- limit: limits.maxBytesEstimate,
1398
- });
1399
- }
1400
- for (const row of graphRows) {
1401
- const nextBytes = bytesEstimate + estimateStringRowHeapBytes(row.s, row.p, row.o, row.g);
1402
- if (nextBytes > limits.maxBytesEstimate) {
1403
- throw snapshotBudgetError({
1404
- key: cache.key,
1405
- reason: 'snapshot_bytes',
1406
- rows: rows.length + 1,
1407
- bytesEstimate: nextBytes,
1408
- limit: limits.maxBytesEstimate,
1409
- });
1410
- }
1411
- rows.push(row);
1412
- bytesEstimate = nextBytes;
1413
- }
1414
- }
1415
- return rows.sort(compareRows);
1416
- }
1417
- async function readRowsPageFromExactGraphPlan(store, plan, offset, limit, snapshotLimits, signal) {
1418
- const safeOffset = Math.max(0, Math.floor(offset));
1419
- let skip = safeOffset;
1420
- let remaining = Math.max(0, Math.floor(limit));
1421
- if (remaining === 0 || skip >= plan.totalRows)
1422
- return [];
1423
- const rows = [];
1424
- const cursor = plan.cursors.get(safeOffset);
1425
- const useSeek = cursor !== undefined
1426
- && cursor !== null
1427
- && !hasUnsupportedExactGraphCursorTerm(cursor);
1428
- let cursorActive = useSeek;
1429
- let lastGraphOffset = 0;
1430
- let lastRow;
1431
- for (const entry of plan.entries) {
1432
- let entryOffset;
1433
- let seekFilter;
1434
- if (cursorActive && cursor) {
1435
- const graphOrder = compareCodePoint(entry.graph, cursor.graph);
1436
- if (graphOrder < 0)
1437
- continue;
1438
- if (graphOrder === 0) {
1439
- entryOffset = cursor.graphOffset;
1440
- if (entryOffset > entry.rowCount) {
1441
- throw new Error(`Sync exact-graph cursor is past the committed row count for ${entry.graph}`);
1442
- }
1443
- seekFilter = exactGraphCursorFilter(cursor);
1444
- }
1445
- else {
1446
- // Once the cursor's graph is exhausted, every later graph starts at
1447
- // row zero and can be read with a plain LIMIT. There is no OFFSET to
1448
- // make the store revisit the already-consumed prefix.
1449
- entryOffset = 0;
1450
- }
1451
- }
1452
- else {
1453
- if (skip >= entry.rowCount) {
1454
- skip -= entry.rowCount;
1455
- continue;
1456
- }
1457
- entryOffset = skip;
1458
- }
1459
- const expectedRows = Math.min(entry.rowCount - entryOffset, remaining);
1460
- if (expectedRows <= 0) {
1461
- cursorActive = false;
1462
- // The cursor already consumed this graph. Subsequent graphs start at
1463
- // their own zero offset rather than reusing the request's global offset.
1464
- skip = 0;
1465
- continue;
1466
- }
1467
- let added = 0;
1468
- const graphRows = await loadExactGraphRowsSnapshot(store, plan, entry, snapshotLimits, signal);
1469
- if (graphRows) {
1470
- const page = graphRows.slice(entryOffset, entryOffset + expectedRows);
1471
- rows.push(...page);
1472
- added = page.length;
1473
- }
1474
- else {
1475
- const isFinalGraphPage = entryOffset + expectedRows === entry.rowCount;
1476
- const seekEntry = cursorActive && cursor !== undefined && cursor !== null;
1477
- const offsetClause = seekFilter || seekEntry ? '' : `\n OFFSET ${entryOffset}`;
1478
- // Keep the no-cursor query compact and compatible with adapters and
1479
- // instrumentation that recognize the established one-line graph
1480
- // pattern. Cursor pages need the expanded form for their FILTER.
1481
- const graphPattern = seekFilter
1482
- ? `GRAPH <${assertSafeIri(entry.graph)}> {
1483
- ?s ?p ?o
1484
- FILTER(${seekFilter})
1485
- }`
1486
- : `GRAPH <${assertSafeIri(entry.graph)}> { ?s ?p ?o }`;
1487
- const result = await store.query(`
1488
- SELECT ?s ?p ?o WHERE {
1489
- ${graphPattern}
1490
- }
1491
- ORDER BY ?s ?p ?o
1492
- ${offsetClause}
1493
- LIMIT ${expectedRows + (isFinalGraphPage ? 1 : 0)}
1494
- `, {
1495
- ...syncResponderStoreOptions(signal, 'sync.responder.readExactGraphRowsPage'),
1496
- maxResponseBytes: snapshotResponseByteLimit(snapshotLimits.maxBytesEstimate),
1497
- });
1498
- if (result.type === 'bindings') {
1499
- for (const row of result.bindings) {
1500
- const s = row['s'];
1501
- const p = row['p'];
1502
- const o = row['o'];
1503
- if (s && p && o) {
1504
- rows.push({ s, p, o, g: entry.graph });
1505
- added += 1;
1506
- }
1507
- }
1508
- }
1509
- if (isFinalGraphPage && added > expectedRows) {
1510
- throw new Error(`Sync exact-graph plan changed while paging ${entry.graph}: `
1511
- + `expected ${entry.rowCount} total rows but found a surplus row`);
1512
- }
1513
- }
1514
- // Exact-asset metadata is a commitment to the number of rows in each
1515
- // assertion graph. Do not let a short graph borrow rows from the next
1516
- // graph in the plan: that produces a full-looking response whose graph
1517
- // boundaries no longer match the manifest and hides the damaged source.
1518
- if (added !== expectedRows) {
1519
- throw new Error(`Sync exact-graph plan changed while paging ${entry.graph}: ` +
1520
- `expected ${expectedRows} rows at offset ${entryOffset}, found ${added}`);
1521
- }
1522
- if (added > 0) {
1523
- lastRow = rows[rows.length - 1];
1524
- lastGraphOffset = entryOffset + added;
1525
- }
1526
- remaining -= added;
1527
- if (remaining <= 0)
1528
- break;
1529
- skip = 0;
1530
- // The cursor has served its graph. Later entries are read from their
1531
- // beginning, still without OFFSET.
1532
- cursorActive = false;
1533
- }
1534
- const expectedTotal = Math.min(safeOffset + Math.max(0, Math.floor(limit)), plan.totalRows)
1535
- - safeOffset;
1536
- if (rows.length !== expectedTotal) {
1537
- throw new Error(`Sync exact-graph plan changed at offset ${safeOffset}: `
1538
- + `expected ${expectedTotal} rows, found ${rows.length}`);
1539
- }
1540
- if (lastRow) {
1541
- rememberExactGraphPageCursor(plan, safeOffset + rows.length, {
1542
- graph: lastRow.g,
1543
- graphOffset: lastGraphOffset,
1544
- s: lastRow.s,
1545
- p: lastRow.p,
1546
- o: lastRow.o,
1547
- });
1548
- }
1549
- return rows;
793
+ return readResponderRowsPage(cache && { ...cache, expiredMessage: cache.expiredMessage ?? 'Durable data sync session snapshot expired before page completion' }, loadPage, offset, limit, signal, cache ? { loadSnapshot: async () => readExactGraphPlanSnapshot(store, await getPlan(0, undefined), cache, rowSnapshotLimits) } : undefined);
1550
794
  }
1551
795
  async function readPagedDurableDeltaRowsAcrossGraphs(store, graphs, metaGraphs, sinceBatchId, offset, limit, cache, signal) {
1552
796
  return readResponderRowsPage(cache && {
@@ -1554,181 +798,6 @@ async function readPagedDurableDeltaRowsAcrossGraphs(store, graphs, metaGraphs,
1554
798
  expiredMessage: cache.expiredMessage ?? 'Durable data sync session snapshot expired before page completion',
1555
799
  }, (pageOffset, pageLimit, pageSignal) => readDurableDeltaRowsPageAcrossGraphs(store, graphs, metaGraphs, sinceBatchId, pageOffset, pageLimit, pageSignal), offset, limit, signal);
1556
800
  }
1557
- /**
1558
- * Session-plan getter shared by the plan-backed lanes (exact-graph and TTL SWM
1559
- * meta), owning the one lifecycle both must agree on:
1560
- *
1561
- * - the explicit session refresh is consumed exactly ONCE, so when a snapshot
1562
- * build crosses its budget, the immediate page-zero fallback reuses the
1563
- * just-built plan instead of rebuilding (and re-counting) it against a
1564
- * moving store;
1565
- * - offset>0 REQUIRES the existing plan — silently rebuilding against moved
1566
- * data would make the numeric offset skip or duplicate rows;
1567
- * - memo expiry becomes the lane's session-expired error.
1568
- *
1569
- * The SWM data lane intentionally does not use this helper: it has no snapshot
1570
- * lane, so a single plan access per page means per-call refresh semantics are
1571
- * equivalent and simpler there.
1572
- */
1573
- /**
1574
- * Sessionless callers (no `syncSessionId` => no memo cache key) rebuild the
1575
- * plan on EVERY page: per-page discovery + chunked GROUP BY cost (bounded, and
1576
- * still far cheaper than the deleted global-sort query), no `requireExisting`
1577
- * protection, and a fresh digest sidecar per plan object. Offset>0 pages
1578
- * against a mutating store can therefore skip or duplicate rows for such
1579
- * requesters — sessionless TTL paging is BEST-EFFORT, and the per-subject
1580
- * digest guard does NOT cover it. This matches the exposure of the old OFFSET
1581
- * lane (not a regression); requester-side verification still gates admission.
1582
- */
1583
- function createSessionPlanGetter(memo, cacheKey, initialRefreshPending, loadPlan, expiredMessage) {
1584
- let planRefreshPending = initialRefreshPending;
1585
- return async (pageOffset, pageSignal) => {
1586
- const refreshPlan = pageOffset === 0 && planRefreshPending;
1587
- if (refreshPlan)
1588
- planRefreshPending = false;
1589
- const plan = memo && cacheKey
1590
- ? await memo.get(cacheKey, () => loadPlan(pageSignal), {
1591
- refresh: refreshPlan,
1592
- requireExisting: pageOffset > 0,
1593
- signal: pageSignal,
1594
- })
1595
- : await loadPlan(pageSignal);
1596
- if (!plan)
1597
- throw new Error(expiredMessage);
1598
- return plan;
1599
- };
1600
- }
1601
- async function loadStorePagedSnapshot(cache, loadPage) {
1602
- const limits = cache.memo.snapshotLoadLimits ?? {
1603
- maxRows: SYNC_RESPONDER_SNAPSHOT_BUILD_MAX_ROWS,
1604
- maxBytesEstimate: SYNC_RESPONDER_SNAPSHOT_BUILD_MAX_BYTES_ESTIMATE,
1605
- pageRows: SYNC_RESPONDER_SNAPSHOT_BUILD_PAGE_ROWS,
1606
- };
1607
- const rows = [];
1608
- let bytesEstimate = 0;
1609
- let offset = 0;
1610
- // Read at most one row beyond the configured row cap. Tiny-budget tests and
1611
- // operators therefore never receive a 500-row temporary page merely to learn
1612
- // that a one-row snapshot is oversized.
1613
- const pageRows = Math.max(1, Math.min(Math.floor(limits.pageRows), Math.floor(limits.maxRows) + 1));
1614
- while (true) {
1615
- // The shared snapshot load is owner-independent: an individual request
1616
- // abort must not cancel a load used by coalesced waiters.
1617
- const page = await loadPage(offset, pageRows, undefined);
1618
- for (const row of page) {
1619
- const nextRows = rows.length + 1;
1620
- const nextBytes = bytesEstimate + estimateStringRowHeapBytes(row.s, row.p, row.o, row.g);
1621
- if (nextRows > limits.maxRows) {
1622
- throw new SyncRowSnapshotBudgetError({
1623
- key: cache.key,
1624
- reason: 'snapshot_rows',
1625
- rows: nextRows,
1626
- bytesEstimate: nextBytes,
1627
- limit: limits.maxRows,
1628
- });
1629
- }
1630
- if (nextBytes > limits.maxBytesEstimate) {
1631
- throw new SyncRowSnapshotBudgetError({
1632
- key: cache.key,
1633
- reason: 'snapshot_bytes',
1634
- rows: nextRows,
1635
- bytesEstimate: nextBytes,
1636
- limit: limits.maxBytesEstimate,
1637
- });
1638
- }
1639
- rows.push(row);
1640
- bytesEstimate = nextBytes;
1641
- }
1642
- if (page.length < pageRows)
1643
- return rows;
1644
- offset += page.length;
1645
- }
1646
- }
1647
- async function readResponderRowsPage(cache, loadStoreBoundedPage, offset, limit, signal, options) {
1648
- const loadSnapshot = options?.loadSnapshot;
1649
- const subjectAtomic = options?.subjectAtomic ?? false;
1650
- const safeOffset = Math.max(0, Math.floor(offset));
1651
- const safeLimit = Math.max(0, Math.floor(limit));
1652
- if (safeLimit === 0)
1653
- return [];
1654
- // No session snapshot: the store-paged loader itself enforces subject
1655
- // atomicity where required (durable meta passes a subject-atomic loader), so
1656
- // this path needs no extra handling.
1657
- if (!cache)
1658
- return loadStoreBoundedPage(safeOffset, safeLimit, signal);
1659
- try {
1660
- return await readCachedRowsPage(cache, loadSnapshot ?? (() => loadStorePagedSnapshot(cache, loadStoreBoundedPage)), safeOffset, safeLimit, signal, subjectAtomic);
1661
- }
1662
- catch (error) {
1663
- if (!isSyncRowSnapshotPagingRequiredError(error))
1664
- throw error;
1665
- return loadStoreBoundedPage(safeOffset, safeLimit, signal);
1666
- }
1667
- }
1668
- async function readCachedRowsPage(cache, loadRows, offset, limit, signal, subjectAtomic = false) {
1669
- const safeOffset = Math.max(0, Math.floor(offset));
1670
- const safeLimit = Math.max(0, Math.floor(limit));
1671
- if (safeLimit === 0)
1672
- return [];
1673
- const rows = await cache.memo.get(cache.key, loadRows, {
1674
- refresh: cache.refresh,
1675
- refreshGeneration: cache.refreshGeneration,
1676
- // No prefix has been consumed at offset zero, so an entry evicted under
1677
- // responder memory pressure can be rebuilt without mixing snapshots.
1678
- refreshExpired: safeOffset === 0,
1679
- requireExisting: safeOffset > 0,
1680
- signal,
1681
- });
1682
- if (rows == null) {
1683
- throw new Error(cache.expiredMessage ?? 'Sync session snapshot expired before page completion');
1684
- }
1685
- // `rows` is an immutable snapshot. Slice it directly so serving a 500-row
1686
- // page allocates only that page's backing array, never a shallow copy of the
1687
- // complete snapshot first.
1688
- let pageEnd = Math.min(safeOffset + safeLimit, rows.length);
1689
- // Subject-atomic durable-meta lane (#1788): if the requested window ends
1690
- // mid-subject, EXTEND it forward until the subject changes (or the snapshot
1691
- // ends) so a graph-scoped seal is never split across a page — and therefore
1692
- // never across a sync round. Extending (never trimming) keeps a non-final
1693
- // page `>= safeLimit`, so it never trips the requester's empty-page EOF nor
1694
- // the release-on-short-page path below. Reads only in-page indices plus a
1695
- // bounded one-subject lookahead — never the whole snapshot. `_meta` subjects
1696
- // are small (a seal is 14 quads; KA descriptors ~10; membership/activity rows
1697
- // bounded), so the extension is O(one subject) and negligible against the
1698
- // #1868 64k-row meta snapshot ceiling; a pathologically large subject is
1699
- // still emitted whole rather than truncated, with the transport frame limit
1700
- // as the final guard.
1701
- if (subjectAtomic && pageEnd > safeOffset && pageEnd < rows.length) {
1702
- const trailingKey = metaSubjectKey(rows[pageEnd - 1]);
1703
- while (pageEnd < rows.length && metaSubjectKey(rows[pageEnd]) === trailingKey) {
1704
- pageEnd += 1;
1705
- }
1706
- }
1707
- const page = rows.slice(safeOffset, pageEnd);
1708
- if (page.length === 0 || (cache.releaseOnShortPage !== false && page.length < safeLimit)) {
1709
- cache.memo.release(cache.key, { graceMs: COMPLETED_SYNC_RESPONDER_SESSION_GRACE_MS });
1710
- }
1711
- return page;
1712
- }
1713
- function asAbortError(reason) {
1714
- return reason instanceof Error ? reason : new Error(String(reason ?? 'aborted'));
1715
- }
1716
- function throwIfAborted(signal) {
1717
- if (signal?.aborted)
1718
- throw asAbortError(signal.reason);
1719
- }
1720
- function raceAgainstAbort(work, signal) {
1721
- if (!signal)
1722
- return work;
1723
- throwIfAborted(signal);
1724
- return new Promise((resolve, reject) => {
1725
- const onAbort = () => reject(asAbortError(signal.reason));
1726
- signal.addEventListener('abort', onAbort, { once: true });
1727
- work.then(resolve, reject).finally(() => {
1728
- signal.removeEventListener('abort', onAbort);
1729
- });
1730
- });
1731
- }
1732
801
  async function readAdmittedSwmSubGraphNames(store, contextGraphId, signal) {
1733
802
  const cgPrefix = contextGraphDataGraphUri(contextGraphId);
1734
803
  const names = [];
@@ -2187,10 +1256,17 @@ async function countFreshSwmMetaSubjectRows(store, graph, subjects, budgetKey, s
2187
1256
  for (const chunk of chunkValues(subjects, FRESH_SWM_META_PLAN_SUBJECT_CHUNK)) {
2188
1257
  let res;
2189
1258
  try {
1259
+ // Blazegraph drops the groups when aggregate subjects are introduced by
1260
+ // VALUES. Constant-subject branches keep indexed, bounded lookups on
1261
+ // both backends; a FILTER IN would scan the whole metadata graph.
2190
1262
  res = await store.query(`
2191
1263
  SELECT ?s (COUNT(*) AS ?count) WHERE {
2192
- VALUES ?s { ${subjectValues(chunk)} }
2193
- GRAPH <${assertSafeIri(graph)}> { ?s ?p ?o }
1264
+ GRAPH <${assertSafeIri(graph)}> {
1265
+ ${chunk.map((subject) => {
1266
+ const iri = `<${assertSafeIri(subject)}>`;
1267
+ return `{ ${iri} ?p ?o BIND(${iri} AS ?s) }`;
1268
+ }).join(' UNION ')}
1269
+ }
2194
1270
  }
2195
1271
  GROUP BY ?s
2196
1272
  `, {
@@ -3251,12 +2327,6 @@ function durableDeltaGroupClause(metaGraphs, sinceBatchId, includeGraph = false)
3251
2327
  function graphValues(graphs) {
3252
2328
  return dedupeStrings(graphs).map((graph) => `<${assertSafeIri(graph)}>`).join(' ');
3253
2329
  }
3254
- function durableDataRowListCacheKey(scope, contextGraphId, sinceBatchId, assetUals) {
3255
- const selection = assetUals === undefined
3256
- ? (sinceBatchId == null ? 'full' : `since:${sinceBatchId.toString()}`)
3257
- : exactAssetFilterKey(assetUals);
3258
- return `durable-data:${scope}:${contextGraphId}:${selection}`;
3259
- }
3260
2330
  function dedupeStrings(values) {
3261
2331
  const seen = new Set();
3262
2332
  const out = [];
@@ -3280,11 +2350,4 @@ function stripLiteral(value) {
3280
2350
  const match = value.match(/^"((?:[^"\\]|\\.)*)"(?:@[\w-]+|\^\^<[^>]+>)?$/);
3281
2351
  return match ? match[1].replace(/\\"/g, '"').replace(/\\\\/g, '\\') : value;
3282
2352
  }
3283
- function formatTerm(term) {
3284
- if (term.startsWith('"') || term.startsWith('_:'))
3285
- return term;
3286
- if (term.startsWith('<') && term.endsWith('>'))
3287
- return term;
3288
- return `<${assertSafeIri(term)}>`;
3289
- }
3290
2353
  //# sourceMappingURL=graph-plan.js.map