@noy-db/hub 0.2.0-pre.16 → 0.2.0-pre.17

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 (286) hide show
  1. package/dist/aggregate/index.cjs.map +1 -1
  2. package/dist/aggregate/index.d.cts +3 -2
  3. package/dist/aggregate/index.d.ts +3 -2
  4. package/dist/aggregate/index.js +4 -4
  5. package/dist/attestation/index.cjs.map +1 -1
  6. package/dist/attestation/index.d.cts +5 -3
  7. package/dist/attestation/index.d.ts +5 -3
  8. package/dist/attestation/index.js +6 -6
  9. package/dist/blobs/index.cjs +226 -11
  10. package/dist/blobs/index.cjs.map +1 -1
  11. package/dist/blobs/index.d.cts +6 -4
  12. package/dist/blobs/index.d.ts +6 -4
  13. package/dist/blobs/index.js +6 -5
  14. package/dist/blobs/index.js.map +1 -1
  15. package/dist/bundle/index.cjs +1087 -95
  16. package/dist/bundle/index.cjs.map +1 -1
  17. package/dist/bundle/index.d.cts +7 -5
  18. package/dist/bundle/index.d.ts +7 -5
  19. package/dist/bundle/index.js +21 -10
  20. package/dist/bundle/index.js.map +1 -1
  21. package/dist/{chunk-G4SCICH5.js → chunk-2FU2FTXD.js} +2 -2
  22. package/dist/{chunk-JD3OZAI4.js → chunk-3G3W65EQ.js} +2 -2
  23. package/dist/{chunk-XWH4MXIU.js → chunk-5AXTH4QZ.js} +2 -2
  24. package/dist/{chunk-4TBBMHVC.js → chunk-5LIROIDM.js} +2 -2
  25. package/dist/{chunk-L2BNJ6HM.js → chunk-7H2GEJ3O.js} +3 -3
  26. package/dist/{chunk-GNI5STXQ.js → chunk-AEIKD3PP.js} +52 -38
  27. package/dist/chunk-AEIKD3PP.js.map +1 -0
  28. package/dist/{chunk-QSUK7YWK.js → chunk-BH3X5L6A.js} +4 -4
  29. package/dist/{chunk-BQ65SS5A.js → chunk-BJSLBUJ7.js} +2 -2
  30. package/dist/{chunk-FFXM3ZIF.js → chunk-BL5GYANC.js} +3 -3
  31. package/dist/{chunk-6H2ZUNR7.js → chunk-BSZOCSDZ.js} +4 -4
  32. package/dist/{chunk-ZNQYHJXX.js → chunk-C3HYQPV4.js} +2 -2
  33. package/dist/{chunk-E2CDVKMH.js → chunk-CD2AVTEM.js} +5 -5
  34. package/dist/{chunk-667MB6AH.js → chunk-D77ZQSQQ.js} +769 -131
  35. package/dist/chunk-D77ZQSQQ.js.map +1 -0
  36. package/dist/{chunk-BR3AMFGS.js → chunk-DWEBTE2W.js} +5 -5
  37. package/dist/{chunk-Z4DO7YSI.js → chunk-DYYYUW5D.js} +2 -2
  38. package/dist/{chunk-SCJPI4Z5.js → chunk-E77UKJYL.js} +5 -5
  39. package/dist/{chunk-OMAMZKKD.js → chunk-F4G63NTZ.js} +2 -2
  40. package/dist/{chunk-TKIY625R.js → chunk-FEJDVE3Z.js} +2 -2
  41. package/dist/{chunk-7Z7KSVA5.js → chunk-GP3SDSH2.js} +2 -2
  42. package/dist/{chunk-IQLVUT37.js → chunk-H2MRGONI.js} +2 -2
  43. package/dist/{chunk-DUREQF5W.js → chunk-HGVSHKZW.js} +8 -5
  44. package/dist/chunk-HGVSHKZW.js.map +1 -0
  45. package/dist/chunk-I5IUYN7B.js +125 -0
  46. package/dist/chunk-I5IUYN7B.js.map +1 -0
  47. package/dist/{chunk-CJORTUJ2.js → chunk-J7RWBXFY.js} +2 -2
  48. package/dist/{chunk-AAVWKNZW.js → chunk-JDWE6JMX.js} +2 -2
  49. package/dist/{chunk-XL35NSEN.js → chunk-KCEHMDZF.js} +3 -3
  50. package/dist/{chunk-TS26M2SB.js → chunk-M476FOQ7.js} +2 -2
  51. package/dist/{chunk-F4OJZIWQ.js → chunk-NBBMMJ2H.js} +4 -4
  52. package/dist/{chunk-CZI2A4MQ.js → chunk-NYSYPFXJ.js} +3 -3
  53. package/dist/{chunk-OQSRJG6A.js → chunk-PDULVIBY.js} +2 -2
  54. package/dist/{chunk-Z6FNBOTC.js → chunk-PDVP3C2I.js} +1 -1
  55. package/dist/{chunk-Z6FNBOTC.js.map → chunk-PDVP3C2I.js.map} +1 -1
  56. package/dist/{chunk-DLZ2ONOD.js → chunk-QHM6XEAH.js} +6 -6
  57. package/dist/{chunk-HBXJ37ZY.js → chunk-QO6RGLLD.js} +4 -4
  58. package/dist/{chunk-7BQ4QWYX.js → chunk-ROPJVUG3.js} +23 -6
  59. package/dist/chunk-ROPJVUG3.js.map +1 -0
  60. package/dist/{chunk-42FEUPZQ.js → chunk-ROVO6NPJ.js} +2 -2
  61. package/dist/{chunk-6RR3MNMG.js → chunk-SHX5QBCI.js} +3 -3
  62. package/dist/{chunk-F3BPIPLS.js → chunk-SISBMAPO.js} +1 -1
  63. package/dist/chunk-SISBMAPO.js.map +1 -0
  64. package/dist/{chunk-3YWP3WBP.js → chunk-SNMJ7SB3.js} +5 -5
  65. package/dist/{chunk-IXBIFDEW.js → chunk-TIDXB5DF.js} +4 -4
  66. package/dist/chunk-U5QCMH3W.js +151 -0
  67. package/dist/chunk-U5QCMH3W.js.map +1 -0
  68. package/dist/{chunk-YULZKK4F.js → chunk-UNTGHX5A.js} +37 -2
  69. package/dist/chunk-UNTGHX5A.js.map +1 -0
  70. package/dist/{chunk-FWPKCXTN.js → chunk-WIAOUFFB.js} +2 -2
  71. package/dist/{chunk-KABJXG2F.js → chunk-WV7WV6JO.js} +195 -17
  72. package/dist/chunk-WV7WV6JO.js.map +1 -0
  73. package/dist/{chunk-X73VS74Y.js → chunk-XJV6OB4D.js} +2 -2
  74. package/dist/{chunk-VLMPU56Q.js → chunk-XMHUK5PN.js} +2 -2
  75. package/dist/{chunk-BI6ETQPF.js → chunk-XMVHEWF6.js} +4 -4
  76. package/dist/{chunk-HOR4R722.js → chunk-XPIHJ34I.js} +30 -4
  77. package/dist/chunk-XPIHJ34I.js.map +1 -0
  78. package/dist/{chunk-OB2ZJQ2D.js → chunk-YYVZYTWW.js} +3 -3
  79. package/dist/{chunk-535SSHBS.js → chunk-ZEGSDPB7.js} +81 -2
  80. package/dist/chunk-ZEGSDPB7.js.map +1 -0
  81. package/dist/{chunk-QVIEAYTP.js → chunk-ZNGPEV5J.js} +3 -3
  82. package/dist/consent/index.cjs.map +1 -1
  83. package/dist/consent/index.d.cts +6 -4
  84. package/dist/consent/index.d.ts +6 -4
  85. package/dist/consent/index.js +3 -3
  86. package/dist/{crypto-QXQOHMHF.js → crypto-7BN2HDWG.js} +7 -3
  87. package/dist/{delegation-NIQ43IPU.js → delegation-MGH5SODX.js} +5 -5
  88. package/dist/derivations/index.cjs.map +1 -1
  89. package/dist/derivations/index.d.cts +7 -5
  90. package/dist/derivations/index.d.ts +7 -5
  91. package/dist/derivations/index.js +4 -4
  92. package/dist/{dev-unlock-DR3upLd1.d.ts → dev-unlock-CI1ijTML.d.ts} +1 -1
  93. package/dist/{dev-unlock-8XzcD2Z4.d.cts → dev-unlock-iXbYFAWl.d.cts} +1 -1
  94. package/dist/{strategy-BtW8fAjz.d.ts → errors-Dz64FA65.d.cts} +98 -727
  95. package/dist/{strategy-BtW8fAjz.d.cts → errors-Dz64FA65.d.ts} +98 -727
  96. package/dist/executor-3W63Y44O.js +11 -0
  97. package/dist/executor-CFFWPWBJ.js +8 -0
  98. package/dist/executor-VDQQOR4F.js +8 -0
  99. package/dist/{fanout-sidecar-67CMI3UT.js → fanout-sidecar-FIJJ46YG.js} +2 -2
  100. package/dist/forget/index.cjs +43 -0
  101. package/dist/forget/index.cjs.map +1 -0
  102. package/dist/forget/index.d.cts +1 -0
  103. package/dist/forget/index.d.ts +1 -0
  104. package/dist/forget/index.js +14 -0
  105. package/dist/guards/index.cjs.map +1 -1
  106. package/dist/guards/index.d.cts +7 -5
  107. package/dist/guards/index.d.ts +7 -5
  108. package/dist/guards/index.js +6 -6
  109. package/dist/{hash-CDjye9KV.d.ts → hash-blk7Bkes.d.ts} +1 -1
  110. package/dist/{hash-DuQ88_5W.d.cts → hash-tEcM5fnv.d.cts} +1 -1
  111. package/dist/history/index.cjs +27 -4
  112. package/dist/history/index.cjs.map +1 -1
  113. package/dist/history/index.d.cts +7 -5
  114. package/dist/history/index.d.ts +7 -5
  115. package/dist/history/index.js +9 -7
  116. package/dist/history/index.js.map +1 -1
  117. package/dist/i18n/index.cjs +53 -0
  118. package/dist/i18n/index.cjs.map +1 -1
  119. package/dist/i18n/index.d.cts +6 -4
  120. package/dist/i18n/index.d.ts +6 -4
  121. package/dist/i18n/index.js +16 -8
  122. package/dist/i18n/index.js.map +1 -1
  123. package/dist/{immutable-guard-Dov3WvwF.d.ts → immutable-guard-B5M95nbq.d.ts} +1 -1
  124. package/dist/{immutable-guard-CRPvu24K.d.cts → immutable-guard-qN3zF8o1.d.cts} +1 -1
  125. package/dist/index-C-SSRIxP.d.cts +348 -0
  126. package/dist/index-C-SSRIxP.d.ts +348 -0
  127. package/dist/{index-nP99bXLg.d.ts → index-DpU6KWof.d.ts} +9 -1
  128. package/dist/{index-C8Bk3-VF.d.cts → index-u-kWzSrL.d.cts} +9 -1
  129. package/dist/index.cjs +7271 -6079
  130. package/dist/index.cjs.map +1 -1
  131. package/dist/index.d.cts +15 -12
  132. package/dist/index.d.ts +15 -12
  133. package/dist/index.js +130 -106
  134. package/dist/index.js.map +1 -1
  135. package/dist/indexing/index.cjs.map +1 -1
  136. package/dist/indexing/index.js +4 -4
  137. package/dist/issue-TTMGHQ2J.js +12 -0
  138. package/dist/{ledger-A3LL253R.js → ledger-LFVLHE5H.js} +6 -6
  139. package/dist/materialized-views/index.cjs.map +1 -1
  140. package/dist/materialized-views/index.d.cts +7 -5
  141. package/dist/materialized-views/index.d.ts +7 -5
  142. package/dist/materialized-views/index.js +12 -12
  143. package/dist/noydb-36S6GQNC.js +37 -0
  144. package/dist/overlay-views/index.cjs.map +1 -1
  145. package/dist/overlay-views/index.d.cts +7 -5
  146. package/dist/overlay-views/index.d.ts +7 -5
  147. package/dist/overlay-views/index.js +4 -4
  148. package/dist/periods/index.cjs.map +1 -1
  149. package/dist/periods/index.d.cts +6 -4
  150. package/dist/periods/index.d.ts +6 -4
  151. package/dist/periods/index.js +6 -6
  152. package/dist/{public-envelope-YP2UWMLG.js → public-envelope-RXZNP3V6.js} +4 -4
  153. package/dist/query/index.cjs +4 -1
  154. package/dist/query/index.cjs.map +1 -1
  155. package/dist/query/index.d.cts +3 -2
  156. package/dist/query/index.d.ts +3 -2
  157. package/dist/query/index.js +6 -6
  158. package/dist/registry-3YFLZ7WD.js +8 -0
  159. package/dist/{registry-UTA4CLQS.js → registry-SECUWSGY.js} +3 -3
  160. package/dist/registry-TGZISEWC.js +8 -0
  161. package/dist/{revoke-HNMQZSCL.js → revoke-B54H2S2W.js} +6 -6
  162. package/dist/sealed-record/index.cjs +139 -0
  163. package/dist/sealed-record/index.cjs.map +1 -0
  164. package/dist/sealed-record/index.d.cts +123 -0
  165. package/dist/sealed-record/index.d.ts +123 -0
  166. package/dist/sealed-record/index.js +42 -0
  167. package/dist/sealed-record/index.js.map +1 -0
  168. package/dist/session/index.cjs.map +1 -1
  169. package/dist/session/index.d.cts +7 -5
  170. package/dist/session/index.d.ts +7 -5
  171. package/dist/session/index.js +3 -3
  172. package/dist/shadow/index.cjs.map +1 -1
  173. package/dist/shadow/index.d.cts +6 -4
  174. package/dist/shadow/index.d.ts +6 -4
  175. package/dist/shadow/index.js +2 -2
  176. package/dist/{signer-DCMNKXSF.js → signer-YSXZT574.js} +5 -5
  177. package/dist/snapshots/index.cjs.map +1 -1
  178. package/dist/snapshots/index.d.cts +6 -4
  179. package/dist/snapshots/index.d.ts +6 -4
  180. package/dist/snapshots/index.js +4 -4
  181. package/dist/{stale-W5PQTRYH.js → stale-TOA36SRK.js} +2 -2
  182. package/dist/stale-TOA36SRK.js.map +1 -0
  183. package/dist/{state-vault-TMXZRTY5.js → state-vault-W2OEABNO.js} +3 -3
  184. package/dist/store/index.cjs.map +1 -1
  185. package/dist/store/index.d.cts +6 -4
  186. package/dist/store/index.d.ts +6 -4
  187. package/dist/store/index.js +2 -2
  188. package/dist/strategy-4M9jo172.d.ts +739 -0
  189. package/dist/strategy-CLC1j79g.d.cts +739 -0
  190. package/dist/sync/index.cjs.map +1 -1
  191. package/dist/sync/index.d.cts +5 -3
  192. package/dist/sync/index.d.ts +5 -3
  193. package/dist/sync/index.js +4 -4
  194. package/dist/team/index.cjs.map +1 -1
  195. package/dist/team/index.d.cts +6 -4
  196. package/dist/team/index.d.ts +6 -4
  197. package/dist/team/index.js +8 -8
  198. package/dist/tx/index.cjs.map +1 -1
  199. package/dist/tx/index.d.cts +6 -4
  200. package/dist/tx/index.d.ts +6 -4
  201. package/dist/tx/index.js +3 -3
  202. package/dist/{types-DrmBTscX.d.ts → types-CljIHm_J.d.ts} +789 -500
  203. package/dist/{types-Bze6vkwm.d.cts → types-CrSpRDuG.d.cts} +789 -500
  204. package/dist/{ulid-DbBVrNSt.d.ts → ulid-CWfL2Vfv.d.ts} +1 -1
  205. package/dist/{ulid-DfZlAh0u.d.cts → ulid-CrI7PPbA.d.cts} +1 -1
  206. package/dist/util/index.cjs.map +1 -1
  207. package/dist/util/index.js +1 -1
  208. package/dist/{vault-group-DX2HFQMX.js → vault-group-DHAHFX2A.js} +4 -4
  209. package/dist/{with-derivation-_lySGdlm.d.ts → with-derivation-BZ2y4bzF.d.ts} +1 -1
  210. package/dist/{with-derivation-CCqAchD5.d.cts → with-derivation-Bozs8DmD.d.cts} +1 -1
  211. package/dist/{with-materialized-view-QT1Tp7NO.d.ts → with-materialized-view-B892zYZV.d.ts} +1 -1
  212. package/dist/{with-materialized-view--4PsvMDu.d.cts → with-materialized-view-NzF71cG_.d.cts} +1 -1
  213. package/dist/{with-overlayed-view-BEXfpzSb.d.ts → with-overlayed-view-CR6m7CHe.d.ts} +1 -1
  214. package/dist/{with-overlayed-view-DlH5qmeB.d.cts → with-overlayed-view-UI8qSGL4.d.cts} +1 -1
  215. package/package.json +23 -3
  216. package/dist/chunk-535SSHBS.js.map +0 -1
  217. package/dist/chunk-667MB6AH.js.map +0 -1
  218. package/dist/chunk-7BQ4QWYX.js.map +0 -1
  219. package/dist/chunk-DUREQF5W.js.map +0 -1
  220. package/dist/chunk-F3BPIPLS.js.map +0 -1
  221. package/dist/chunk-GNI5STXQ.js.map +0 -1
  222. package/dist/chunk-HOR4R722.js.map +0 -1
  223. package/dist/chunk-KABJXG2F.js.map +0 -1
  224. package/dist/chunk-YULZKK4F.js.map +0 -1
  225. package/dist/executor-6ZDSDZ6V.js +0 -8
  226. package/dist/executor-AZLS3KBK.js +0 -11
  227. package/dist/executor-IDZDAFNH.js +0 -8
  228. package/dist/issue-RZP3VI6O.js +0 -12
  229. package/dist/noydb-WCMY2ZOW.js +0 -35
  230. package/dist/registry-EB6SISTA.js +0 -8
  231. package/dist/registry-IUZQVVBB.js +0 -8
  232. /package/dist/{chunk-G4SCICH5.js.map → chunk-2FU2FTXD.js.map} +0 -0
  233. /package/dist/{chunk-JD3OZAI4.js.map → chunk-3G3W65EQ.js.map} +0 -0
  234. /package/dist/{chunk-XWH4MXIU.js.map → chunk-5AXTH4QZ.js.map} +0 -0
  235. /package/dist/{chunk-4TBBMHVC.js.map → chunk-5LIROIDM.js.map} +0 -0
  236. /package/dist/{chunk-L2BNJ6HM.js.map → chunk-7H2GEJ3O.js.map} +0 -0
  237. /package/dist/{chunk-QSUK7YWK.js.map → chunk-BH3X5L6A.js.map} +0 -0
  238. /package/dist/{chunk-BQ65SS5A.js.map → chunk-BJSLBUJ7.js.map} +0 -0
  239. /package/dist/{chunk-FFXM3ZIF.js.map → chunk-BL5GYANC.js.map} +0 -0
  240. /package/dist/{chunk-6H2ZUNR7.js.map → chunk-BSZOCSDZ.js.map} +0 -0
  241. /package/dist/{chunk-ZNQYHJXX.js.map → chunk-C3HYQPV4.js.map} +0 -0
  242. /package/dist/{chunk-E2CDVKMH.js.map → chunk-CD2AVTEM.js.map} +0 -0
  243. /package/dist/{chunk-BR3AMFGS.js.map → chunk-DWEBTE2W.js.map} +0 -0
  244. /package/dist/{chunk-Z4DO7YSI.js.map → chunk-DYYYUW5D.js.map} +0 -0
  245. /package/dist/{chunk-SCJPI4Z5.js.map → chunk-E77UKJYL.js.map} +0 -0
  246. /package/dist/{chunk-OMAMZKKD.js.map → chunk-F4G63NTZ.js.map} +0 -0
  247. /package/dist/{chunk-TKIY625R.js.map → chunk-FEJDVE3Z.js.map} +0 -0
  248. /package/dist/{chunk-7Z7KSVA5.js.map → chunk-GP3SDSH2.js.map} +0 -0
  249. /package/dist/{chunk-IQLVUT37.js.map → chunk-H2MRGONI.js.map} +0 -0
  250. /package/dist/{chunk-CJORTUJ2.js.map → chunk-J7RWBXFY.js.map} +0 -0
  251. /package/dist/{chunk-AAVWKNZW.js.map → chunk-JDWE6JMX.js.map} +0 -0
  252. /package/dist/{chunk-XL35NSEN.js.map → chunk-KCEHMDZF.js.map} +0 -0
  253. /package/dist/{chunk-TS26M2SB.js.map → chunk-M476FOQ7.js.map} +0 -0
  254. /package/dist/{chunk-F4OJZIWQ.js.map → chunk-NBBMMJ2H.js.map} +0 -0
  255. /package/dist/{chunk-CZI2A4MQ.js.map → chunk-NYSYPFXJ.js.map} +0 -0
  256. /package/dist/{chunk-OQSRJG6A.js.map → chunk-PDULVIBY.js.map} +0 -0
  257. /package/dist/{chunk-DLZ2ONOD.js.map → chunk-QHM6XEAH.js.map} +0 -0
  258. /package/dist/{chunk-HBXJ37ZY.js.map → chunk-QO6RGLLD.js.map} +0 -0
  259. /package/dist/{chunk-42FEUPZQ.js.map → chunk-ROVO6NPJ.js.map} +0 -0
  260. /package/dist/{chunk-6RR3MNMG.js.map → chunk-SHX5QBCI.js.map} +0 -0
  261. /package/dist/{chunk-3YWP3WBP.js.map → chunk-SNMJ7SB3.js.map} +0 -0
  262. /package/dist/{chunk-IXBIFDEW.js.map → chunk-TIDXB5DF.js.map} +0 -0
  263. /package/dist/{chunk-FWPKCXTN.js.map → chunk-WIAOUFFB.js.map} +0 -0
  264. /package/dist/{chunk-X73VS74Y.js.map → chunk-XJV6OB4D.js.map} +0 -0
  265. /package/dist/{chunk-VLMPU56Q.js.map → chunk-XMHUK5PN.js.map} +0 -0
  266. /package/dist/{chunk-BI6ETQPF.js.map → chunk-XMVHEWF6.js.map} +0 -0
  267. /package/dist/{chunk-OB2ZJQ2D.js.map → chunk-YYVZYTWW.js.map} +0 -0
  268. /package/dist/{chunk-QVIEAYTP.js.map → chunk-ZNGPEV5J.js.map} +0 -0
  269. /package/dist/{crypto-QXQOHMHF.js.map → crypto-7BN2HDWG.js.map} +0 -0
  270. /package/dist/{delegation-NIQ43IPU.js.map → delegation-MGH5SODX.js.map} +0 -0
  271. /package/dist/{executor-6ZDSDZ6V.js.map → executor-3W63Y44O.js.map} +0 -0
  272. /package/dist/{executor-AZLS3KBK.js.map → executor-CFFWPWBJ.js.map} +0 -0
  273. /package/dist/{executor-IDZDAFNH.js.map → executor-VDQQOR4F.js.map} +0 -0
  274. /package/dist/{fanout-sidecar-67CMI3UT.js.map → fanout-sidecar-FIJJ46YG.js.map} +0 -0
  275. /package/dist/{issue-RZP3VI6O.js.map → forget/index.js.map} +0 -0
  276. /package/dist/{ledger-A3LL253R.js.map → issue-TTMGHQ2J.js.map} +0 -0
  277. /package/dist/{noydb-WCMY2ZOW.js.map → ledger-LFVLHE5H.js.map} +0 -0
  278. /package/dist/{public-envelope-YP2UWMLG.js.map → noydb-36S6GQNC.js.map} +0 -0
  279. /package/dist/{registry-EB6SISTA.js.map → public-envelope-RXZNP3V6.js.map} +0 -0
  280. /package/dist/{registry-IUZQVVBB.js.map → registry-3YFLZ7WD.js.map} +0 -0
  281. /package/dist/{registry-UTA4CLQS.js.map → registry-SECUWSGY.js.map} +0 -0
  282. /package/dist/{revoke-HNMQZSCL.js.map → registry-TGZISEWC.js.map} +0 -0
  283. /package/dist/{signer-DCMNKXSF.js.map → revoke-B54H2S2W.js.map} +0 -0
  284. /package/dist/{stale-W5PQTRYH.js.map → signer-YSXZT574.js.map} +0 -0
  285. /package/dist/{state-vault-TMXZRTY5.js.map → state-vault-W2OEABNO.js.map} +0 -0
  286. /package/dist/{vault-group-DX2HFQMX.js.map → vault-group-DHAHFX2A.js.map} +0 -0
