@opendatalabs/personal-server-ts-core 1.34.2 → 1.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (414) hide show
  1. package/dist/additions/durable.d.ts +32 -2
  2. package/dist/additions/durable.d.ts.map +1 -1
  3. package/dist/additions/durable.js +237 -88
  4. package/dist/additions/durable.js.map +1 -1
  5. package/dist/additions/version-inventory.d.ts +4 -0
  6. package/dist/additions/version-inventory.d.ts.map +1 -1
  7. package/dist/additions/version-inventory.js +11 -1
  8. package/dist/additions/version-inventory.js.map +1 -1
  9. package/dist/api/index.d.ts +18 -1
  10. package/dist/api/index.d.ts.map +1 -1
  11. package/dist/api/index.js +172 -4
  12. package/dist/api/index.js.map +1 -1
  13. package/dist/api/oura-collection-requirements.d.ts +16 -0
  14. package/dist/api/oura-collection-requirements.d.ts.map +1 -0
  15. package/dist/api/oura-collection-requirements.js +70 -0
  16. package/dist/api/oura-collection-requirements.js.map +1 -0
  17. package/dist/api/scope-upload-batches.d.ts +18 -0
  18. package/dist/api/scope-upload-batches.d.ts.map +1 -0
  19. package/dist/api/scope-upload-batches.js +71 -0
  20. package/dist/api/scope-upload-batches.js.map +1 -0
  21. package/dist/api/scope-uploads.d.ts +112 -0
  22. package/dist/api/scope-uploads.d.ts.map +1 -0
  23. package/dist/api/scope-uploads.js +369 -0
  24. package/dist/api/scope-uploads.js.map +1 -0
  25. package/dist/client.d.ts +70 -0
  26. package/dist/client.d.ts.map +1 -1
  27. package/dist/client.js +1 -0
  28. package/dist/client.js.map +1 -1
  29. package/dist/contracts/data.d.ts +8 -0
  30. package/dist/contracts/data.d.ts.map +1 -1
  31. package/dist/contracts/data.js +31 -1
  32. package/dist/contracts/data.js.map +1 -1
  33. package/dist/contracts/grants.d.ts.map +1 -1
  34. package/dist/contracts/grants.js +3 -0
  35. package/dist/contracts/grants.js.map +1 -1
  36. package/dist/contracts/index.d.ts +3 -1
  37. package/dist/contracts/index.d.ts.map +1 -1
  38. package/dist/contracts/index.js +3 -1
  39. package/dist/contracts/index.js.map +1 -1
  40. package/dist/contracts/oura-collection-requirements.d.ts +17 -0
  41. package/dist/contracts/oura-collection-requirements.d.ts.map +1 -0
  42. package/dist/contracts/oura-collection-requirements.js +49 -0
  43. package/dist/contracts/oura-collection-requirements.js.map +1 -0
  44. package/dist/legacy-projection/bindings.d.ts +1 -7
  45. package/dist/legacy-projection/bindings.d.ts.map +1 -1
  46. package/dist/legacy-projection/bindings.js +162 -28
  47. package/dist/legacy-projection/bindings.js.map +1 -1
  48. package/dist/legacy-projection/index.d.ts +6 -5
  49. package/dist/legacy-projection/index.d.ts.map +1 -1
  50. package/dist/legacy-projection/index.js +9 -21
  51. package/dist/legacy-projection/index.js.map +1 -1
  52. package/dist/legacy-projection/oura-browser-bindings.d.ts +2 -0
  53. package/dist/legacy-projection/oura-browser-bindings.d.ts.map +1 -1
  54. package/dist/legacy-projection/oura-browser-bindings.js +2 -0
  55. package/dist/legacy-projection/oura-browser-bindings.js.map +1 -1
  56. package/dist/legacy-projection/strava-browser-bindings.d.ts +3 -0
  57. package/dist/legacy-projection/strava-browser-bindings.d.ts.map +1 -0
  58. package/dist/legacy-projection/strava-browser-bindings.js +32 -0
  59. package/dist/legacy-projection/strava-browser-bindings.js.map +1 -0
  60. package/dist/legacy-projection/types.d.ts +44 -12
  61. package/dist/legacy-projection/types.d.ts.map +1 -1
  62. package/dist/mcp/connection-api.d.ts +11 -1
  63. package/dist/mcp/connection-api.d.ts.map +1 -1
  64. package/dist/mcp/connection-api.js +94 -9
  65. package/dist/mcp/connection-api.js.map +1 -1
  66. package/dist/mcp/index.d.ts +1 -0
  67. package/dist/mcp/index.d.ts.map +1 -1
  68. package/dist/mcp/index.js +1 -0
  69. package/dist/mcp/index.js.map +1 -1
  70. package/dist/mcp/server.d.ts +9 -0
  71. package/dist/mcp/server.d.ts.map +1 -1
  72. package/dist/mcp/server.js +19 -6
  73. package/dist/mcp/server.js.map +1 -1
  74. package/dist/mcp/store.d.ts +10 -1
  75. package/dist/mcp/store.d.ts.map +1 -1
  76. package/dist/mcp/store.js +51 -0
  77. package/dist/mcp/store.js.map +1 -1
  78. package/dist/mcp/tools.d.ts +52 -2
  79. package/dist/mcp/tools.d.ts.map +1 -1
  80. package/dist/mcp/tools.js +395 -11
  81. package/dist/mcp/tools.js.map +1 -1
  82. package/dist/mcp/types.d.ts +36 -2
  83. package/dist/mcp/types.d.ts.map +1 -1
  84. package/dist/mcp/types.js +12 -0
  85. package/dist/mcp/types.js.map +1 -1
  86. package/dist/mcp/write-client.d.ts +81 -0
  87. package/dist/mcp/write-client.d.ts.map +1 -0
  88. package/dist/mcp/write-client.js +140 -0
  89. package/dist/mcp/write-client.js.map +1 -0
  90. package/dist/oura/history-policy.d.ts +12 -0
  91. package/dist/oura/history-policy.d.ts.map +1 -0
  92. package/dist/oura/history-policy.js +54 -0
  93. package/dist/oura/history-policy.js.map +1 -0
  94. package/dist/oura/index.d.ts +51 -0
  95. package/dist/oura/index.d.ts.map +1 -0
  96. package/dist/oura/index.js +315 -0
  97. package/dist/oura/index.js.map +1 -0
  98. package/dist/pdpp/approval.d.ts +1 -1
  99. package/dist/pdpp/approval.d.ts.map +1 -1
  100. package/dist/pdpp/approval.js +29 -10
  101. package/dist/pdpp/approval.js.map +1 -1
  102. package/dist/pdpp/declaration-limits.d.ts +7 -0
  103. package/dist/pdpp/declaration-limits.d.ts.map +1 -0
  104. package/dist/pdpp/declaration-limits.js +7 -0
  105. package/dist/pdpp/declaration-limits.js.map +1 -0
  106. package/dist/pdpp/declaration.d.ts +2 -1
  107. package/dist/pdpp/declaration.d.ts.map +1 -1
  108. package/dist/pdpp/declaration.js +2 -1
  109. package/dist/pdpp/declaration.js.map +1 -1
  110. package/dist/pdpp/index.d.ts +3 -2
  111. package/dist/pdpp/index.d.ts.map +1 -1
  112. package/dist/pdpp/index.js +3 -2
  113. package/dist/pdpp/index.js.map +1 -1
  114. package/dist/pdpp/issuance.d.ts.map +1 -1
  115. package/dist/pdpp/issuance.js +6 -2
  116. package/dist/pdpp/issuance.js.map +1 -1
  117. package/dist/pdpp/resolve.d.ts +12 -1
  118. package/dist/pdpp/resolve.d.ts.map +1 -1
  119. package/dist/pdpp/resolve.js +156 -58
  120. package/dist/pdpp/resolve.js.map +1 -1
  121. package/dist/pdpp/selection.d.ts +30 -1
  122. package/dist/pdpp/selection.d.ts.map +1 -1
  123. package/dist/pdpp/selection.js +77 -26
  124. package/dist/pdpp/selection.js.map +1 -1
  125. package/dist/pdpp/time.d.ts +39 -0
  126. package/dist/pdpp/time.d.ts.map +1 -0
  127. package/dist/pdpp/time.js +173 -0
  128. package/dist/pdpp/time.js.map +1 -0
  129. package/dist/pdpp/tokens.d.ts.map +1 -1
  130. package/dist/pdpp/tokens.js +4 -2
  131. package/dist/pdpp/tokens.js.map +1 -1
  132. package/dist/pdpp/types.d.ts +18 -2
  133. package/dist/pdpp/types.d.ts.map +1 -1
  134. package/dist/pdpp/types.js +7 -0
  135. package/dist/pdpp/types.js.map +1 -1
  136. package/dist/policy/reserved-scopes.d.ts +7 -0
  137. package/dist/policy/reserved-scopes.d.ts.map +1 -1
  138. package/dist/policy/reserved-scopes.js +12 -1
  139. package/dist/policy/reserved-scopes.js.map +1 -1
  140. package/dist/ports/index.d.ts +85 -1
  141. package/dist/ports/index.d.ts.map +1 -1
  142. package/dist/ports/index.js.map +1 -1
  143. package/dist/ports/pdpp-auth.d.ts +17 -27
  144. package/dist/ports/pdpp-auth.d.ts.map +1 -1
  145. package/dist/ports/pdpp-auth.js +14 -28
  146. package/dist/ports/pdpp-auth.js.map +1 -1
  147. package/dist/publication/publish.d.ts +96 -0
  148. package/dist/publication/publish.d.ts.map +1 -0
  149. package/dist/publication/publish.js +261 -0
  150. package/dist/publication/publish.js.map +1 -0
  151. package/dist/replication/completion.d.ts +20 -0
  152. package/dist/replication/completion.d.ts.map +1 -0
  153. package/dist/replication/completion.js +73 -0
  154. package/dist/replication/completion.js.map +1 -0
  155. package/dist/replication/coordinator-state.d.ts +29 -0
  156. package/dist/replication/coordinator-state.d.ts.map +1 -0
  157. package/dist/replication/coordinator-state.js +88 -0
  158. package/dist/replication/coordinator-state.js.map +1 -0
  159. package/dist/replication/coordinator-state.test-utils.d.ts +32 -0
  160. package/dist/replication/coordinator-state.test-utils.d.ts.map +1 -0
  161. package/dist/replication/coordinator-state.test-utils.js +113 -0
  162. package/dist/replication/coordinator-state.test-utils.js.map +1 -0
  163. package/dist/replication/coordinator.d.ts +264 -0
  164. package/dist/replication/coordinator.d.ts.map +1 -0
  165. package/dist/replication/coordinator.js +499 -0
  166. package/dist/replication/coordinator.js.map +1 -0
  167. package/dist/replication/copies.d.ts +126 -0
  168. package/dist/replication/copies.d.ts.map +1 -0
  169. package/dist/replication/copies.js +437 -0
  170. package/dist/replication/copies.js.map +1 -0
  171. package/dist/replication/copy-promotion.d.ts +132 -0
  172. package/dist/replication/copy-promotion.d.ts.map +1 -0
  173. package/dist/replication/copy-promotion.js +126 -0
  174. package/dist/replication/copy-promotion.js.map +1 -0
  175. package/dist/replication/door.d.ts +33 -0
  176. package/dist/replication/door.d.ts.map +1 -0
  177. package/dist/replication/door.js +10 -0
  178. package/dist/replication/door.js.map +1 -0
  179. package/dist/replication/dpv2.d.ts +141 -0
  180. package/dist/replication/dpv2.d.ts.map +1 -0
  181. package/dist/replication/dpv2.js +320 -0
  182. package/dist/replication/dpv2.js.map +1 -0
  183. package/dist/replication/effects.d.ts +68 -0
  184. package/dist/replication/effects.d.ts.map +1 -0
  185. package/dist/replication/effects.js +89 -0
  186. package/dist/replication/effects.js.map +1 -0
  187. package/dist/replication/engine.d.ts +378 -0
  188. package/dist/replication/engine.d.ts.map +1 -0
  189. package/dist/replication/engine.js +3197 -0
  190. package/dist/replication/engine.js.map +1 -0
  191. package/dist/replication/envelope.d.ts +481 -0
  192. package/dist/replication/envelope.d.ts.map +1 -0
  193. package/dist/replication/envelope.js +192 -0
  194. package/dist/replication/envelope.js.map +1 -0
  195. package/dist/replication/evidence.d.ts +118 -0
  196. package/dist/replication/evidence.d.ts.map +1 -0
  197. package/dist/replication/evidence.js +198 -0
  198. package/dist/replication/evidence.js.map +1 -0
  199. package/dist/replication/finality.d.ts +16 -0
  200. package/dist/replication/finality.d.ts.map +1 -0
  201. package/dist/replication/finality.js +11 -0
  202. package/dist/replication/finality.js.map +1 -0
  203. package/dist/replication/fixtures.d.ts +16 -0
  204. package/dist/replication/fixtures.d.ts.map +1 -0
  205. package/dist/replication/fixtures.js +47 -0
  206. package/dist/replication/fixtures.js.map +1 -0
  207. package/dist/replication/host-config.d.ts +52 -0
  208. package/dist/replication/host-config.d.ts.map +1 -0
  209. package/dist/replication/host-config.js +111 -0
  210. package/dist/replication/host-config.js.map +1 -0
  211. package/dist/replication/host-driver.d.ts +95 -0
  212. package/dist/replication/host-driver.d.ts.map +1 -0
  213. package/dist/replication/host-driver.js +202 -0
  214. package/dist/replication/host-driver.js.map +1 -0
  215. package/dist/replication/host-ports.d.ts +48 -0
  216. package/dist/replication/host-ports.d.ts.map +1 -0
  217. package/dist/replication/host-ports.js +69 -0
  218. package/dist/replication/host-ports.js.map +1 -0
  219. package/dist/replication/identity.d.ts +13 -0
  220. package/dist/replication/identity.d.ts.map +1 -0
  221. package/dist/replication/identity.js +22 -0
  222. package/dist/replication/identity.js.map +1 -0
  223. package/dist/replication/limits.d.ts +124 -0
  224. package/dist/replication/limits.d.ts.map +1 -0
  225. package/dist/replication/limits.js +182 -0
  226. package/dist/replication/limits.js.map +1 -0
  227. package/dist/replication/merge-plan.d.ts +92 -0
  228. package/dist/replication/merge-plan.d.ts.map +1 -0
  229. package/dist/replication/merge-plan.js +229 -0
  230. package/dist/replication/merge-plan.js.map +1 -0
  231. package/dist/replication/namespace.d.ts +4 -0
  232. package/dist/replication/namespace.d.ts.map +1 -0
  233. package/dist/replication/namespace.js +7 -0
  234. package/dist/replication/namespace.js.map +1 -0
  235. package/dist/replication/outcome.d.ts +178 -0
  236. package/dist/replication/outcome.d.ts.map +1 -0
  237. package/dist/replication/outcome.js +83 -0
  238. package/dist/replication/outcome.js.map +1 -0
  239. package/dist/replication/payload.d.ts +39 -0
  240. package/dist/replication/payload.d.ts.map +1 -0
  241. package/dist/replication/payload.js +137 -0
  242. package/dist/replication/payload.js.map +1 -0
  243. package/dist/replication/preparation.d.ts +42 -0
  244. package/dist/replication/preparation.d.ts.map +1 -0
  245. package/dist/replication/preparation.js +118 -0
  246. package/dist/replication/preparation.js.map +1 -0
  247. package/dist/replication/rebaseline.d.ts +33 -0
  248. package/dist/replication/rebaseline.d.ts.map +1 -0
  249. package/dist/replication/rebaseline.js +40 -0
  250. package/dist/replication/rebaseline.js.map +1 -0
  251. package/dist/replication/rebinding.d.ts +43 -0
  252. package/dist/replication/rebinding.d.ts.map +1 -0
  253. package/dist/replication/rebinding.js +52 -0
  254. package/dist/replication/rebinding.js.map +1 -0
  255. package/dist/replication/receive.d.ts +57 -0
  256. package/dist/replication/receive.d.ts.map +1 -0
  257. package/dist/replication/receive.js +114 -0
  258. package/dist/replication/receive.js.map +1 -0
  259. package/dist/replication/record-reducer.d.ts +16 -0
  260. package/dist/replication/record-reducer.d.ts.map +1 -0
  261. package/dist/replication/record-reducer.js +52 -0
  262. package/dist/replication/record-reducer.js.map +1 -0
  263. package/dist/replication/revision.d.ts +24 -0
  264. package/dist/replication/revision.d.ts.map +1 -0
  265. package/dist/replication/revision.js +35 -0
  266. package/dist/replication/revision.js.map +1 -0
  267. package/dist/replication/roster.d.ts +53 -0
  268. package/dist/replication/roster.d.ts.map +1 -0
  269. package/dist/replication/roster.js +115 -0
  270. package/dist/replication/roster.js.map +1 -0
  271. package/dist/replication/schedule.d.ts +73 -0
  272. package/dist/replication/schedule.d.ts.map +1 -0
  273. package/dist/replication/schedule.js +182 -0
  274. package/dist/replication/schedule.js.map +1 -0
  275. package/dist/replication/stream.d.ts +73 -0
  276. package/dist/replication/stream.d.ts.map +1 -0
  277. package/dist/replication/stream.js +542 -0
  278. package/dist/replication/stream.js.map +1 -0
  279. package/dist/replication/transport.d.ts +236 -0
  280. package/dist/replication/transport.d.ts.map +1 -0
  281. package/dist/replication/transport.js +440 -0
  282. package/dist/replication/transport.js.map +1 -0
  283. package/dist/replication/visibility-engine.d.ts +337 -0
  284. package/dist/replication/visibility-engine.d.ts.map +1 -0
  285. package/dist/replication/visibility-engine.js +602 -0
  286. package/dist/replication/visibility-engine.js.map +1 -0
  287. package/dist/replication/visibility-policy.d.ts +26 -0
  288. package/dist/replication/visibility-policy.d.ts.map +1 -0
  289. package/dist/replication/visibility-policy.js +33 -0
  290. package/dist/replication/visibility-policy.js.map +1 -0
  291. package/dist/replication/writer-identity-store.d.ts +100 -0
  292. package/dist/replication/writer-identity-store.d.ts.map +1 -0
  293. package/dist/replication/writer-identity-store.js +218 -0
  294. package/dist/replication/writer-identity-store.js.map +1 -0
  295. package/dist/replication/writer-identity.d.ts +252 -0
  296. package/dist/replication/writer-identity.d.ts.map +1 -0
  297. package/dist/replication/writer-identity.js +281 -0
  298. package/dist/replication/writer-identity.js.map +1 -0
  299. package/dist/replication/writer-identity.test-utils.d.ts +24 -0
  300. package/dist/replication/writer-identity.test-utils.d.ts.map +1 -0
  301. package/dist/replication/writer-identity.test-utils.js +86 -0
  302. package/dist/replication/writer-identity.test-utils.js.map +1 -0
  303. package/dist/schemas/server-config.d.ts +13 -0
  304. package/dist/schemas/server-config.d.ts.map +1 -1
  305. package/dist/schemas/server-config.js +24 -0
  306. package/dist/schemas/server-config.js.map +1 -1
  307. package/dist/storage/adapters/index.d.ts +3 -1
  308. package/dist/storage/adapters/index.d.ts.map +1 -1
  309. package/dist/storage/adapters/index.js +2 -0
  310. package/dist/storage/adapters/index.js.map +1 -1
  311. package/dist/storage/adapters/interface.d.ts +18 -1
  312. package/dist/storage/adapters/interface.d.ts.map +1 -1
  313. package/dist/storage/adapters/interface.js +13 -1
  314. package/dist/storage/adapters/interface.js.map +1 -1
  315. package/dist/storage/adapters/sdk.d.ts +2 -1
  316. package/dist/storage/adapters/sdk.d.ts.map +1 -1
  317. package/dist/storage/adapters/sdk.js +21 -3
  318. package/dist/storage/adapters/sdk.js.map +1 -1
  319. package/dist/storage/adapters/vana-audience.d.ts +17 -5
  320. package/dist/storage/adapters/vana-audience.d.ts.map +1 -1
  321. package/dist/storage/adapters/vana-audience.js +24 -9
  322. package/dist/storage/adapters/vana-audience.js.map +1 -1
  323. package/dist/storage/adapters/vana.d.ts +2 -2
  324. package/dist/storage/adapters/vana.d.ts.map +1 -1
  325. package/dist/storage/adapters/vana.js +30 -22
  326. package/dist/storage/adapters/vana.js.map +1 -1
  327. package/dist/storage/canonical-legacy-projection.d.ts +1 -1
  328. package/dist/storage/canonical-legacy-projection.d.ts.map +1 -1
  329. package/dist/storage/canonical-legacy-projection.js +13 -15
  330. package/dist/storage/canonical-legacy-projection.js.map +1 -1
  331. package/dist/storage/legacy-projection.d.ts.map +1 -1
  332. package/dist/storage/legacy-projection.js +16 -1
  333. package/dist/storage/legacy-projection.js.map +1 -1
  334. package/dist/storage/legacy-scope-coverage-exceptions.d.ts +5 -0
  335. package/dist/storage/legacy-scope-coverage-exceptions.d.ts.map +1 -1
  336. package/dist/storage/legacy-scope-coverage-exceptions.js +4 -0
  337. package/dist/storage/legacy-scope-coverage-exceptions.js.map +1 -1
  338. package/dist/storage/legacy-scope-coverage.d.ts.map +1 -1
  339. package/dist/storage/legacy-scope-coverage.js +14 -1
  340. package/dist/storage/legacy-scope-coverage.js.map +1 -1
  341. package/dist/storage/legacy-scope-entity-keys.d.ts +14 -1
  342. package/dist/storage/legacy-scope-entity-keys.d.ts.map +1 -1
  343. package/dist/storage/legacy-scope-entity-keys.js +18 -1
  344. package/dist/storage/legacy-scope-entity-keys.js.map +1 -1
  345. package/dist/storage/legacy-scope-view.d.ts +57 -5
  346. package/dist/storage/legacy-scope-view.d.ts.map +1 -1
  347. package/dist/storage/legacy-scope-view.js +644 -318
  348. package/dist/storage/legacy-scope-view.js.map +1 -1
  349. package/dist/storage/pdpp-records/cursor.d.ts +47 -2
  350. package/dist/storage/pdpp-records/cursor.d.ts.map +1 -1
  351. package/dist/storage/pdpp-records/cursor.js +7 -0
  352. package/dist/storage/pdpp-records/cursor.js.map +1 -1
  353. package/dist/storage/pdpp-records/enforcement.d.ts +3 -16
  354. package/dist/storage/pdpp-records/enforcement.d.ts.map +1 -1
  355. package/dist/storage/pdpp-records/enforcement.js +40 -13
  356. package/dist/storage/pdpp-records/enforcement.js.map +1 -1
  357. package/dist/storage/pdpp-records/index.d.ts +2 -0
  358. package/dist/storage/pdpp-records/index.d.ts.map +1 -1
  359. package/dist/storage/pdpp-records/index.js +1 -0
  360. package/dist/storage/pdpp-records/index.js.map +1 -1
  361. package/dist/storage/pdpp-records/interface.d.ts +8 -1
  362. package/dist/storage/pdpp-records/interface.d.ts.map +1 -1
  363. package/dist/storage/pdpp-records/list-page.d.ts +35 -0
  364. package/dist/storage/pdpp-records/list-page.d.ts.map +1 -0
  365. package/dist/storage/pdpp-records/list-page.js +106 -0
  366. package/dist/storage/pdpp-records/list-page.js.map +1 -0
  367. package/dist/storage/pdpp-records/memory-store.d.ts.map +1 -1
  368. package/dist/storage/pdpp-records/memory-store.js +95 -99
  369. package/dist/storage/pdpp-records/memory-store.js.map +1 -1
  370. package/dist/storage/pdpp-records/portable.d.ts +3 -0
  371. package/dist/storage/pdpp-records/portable.d.ts.map +1 -1
  372. package/dist/storage/pdpp-records/portable.js +3 -0
  373. package/dist/storage/pdpp-records/portable.js.map +1 -1
  374. package/dist/storage/pdpp-records/replication-journal.d.ts +20 -0
  375. package/dist/storage/pdpp-records/replication-journal.d.ts.map +1 -0
  376. package/dist/storage/pdpp-records/replication-journal.js +2 -0
  377. package/dist/storage/pdpp-records/replication-journal.js.map +1 -0
  378. package/dist/storage/pdpp-records/stream-declaration.d.ts +0 -2
  379. package/dist/storage/pdpp-records/stream-declaration.d.ts.map +1 -1
  380. package/dist/storage/pdpp-records/stream-declaration.js +0 -9
  381. package/dist/storage/pdpp-records/stream-declaration.js.map +1 -1
  382. package/dist/storage/pdpp-records/sync-selection.d.ts +4 -0
  383. package/dist/storage/pdpp-records/sync-selection.d.ts.map +1 -0
  384. package/dist/storage/pdpp-records/sync-selection.js +37 -0
  385. package/dist/storage/pdpp-records/sync-selection.js.map +1 -0
  386. package/dist/storage/pdpp-records/types.d.ts +64 -0
  387. package/dist/storage/pdpp-records/types.d.ts.map +1 -1
  388. package/dist/storage/pdpp-records/types.js.map +1 -1
  389. package/dist/sync/delete-data-port.d.ts +15 -0
  390. package/dist/sync/delete-data-port.d.ts.map +1 -1
  391. package/dist/sync/delete-data-port.js +19 -7
  392. package/dist/sync/delete-data-port.js.map +1 -1
  393. package/dist/sync/index.d.ts +2 -1
  394. package/dist/sync/index.d.ts.map +1 -1
  395. package/dist/sync/index.js +2 -1
  396. package/dist/sync/index.js.map +1 -1
  397. package/dist/sync/pending-blob-deletions.d.ts +18 -2
  398. package/dist/sync/pending-blob-deletions.d.ts.map +1 -1
  399. package/dist/sync/pending-blob-deletions.js +69 -23
  400. package/dist/sync/pending-blob-deletions.js.map +1 -1
  401. package/dist/sync/workers/delete.d.ts.map +1 -1
  402. package/dist/sync/workers/delete.js +316 -142
  403. package/dist/sync/workers/delete.js.map +1 -1
  404. package/dist/sync/workers/download.d.ts.map +1 -1
  405. package/dist/sync/workers/download.js +53 -5
  406. package/dist/sync/workers/download.js.map +1 -1
  407. package/dist/sync/workers/upload.d.ts +24 -5
  408. package/dist/sync/workers/upload.d.ts.map +1 -1
  409. package/dist/sync/workers/upload.js +160 -275
  410. package/dist/sync/workers/upload.js.map +1 -1
  411. package/dist/test-utils/memory-storage.d.ts.map +1 -1
  412. package/dist/test-utils/memory-storage.js +17 -2
  413. package/dist/test-utils/memory-storage.js.map +1 -1
  414. package/package.json +24 -2
