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

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 +332 -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,182 @@
1
+ /** Protocol limits shared by replication senders, admission, and stream readers. */
2
+ import { MAX_DECLARATION_BYTES } from "../pdpp/declaration-limits.js";
3
+ export const REPLICA_MAX_FRAGMENTS = 100_000;
4
+ /** vana-storage DEFAULT_MAX_BLOB_SIZE. Compare the actual encrypted request. */
5
+ export const REPLICA_MAX_BLOB_BYTES = 100 * 1024 * 1024;
6
+ /** Per-fragment framing allowance used by the #500 aggregate ciphertext check. */
7
+ export const REPLICA_FRAGMENT_OVERHEAD_BYTES = 4096;
8
+ /** Same source-write bounds used by the Node PDPP routes. */
9
+ export const REPLICA_SOURCE_MAX_BLOB_BYTES = 512 * 1024 * 1024;
10
+ export const REPLICA_SOURCE_MAX_RECORD_JSON_BYTES = 512 * 1024 * 1024;
11
+ /** Node capture's persisted batch target and operation count. */
12
+ export const REPLICA_BATCH_TARGET_BYTES = 32 * 1024 * 1024;
13
+ export const REPLICA_BATCH_OPERATION_LIMIT = 10_000;
14
+ /** Node prepares 4 MiB payload chunks before #500 encryption overhead. */
15
+ export const REPLICA_DEFAULT_FRAGMENT_BYTES = 4 * 1024 * 1024;
16
+ export const REPLICA_MAX_OPERATIONS = REPLICA_BATCH_OPERATION_LIMIT;
17
+ /** One retained evidence row is created for each manifest fragment. */
18
+ export const REPLICA_MAX_EVIDENCE_ROWS = REPLICA_MAX_FRAGMENTS;
19
+ export const REPLICA_LIMITS_VERSION = 2;
20
+ /**
21
+ * Operation metadata can repeat the record key and carries declaration-bound
22
+ * source/method identifiers. Bound that overhead by a second ingest body plus
23
+ * the largest retained declaration and fixed replication fields.
24
+ */
25
+ export const REPLICA_MAX_OPERATION_ENVELOPE_BYTES = REPLICA_SOURCE_MAX_RECORD_JSON_BYTES + MAX_DECLARATION_BYTES + 64 * 1024;
26
+ /** The payload-level header is fixed apart from its retained declaration IDs. */
27
+ export const REPLICA_MAX_PAYLOAD_ENVELOPE_BYTES = 2 * MAX_DECLARATION_BYTES + 64 * 1024;
28
+ export const REPLICA_MAX_SINGLE_OPERATION_BYTES = 4 * Math.ceil(REPLICA_SOURCE_MAX_BLOB_BYTES / 3) +
29
+ REPLICA_SOURCE_MAX_RECORD_JSON_BYTES +
30
+ REPLICA_MAX_OPERATION_ENVELOPE_BYTES;
31
+ /**
32
+ * The first operation may exceed the target, then later operations may fill
33
+ * the target; otherwise every operation fits the target and count is binding.
34
+ */
35
+ export const REPLICA_MAX_TOTAL_BYTES = Math.max(REPLICA_BATCH_TARGET_BYTES + REPLICA_MAX_SINGLE_OPERATION_BYTES, REPLICA_BATCH_OPERATION_LIMIT * REPLICA_BATCH_TARGET_BYTES) + REPLICA_MAX_PAYLOAD_ENVELOPE_BYTES;
36
+ /** Each streamed operation is bounded by the admitted payload that contains it. */
37
+ export const REPLICA_MAX_OPERATION_BYTES = REPLICA_MAX_TOTAL_BYTES;
38
+ /** A blob cannot exceed the actual Node source write cap. */
39
+ export const REPLICA_MAX_SINGLE_BLOB_BYTES = REPLICA_SOURCE_MAX_BLOB_BYTES;
40
+ /** Base64 blob bytes are part of totalBytes, so their sum cannot exceed it. */
41
+ export const REPLICA_MAX_BLOB_TOTAL_BYTES = REPLICA_MAX_TOTAL_BYTES;
42
+ /**
43
+ * The maximum encrypted fragment bytes for a payload of `totalBytes` and
44
+ * `count` fragments: base64 payload bytes plus #500's per-fragment framing.
45
+ */
46
+ export function replicaFramedBytesBound(totalBytes, count) {
47
+ return (4 * Math.ceil(totalBytes / 3) +
48
+ count * (4 + REPLICA_FRAGMENT_OVERHEAD_BYTES));
49
+ }
50
+ /** Maximum declared encrypted bytes for an honest payload and 100,000 fragments. */
51
+ export const REPLICA_MAX_AGGREGATE_CIPHERTEXT_BYTES = 4 * Math.ceil(REPLICA_MAX_TOTAL_BYTES / 3) +
52
+ REPLICA_MAX_FRAGMENTS * (4 + REPLICA_FRAGMENT_OVERHEAD_BYTES);
53
+ /** Four live representations: ciphertext, plaintext, parsed JSON and decoded bytes. */
54
+ export const REPLICA_LIVE_COPY_FACTOR = 4;
55
+ /** The retained JSON string plus its parsed operation tree. */
56
+ export const REPLICA_ENVELOPE_LIVE_COPY_FACTOR = 2;
57
+ /** 100 MiB #500 per-object cap × four copies = 400 MiB, below this budget. */
58
+ export const REPLICA_DEFAULT_BYTE_BUDGET_BYTES = 512 * 1024 * 1024;
59
+ export const REPLICA_DEFAULT_LIMITS = Object.freeze({
60
+ maxSourceBlobBytes: REPLICA_SOURCE_MAX_BLOB_BYTES,
61
+ maxRecordJsonBytes: REPLICA_SOURCE_MAX_RECORD_JSON_BYTES,
62
+ maxManifestCiphertextBytes: REPLICA_MAX_BLOB_BYTES,
63
+ maxFragmentCiphertextBytes: REPLICA_MAX_BLOB_BYTES,
64
+ maxAggregateCiphertextBytes: REPLICA_MAX_AGGREGATE_CIPHERTEXT_BYTES,
65
+ maxFragments: REPLICA_MAX_FRAGMENTS,
66
+ maxEvidenceRows: REPLICA_MAX_EVIDENCE_ROWS,
67
+ maxTotalBytes: REPLICA_MAX_TOTAL_BYTES,
68
+ maxOperations: REPLICA_MAX_OPERATIONS,
69
+ maxOperationBytes: REPLICA_MAX_OPERATION_BYTES,
70
+ maxSingleBlobBytes: REPLICA_MAX_SINGLE_BLOB_BYTES,
71
+ maxBlobTotalBytes: REPLICA_MAX_BLOB_TOTAL_BYTES,
72
+ });
73
+ export function replicaResourceLimits(overrides = {}) {
74
+ return Object.freeze({ ...REPLICA_DEFAULT_LIMITS, ...overrides });
75
+ }
76
+ /** Reservation ledger shared by concurrently running replication steps. */
77
+ export class ReplicaByteBudget {
78
+ maxBytes;
79
+ reservedBytes = 0;
80
+ reservations = new Map();
81
+ constructor(maxBytes) {
82
+ this.maxBytes = maxBytes;
83
+ if (!Number.isSafeInteger(maxBytes) || maxBytes < 0)
84
+ throw new RangeError("invalid replication byte budget");
85
+ }
86
+ get reserved() {
87
+ return this.reservedBytes;
88
+ }
89
+ reserve(bytes, group = {}) {
90
+ if (!Number.isSafeInteger(bytes) || bytes < 0)
91
+ throw new RangeError("invalid replication reservation");
92
+ const availableBytes = this.maxBytes - this.reservedBytes;
93
+ const groupBytes = this.reservations.get(group) ?? 0;
94
+ if (bytes > availableBytes && groupBytes !== this.reservedBytes)
95
+ return { kind: "resource_busy", requestedBytes: bytes, availableBytes };
96
+ const nextReservedBytes = this.reservedBytes + bytes;
97
+ const nextGroupBytes = groupBytes + bytes;
98
+ if (!Number.isSafeInteger(nextReservedBytes) ||
99
+ !Number.isSafeInteger(nextGroupBytes))
100
+ throw new RangeError("replication reservation exhausted");
101
+ this.reservedBytes = nextReservedBytes;
102
+ this.reservations.set(group, nextGroupBytes);
103
+ let released = false;
104
+ return () => {
105
+ if (released)
106
+ return;
107
+ released = true;
108
+ this.reservedBytes -= bytes;
109
+ const remaining = (this.reservations.get(group) ?? 0) - bytes;
110
+ if (remaining === 0)
111
+ this.reservations.delete(group);
112
+ else
113
+ this.reservations.set(group, remaining);
114
+ };
115
+ }
116
+ }
117
+ const admissionBrand = Symbol("ReplicaAdmission");
118
+ export class ReplicaResourceLimitError extends Error {
119
+ limit;
120
+ actual;
121
+ maximum;
122
+ code = "replica_resource_limit_exceeded";
123
+ constructor(limit, actual, maximum) {
124
+ super("replica resource limit exceeded");
125
+ this.limit = limit;
126
+ this.actual = actual;
127
+ this.maximum = maximum;
128
+ this.name = "ReplicaResourceLimitError";
129
+ }
130
+ }
131
+ export class ReplicaResourceBusyError extends Error {
132
+ code = "resource_busy";
133
+ constructor() {
134
+ super("replica object reservation is busy");
135
+ this.name = "ReplicaResourceBusyError";
136
+ }
137
+ }
138
+ /** Check manifest-declared totals and issue an object-reservation capability. */
139
+ export function admit(manifest, budget, identity, limits = REPLICA_DEFAULT_LIMITS) {
140
+ if (manifest.fragments.length > limits.maxEvidenceRows)
141
+ return unsupported("retained_evidence_rows");
142
+ if (manifest.fragments.length > limits.maxFragments)
143
+ return unsupported("fragment_count");
144
+ if (manifest.fragments.some((fragment) => fragment.bytes > limits.maxFragmentCiphertextBytes))
145
+ return unsupported("fragment_ciphertext_bytes");
146
+ const ciphertextBytes = manifest.fragments.reduce((total, fragment) => total + fragment.bytes, 0);
147
+ if (!Number.isSafeInteger(ciphertextBytes) ||
148
+ ciphertextBytes > limits.maxAggregateCiphertextBytes ||
149
+ ciphertextBytes >
150
+ replicaFramedBytesBound(manifest.totalBytes, manifest.fragments.length))
151
+ return unsupported("aggregate_ciphertext_bytes");
152
+ if (!Number.isSafeInteger(manifest.totalBytes) ||
153
+ manifest.totalBytes < 1 ||
154
+ manifest.totalBytes > limits.maxTotalBytes)
155
+ return unsupported("total_bytes");
156
+ const reservationGroup = {};
157
+ return Object.freeze({
158
+ [admissionBrand]: true,
159
+ admissionId: `${identity.repositoryId}:${identity.owner}:${identity.manifestDigest}`,
160
+ ...identity,
161
+ payloadBytes: manifest.totalBytes,
162
+ limitsVersion: REPLICA_LIMITS_VERSION,
163
+ reserveObject(ciphertextBytes, group = {}) {
164
+ if (!Number.isSafeInteger(ciphertextBytes) || ciphertextBytes < 0)
165
+ throw new RangeError("invalid replica object size");
166
+ return budget.reserve(ciphertextBytes * REPLICA_LIVE_COPY_FACTOR, group);
167
+ },
168
+ reserveEnvelope(jsonBytes, group = reservationGroup) {
169
+ if (!Number.isSafeInteger(jsonBytes) || jsonBytes < 0)
170
+ throw new RangeError("invalid replica envelope size");
171
+ return budget.reserve(jsonBytes * REPLICA_ENVELOPE_LIVE_COPY_FACTOR, group);
172
+ },
173
+ });
174
+ }
175
+ function unsupported(limit) {
176
+ return {
177
+ kind: "resource_unsupported",
178
+ limit,
179
+ limitsVersion: REPLICA_LIMITS_VERSION,
180
+ };
181
+ }
182
+ //# sourceMappingURL=limits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limits.js","sourceRoot":"","sources":["../../src/replication/limits.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ import type { DeclarationBinding, RecordOperation, ReplicaOperation } from "./envelope.js";
2
+ /** Provisional decisions: revise this profile here, then update the pinned vectors. */
3
+ export declare const REPLICA_POLICY: {
4
+ readonly mutableOrder: "lamport-writer-operation";
5
+ readonly retainLosers: true;
6
+ readonly laterUpsertResurrects: true;
7
+ readonly declarationVersions: "same-shape-versions-merge-by-revision";
8
+ readonly carriedDeclarations: "same-shape-versions-trusted-by-key";
9
+ readonly appendOnlyConflict: "quarantine-until-separately-authorized-repair";
10
+ readonly authorization: "single-issuer-data-and-connection-evidence-only";
11
+ };
12
+ export interface MergeContext {
13
+ owner: string;
14
+ /** Retained, digest-verified declarations. Validation must use that exact schema. */
15
+ declarations: readonly {
16
+ sourceId: string;
17
+ binding: DeclarationBinding;
18
+ validateData: (data: Record<string, unknown>) => boolean;
19
+ }[];
20
+ }
21
+ /**
22
+ * Every reason a plan issue can carry. Hosts branch on these strings, so a new
23
+ * reason is a profile change. The last group is added by the Node receiver to
24
+ * its own copy of the plan; `visibility-engine.ts` states those decisions as
25
+ * typed projection fields instead.
26
+ */
27
+ export type MergeIssueReason = "wrong_owner" | "operation_id_equivocation" | "connection_deleted" | "incompatible_connection_binding" | "missing_connection_registration" | "invalid_generation_reset" | "missing_generation_reset" | "old_generation" | "missing_declaration" | "incompatible_declaration" | "append_only_delete" | "invalid_record_data" | "incompatible_record_declaration" | "append_only_content_conflict" | "missing_local_connection" | "missing_or_invalid_blob" | "unverified_completion" | "incompatible_completion_declaration";
28
+ export interface MergeIssue {
29
+ reason: MergeIssueReason;
30
+ operations: ReplicaOperation[];
31
+ }
32
+ export interface MergedRecord {
33
+ identity: {
34
+ owner: string;
35
+ sourceId: string;
36
+ connectionId: string;
37
+ generation: number;
38
+ stream: string;
39
+ recordKey: string;
40
+ };
41
+ winner: RecordOperation | null;
42
+ losers: RecordOperation[];
43
+ quarantined: boolean;
44
+ }
45
+ export interface ReplicaMergePlan {
46
+ records: MergedRecord[];
47
+ conflicts: MergeIssue[];
48
+ rejected: MergeIssue[];
49
+ pending: MergeIssue[];
50
+ suppressed: MergeIssue[];
51
+ }
52
+ /**
53
+ * An operation pending on its declaration (missing or incompatible) never
54
+ * applies, so it neither certifies nor withdraws a stream's completion.
55
+ */
56
+ export declare const declarationWait: (reason: MergeIssueReason) => reason is "missing_declaration" | "incompatible_declaration";
57
+ /** How a device treats the binding an operation carries (`resolveDeclaration`). */
58
+ export type DeclarationResolution<T> = {
59
+ status: "retained";
60
+ declaration: T;
61
+ } | {
62
+ status: "compatible";
63
+ } | {
64
+ status: "incompatible";
65
+ } | {
66
+ status: "missing";
67
+ };
68
+ /**
69
+ * A retained binding validates its operations against its own schema. A
70
+ * binding this device does not retain, but with the shape
71
+ * (`declarationShape`) of a retained binding of the same source, is
72
+ * compatible: another version of a stream this device already trusts, which
73
+ * a peer of the same owner wrote under and signed into its batch. Its schema
74
+ * is not known here, so its operations validate by primary key only. A
75
+ * binding of a retained stream with another shape is incompatible and never
76
+ * applies. Any other binding is missing: it names a stream this device does
77
+ * not declare yet, and its operations wait.
78
+ */
79
+ export declare function resolveDeclaration<T extends {
80
+ sourceId: string;
81
+ binding: DeclarationBinding;
82
+ }>(declarations: readonly T[], sourceId: string, binding: DeclarationBinding): DeclarationResolution<T>;
83
+ /**
84
+ * Recompute from the complete retained operation set, including lifecycle evidence.
85
+ * The host must retain losers, conflicts, pending operations and tombstones across calls.
86
+ * This is the full-history oracle: `evaluate` in `visibility-engine.ts` derives
87
+ * the projection from it, and every bounded engine is tested against it.
88
+ * This converges; it cannot establish which offline scrape is freshest upstream.
89
+ * No I/O, local history version allocation, grant copying, or repair authorization.
90
+ */
91
+ export declare function planReplicaMerge(context: MergeContext, input: readonly ReplicaOperation[]): ReplicaMergePlan;
92
+ //# sourceMappingURL=merge-plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-plan.d.ts","sourceRoot":"","sources":["../../src/replication/merge-plan.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EACjB,MAAM,eAAe,CAAC;AAIvB,uFAAuF;AACvF,eAAO,MAAM,cAAc;;;;;;;;CAQjB,CAAC;AAEX,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,qFAAqF;IACrF,YAAY,EAAE,SAAS;QACrB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,kBAAkB,CAAC;QAC5B,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC;KAC1D,EAAE,CAAC;CACL;AACD;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GACxB,aAAa,GACb,2BAA2B,GAC3B,oBAAoB,GACpB,iCAAiC,GACjC,iCAAiC,GACjC,0BAA0B,GAC1B,0BAA0B,GAC1B,gBAAgB,GAChB,qBAAqB,GACrB,0BAA0B,GAC1B,oBAAoB,GACpB,qBAAqB,GACrB,iCAAiC,GACjC,8BAA8B,GAE9B,0BAA0B,GAC1B,yBAAyB,GACzB,uBAAuB,GACvB,qCAAqC,CAAC;AAC1C,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,gBAAgB,CAAC;IACzB,UAAU,EAAE,gBAAgB,EAAE,CAAC;CAChC;AACD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;IAC/B,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;CACtB;AACD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,SAAS,EAAE,UAAU,EAAE,CAAC;IACxB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,UAAU,EAAE,UAAU,EAAE,CAAC;CAC1B;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,gBAAgB,iEACmB,CAAC;AAE5E,mFAAmF;AACnF,MAAM,MAAM,qBAAqB,CAAC,CAAC,IAC/B;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,CAAC,CAAA;CAAE,GACtC;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,GACxB;IAAE,MAAM,EAAE,cAAc,CAAA;CAAE,GAC1B;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,CAAC;AAE1B;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,CAAC,SAAS;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,kBAAkB,CAAA;CAAE,EAE3D,YAAY,EAAE,SAAS,CAAC,EAAE,EAC1B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,kBAAkB,GAC1B,qBAAqB,CAAC,CAAC,CAAC,CAe1B;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,SAAS,gBAAgB,EAAE,GACjC,gBAAgB,CAiNlB"}
@@ -0,0 +1,229 @@
1
+ import { computeRecordKeyFromData } from "../storage/pdpp-records/record-key.js";
2
+ import { canonicalJson, declarationShape, replicaOperationSchema, } from "./envelope.js";
3
+ import { connectionKey } from "./identity.js";
4
+ import { compareRevisions } from "./revision.js";
5
+ /** Provisional decisions: revise this profile here, then update the pinned vectors. */
6
+ export const REPLICA_POLICY = {
7
+ mutableOrder: "lamport-writer-operation",
8
+ retainLosers: true,
9
+ laterUpsertResurrects: true,
10
+ declarationVersions: "same-shape-versions-merge-by-revision",
11
+ carriedDeclarations: "same-shape-versions-trusted-by-key",
12
+ appendOnlyConflict: "quarantine-until-separately-authorized-repair",
13
+ authorization: "single-issuer-data-and-connection-evidence-only",
14
+ };
15
+ /**
16
+ * An operation pending on its declaration (missing or incompatible) never
17
+ * applies, so it neither certifies nor withdraws a stream's completion.
18
+ */
19
+ export const declarationWait = (reason) => reason === "missing_declaration" || reason === "incompatible_declaration";
20
+ /**
21
+ * A retained binding validates its operations against its own schema. A
22
+ * binding this device does not retain, but with the shape
23
+ * (`declarationShape`) of a retained binding of the same source, is
24
+ * compatible: another version of a stream this device already trusts, which
25
+ * a peer of the same owner wrote under and signed into its batch. Its schema
26
+ * is not known here, so its operations validate by primary key only. A
27
+ * binding of a retained stream with another shape is incompatible and never
28
+ * applies. Any other binding is missing: it names a stream this device does
29
+ * not declare yet, and its operations wait.
30
+ */
31
+ export function resolveDeclaration(declarations, sourceId, binding) {
32
+ const stream = declarations.filter((entry) => entry.sourceId === sourceId && entry.binding.stream === binding.stream);
33
+ const exact = stream.find((entry) => canonicalJson(entry.binding) === canonicalJson(binding));
34
+ if (exact)
35
+ return { status: "retained", declaration: exact };
36
+ if (!stream.length)
37
+ return { status: "missing" };
38
+ return stream.some((entry) => declarationShape(entry.binding) === declarationShape(binding))
39
+ ? { status: "compatible" }
40
+ : { status: "incompatible" };
41
+ }
42
+ /**
43
+ * Recompute from the complete retained operation set, including lifecycle evidence.
44
+ * The host must retain losers, conflicts, pending operations and tombstones across calls.
45
+ * This is the full-history oracle: `evaluate` in `visibility-engine.ts` derives
46
+ * the projection from it, and every bounded engine is tested against it.
47
+ * This converges; it cannot establish which offline scrape is freshest upstream.
48
+ * No I/O, local history version allocation, grant copying, or repair authorization.
49
+ */
50
+ export function planReplicaMerge(context, input) {
51
+ const result = {
52
+ records: [],
53
+ conflicts: [],
54
+ rejected: [],
55
+ pending: [],
56
+ suppressed: [],
57
+ };
58
+ const issue = (bucket, reason, operations) => bucket.push({ reason, operations });
59
+ const byId = new Map();
60
+ /** Every owned operation, equivocated variants included. */
61
+ const evidence = [];
62
+ for (const raw of input) {
63
+ const operation = replicaOperationSchema.parse(raw);
64
+ if (operation.owner !== context.owner) {
65
+ issue(result.rejected, "wrong_owner", [operation]);
66
+ continue;
67
+ }
68
+ const id = canonicalJson([
69
+ operation.revision.writerId,
70
+ operation.revision.operationId,
71
+ ]);
72
+ evidence.push(operation);
73
+ const variants = byId.get(id) ?? new Map();
74
+ variants.set(canonicalJson(operation), operation);
75
+ byId.set(id, variants);
76
+ }
77
+ const blockedConnections = new Set();
78
+ const operations = [];
79
+ for (const variants of byId.values()) {
80
+ if (variants.size > 1) {
81
+ const colliding = [...variants.values()];
82
+ issue(result.conflicts, "operation_id_equivocation", colliding);
83
+ for (const operation of colliding)
84
+ blockedConnections.add(connectionKey(operation));
85
+ }
86
+ else
87
+ operations.push([...variants.values()][0]);
88
+ }
89
+ const connections = new Map();
90
+ for (const operation of operations) {
91
+ const key = connectionKey(operation);
92
+ const list = connections.get(key) ?? [];
93
+ list.push(operation);
94
+ connections.set(key, list);
95
+ }
96
+ // A logical id cannot be rebound to another producer, even when its source
97
+ // differs. Equivocated variants still count as source evidence: dropping
98
+ // them must not make a source-binding conflict disappear (#426).
99
+ for (const entries of connections.values()) {
100
+ const first = entries[0];
101
+ const sources = new Set(evidence
102
+ .filter((op) => op.connectionId === first.connectionId)
103
+ .map((op) => op.sourceId));
104
+ if (sources.size > 1)
105
+ blockedConnections.add(connectionKey(first));
106
+ }
107
+ for (const [key, entries] of connections) {
108
+ if (entries.some((op) => op.kind === "connection-delete")) {
109
+ issue(result.suppressed, "connection_deleted", entries);
110
+ continue;
111
+ }
112
+ const methods = new Set(entries.map((op) => op.methodId));
113
+ if (blockedConnections.has(key) || methods.size !== 1) {
114
+ issue(result.conflicts, "incompatible_connection_binding", entries);
115
+ continue;
116
+ }
117
+ if (!entries.some((op) => op.kind === "connection-register")) {
118
+ issue(result.pending, "missing_connection_registration", entries);
119
+ continue;
120
+ }
121
+ const resets = entries.filter((op) => op.kind === "connection-reset");
122
+ if (resets.some((op) => op.generation !== op.previousGeneration + 1)) {
123
+ issue(result.conflicts, "invalid_generation_reset", entries);
124
+ continue;
125
+ }
126
+ const generation = Math.max(1, ...resets.map((op) => op.generation));
127
+ const generations = new Set([1, ...resets.map((op) => op.generation)]);
128
+ if (generations.size !== generation) {
129
+ issue(result.pending, "missing_generation_reset", entries);
130
+ continue;
131
+ }
132
+ const records = new Map();
133
+ for (const operation of entries) {
134
+ if (operation.kind !== "upsert" && operation.kind !== "delete")
135
+ continue;
136
+ if (operation.generation < generation) {
137
+ issue(result.suppressed, "old_generation", [operation]);
138
+ continue;
139
+ }
140
+ if (operation.generation > generation) {
141
+ issue(result.pending, "missing_generation_reset", [operation]);
142
+ continue;
143
+ }
144
+ const resolved = resolveDeclaration(context.declarations, operation.sourceId, operation.declaration);
145
+ if (resolved.status === "missing" || resolved.status === "incompatible") {
146
+ issue(result.pending, `${resolved.status}_declaration`, [operation]);
147
+ continue;
148
+ }
149
+ const validateData = resolved.status === "retained"
150
+ ? resolved.declaration.validateData
151
+ : () => true;
152
+ if (operation.kind === "delete" &&
153
+ operation.declaration.semantics === "append_only") {
154
+ issue(result.rejected, "append_only_delete", [operation]);
155
+ continue;
156
+ }
157
+ if (operation.kind === "upsert") {
158
+ let valid = false;
159
+ try {
160
+ valid =
161
+ computeRecordKeyFromData(operation.data, operation.declaration.primaryKey) === operation.recordKey && validateData(operation.data);
162
+ }
163
+ catch {
164
+ /* Invalid data/key cannot enter winner selection. */
165
+ }
166
+ if (!valid) {
167
+ issue(result.rejected, "invalid_record_data", [operation]);
168
+ continue;
169
+ }
170
+ }
171
+ const recordId = canonicalJson([
172
+ operation.declaration.stream,
173
+ operation.recordKey,
174
+ ]);
175
+ const list = records.get(recordId) ?? [];
176
+ list.push(operation);
177
+ records.set(recordId, list);
178
+ }
179
+ for (const candidates of records.values()) {
180
+ candidates.sort((a, b) => compareRevisions(a.revision, b.revision));
181
+ const first = candidates[0];
182
+ // Versions of one declared stream are one record (a rebinding); only a
183
+ // changed shape makes the same record key name two records.
184
+ const shapes = new Set(candidates.map((op) => declarationShape(op.declaration)));
185
+ const content = new Set(candidates.map((op) => canonicalJson(op.kind === "upsert" ? { data: op.data, blobs: op.blobs } : null)));
186
+ const quarantined = shapes.size > 1 ||
187
+ (first.declaration.semantics === "append_only" && content.size > 1);
188
+ if (quarantined)
189
+ issue(result.conflicts, shapes.size > 1
190
+ ? "incompatible_record_declaration"
191
+ : "append_only_content_conflict", candidates);
192
+ result.records.push({
193
+ identity: {
194
+ owner: first.owner,
195
+ sourceId: first.sourceId,
196
+ connectionId: first.connectionId,
197
+ generation,
198
+ stream: first.declaration.stream,
199
+ recordKey: first.recordKey,
200
+ },
201
+ winner: quarantined ? null : candidates[candidates.length - 1],
202
+ losers: quarantined ? candidates : candidates.slice(0, -1),
203
+ quarantined,
204
+ });
205
+ }
206
+ }
207
+ // Normalize every output, including diagnostics; replay multiplicity is unobservable.
208
+ for (const bucket of [
209
+ result.conflicts,
210
+ result.rejected,
211
+ result.pending,
212
+ result.suppressed,
213
+ ]) {
214
+ const unique = new Map();
215
+ for (const entry of bucket) {
216
+ entry.operations = [
217
+ ...new Map(entry.operations.map((op) => [canonicalJson(op), op])).values(),
218
+ ].sort((a, b) => compareText(canonicalJson(a), canonicalJson(b)));
219
+ unique.set(canonicalJson(entry), entry);
220
+ }
221
+ bucket.splice(0, bucket.length, ...[...unique.values()].sort((a, b) => compareText(canonicalJson(a), canonicalJson(b))));
222
+ }
223
+ result.records.sort((a, b) => compareText(canonicalJson(a.identity), canonicalJson(b.identity)));
224
+ return result;
225
+ }
226
+ function compareText(a, b) {
227
+ return a < b ? -1 : a > b ? 1 : 0;
228
+ }
229
+ //# sourceMappingURL=merge-plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-plan.js","sourceRoot":"","sources":["../../src/replication/merge-plan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /** Dedicated SDK-compatible source name; never a legacy source or permission. */
2
+ export declare const REPLICA_SCOPE_PREFIX = "pdpp_replica_v1";
3
+ export declare function isReplicaScope(scope: string): boolean;
4
+ //# sourceMappingURL=namespace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"namespace.d.ts","sourceRoot":"","sources":["../../src/replication/namespace.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,eAAO,MAAM,oBAAoB,oBAAoB,CAAC;AACtD,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAKrD"}
@@ -0,0 +1,7 @@
1
+ /** Dedicated SDK-compatible source name; never a legacy source or permission. */
2
+ export const REPLICA_SCOPE_PREFIX = "pdpp_replica_v1";
3
+ export function isReplicaScope(scope) {
4
+ return (scope === REPLICA_SCOPE_PREFIX ||
5
+ scope.startsWith(`${REPLICA_SCOPE_PREFIX}.`));
6
+ }
7
+ //# sourceMappingURL=namespace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"namespace.js","sourceRoot":"","sources":["../../src/replication/namespace.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,MAAM,CAAC,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;AACtD,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAO,CACL,KAAK,KAAK,oBAAoB;QAC9B,KAAK,CAAC,UAAU,CAAC,GAAG,oBAAoB,GAAG,CAAC,CAC7C,CAAC;AACJ,CAAC"}