@@ -1,11 +1,13 @@
1
- import { a$ as NoydbStore } from '../types-Bze6vkwm.cjs';
1
+ import { b2 as NoydbStore } from '../types-CrSpRDuG.cjs';
2
2
  import { AttestationFieldSchema, QrPayload, RevocationList } from '@noy-db/attestation';
3
3
  export { AttestationFieldSchema, QrPayload, RevocationList, VerifyInput, VerifyResult, decodeQr, isRevoked, signRevocationList, verifyAttestation, verifyRevocationList } from '@noy-db/attestation';
4
- export { W as AttestationError } from '../strategy-BtW8fAjz.cjs';
4
+ export { r as AttestationError } from '../errors-Dz64FA65.cjs';
5
5
  import '../lazy-builder-eYZzLEL1.cjs';
6
6
  import '../predicate-BmhBSPCH.cjs';
7
+ import '../strategy-CLC1j79g.cjs';
7
8
  import '../strategy-BSxFXGzb.cjs';
8
- import '../index-C8Bk3-VF.cjs';
9
+ import '../index-C-SSRIxP.cjs';
10
+ import '../index-u-kWzSrL.cjs';
9
11
 
10
12
  /** Everything issueAttestationCore needs from the Vault, injected for testability. */
11
13
  interface IssueContext {
@@ -1,11 +1,13 @@
1
- import { a$ as NoydbStore } from '../types-DrmBTscX.js';
1
+ import { b2 as NoydbStore } from '../types-CljIHm_J.js';
2
2
  import { AttestationFieldSchema, QrPayload, RevocationList } from '@noy-db/attestation';
3
3
  export { AttestationFieldSchema, QrPayload, RevocationList, VerifyInput, VerifyResult, decodeQr, isRevoked, signRevocationList, verifyAttestation, verifyRevocationList } from '@noy-db/attestation';
4
- export { W as AttestationError } from '../strategy-BtW8fAjz.js';
4
+ export { r as AttestationError } from '../errors-Dz64FA65.js';
5
5
  import '../lazy-builder-ChSqcF5t.js';
6
6
  import '../predicate-BmhBSPCH.js';
7
+ import '../strategy-4M9jo172.js';
7
8
  import '../strategy-BSxFXGzb.js';
8
- import '../index-nP99bXLg.js';
9
+ import '../index-C-SSRIxP.js';
10
+ import '../index-DpU6KWof.js';
9
11
 
10
12
  /** Everything issueAttestationCore needs from the Vault, injected for testability. */
11
13
  interface IssueContext {
@@ -1,21 +1,21 @@
1
1
  import {
2
2
  issueAttestationCore
3
- } from "../chunk-3YWP3WBP.js";
3
+ } from "../chunk-SNMJ7SB3.js";
4
4
  import {
5
5
  getRevokedDocIdsCore,
6
6
  publishRevocationListCore,
7
7
  revokeDocCore,
8
8
  unrevokeDocCore
9
- } from "../chunk-E2CDVKMH.js";
9
+ } from "../chunk-CD2AVTEM.js";
10
10
  import {
11
11
  ATTESTATIONS_COLLECTION
12
- } from "../chunk-IXBIFDEW.js";
12
+ } from "../chunk-TIDXB5DF.js";
13
13
  import "../chunk-FZU343FL.js";