@@ -0,0 +1,602 @@
1
+ /**
2
+ * Visibility engine contracts (replication phase 2).
3
+ *
4
+ * One browser-safe boundary between retained replica evidence and what a
5
+ * host may show. The host supplies facts: retained evidence, its own
6
+ * connection mappings, trusted declarations, verified blob bytes and terminal
7
+ * quarantine facts. `evaluate` turns a snapshot and one change into a
8
+ * `ProjectionDelta`. The host then commits that delta and its own checkpoint
9
+ * atomically against the epoch the delta was evaluated at, and receives a
10
+ * `VisibilityReceipt` that binds the evidence digest to the new epoch.
11
+ *
12
+ * `evaluate` here is the reference: it recomputes from the complete retained
13
+ * evidence through `planReplicaMerge`, the full-history oracle. A bounded
14
+ * engine (per-key reducers over durable indexes, `connectionFromFacts`) must
15
+ * produce the same projection. `record-reducer.test.ts` and the server
16
+ * replica oracle hold both to that. No host calls this module yet.
17
+ *
18
+ * Authority stays with the host: mappings, declarations, verified bytes and
19
+ * terminal facts are never read from replicated evidence.
20
+ */
21
+ import { sha256 } from "@noble/hashes/sha256";
22
+ import { bytesToHex } from "@noble/hashes/utils";
23
+ import { encodeLiveSnapshotDigestInput } from "../storage/pdpp-records/completion.js";
24
+ import { completionDependenciesCovered, operationDigest, selectStreamCompletion, } from "./completion.js";
25
+ import { canonicalJson, declarationShape, exactJson, } from "./envelope.js";
26
+ import { declarationWait, planReplicaMerge, resolveDeclaration, } from "./merge-plan.js";
27
+ export function visibilityEpoch(value) {
28
+ if (!Number.isSafeInteger(value) || value < 0)
29
+ throw new RangeError("visibility epoch must be a non-negative integer");
30
+ return value;
31
+ }
32
+ export const INITIAL_VISIBILITY_EPOCH = visibilityEpoch(0);
33
+ export const EMPTY_PROJECTION = Object.freeze({
34
+ connections: Object.freeze(dict()),
35
+ rows: Object.freeze(dict()),
36
+ completions: Object.freeze(dict()),
37
+ });
38
+ export const rowId = (connectionId, stream, recordKey) => JSON.stringify([connectionId, stream, recordKey]);
39
+ export const completionId = (connectionId, stream) => JSON.stringify([connectionId, stream]);
40
+ /** Reference evaluation: recompute the full projection, return the difference. */
41
+ export function evaluate(snapshot, change) {
42
+ const { world, evidence } = applyChange(snapshot, change);
43
+ const next = projectEvidence(snapshot.projection, world, evidence);
44
+ return diffProjection(snapshot.epoch, snapshot.projection, next, evidenceDigest(world, evidence));
45
+ }
46
+ /** The facts after a change, for the next snapshot. */
47
+ export function applyChange(snapshot, change) {
48
+ const { world } = snapshot;
49
+ if (change.kind === "evidence")
50
+ return {
51
+ world: {
52
+ ...world,
53
+ verifiedBlobs: new Set([
54
+ ...world.verifiedBlobs,
55
+ ...(change.verifiedBlobs ?? []),
56
+ ]),
57
+ },
58
+ evidence: [...snapshot.evidence, ...change.operations],
59
+ };
60
+ return {
61
+ world: {
62
+ ...world,
63
+ mappings: new Map([
64
+ ...world.mappings,
65
+ ...Object.entries(change.provision ?? {}),
66
+ ]),
67
+ declarations: [...world.declarations, ...(change.declarations ?? [])],
68
+ terminal: new Set([...world.terminal, ...(change.terminal ?? [])]),
69
+ },
70
+ evidence: snapshot.evidence,
71
+ };
72
+ }
73
+ // ------------------------------------------------------------ the reference
74
+ /**
75
+ * Step the projection from the complete retained evidence. A step, not a pure
76
+ * function of evidence: a held connection and a key without eligible
77
+ * evidence keep their prior rows.
78
+ */
79
+ export function projectEvidence(prior, world, evidence) {
80
+ const plan = planReplicaMerge({ owner: world.owner, declarations: world.declarations }, evidence);
81
+ const owned = evidence.filter((op) => op.owner === world.owner);
82
+ const connections = dict(prior.connections);
83
+ const rows = dict(prior.rows);
84
+ for (const [id, mapping] of [...world.mappings].sort(byKey)) {
85
+ const applied = own(prior.connections, id)?.generation ?? 1;
86
+ const ops = owned.filter((op) => op.connectionId === id);
87
+ const connection = connectionFromPlan(plan, world, id, mapping, ops, applied);
88
+ connections[id] = connection;
89
+ stepConnectionRows(rows, id, applied, connection);
90
+ if (connection.status !== "active")
91
+ continue;
92
+ for (const record of plan.records) {
93
+ const { identity } = record;
94
+ if (identity.connectionId !== id)
95
+ continue;
96
+ const key = rowId(id, identity.stream, identity.recordKey);
97
+ const row = recordRow(own(rows, key), record, (op) => blobReady(op, ops, world.verifiedBlobs));
98
+ if (row)
99
+ rows[key] = row;
100
+ }
101
+ }
102
+ const projection = { connections, rows, completions: dict() };
103
+ return {
104
+ ...projection,
105
+ completions: projectCompletions(plan, world, owned, projection),
106
+ };
107
+ }
108
+ /** Connection eligibility from the planner's issues: the oracle derivation. */
109
+ function connectionFromPlan(plan, world, id, mapping, ops, applied) {
110
+ const touches = (reason, bucket) => bucket.some((issue) => issue.reason === reason &&
111
+ issue.operations.some((op) => op.connectionId === id));
112
+ const withdrawn = (reason) => ({ status: "withdrawn", reason, generation: applied });
113
+ // As in `connectionFromFacts`: only a deletion under the mapping deletes.
114
+ if (plan.suppressed.some((issue) => issue.reason === "connection_deleted" &&
115
+ issue.operations.some((op) => op.connectionId === id &&
116
+ op.kind === "connection-delete" &&
117
+ sameBinding(op, mapping))))
118
+ return { status: "deleted", generation: applied };
119
+ if (world.terminal.has(id))
120
+ return withdrawn("terminal_quarantine");
121
+ if (touches("operation_id_equivocation", plan.conflicts))
122
+ return withdrawn("operation_id_equivocation");
123
+ if (ops.some((op) => !sameBinding(op, mapping)))
124
+ return withdrawn("local_mapping_conflict");
125
+ if (touches("incompatible_connection_binding", plan.conflicts))
126
+ return withdrawn("source_binding_conflict");
127
+ // A mapped connection without any evidence has no registration either.
128
+ if (!ops.some((op) => op.kind === "connection-register"))
129
+ return {
130
+ status: "held",
131
+ reason: "missing_connection_registration",
132
+ generation: applied,
133
+ };
134
+ if (touches("invalid_generation_reset", plan.conflicts))
135
+ return withdrawn("invalid_generation_reset");
136
+ // A reset gap is connection-wide; a single future-generation record is not.
137
+ if (plan.pending.some((issue) => issue.reason === "missing_generation_reset" &&
138
+ issue.operations.some((op) => op.connectionId === id && op.kind === "connection-register")))
139
+ return {
140
+ status: "held",
141
+ reason: "missing_generation_reset",
142
+ generation: applied,
143
+ };
144
+ return { status: "active", generation: lifecycleGeneration(ops) };
145
+ }
146
+ function lifecycleGeneration(ops) {
147
+ return Math.max(1, ...ops
148
+ .filter((op) => op.kind === "connection-reset")
149
+ .map((op) => op.generation));
150
+ }
151
+ const sameBinding = (op, mapping) => op.sourceId === mapping.sourceId && op.methodId === mapping.methodId;
152
+ /**
153
+ * Whether retained evidence names another source or method than the host
154
+ * mapping. In `connectionFromFacts` it ranks below deletion under the
155
+ * mapping, terminal quarantine and equivocation; a host that keeps the
156
+ * disagreement as its own durable fact records it whenever this holds.
157
+ */
158
+ export function contradictsMapping(facts) {
159
+ const mapped = canonicalJson(facts.mapping);
160
+ return facts.bindings.some((binding) => canonicalJson(binding) !== mapped);
161
+ }
162
+ /**
163
+ * Connection eligibility from bounded facts. Must equal the planner derivation.
164
+ * Precedence: a deletion whose source and method match the mapping, then
165
+ * terminal quarantine, equivocation and a binding conflict. A deletion that
166
+ * names another binding is not about this connection: it never deletes, and
167
+ * counts only as binding-conflict evidence.
168
+ */
169
+ export function connectionFromFacts(context, facts) {
170
+ const applied = facts.appliedGeneration;
171
+ const withdrawn = (reason) => ({ status: "withdrawn", reason, generation: applied });
172
+ const plan = planReplicaMerge(context, facts.lifecycle);
173
+ const has = (bucket, reason) => bucket.some((issue) => issue.reason === reason);
174
+ // `lifecycle` holds only unequivocated operations, as the planner's groups.
175
+ if (facts.lifecycle.some((op) => op.kind === "connection-delete" && sameBinding(op, facts.mapping)))
176
+ return { status: "deleted", generation: applied };
177
+ if (facts.terminal)
178
+ return withdrawn("terminal_quarantine");
179
+ if (facts.equivocated)
180
+ return withdrawn("operation_id_equivocation");
181
+ if (contradictsMapping(facts))
182
+ return withdrawn("local_mapping_conflict");
183
+ if (has(plan.conflicts, "incompatible_connection_binding"))
184
+ return withdrawn("source_binding_conflict");
185
+ if (!facts.lifecycle.some((op) => op.kind === "connection-register"))
186
+ return {
187
+ status: "held",
188
+ reason: "missing_connection_registration",
189
+ generation: applied,
190
+ };
191
+ if (has(plan.conflicts, "invalid_generation_reset"))
192
+ return withdrawn("invalid_generation_reset");
193
+ if (has(plan.pending, "missing_generation_reset"))
194
+ return {
195
+ status: "held",
196
+ reason: "missing_generation_reset",
197
+ generation: applied,
198
+ };
199
+ return { status: "active", generation: lifecycleGeneration(facts.lifecycle) };
200
+ }
201
+ /**
202
+ * `ConnectionFacts` and dependency variants from the complete retained
203
+ * evidence, for a host that keeps every operation (the Node receiver). A
204
+ * bounded host reads the same facts from its durable indexes instead.
205
+ */
206
+ export function indexEvidence(owned) {
207
+ const revision = (op) => canonicalJson([op.revision.writerId, op.revision.operationId]);
208
+ /** Revision id -> digest -> variant. */
209
+ const variants = new Map();
210
+ const byConnection = new Map();
211
+ for (const op of owned) {
212
+ const id = revision(op);
213
+ variants.set(id, (variants.get(id) ?? new Map()).set(operationDigest(op), op));
214
+ byConnection.set(op.connectionId, [
215
+ ...(byConnection.get(op.connectionId) ?? []),
216
+ op,
217
+ ]);
218
+ }
219
+ const unique = (op) => variants.get(revision(op)).size === 1;
220
+ return {
221
+ connectionFacts(connectionId, host) {
222
+ const mine = byConnection.get(connectionId) ?? [];
223
+ return {
224
+ ...host,
225
+ equivocated: mine.some((op) => !unique(op)),
226
+ bindings: mine.map(({ sourceId, methodId }) => ({
227
+ sourceId,
228
+ methodId,
229
+ })),
230
+ lifecycle: mine.filter((op) => op.kind.startsWith("connection-") && unique(op)),
231
+ };
232
+ },
233
+ /** `CompletionFacts.variantDigests` over the connections `mapped` accepts. */
234
+ variantDigests(mapped) {
235
+ return (writerId, operationId) => [
236
+ ...(variants.get(canonicalJson([writerId, operationId])) ?? []),
237
+ ].flatMap(([digest, op]) => (mapped(op.connectionId) ? [digest] : []));
238
+ },
239
+ };
240
+ }
241
+ /**
242
+ * Apply one connection's eligibility to its existing rows: withdraw them all
243
+ * when it is withdrawn or deleted, or when its generation advances.
244
+ */
245
+ export function stepConnectionRows(rows, connectionId, appliedGeneration, connection) {
246
+ const reason = connection.status === "withdrawn"
247
+ ? "connection_withdrawn"
248
+ : connection.status === "deleted"
249
+ ? "connection_deleted"
250
+ : connection.status === "active" &&
251
+ connection.generation > appliedGeneration
252
+ ? "superseded_generation"
253
+ : undefined;
254
+ if (!reason)
255
+ return;
256
+ for (const key of Object.keys(rows))
257
+ if (JSON.parse(key)[0] === connectionId)
258
+ rows[key] = { state: "withdrawn", reason };
259
+ }
260
+ /**
261
+ * The row one merged record yields on an active connection, from its prior
262
+ * row. Undefined means "no entry": a withdrawal never materializes a key.
263
+ */
264
+ export function recordRow(prior, record, blobReady) {
265
+ const withdraw = (reason) => prior ? { state: "withdrawn", reason } : undefined;
266
+ const winner = record.winner;
267
+ if (record.quarantined || !winner)
268
+ return withdraw("quarantined");
269
+ if (winner.kind === "delete")
270
+ return { state: "deleted", winner };
271
+ return blobReady(winner)
272
+ ? { state: "live", winner }
273
+ : withdraw("blob_unavailable");
274
+ }
275
+ /**
276
+ * Whether an upsert's bytes may be shown: its `blob_ref` agrees with its one
277
+ * descriptor, the connection claims that descriptor at the same generation
278
+ * and binding, and the host verified the bytes.
279
+ */
280
+ export function blobReady(op, claims, verifiedBlobs) {
281
+ const ref = op.data.blob_ref;
282
+ if (op.blobs.length !== (ref ? 1 : 0))
283
+ return false;
284
+ return op.blobs.every((blob) => ref.blob_id === blob.blobId &&
285
+ (ref.sha256 === undefined || ref.sha256 === blob.sha256.slice(7)) &&
286
+ (ref.size_bytes === undefined || ref.size_bytes === blob.sizeBytes) &&
287
+ (ref.mime_type === undefined || ref.mime_type === blob.mimeType) &&
288
+ verifiedBlobs.has(blob.blobId) &&
289
+ claims.some((claim) => claim.kind === "blob-claim" &&
290
+ claim.connectionId === op.connectionId &&
291
+ claim.generation === op.generation &&
292
+ claim.sourceId === op.sourceId &&
293
+ claim.methodId === op.methodId &&
294
+ canonicalJson(claim.blob) === canonicalJson(blob)));
295
+ }
296
+ /**
297
+ * The available completion, or null. Available means: the connection is
298
+ * active on the events' generation, no key of the stream is quarantined, the
299
+ * events under declarations the host trusts name exactly one declaration
300
+ * shape (`declarationShape`),
301
+ * the newest of those events is a completion, every dependency has exactly one retained variant with the
302
+ * pinned digest, nothing touching the stream is unresolved, and the live rows
303
+ * match the declared count and snapshot digest.
304
+ */
305
+ export function completionAvailability(facts) {
306
+ const trusted = (op) => {
307
+ const { status } = resolveDeclaration(facts.declarations, op.sourceId, op.declaration);
308
+ return status === "retained" || status === "compatible";
309
+ };
310
+ // An event under a declaration the host does not trust waits for it, as
311
+ // an undeclared record operation does; it neither certifies nor withdraws.
312
+ const events = facts.events.filter(trusted);
313
+ const first = events[0];
314
+ if (!first)
315
+ return null;
316
+ if (facts.connection.status !== "active" ||
317
+ facts.connection.generation !== first.generation ||
318
+ facts.quarantinedKey ||
319
+ facts.unresolved)
320
+ return null;
321
+ // Versions of one declared stream (a rebinding) certify one stream; a
322
+ // changed shape does not.
323
+ if (new Set(events.map((op) => declarationShape(op.declaration))).size > 1)
324
+ return null;
325
+ const completion = selectStreamCompletion(events);
326
+ if (!completion)
327
+ return null;
328
+ if (!completionDependenciesCovered(completion, facts.variantDigests))
329
+ return null;
330
+ if (facts.liveRows.length !== completion.liveCount)
331
+ return null;
332
+ let digest;
333
+ try {
334
+ digest = `sha256:${bytesToHex(sha256(encodeLiveSnapshotDigestInput({
335
+ sourceId: first.sourceId,
336
+ instance: facts.connectionId,
337
+ method: first.methodId,
338
+ generation: first.generation,
339
+ stream: first.declaration.stream,
340
+ }, first.declaration.primaryKey, facts.liveRows)))}`;
341
+ }
342
+ catch {
343
+ return null;
344
+ }
345
+ if (digest !== completion.snapshotSha256)
346
+ return null;
347
+ if (completion.proof.kind === "native" &&
348
+ completion.proof.snapshotSha256 !== completion.snapshotSha256)
349
+ return null;
350
+ return { operation: completion };
351
+ }
352
+ /** The reference: every mapped stream's completion from the full plan. */
353
+ function projectCompletions(plan, world, owned, projection) {
354
+ const digests = new Map();
355
+ for (const op of owned) {
356
+ if (!world.mappings.has(op.connectionId))
357
+ continue;
358
+ const id = canonicalJson([op.revision.writerId, op.revision.operationId]);
359
+ digests.set(id, (digests.get(id) ?? new Set()).add(operationDigest(op)));
360
+ }
361
+ const variantDigests = (writerId, operationId) => [
362
+ ...(digests.get(canonicalJson([writerId, operationId])) ?? []),
363
+ ];
364
+ const groups = new Map();
365
+ for (const op of owned) {
366
+ if (op.kind !== "stream-complete" && op.kind !== "stream-invalidate")
367
+ continue;
368
+ const connection = own(projection.connections, op.connectionId);
369
+ if (!connection || connection.generation !== op.generation)
370
+ continue;
371
+ const key = completionId(op.connectionId, op.declaration.stream);
372
+ groups.set(key, [...(groups.get(key) ?? []), op]);
373
+ }
374
+ const issues = [...plan.pending, ...plan.conflicts, ...plan.rejected];
375
+ const result = dict();
376
+ for (const [key, events] of [...groups].sort(byKey)) {
377
+ const [connectionId, stream] = JSON.parse(key);
378
+ // Grouped above only when the connection is projected.
379
+ const connection = own(projection.connections, connectionId);
380
+ const inStream = (op) => op.connectionId === connectionId &&
381
+ (!("declaration" in op) || op.declaration.stream === stream);
382
+ const liveRows = [];
383
+ for (const [id, row] of Object.entries(projection.rows)) {
384
+ const [rowConnection, rowStream, recordKey] = JSON.parse(id);
385
+ if (rowConnection !== connectionId || rowStream !== stream)
386
+ continue;
387
+ if (row.state === "live")
388
+ liveRows.push({ recordKey, dataJson: canonicalJson(row.winner.data) });
389
+ }
390
+ const records = plan.records.filter((record) => record.identity.connectionId === connectionId &&
391
+ record.identity.generation === connection.generation &&
392
+ record.identity.stream === stream);
393
+ const claims = owned.filter((op) => op.connectionId === connectionId);
394
+ const available = completionAvailability({
395
+ connection,
396
+ connectionId,
397
+ events,
398
+ declarations: world.declarations,
399
+ quarantinedKey: records.some((record) => record.quarantined),
400
+ // An unmaterializable winner is unresolved even if it never had a row.
401
+ unresolved: records.some((record) => record.winner?.kind === "upsert" &&
402
+ !blobReady(record.winner, claims, world.verifiedBlobs)) ||
403
+ issues.some((issue) => !declarationWait(issue.reason) && issue.operations.some(inStream)),
404
+ variantDigests,
405
+ liveRows,
406
+ });
407
+ if (available)
408
+ result[key] = available;
409
+ }
410
+ return result;
411
+ }
412
+ // ------------------------------------------------------------------ deltas
413
+ /** The delta that turns `prior` into `next`. */
414
+ export function diffProjection(base, prior, next, digest) {
415
+ const changed = (before, after) => {
416
+ const out = dict();
417
+ for (const key of Object.keys(after).sort())
418
+ if (exactJson(own(before, key) ?? null) !== exactJson(after[key]))
419
+ out[key] = after[key];
420
+ return out;
421
+ };
422
+ const completions = changed(prior.completions, next.completions);
423
+ for (const key of Object.keys(prior.completions))
424
+ if (!Object.hasOwn(next.completions, key))
425
+ completions[key] = null;
426
+ const connections = changed(prior.connections, next.connections);
427
+ const rows = changed(prior.rows, next.rows);
428
+ const fences = new Set(Object.keys(connections));
429
+ const quarantined = (row) => row?.state === "withdrawn" && row.reason === "quarantined";
430
+ for (const key of Object.keys(rows))
431
+ if (quarantined(own(prior.rows, key)) !== quarantined(rows[key]))
432
+ fences.add(JSON.parse(key)[0]);
433
+ const before = blobReferences(prior);
434
+ const after = blobReferences(next);
435
+ return {
436
+ base,
437
+ evidenceDigest: digest,
438
+ connections,
439
+ rows,
440
+ completions,
441
+ blobs: {
442
+ attach: [...after.keys()]
443
+ .filter((k) => !before.has(k))
444
+ .sort()
445
+ .map((k) => after.get(k)),
446
+ release: [...before.keys()]
447
+ .filter((k) => !after.has(k))
448
+ .sort()
449
+ .map((k) => before.get(k)),
450
+ },
451
+ fences: [...fences].sort(),
452
+ };
453
+ }
454
+ function blobReferences(projection) {
455
+ const refs = new Map();
456
+ for (const [id, row] of Object.entries(projection.rows)) {
457
+ if (row.state !== "live")
458
+ continue;
459
+ const connectionId = JSON.parse(id)[0];
460
+ for (const blob of row.winner.blobs) {
461
+ const ref = {
462
+ blobId: blob.blobId,
463
+ connectionId,
464
+ generation: row.winner.generation,
465
+ };
466
+ refs.set(canonicalJson(ref), ref);
467
+ }
468
+ }
469
+ return refs;
470
+ }
471
+ export function isEmptyDelta(delta) {
472
+ return (!Object.keys(delta.connections).length &&
473
+ !Object.keys(delta.rows).length &&
474
+ !Object.keys(delta.completions).length &&
475
+ !delta.blobs.attach.length &&
476
+ !delta.blobs.release.length &&
477
+ !delta.fences.length);
478
+ }
479
+ export function applyProjectionDelta(projection, delta) {
480
+ const completions = dict(projection.completions);
481
+ for (const [key, value] of Object.entries(delta.completions))
482
+ if (value === null)
483
+ delete completions[key];
484
+ else
485
+ completions[key] = value;
486
+ return {
487
+ connections: dict(projection.connections, delta.connections),
488
+ rows: dict(projection.rows, delta.rows),
489
+ completions,
490
+ };
491
+ }
492
+ // ----------------------------------------------------------------- digests
493
+ const hash = (text) => `sha256:${bytesToHex(sha256(new TextEncoder().encode(text)))}`;
494
+ /**
495
+ * Digest of the facts a projection derives from. It names the evidence SET:
496
+ * equal retained evidence and host facts give equal digests, whatever the
497
+ * delivery order or duplication. Declaration validators are host code and
498
+ * are identified by their binding.
499
+ */
500
+ export function evidenceDigest(world, evidence) {
501
+ const sorted = (values) => [...new Set(values)].sort();
502
+ return hash(exactJson({
503
+ owner: world.owner,
504
+ declarations: sorted(world.declarations.map((d) => exactJson({ sourceId: d.sourceId, binding: d.binding }))),
505
+ mappings: sorted([...world.mappings].map(([id, mapping]) => exactJson([id, mapping]))),
506
+ verifiedBlobs: sorted(world.verifiedBlobs),
507
+ terminal: sorted(world.terminal),
508
+ evidence: sorted(evidence.map((op) => hash(exactJson(op)))),
509
+ }));
510
+ }
511
+ export class VisibilityEpochConflict extends Error {
512
+ expected;
513
+ actual;
514
+ constructor(expected, actual) {
515
+ super(`visibility epoch is ${actual}, expected ${expected}`);
516
+ this.expected = expected;
517
+ this.actual = actual;
518
+ this.name = "VisibilityEpochConflict";
519
+ }
520
+ }
521
+ export function deltaDigest(delta) {
522
+ return hash(exactJson(delta));
523
+ }
524
+ export function checkpointDigest(checkpoint) {
525
+ return hash(exactJson(checkpoint));
526
+ }
527
+ /** Identifies one commit request, for lost-acknowledgement replay. */
528
+ export function commitRequestDigest(expected, delta, checkpoint) {
529
+ return hash(exactJson([expected, deltaDigest(delta), checkpointDigest(checkpoint)]));
530
+ }
531
+ /** Reference committer: the semantics every host committer must match. */
532
+ export function createMemoryVisibilityCommitter(initial = {}) {
533
+ let epoch = initial.epoch ?? INITIAL_VISIBILITY_EPOCH;
534
+ let projection = initial.projection ?? EMPTY_PROJECTION;
535
+ const checkpoint = dict(initial.checkpoint ?? {});
536
+ const receipts = new Map();
537
+ const committer = {
538
+ async commit(expected, delta, changes) {
539
+ const request = commitRequestDigest(expected, delta, changes);
540
+ const committed = receipts.get(request);
541
+ if (committed)
542
+ return committed;
543
+ if (delta.base !== expected || epoch !== expected)
544
+ throw new VisibilityEpochConflict(expected, epoch);
545
+ const receipt = {
546
+ epoch: isEmptyDelta(delta) ? expected : visibilityEpoch(expected + 1),
547
+ previous: expected,
548
+ evidenceDigest: delta.evidenceDigest,
549
+ deltaDigest: deltaDigest(delta),
550
+ checkpointDigest: checkpointDigest(changes),
551
+ };
552
+ projection = applyProjectionDelta(projection, delta);
553
+ for (const [key, value] of Object.entries(changes))
554
+ if (value === null)
555
+ delete checkpoint[key];
556
+ else
557
+ checkpoint[key] = value;
558
+ epoch = receipt.epoch;
559
+ receipts.set(request, receipt);
560
+ return receipt;
561
+ },
562
+ read: () => ({ epoch, projection, checkpoint: dict(checkpoint) }),
563
+ };
564
+ return committer;
565
+ }
566
+ // ------------------------------------------------------- reader visibility
567
+ /**
568
+ * The reader-policy state of a connection's data, for `replicaStateVisible`.
569
+ * A binding conflict is "conflicted": the owner keeps seeing local-origin
570
+ * rows with the conflict marker. Any other withdrawal is "quarantined".
571
+ */
572
+ export function connectionVisibilityState(connection) {
573
+ if (connection.status === "active")
574
+ return "confirmed";
575
+ if (connection.status === "held")
576
+ return "pending";
577
+ if (connection.status === "withdrawn" &&
578
+ (connection.reason === "local_mapping_conflict" ||
579
+ connection.reason === "source_binding_conflict"))
580
+ return "conflicted";
581
+ return "quarantined";
582
+ }
583
+ // ----------------------------------------------------------------- helpers
584
+ /**
585
+ * A dictionary keyed by host strings. It has no prototype, so a connection id
586
+ * or checkpoint key such as `__proto__` or `constructor` is an ordinary key.
587
+ */
588
+ function dict(...sources) {
589
+ const out = Object.create(null);
590
+ for (const source of sources)
591
+ for (const key of Object.keys(source))
592
+ out[key] = source[key];
593
+ return out;
594
+ }
595
+ /** Own-property lookup: never an inherited member. */
596
+ function own(record, key) {
597
+ return Object.hasOwn(record, key) ? record[key] : undefined;
598
+ }
599
+ function byKey(a, b) {
600
+ return a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0;
601
+ }
602
+ //# sourceMappingURL=visibility-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visibility-engine.js","sourceRoot":"","sources":["../../src/replication/visibility-engine.ts"],"names":[],"mappings":"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"}