14
- import "../chunk-F3BPIPLS.js";
15
- import "../chunk-YULZKK4F.js";
14
+ import "../chunk-SISBMAPO.js";
15
+ import "../chunk-UNTGHX5A.js";
16
16
  import {
17
17
  AttestationError
18
- } from "../chunk-535SSHBS.js";
18
+ } from "../chunk-ZEGSDPB7.js";
19
19
 
20
20
  // src/attestation/index.ts
21
21
  import { verifyAttestation, decodeQr, verifyRevocationList, isRevoked, signRevocationList } from "@noy-db/attestation";
@@ -90,7 +90,9 @@ __export(crypto_exports, {
90
90
  generateSalt: () => generateSalt,
91
91
  hmacSha256Hex: () => hmacSha256Hex,
92
92
  sha256Hex: () => sha256Hex,
93
+ unwrapCek: () => unwrapCek,
93
94
  unwrapKey: () => unwrapKey,
95
+ wrapCek: () => wrapCek,
94
96
  wrapKey: () => wrapKey
95
97
  });
96
98
  async function deriveKey(passphrase, salt) {
@@ -141,6 +143,39 @@ async function unwrapKey(wrappedBase64, kek) {
141
143
  throw new InvalidKeyError();
142
144
  }
143
145
  }
146
+ async function asKwKey(dek) {
147
+ const rawDek = await subtle.exportKey("raw", dek);
148
+ const hkdfKey = await subtle.importKey("raw", rawDek, "HKDF", false, ["deriveBits"]);
149
+ const salt = new TextEncoder().encode("noydb-cek-wrap");
150
+ const info = new TextEncoder().encode("v1");
151
+ const bits = await subtle.deriveBits(
152
+ { name: "HKDF", hash: "SHA-256", salt, info },
153
+ hkdfKey,
154
+ KEY_BITS
155
+ );
156
+ return subtle.importKey("raw", bits, "AES-KW", false, ["wrapKey", "unwrapKey"]);
157
+ }
158
+ async function wrapCek(cek, dek) {
159
+ const kw = await asKwKey(dek);
160
+ const wrapped = await subtle.wrapKey("raw", cek, kw, "AES-KW");
161
+ return bufferToBase64(wrapped);
162
+ }
163
+ async function unwrapCek(wrappedBase64, dek) {
164
+ const kw = await asKwKey(dek);
165
+ try {
166
+ return await subtle.unwrapKey(
167
+ "raw",
168
+ base64ToBuffer(wrappedBase64),
169
+ kw,
170
+ "AES-KW",
171
+ { name: "AES-GCM", length: KEY_BITS },
172
+ true,
173
+ ["encrypt", "decrypt"]
174
+ );
175
+ } catch {
176
+ throw new InvalidKeyError();
177
+ }
178
+ }
144
179
  async function encrypt(plaintext, dek) {
145
180
  const iv = generateIV();
146
181
  const encoded = new TextEncoder().encode(plaintext);
@@ -373,6 +408,11 @@ var NOYDB_FORMAT_VERSION = 1;
373
408
 
374
409
  // src/blobs/blob-set.ts
375
410
  init_crypto();
411
+
412
+ // src/record-keys/index.ts
413
+ init_crypto();
414
+
415
+ // src/blobs/blob-set.ts
376
416
  init_errors();
377
417
 
378
418
  // src/blobs/mime-magic.ts
@@ -642,6 +682,7 @@ var BlobSet = class {
642
682
  encrypted;
643
683
  userId;
644
684
  maxBlobBytes;
685
+ erasableBlobs;
645
686
  constructor(opts) {
646
687
  this.store = opts.store;
647
688
  this.vault = opts.vault;
@@ -651,6 +692,21 @@ var BlobSet = class {
651
692
  this.encrypted = opts.encrypted;
652
693
  this.userId = opts.userId;
653
694
  this.maxBlobBytes = opts.maxBlobBytes;
695
+ this.erasableBlobs = opts.erasableBlobs === true;
696
+ }
697
+ /**
698
+ * Resolve the key the blob's CHUNKS are encrypted under.
699
+ *
700
+ * - `_cek` present (erasable blob) → unwrap the per-blob content CEK under
701
+ * the `_blob` DEK. Deleting the BlobObject (at `refCount → 0`) makes this
702
+ * key unrecoverable → the chunks are crypto-shredded.
703
+ * - `_cek` absent (legacy) → the `_blob` DEK encrypts chunks directly.
704
+ * - unencrypted vault → `null` (chunks stored as plaintext base64).
705
+ */
706
+ async resolveChunkKey(blob) {
707
+ if (!this.encrypted) return null;
708
+ const blobDEK = await this.getDEK(BLOB_COLLECTION);
709
+ return blob._cek !== void 0 ? await unwrapCek(blob._cek, blobDEK) : blobDEK;
654
710
  }
655
711
  /** The internal collection that holds slot metadata for this collection's blobs. */
656
712
  get slotsCollection() {
@@ -768,12 +824,163 @@ var BlobSet = class {
768
824
  const updated = { ...blob, refCount: blob.refCount + delta };
769
825
  try {
770
826
  await this.writeBlobObject(updated, version);
827
+ return updated.refCount;
828
+ } catch (err) {
829
+ if (err instanceof ConflictError && attempt < MAX_CAS_RETRIES - 1) continue;
830
+ throw err;
831
+ }
832
+ }
833
+ throw new ConflictError(-1);
834
+ }
835
+ /**
836
+ * Release `n` references to a blob and reclaim it at refCount 0 (#365 slice 4).
837
+ *
838
+ * The single reclaim choke point for every reference-drop path — slot
839
+ * delete/overwrite, published-version delete, and `forget()` shred — so the
840
+ * refCount-0 policy is uniform:
841
+ * - **erasable blob** (`_cek` present) → delete the `BlobObject` (the SOLE
842
+ * copy of the wrapped content CEK → chunks permanently undecryptable) and
843
+ * reclaim the chunks. The crypto-shred is EAGER on every path: GDPR erasure
844
+ * must not wait on orphan retention.
845
+ * - **legacy blob** (no `_cek`) → reclaimed only when `reclaimLegacy` (the
846
+ * `forget()` erasure path); otherwise left for deferred GC so the existing
847
+ * `BlobLifecyclePolicy.orphanRetentionDays` semantics are preserved.
848
+ *
849
+ * @returns `'shredded'` (erasable, refCount 0, chunks dead) · `'retainedShared'`
850
+ * (erasable, still referenced) · `'residue'` (legacy — not a crypto-shred).
851
+ */
852
+ async releaseRef(eTag, n, reclaimLegacy) {
853
+ const loaded = await this.loadBlobObject(eTag);
854
+ if (!loaded) return "shredded";
855
+ const erasable = loaded.blob._cek !== void 0;
856
+ const remaining = await this.casUpdateRefCount(eTag, -n);
857
+ if (remaining > 0) return erasable ? "retainedShared" : "residue";
858
+ if (erasable || reclaimLegacy) {
859
+ await this.store.delete(this.vault, BLOB_INDEX_COLLECTION, eTag);
860
+ for (let i = 0; i < loaded.blob.chunkCount; i++) {
861
+ await this.store.delete(this.vault, BLOB_CHUNKS_COLLECTION, `${eTag}_${i}`);
862
+ }
863
+ }
864
+ return erasable ? "shredded" : "residue";
865
+ }
866
+ /**
867
+ * Crypto-shred this record's blob attachments (#365 slice 2) — called by
868
+ * `vault.forget()`.
869
+ *
870
+ * For each distinct eTag the record references (a record may attach the same
871
+ * content under several slot names → several refCount holds): decrement the
872
+ * blob's refCount by that many. When it reaches 0:
873
+ * - **erasable blob** (`_cek` present) → delete the `BlobObject` (the SOLE
874
+ * recoverable copy of the wrapped content CEK → chunks permanently
875
+ * undecryptable) and reclaim the chunk bytes. This is the crypto-shred.
876
+ * - **legacy blob** (no `_cek`) → chunks are under the shared `_blob` DEK and
877
+ * stay decryptable until byte-deleted; we delete the orphaned chunks +
878
+ * index but report it as residue, not a cryptographic erasure.
879
+ * When refCount stays > 0 the content legitimately persists for its other
880
+ * owner — reported as `retainedShared` (or `residue` if legacy).
881
+ *
882
+ * Finally drops the record's slot map, severing the subject's link.
883
+ */
884
+ async shredAllForRecord() {
885
+ const { slots } = await this.loadSlots();
886
+ const slotNames = Object.keys(slots);
887
+ const shredded = [];
888
+ const retainedShared = [];
889
+ const residue = [];
890
+ if (slotNames.length === 0) return { shredded, retainedShared, residue };
891
+ const holds = /* @__PURE__ */ new Map();
892
+ for (const name of slotNames) {
893
+ const eTag = slots[name].eTag;
894
+ holds.set(eTag, (holds.get(eTag) ?? 0) + 1);
895
+ }
896
+ for (const [eTag, n] of holds) {
897
+ const outcome = await this.releaseRef(eTag, n, true);
898
+ if (outcome === "shredded") shredded.push(eTag);
899
+ else if (outcome === "retainedShared") retainedShared.push(eTag);
900
+ else residue.push(eTag);
901
+ }
902
+ await this.store.delete(this.vault, this.slotsCollection, this.recordId);
903
+ return { shredded, retainedShared, residue };
904
+ }
905
+ /** CAS retry loop for an arbitrary BlobObject mutation. */
906
+ async casUpdateBlobObject(eTag, mutate) {
907
+ for (let attempt = 0; attempt < MAX_CAS_RETRIES; attempt++) {
908
+ const result = await this.loadBlobObject(eTag);
909
+ if (!result) throw new NotFoundError(`BlobObject ${eTag} not found`);
910
+ try {
911
+ await this.writeBlobObject(mutate(result.blob), result.version);
771
912
  return;
772
913
  } catch (err) {
773
914
  if (err instanceof ConflictError && attempt < MAX_CAS_RETRIES - 1) continue;
774
915
  throw err;
775
916
  }
776
917
  }
918
+ throw new ConflictError(-1);
919
+ }
920
+ /**
921
+ * Migrate this record's LEGACY blobs (no `_cek`, chunks under the shared
922
+ * `_blob` DEK) to per-blob content CEKs so they become crypto-shreddable
923
+ * (#365 slice 3). Returns the eTags migrated vs. already-erasable.
924
+ *
925
+ * **Explicit maintenance pass** (mirrors the record-CEK migration posture):
926
+ * re-encrypts the existing compressed chunks IN PLACE under a fresh content
927
+ * CEK — preserving the eTag, chunkCount, chunkSize, and compression — then
928
+ * flips the `_cek` discriminant. Crash-safe + idempotent via `_cekPending`:
929
+ * 1. persist the wrapped content CEK in `_cekPending` (readers ignore it →
930
+ * the blob stays readable under the `_blob` DEK; the key survives a crash);
931
+ * 2. re-encrypt each chunk under the content CEK (a resume reads an
932
+ * already-migrated chunk under the content CEK, else under the `_blob` DEK);
933
+ * 3. promote `_cekPending` → `_cek` (atomic flip). Reads now use the CEK.
934
+ * A re-run after a crash resumes from whichever phase was reached.
935
+ *
936
+ * Dedup-safe: migrating a shared blob (refCount > 1) re-keys it for every
937
+ * referencer at once; a non-erasable collection still reads it (it unwraps
938
+ * `_cek` under the `_blob` DEK it holds).
939
+ */
940
+ async migrate() {
941
+ const migrated = [];
942
+ const alreadyErasable = [];
943
+ if (!this.encrypted) return { migrated, alreadyErasable };
944
+ const blobDEK = await this.getDEK(BLOB_COLLECTION);
945
+ const { slots } = await this.loadSlots();
946
+ const eTags = new Set(Object.values(slots).map((s) => s.eTag));
947
+ for (const eTag of eTags) {
948
+ const loaded = await this.loadBlobObject(eTag);
949
+ if (!loaded) continue;
950
+ const blob = loaded.blob;
951
+ if (blob._cek !== void 0) {
952
+ alreadyErasable.push(eTag);
953
+ continue;
954
+ }
955
+ let contentCek;
956
+ if (blob._cekPending !== void 0) {
957
+ contentCek = await unwrapCek(blob._cekPending, blobDEK);
958
+ } else {
959
+ contentCek = await generateDEK();
960
+ const wrapped = await wrapCek(contentCek, blobDEK);
961
+ await this.casUpdateBlobObject(eTag, (b) => ({ ...b, _cekPending: wrapped }));
962
+ }
963
+ for (let i = 0; i < blob.chunkCount; i++) {
964
+ let raw;
965
+ try {
966
+ raw = await this.readChunk(eTag, i, blob.chunkCount, blobDEK);
967
+ } catch {
968
+ raw = await this.readChunk(eTag, i, blob.chunkCount, contentCek);
969
+ }
970
+ if (!raw) {
971
+ throw new NotFoundError(
972
+ `Blob chunk ${i}/${blob.chunkCount} missing for eTag "${eTag}" during migration`
973
+ );
974
+ }
975
+ await this.writeChunk(eTag, i, blob.chunkCount, raw, contentCek);
976
+ }
977
+ await this.casUpdateBlobObject(eTag, (b) => {
978
+ const { _cekPending, ...rest } = b;
979
+ return _cekPending === void 0 ? b : { ...rest, _cek: _cekPending };
980
+ });
981
+ migrated.push(eTag);
982
+ }
983
+ return { migrated, alreadyErasable };
777
984
  }
778
985
  // ─── Chunk I/O (with AAD binding) ─────────────────────────────────
779
986
  async writeChunk(eTag, index, chunkCount, chunk, dek) {
@@ -845,10 +1052,10 @@ var BlobSet = class {
845
1052
  }
846
1053
  // ─── Fetch all chunks for a blob ──────────────────────────────────
847
1054
  async fetchAllChunks(blob) {
848
- const blobDEK = this.encrypted ? await this.getDEK(BLOB_COLLECTION) : null;
1055
+ const chunkKey = await this.resolveChunkKey(blob);
849
1056
  const chunks = [];
850
1057
  for (let i = 0; i < blob.chunkCount; i++) {
851
- const chunk = await this.readChunk(blob.eTag, i, blob.chunkCount, blobDEK);
1058
+ const chunk = await this.readChunk(blob.eTag, i, blob.chunkCount, chunkKey);
852
1059
  if (!chunk) {
853
1060
  throw new NotFoundError(
854
1061
  `Blob chunk ${i}/${blob.chunkCount} missing for eTag "${blob.eTag}" on record "${this.recordId}"`
@@ -895,6 +1102,13 @@ var BlobSet = class {
895
1102
  const { bytes: compressed, algorithm } = shouldCompress ? await compressBytes(data) : { bytes: data, algorithm: "none" };
896
1103
  const chunkSize = this.effectiveChunkSize(opts);
897
1104
  const chunkCount = Math.max(1, Math.ceil(compressed.byteLength / chunkSize));
1105
+ let chunkKey = blobDEK;
1106
+ let wrappedCek;
1107
+ if (blobDEK && this.erasableBlobs) {
1108
+ const contentCek = await generateDEK();
1109
+ wrappedCek = await wrapCek(contentCek, blobDEK);
1110
+ chunkKey = contentCek;
1111
+ }
898
1112
  for (let i = 0; i < chunkCount; i++) {
899
1113
  const start = i * chunkSize;
900
1114
  await this.writeChunk(
@@ -902,7 +1116,7 @@ var BlobSet = class {
902
1116
  i,
903
1117
  chunkCount,
904
1118
  compressed.subarray(start, start + chunkSize),
905
- blobDEK
1119
+ chunkKey
906
1120
  );
907
1121
  }
908
1122
  await this.writeBlobObject({
@@ -914,7 +1128,8 @@ var BlobSet = class {
914
1128
  chunkCount,
915
1129
  ...mimeType !== void 0 ? { mimeType } : {},
916
1130
  createdAt: (/* @__PURE__ */ new Date()).toISOString(),
917
- refCount: 1
1131
+ refCount: 1,
1132
+ ...wrappedCek !== void 0 ? { _cek: wrappedCek } : {}
918
1133
  });
919
1134
  }
920
1135
  const uploaderUserId = opts?.uploadedBy ?? this.userId;
@@ -936,7 +1151,7 @@ var BlobSet = class {
936
1151
  if (this._deferredRefDecrement) {
937
1152
  const oldETag = this._deferredRefDecrement;
938
1153
  this._deferredRefDecrement = void 0;
939
- await this.casUpdateRefCount(oldETag, -1).catch(() => {
1154
+ await this.releaseRef(oldETag, 1, false).catch(() => {
940
1155
  });
941
1156
  }
942
1157
  }
@@ -967,15 +1182,15 @@ var BlobSet = class {
967
1182
  * Decrements refCount on the blob. Chunks are GC'd by `vault.blobGC()`.
968
1183
  */
969
1184
  async delete(slotName) {
970
- let eTagToDecrement;
1185
+ let eTagToRelease;
971
1186
  await this.casUpdateSlots((slots) => {
972
1187
  if (!(slotName in slots)) return null;
973
- eTagToDecrement = slots[slotName].eTag;
1188
+ eTagToRelease = slots[slotName].eTag;
974
1189
  delete slots[slotName];
975
1190
  return slots;
976
1191
  });
977
- if (eTagToDecrement) {
978
- await this.casUpdateRefCount(eTagToDecrement, -1).catch(() => {
1192
+ if (eTagToRelease) {
1193
+ await this.releaseRef(eTagToRelease, 1, false).catch(() => {
979
1194
  });
980
1195
  }
981
1196
  }
@@ -1058,7 +1273,7 @@ var BlobSet = class {
1058
1273
  await this.writeVersionRecord(slotName, record);
1059
1274
  await this.casUpdateRefCount(slot.eTag, 1);
1060
1275
  if (existing && existing.eTag !== slot.eTag) {
1061
- await this.casUpdateRefCount(existing.eTag, -1).catch(() => {
1276
+ await this.releaseRef(existing.eTag, 1, false).catch(() => {
1062
1277
  });
1063
1278
  }
1064
1279
  }
@@ -1101,7 +1316,7 @@ var BlobSet = class {
1101
1316
  const record = await this.loadVersionRecord(slotName, label);
1102
1317
  if (!record) return;
1103
1318
  await this.deleteVersionRecord(slotName, label);
1104
- await this.casUpdateRefCount(record.eTag, -1).catch(() => {
1319
+ await this.releaseRef(record.eTag, 1, false).catch(() => {
1105
1320
  });
1106
1321
  }
1107
1322
  /**