@noy-db/hub 0.8.0 → 0.9.0-pre.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 (567) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/README.md +8 -8
  3. package/codemods/0.4.0-pre.json +1 -1
  4. package/codemods/0.8.0-pre.json +1 -1
  5. package/dist/api-6EFD43KN.js +18 -0
  6. package/dist/as/index.js +33 -23
  7. package/dist/as/index.js.map +1 -1
  8. package/dist/at/index.js +8 -8
  9. package/dist/attestation/index.js +18 -18
  10. package/dist/{backup-YE2VQ26S.js → backup-RJBFQSHE.js} +92 -31
  11. package/dist/backup-RJBFQSHE.js.map +1 -0
  12. package/dist/blobs/index.js +12 -12
  13. package/dist/broker/index.js +19 -11
  14. package/dist/broker/index.js.map +1 -1
  15. package/dist/by/index.js +2 -2
  16. package/dist/capsule/contract.d.ts +1 -1
  17. package/dist/capsule/contract.js +6 -6
  18. package/dist/capsule/enclave-aes/broker/proof.d.ts +12 -3
  19. package/dist/capsule/enclave-aes/crypto.d.ts +18 -0
  20. package/dist/capsule/enclave-aes/index.d.ts +3 -3
  21. package/dist/capsule/enclave-aes/index.js +46 -14
  22. package/dist/capsule/enclave-aes/index.js.map +1 -1
  23. package/dist/capsule/index.d.ts +2 -2
  24. package/dist/capsule/plumbing/record-codec.d.ts +7 -0
  25. package/dist/{capsule-VOLX3QRQ.js → capsule-6LJAVQNM.js} +14 -8
  26. package/dist/cargo/index.js +35 -35
  27. package/dist/{chunk-GZT3NQRA.js → chunk-25FXU6WS.js} +8 -2
  28. package/dist/chunk-25FXU6WS.js.map +1 -0
  29. package/dist/{chunk-OYW3I5M4.js → chunk-2DOCDOPL.js} +6 -6
  30. package/dist/chunk-2DX4JCRI.js +1 -0
  31. package/dist/{chunk-FLPCETP6.js → chunk-2LBS62AC.js} +2 -2
  32. package/dist/{chunk-WXE4W2U6.js → chunk-2ST3WA3C.js} +4 -4
  33. package/dist/{chunk-DQESF6RP.js → chunk-3G3GOGZZ.js} +50 -40
  34. package/dist/chunk-3G3GOGZZ.js.map +1 -0
  35. package/dist/{chunk-O2IMQSNA.js → chunk-3YBIVLTC.js} +2 -2
  36. package/dist/{chunk-LGNDFRYC.js → chunk-4CFHL5RY.js} +1 -1
  37. package/dist/chunk-4CFHL5RY.js.map +1 -0
  38. package/dist/{chunk-DIZLQVAA.js → chunk-4CHM2TRS.js} +2 -2
  39. package/dist/{chunk-V7ADQF5O.js → chunk-4CUJLEOA.js} +4 -4
  40. package/dist/{chunk-3EWS67C7.js → chunk-4TG2ITRW.js} +2 -2
  41. package/dist/{chunk-HS554XAF.js → chunk-5HQFROZS.js} +2 -2
  42. package/dist/{chunk-IUBMZPHM.js → chunk-5ZVE3N5C.js} +5 -6
  43. package/dist/chunk-5ZVE3N5C.js.map +1 -0
  44. package/dist/{chunk-PP3K67AJ.js → chunk-654RE5YC.js} +3 -3
  45. package/dist/{chunk-FOEDQATO.js → chunk-66GD7XXU.js} +2 -2
  46. package/dist/{chunk-BNWA3WG5.js → chunk-72FQ46VW.js} +3 -3
  47. package/dist/{chunk-EYG2CY2X.js → chunk-7JPA3LIH.js} +11 -11
  48. package/dist/chunk-7JPA3LIH.js.map +1 -0
  49. package/dist/{chunk-JQYKPKG6.js → chunk-7K42TSCY.js} +4 -4
  50. package/dist/{chunk-BPWYQ25R.js → chunk-7Q6IU3R7.js} +4 -4
  51. package/dist/{chunk-BPWYQ25R.js.map → chunk-7Q6IU3R7.js.map} +1 -1
  52. package/dist/{chunk-T7IR4N2S.js → chunk-7UHLO4ZN.js} +37 -2
  53. package/dist/chunk-7UHLO4ZN.js.map +1 -0
  54. package/dist/{chunk-UEFOQH74.js → chunk-ADCXTW7L.js} +2 -2
  55. package/dist/{chunk-MBMTND6D.js → chunk-AGGPT4UE.js} +2 -2
  56. package/dist/{chunk-RB4DOPGZ.js → chunk-AKIEBFIJ.js} +10 -10
  57. package/dist/{chunk-VHBKYN2J.js → chunk-B3B6HV5S.js} +2 -2
  58. package/dist/{chunk-JWWYRR4Q.js → chunk-B6EWMGFX.js} +2 -2
  59. package/dist/{chunk-H7JBY4P7.js → chunk-B7Y2BRQA.js} +14 -14
  60. package/dist/chunk-B7Y2BRQA.js.map +1 -0
  61. package/dist/{chunk-4CIQDWRB.js → chunk-BFJE2GPP.js} +14 -8
  62. package/dist/{chunk-4CIQDWRB.js.map → chunk-BFJE2GPP.js.map} +1 -1
  63. package/dist/{chunk-WPOYWFSE.js → chunk-BJRKXNFP.js} +7 -7
  64. package/dist/{chunk-H427H63K.js → chunk-BPQ5CRJF.js} +2 -2
  65. package/dist/{chunk-VFHCKG5M.js → chunk-BVRJYMFZ.js} +3 -3
  66. package/dist/{chunk-244QBK7Z.js → chunk-C4XV3PSJ.js} +4 -4
  67. package/dist/{chunk-244QBK7Z.js.map → chunk-C4XV3PSJ.js.map} +1 -1
  68. package/dist/{chunk-SMV2HRDU.js → chunk-DFC4WTJW.js} +2 -2
  69. package/dist/{chunk-5A4345TG.js → chunk-DMIEKD24.js} +3 -3
  70. package/dist/{chunk-TKVUE4JF.js → chunk-DQAXA2GK.js} +9 -9
  71. package/dist/{chunk-AL6ML4LA.js → chunk-DWCFGF2K.js} +5 -5
  72. package/dist/{chunk-Y3LPTBG7.js → chunk-E2C6FFSI.js} +6 -9
  73. package/dist/chunk-E2C6FFSI.js.map +1 -0
  74. package/dist/{chunk-LNSVGRHO.js → chunk-EQ6C2ZPT.js} +17 -51
  75. package/dist/chunk-EQ6C2ZPT.js.map +1 -0
  76. package/dist/chunk-EZOFTI4K.js +60 -0
  77. package/dist/chunk-EZOFTI4K.js.map +1 -0
  78. package/dist/{chunk-PD64727P.js → chunk-FMINS2B6.js} +2 -2
  79. package/dist/chunk-FMINS2B6.js.map +1 -0
  80. package/dist/{chunk-QBLT6POL.js → chunk-FPF5HRBE.js} +2 -2
  81. package/dist/{chunk-UA372JHH.js → chunk-FZVCZEVI.js} +3 -3
  82. package/dist/chunk-FZVCZEVI.js.map +1 -0
  83. package/dist/{chunk-FFWI7UH7.js → chunk-GAGT3YZN.js} +1 -1
  84. package/dist/chunk-GAGT3YZN.js.map +1 -0
  85. package/dist/{chunk-5WWDGFOS.js → chunk-GIQJGXV7.js} +2 -2
  86. package/dist/{chunk-V3RWOOSO.js → chunk-GYZICGRU.js} +4 -4
  87. package/dist/chunk-GYZICGRU.js.map +1 -0
  88. package/dist/{chunk-BVCUTXE3.js → chunk-H334G6KU.js} +2 -2
  89. package/dist/{chunk-AEQGFRU4.js → chunk-HE7EAHGS.js} +3 -3
  90. package/dist/chunk-HKB4HZDU.js +74 -0
  91. package/dist/chunk-HKB4HZDU.js.map +1 -0
  92. package/dist/{chunk-4V3Q35WG.js → chunk-ICF3TIGY.js} +3 -3
  93. package/dist/{chunk-3L2NBKDR.js → chunk-IF2M43G4.js} +2 -2
  94. package/dist/{chunk-37EPTBBR.js → chunk-IKPQ2GGB.js} +46 -4
  95. package/dist/chunk-IKPQ2GGB.js.map +1 -0
  96. package/dist/{chunk-DHHGL42E.js → chunk-IKS2CPAG.js} +27 -11
  97. package/dist/chunk-IKS2CPAG.js.map +1 -0
  98. package/dist/{chunk-3A5DUZ56.js → chunk-IMIQAGR7.js} +6 -6
  99. package/dist/{chunk-3A5DUZ56.js.map → chunk-IMIQAGR7.js.map} +1 -1
  100. package/dist/{chunk-A4XMIZT3.js → chunk-IQAJ4OR6.js} +41 -6
  101. package/dist/chunk-IQAJ4OR6.js.map +1 -0
  102. package/dist/{chunk-IUT3GWP3.js → chunk-IUD7WU67.js} +17 -93
  103. package/dist/chunk-IUD7WU67.js.map +1 -0
  104. package/dist/{chunk-AUKKUPVB.js → chunk-IVLRPRXM.js} +2 -2
  105. package/dist/{chunk-GUZET4SG.js → chunk-JAQHWHUN.js} +4 -4
  106. package/dist/chunk-JAQHWHUN.js.map +1 -0
  107. package/dist/{chunk-Y2RKVFKR.js → chunk-K4JSTGXT.js} +2 -2
  108. package/dist/{chunk-EJLV62NI.js → chunk-KN4LUMH6.js} +2 -2
  109. package/dist/{chunk-23D6M6VM.js → chunk-KZA3DITX.js} +4 -4
  110. package/dist/{chunk-E2N2T5ZO.js → chunk-L2VM64HK.js} +2 -2
  111. package/dist/chunk-L4UL4IAR.js +55 -0
  112. package/dist/chunk-L4UL4IAR.js.map +1 -0
  113. package/dist/{chunk-UIYESRD6.js → chunk-LUCQY3OM.js} +10 -10
  114. package/dist/{chunk-UIYESRD6.js.map → chunk-LUCQY3OM.js.map} +1 -1
  115. package/dist/{chunk-O46CHQT7.js → chunk-MAQBYBUX.js} +4 -4
  116. package/dist/{chunk-EZOAKKTB.js → chunk-MBPZMZVB.js} +2 -2
  117. package/dist/{chunk-XQRFSKYM.js → chunk-MCNNZBG7.js} +2 -2
  118. package/dist/{chunk-YRXFFWG4.js → chunk-MLVPMDOZ.js} +2 -2
  119. package/dist/{chunk-5FE75J4S.js → chunk-MMCN7TLK.js} +5 -5
  120. package/dist/{chunk-MXOQ5JCG.js → chunk-MRCR7ZMC.js} +686 -202
  121. package/dist/chunk-MRCR7ZMC.js.map +1 -0
  122. package/dist/{chunk-SYNY3VB5.js → chunk-NCTN2FW4.js} +2 -2
  123. package/dist/{chunk-4T3SE27M.js → chunk-ND6S2DKC.js} +2 -2
  124. package/dist/{chunk-3XJQBBZD.js → chunk-NTVKHQ3L.js} +2 -2
  125. package/dist/{chunk-RHVMZSUU.js → chunk-NV4OESHC.js} +1 -1
  126. package/dist/chunk-NV4OESHC.js.map +1 -0
  127. package/dist/chunk-NXQEOC3X.js +40 -0
  128. package/dist/chunk-NXQEOC3X.js.map +1 -0
  129. package/dist/{chunk-Q4UHJ5SN.js → chunk-O2VQ3K36.js} +2 -2
  130. package/dist/{chunk-HW7CMKUG.js → chunk-OFD2HD6F.js} +1 -1
  131. package/dist/{chunk-HW7CMKUG.js.map → chunk-OFD2HD6F.js.map} +1 -1
  132. package/dist/{chunk-2GHDLTPE.js → chunk-OGKMRIIJ.js} +2 -2
  133. package/dist/{chunk-N7EVQD5S.js → chunk-ONZ3B5EW.js} +4 -4
  134. package/dist/{chunk-VKI2EB3N.js → chunk-OOPSMQX5.js} +3 -3
  135. package/dist/{chunk-VMV5SBE4.js → chunk-OYEBSWLE.js} +5 -5
  136. package/dist/{chunk-JDEYF3PJ.js → chunk-P6FATPXQ.js} +2 -2
  137. package/dist/chunk-P6FATPXQ.js.map +1 -0
  138. package/dist/{chunk-VVOLDVIR.js → chunk-PLTIJDQN.js} +2 -2
  139. package/dist/{chunk-OKSTSITU.js → chunk-PR7ILCIH.js} +3 -3
  140. package/dist/{chunk-7R2Q7CPL.js → chunk-QE3TLZ6Z.js} +7 -7
  141. package/dist/{chunk-G2MVBDFP.js → chunk-QFW4MYGN.js} +39 -9
  142. package/dist/chunk-QFW4MYGN.js.map +1 -0
  143. package/dist/{chunk-6QVKPHBF.js → chunk-QHG7GQKM.js} +2 -2
  144. package/dist/chunk-QJNAHPVT.js +91 -0
  145. package/dist/chunk-QJNAHPVT.js.map +1 -0
  146. package/dist/{chunk-LIOVX5TJ.js → chunk-QT5ITL25.js} +3 -3
  147. package/dist/{chunk-IMQKWR46.js → chunk-R2ZULFXU.js} +4 -5
  148. package/dist/chunk-R2ZULFXU.js.map +1 -0
  149. package/dist/{chunk-Q2XRFWOI.js → chunk-RRTQAQ3N.js} +2 -2
  150. package/dist/{chunk-H23XHRTT.js → chunk-RUE6TCES.js} +809 -101
  151. package/dist/chunk-RUE6TCES.js.map +1 -0
  152. package/dist/chunk-RWFQVNXR.js +24 -0
  153. package/dist/chunk-RWFQVNXR.js.map +1 -0
  154. package/dist/{chunk-2PVXF5CS.js → chunk-SALY3LIJ.js} +3 -3
  155. package/dist/{chunk-JOSPH3E5.js → chunk-SBAR5JQ6.js} +2 -2
  156. package/dist/{chunk-N7UDP5VU.js → chunk-SCH2F7R2.js} +7 -7
  157. package/dist/{chunk-MXKI4ABF.js → chunk-SOOAW6HK.js} +3 -3
  158. package/dist/{chunk-VQDZYB2B.js → chunk-T4VTRKCY.js} +3 -3
  159. package/dist/{chunk-VQDZYB2B.js.map → chunk-T4VTRKCY.js.map} +1 -1
  160. package/dist/{chunk-TEHHROZL.js → chunk-T5EXREMW.js} +5 -5
  161. package/dist/{chunk-M5B2W6YY.js → chunk-TDJVQTXD.js} +3 -3
  162. package/dist/{chunk-QMWY2FDS.js → chunk-THQ3BHLM.js} +2 -2
  163. package/dist/{chunk-VAORSCSU.js → chunk-TLIFNRU5.js} +2 -2
  164. package/dist/chunk-TLIFNRU5.js.map +1 -0
  165. package/dist/{chunk-FVH5QYY2.js → chunk-TRHUNPXP.js} +2 -2
  166. package/dist/{chunk-EGVJ7TM4.js → chunk-UL6MTRMJ.js} +8 -9
  167. package/dist/chunk-UL6MTRMJ.js.map +1 -0
  168. package/dist/chunk-UNL6YGL5.js +169 -0
  169. package/dist/chunk-UNL6YGL5.js.map +1 -0
  170. package/dist/{chunk-747G6CT3.js → chunk-UORWAG7K.js} +2 -2
  171. package/dist/{chunk-XSPFDUDG.js → chunk-V7AKGAXY.js} +314 -77
  172. package/dist/chunk-V7AKGAXY.js.map +1 -0
  173. package/dist/{chunk-TZZBXPZK.js → chunk-VLQ6KT7F.js} +2 -2
  174. package/dist/{chunk-NCO25JZO.js → chunk-VP37VUKQ.js} +4 -4
  175. package/dist/{chunk-52MGURXO.js → chunk-WBUHHMLN.js} +2 -2
  176. package/dist/{chunk-EZGV6F47.js → chunk-WRLWEYHY.js} +7 -1
  177. package/dist/chunk-WRLWEYHY.js.map +1 -0
  178. package/dist/{chunk-2MG3SW7Q.js → chunk-X6Z2SIRF.js} +2 -2
  179. package/dist/{chunk-U2FZNEWJ.js → chunk-XLKWF3L4.js} +8 -6
  180. package/dist/{chunk-U2FZNEWJ.js.map → chunk-XLKWF3L4.js.map} +1 -1
  181. package/dist/{chunk-5UMK7GRI.js → chunk-XPNJH7GN.js} +5 -5
  182. package/dist/{chunk-KZXDLBY6.js → chunk-XPW7T2GN.js} +5 -5
  183. package/dist/{chunk-SV2PM2OY.js → chunk-XX4R7TUB.js} +1 -1
  184. package/dist/chunk-XX4R7TUB.js.map +1 -0
  185. package/dist/{chunk-NBQ3KK6X.js → chunk-Y55XHMQB.js} +4 -4
  186. package/dist/chunk-Y55XHMQB.js.map +1 -0
  187. package/dist/{chunk-5KC7QYEC.js → chunk-YH4OUOSI.js} +33 -7
  188. package/dist/chunk-YH4OUOSI.js.map +1 -0
  189. package/dist/{chunk-FFJFE4T7.js → chunk-YJGKOSQD.js} +2 -2
  190. package/dist/{chunk-2AFX33YA.js → chunk-Z3STG43F.js} +3 -3
  191. package/dist/chunk-Z3STG43F.js.map +1 -0
  192. package/dist/{chunk-OIEO4WDL.js → chunk-ZD7WFMV2.js} +2 -2
  193. package/dist/chunk-ZD7WFMV2.js.map +1 -0
  194. package/dist/{chunk-42ALPZ2B.js → chunk-ZF6JECDT.js} +4 -4
  195. package/dist/{chunk-42ALPZ2B.js.map → chunk-ZF6JECDT.js.map} +1 -1
  196. package/dist/{chunk-4JPMZTJY.js → chunk-ZF7KNSLU.js} +2 -2
  197. package/dist/{chunk-2ODVB6LZ.js → chunk-ZGKODRGB.js} +2 -2
  198. package/dist/{chunk-JIBUPZHA.js → chunk-ZNEKQFGF.js} +4 -4
  199. package/dist/{chunk-DLD5LGDS.js → chunk-ZUTUNVFD.js} +3 -3
  200. package/dist/{chunk-JSMTXZR3.js → chunk-ZWMOHANW.js} +8 -6
  201. package/dist/chunk-ZWMOHANW.js.map +1 -0
  202. package/dist/{chunk-MILI22XQ.js → chunk-ZZZ4VCY2.js} +10 -10
  203. package/dist/chunk-ZZZ4VCY2.js.map +1 -0
  204. package/dist/classified/index.js +5 -5
  205. package/dist/{classified-marker-SIYKUU5L.js → classified-marker-WKP33U2R.js} +3 -3
  206. package/dist/collection-facade-COSGZKLC.js +41 -0
  207. package/dist/{computed-FAD7SED4.js → computed-WN6V53ZV.js} +3 -3
  208. package/dist/consent/index.js +8 -8
  209. package/dist/cover/index.js +8 -8
  210. package/dist/coverage/index.js +1 -1
  211. package/dist/custody/index.js +12 -11
  212. package/dist/{dead-filter-4F3LWYKH.js → dead-filter-43WL3Y5H.js} +10 -10
  213. package/dist/debug/index.js +7 -7
  214. package/dist/delegation-5UWT4JGT.js +26 -0
  215. package/dist/derivations/index.js +24 -23
  216. package/dist/derive-IL5JNLEE.js +20 -0
  217. package/dist/directory/index.js +9 -9
  218. package/dist/{dispatch-JDZNGEB3.js → dispatch-LOQQD5JK.js} +20 -20
  219. package/dist/{dispatch-H4HV32AM.js → dispatch-SHKTG57L.js} +5 -5
  220. package/dist/executor-6PQ7WAGV.js +35 -0
  221. package/dist/executor-6ZPQA6HS.js +8 -0
  222. package/dist/executor-OXRA64TY.js +8 -0
  223. package/dist/export-accessible-XG3FKJWW.js +22 -0
  224. package/dist/extract-partition-33747NY5.js +35 -0
  225. package/dist/{fanout-sidecar-L7NHPIOC.js → fanout-sidecar-NEB6IYV7.js} +8 -8
  226. package/dist/find-VW543G3J.js +10 -0
  227. package/dist/forget/index.js +25 -8
  228. package/dist/forget/index.js.map +1 -1
  229. package/dist/guards/index.js +4 -4
  230. package/dist/history/index.js +15 -13
  231. package/dist/history/index.js.map +1 -1
  232. package/dist/i18n/index.js +13 -13
  233. package/dist/index.d.ts +9 -6
  234. package/dist/index.js +126 -110
  235. package/dist/index.js.map +1 -1
  236. package/dist/indexing/index.js +6 -6
  237. package/dist/introspection/index.js +15 -11
  238. package/dist/issue-4ZPSY44M.js +19 -0
  239. package/dist/kernel/cache/index.d.ts +1 -1
  240. package/dist/kernel/collection.d.ts +86 -6
  241. package/dist/kernel/constants.d.ts +7 -0
  242. package/dist/kernel/errors.d.ts +42 -4
  243. package/dist/kernel/export-scope.d.ts +40 -0
  244. package/dist/kernel/merge-authority.d.ts +5 -1
  245. package/dist/kernel/noydb.d.ts +118 -21
  246. package/dist/kernel/put-many-atomic.d.ts +1 -1
  247. package/dist/kernel/query/live/live.d.ts +2 -1
  248. package/dist/kernel/query/sort-key.d.ts +0 -2
  249. package/dist/kernel/rejection-seal.d.ts +13 -0
  250. package/dist/kernel/sync-wiring.d.ts +55 -0
  251. package/dist/kernel/tx-write-gate.d.ts +2 -4
  252. package/dist/kernel/types.d.ts +463 -14
  253. package/dist/kernel/validation.d.ts +0 -10
  254. package/dist/kernel/vault.d.ts +42 -4
  255. package/dist/kernel/via/reconcile.d.ts +1 -42
  256. package/dist/{ledger-5ZMGE44K.js → ledger-MZ25UFT2.js} +10 -10
  257. package/dist/liberate-OJIP2ZFX.js +25 -0
  258. package/dist/{link-set-MFXC24VK.js → link-set-4FRRAVTH.js} +10 -10
  259. package/dist/{managed-secret-MFTFT22X.js → managed-secret-SQWO2EUR.js} +9 -9
  260. package/dist/materialized-views/index.js +26 -26
  261. package/dist/{migrate-cek-DZRFFOHW.js → migrate-cek-JWEM4RP6.js} +2 -2
  262. package/dist/money/index.js +5 -5
  263. package/dist/noydb-U62OVKXB.js +100 -0
  264. package/dist/on/index.js +25 -0
  265. package/dist/overlay-views/index.js +4 -4
  266. package/dist/periods/index.js +11 -11
  267. package/dist/pod/index.js +71 -67
  268. package/dist/{pod-handle-A3LET7NO.js → pod-handle-R6Y4MILX.js} +8 -8
  269. package/dist/policy/index.js +9 -9
  270. package/dist/port/as/active.d.ts +4 -0
  271. package/dist/port/as/index.d.ts +1 -0
  272. package/dist/port/by/index.d.ts +14 -5
  273. package/dist/port/on/index.d.ts +26 -0
  274. package/dist/port/to/index.d.ts +1 -1
  275. package/dist/port/with/admission-authority.d.ts +34 -0
  276. package/dist/port/with/broker-strategy.d.ts +24 -0
  277. package/dist/port/with/coverage-strategy.d.ts +17 -1
  278. package/dist/port/with/formats-strategy.d.ts +34 -1
  279. package/dist/port/with/lookup-strategy.d.ts +85 -4
  280. package/dist/port/with/rejection-courier.d.ts +37 -0
  281. package/dist/port/with/restore-host.d.ts +33 -0
  282. package/dist/port/with/service-bus.d.ts +20 -1
  283. package/dist/port/with/team-strategy.d.ts +2 -2
  284. package/dist/port/with/write-hooks.d.ts +2 -0
  285. package/dist/portability/index.js +8 -8
  286. package/dist/{post-register-7ND27CF2.js → post-register-GRVQHBOH.js} +6 -6
  287. package/dist/query/all/index.js +16 -16
  288. package/dist/query/index.js +8 -8
  289. package/dist/query/live/index.js +7 -7
  290. package/dist/query/reduce/index.js +10 -10
  291. package/dist/query/relate/index.js +10 -10
  292. package/dist/reduce/index.js +8 -8
  293. package/dist/register-YJ5YLQ36.js +30 -0
  294. package/dist/registry-ICOHBQFD.js +8 -0
  295. package/dist/registry-MJ7MWCSW.js +35 -0
  296. package/dist/registry-MVEKKGWL.js +23 -0
  297. package/dist/registry-XP744FAP.js +8 -0
  298. package/dist/request-withdrawal-LSU4G6W3.js +28 -0
  299. package/dist/restore-to-DVBHAQAA.js +66 -0
  300. package/dist/restore-to-DVBHAQAA.js.map +1 -0
  301. package/dist/{reveal-B2TLP4JQ.js → reveal-AIHOIK2N.js} +7 -7
  302. package/dist/revoke-QUT7WWG3.js +24 -0
  303. package/dist/satellites/index.js +1 -1
  304. package/dist/schema-update/index.js +2 -2
  305. package/dist/sealed-record/index.js +11 -11
  306. package/dist/search/index.js +4 -4
  307. package/dist/{seed-XNSE4U3S.js → seed-GFLA4FCK.js} +136 -27
  308. package/dist/seed-GFLA4FCK.js.map +1 -0
  309. package/dist/sequence/index.js +8 -8
  310. package/dist/session/index.js +8 -8
  311. package/dist/shadow/index.js +2 -2
  312. package/dist/signer-NYR4I3FO.js +23 -0
  313. package/dist/snapshots/index.js +9 -9
  314. package/dist/{stale-6GCFMOOR.js → stale-PIJPAL5T.js} +9 -9
  315. package/dist/storage-VH6SPXHC.js +21 -0
  316. package/dist/{store-coordination-provider-C4BPT5XF.js → store-coordination-provider-2KSHCOPU.js} +9 -9
  317. package/dist/sync/index.js +19 -13
  318. package/dist/sync/index.js.map +1 -1
  319. package/dist/team/index.js +17 -15
  320. package/dist/tiers/index.js +10 -10
  321. package/dist/to/index.js +2 -2
  322. package/dist/transactions/index.js +3 -3
  323. package/dist/util/index.js +1 -1
  324. package/dist/vault-head/index.js +8 -8
  325. package/dist/{verify-UKALW7C2.js → verify-PCFS4PNS.js} +7 -7
  326. package/dist/via/classified/presets.d.ts +29 -0
  327. package/dist/via/classified/resolve.d.ts +7 -0
  328. package/dist/via/geo/binding.d.ts +0 -4
  329. package/dist/via/lookup/index.d.ts +32 -0
  330. package/dist/via/money/binding.d.ts +0 -9
  331. package/dist/walk-OZCN6LJS.js +20 -0
  332. package/dist/with-audit/attestation/strategy.d.ts +2 -1
  333. package/dist/with-audit/attestation/vault-facade.d.ts +7 -0
  334. package/dist/with-audit/forget/completeness.d.ts +66 -0
  335. package/dist/with-audit/forget/index.d.ts +2 -0
  336. package/dist/with-audit/forget/strategy.d.ts +65 -0
  337. package/dist/with-audit/guards/types.d.ts +2 -0
  338. package/dist/with-audit/periods/periods.d.ts +0 -9
  339. package/dist/with-audit/periods/reserved-collections.d.ts +7 -0
  340. package/dist/with-audit/portability/request-withdrawal.d.ts +0 -1
  341. package/dist/with-audit/portability/withdraw-accessible.d.ts +0 -1
  342. package/dist/with-audit/tiers/index.d.ts +6 -6
  343. package/dist/with-audit/tiers/strategy.d.ts +19 -0
  344. package/dist/with-cargo/extract-partition.d.ts +0 -46
  345. package/dist/with-commit/history/history.d.ts +16 -0
  346. package/dist/with-commit/history/restore-to.d.ts +40 -0
  347. package/dist/with-commit/numbering/index.d.ts +0 -2
  348. package/dist/with-commit/tx/transaction.d.ts +2 -24
  349. package/dist/with-commit/vault-head/strategy.d.ts +7 -0
  350. package/dist/with-fork/snapshots/noydb-facade.d.ts +7 -0
  351. package/dist/with-formula/derivations/trigger-match.d.ts +8 -5
  352. package/dist/with-formula/materialized-views/emit-memo.d.ts +0 -2
  353. package/dist/with-lookup/embeddings/index.d.ts +1 -2
  354. package/dist/with-lookup/indexing/collection-facade.d.ts +1 -15
  355. package/dist/with-lookup/indexing/eager-indexes.d.ts +2 -1
  356. package/dist/with-lookup/search/collection-facade.d.ts +0 -12
  357. package/dist/with-party/broker/index.d.ts +2 -2
  358. package/dist/with-party/broker/seed.d.ts +29 -10
  359. package/dist/with-party/custody/strategy.d.ts +2 -2
  360. package/dist/with-party/policy/noydb-facade.d.ts +1 -31
  361. package/dist/with-party/team/delegation.d.ts +93 -7
  362. package/dist/with-party/team/echo-secret.d.ts +0 -2
  363. package/dist/with-party/team/index.d.ts +2 -0
  364. package/dist/with-party/team/keyring.d.ts +133 -24
  365. package/dist/with-party/team/magic-link-grant.d.ts +11 -1
  366. package/dist/with-party/team/noydb-facade.d.ts +19 -2
  367. package/dist/with-party/team/reserved-secret-collections.d.ts +10 -8
  368. package/dist/with-party/team/roster-tag.d.ts +42 -1
  369. package/dist/with-party/team/tiers.d.ts +36 -5
  370. package/dist/with-pod/backup.d.ts +9 -17
  371. package/dist/with-shape/blobs/blob-set.d.ts +23 -0
  372. package/dist/with-shape/blobs/legacy-sweep.d.ts +16 -0
  373. package/dist/with-shape/introspection/describe.d.ts +1 -2
  374. package/dist/with-shape/introspection/index.d.ts +1 -0
  375. package/dist/with-shape/introspection/types.d.ts +2 -1
  376. package/dist/with-shape/schema-update/fence.d.ts +7 -0
  377. package/dist/with-sync/active.d.ts +28 -1
  378. package/dist/with-sync/engine.d.ts +88 -2
  379. package/dist/with-sync/index.d.ts +1 -0
  380. package/dist/with-sync/reserved-mirror.d.ts +112 -0
  381. package/dist/with-sync/strategy.d.ts +9 -0
  382. package/dist/with-sync/tab-write-relay.d.ts +0 -10
  383. package/dist/withdraw-accessible-MTFP7OIB.js +25 -0
  384. package/dist/withdraw-accessible-MTFP7OIB.js.map +1 -0
  385. package/package.json +3 -3
  386. package/dist/api-OS747DS4.js +0 -18
  387. package/dist/backup-YE2VQ26S.js.map +0 -1
  388. package/dist/chunk-2AFX33YA.js.map +0 -1
  389. package/dist/chunk-2RH777HH.js +0 -126
  390. package/dist/chunk-2RH777HH.js.map +0 -1
  391. package/dist/chunk-37EPTBBR.js.map +0 -1
  392. package/dist/chunk-5KC7QYEC.js.map +0 -1
  393. package/dist/chunk-7XMHMVTS.js +0 -20
  394. package/dist/chunk-7XMHMVTS.js.map +0 -1
  395. package/dist/chunk-A4XMIZT3.js.map +0 -1
  396. package/dist/chunk-DHHGL42E.js.map +0 -1
  397. package/dist/chunk-DQESF6RP.js.map +0 -1
  398. package/dist/chunk-EGVJ7TM4.js.map +0 -1
  399. package/dist/chunk-EYG2CY2X.js.map +0 -1
  400. package/dist/chunk-EZGV6F47.js.map +0 -1
  401. package/dist/chunk-FFWI7UH7.js.map +0 -1
  402. package/dist/chunk-G2MVBDFP.js.map +0 -1
  403. package/dist/chunk-GUZET4SG.js.map +0 -1
  404. package/dist/chunk-GZT3NQRA.js.map +0 -1
  405. package/dist/chunk-H23XHRTT.js.map +0 -1
  406. package/dist/chunk-H7JBY4P7.js.map +0 -1
  407. package/dist/chunk-IMQKWR46.js.map +0 -1
  408. package/dist/chunk-IUBMZPHM.js.map +0 -1
  409. package/dist/chunk-IUT3GWP3.js.map +0 -1
  410. package/dist/chunk-JDEYF3PJ.js.map +0 -1
  411. package/dist/chunk-JSMTXZR3.js.map +0 -1
  412. package/dist/chunk-LGNDFRYC.js.map +0 -1
  413. package/dist/chunk-LNSVGRHO.js.map +0 -1
  414. package/dist/chunk-MILI22XQ.js.map +0 -1
  415. package/dist/chunk-MXOQ5JCG.js.map +0 -1
  416. package/dist/chunk-NBQ3KK6X.js.map +0 -1
  417. package/dist/chunk-OIEO4WDL.js.map +0 -1
  418. package/dist/chunk-PD64727P.js.map +0 -1
  419. package/dist/chunk-RHVMZSUU.js.map +0 -1
  420. package/dist/chunk-SV2PM2OY.js.map +0 -1
  421. package/dist/chunk-T7IR4N2S.js.map +0 -1
  422. package/dist/chunk-UA372JHH.js.map +0 -1
  423. package/dist/chunk-UBSFPGVJ.js +0 -1
  424. package/dist/chunk-V3RWOOSO.js.map +0 -1
  425. package/dist/chunk-VAORSCSU.js.map +0 -1
  426. package/dist/chunk-XSPFDUDG.js.map +0 -1
  427. package/dist/chunk-Y3LPTBG7.js.map +0 -1
  428. package/dist/collection-facade-CS7CA2XO.js +0 -47
  429. package/dist/delegation-NANZDG4N.js +0 -102
  430. package/dist/delegation-NANZDG4N.js.map +0 -1
  431. package/dist/derive-XLOJVXPU.js +0 -20
  432. package/dist/executor-FMPVN6DT.js +0 -35
  433. package/dist/executor-LBBBRTN5.js +0 -8
  434. package/dist/executor-OSRZST2U.js +0 -8
  435. package/dist/export-accessible-RAOJAAU5.js +0 -22
  436. package/dist/extract-partition-JD5CUSTG.js +0 -37
  437. package/dist/find-JRN4RNQ5.js +0 -10
  438. package/dist/issue-YIVBZUTH.js +0 -19
  439. package/dist/liberate-WZSZM2W6.js +0 -24
  440. package/dist/noydb-ITIGNKUF.js +0 -96
  441. package/dist/register-DT5HZ2LZ.js +0 -30
  442. package/dist/registry-BHRZGZHF.js +0 -8
  443. package/dist/registry-ET6ZFFWA.js +0 -34
  444. package/dist/registry-HXFGLGTG.js +0 -8
  445. package/dist/registry-THCPDEOD.js +0 -23
  446. package/dist/request-withdrawal-AV2MJJKY.js +0 -30
  447. package/dist/revoke-6DWIEOCV.js +0 -24
  448. package/dist/seed-XNSE4U3S.js.map +0 -1
  449. package/dist/signer-MHGW3OIL.js +0 -23
  450. package/dist/storage-BYN5LO6Z.js +0 -21
  451. package/dist/walk-4VPK7AS4.js +0 -20
  452. package/dist/withdraw-accessible-HL7GACUE.js +0 -27
  453. /package/dist/{api-OS747DS4.js.map → api-6EFD43KN.js.map} +0 -0
  454. /package/dist/{capsule-VOLX3QRQ.js.map → capsule-6LJAVQNM.js.map} +0 -0
  455. /package/dist/{chunk-OYW3I5M4.js.map → chunk-2DOCDOPL.js.map} +0 -0
  456. /package/dist/{chunk-UBSFPGVJ.js.map → chunk-2DX4JCRI.js.map} +0 -0
  457. /package/dist/{chunk-FLPCETP6.js.map → chunk-2LBS62AC.js.map} +0 -0
  458. /package/dist/{chunk-WXE4W2U6.js.map → chunk-2ST3WA3C.js.map} +0 -0
  459. /package/dist/{chunk-O2IMQSNA.js.map → chunk-3YBIVLTC.js.map} +0 -0
  460. /package/dist/{chunk-DIZLQVAA.js.map → chunk-4CHM2TRS.js.map} +0 -0
  461. /package/dist/{chunk-V7ADQF5O.js.map → chunk-4CUJLEOA.js.map} +0 -0
  462. /package/dist/{chunk-3EWS67C7.js.map → chunk-4TG2ITRW.js.map} +0 -0
  463. /package/dist/{chunk-HS554XAF.js.map → chunk-5HQFROZS.js.map} +0 -0
  464. /package/dist/{chunk-PP3K67AJ.js.map → chunk-654RE5YC.js.map} +0 -0
  465. /package/dist/{chunk-FOEDQATO.js.map → chunk-66GD7XXU.js.map} +0 -0
  466. /package/dist/{chunk-BNWA3WG5.js.map → chunk-72FQ46VW.js.map} +0 -0
  467. /package/dist/{chunk-JQYKPKG6.js.map → chunk-7K42TSCY.js.map} +0 -0
  468. /package/dist/{chunk-UEFOQH74.js.map → chunk-ADCXTW7L.js.map} +0 -0
  469. /package/dist/{chunk-MBMTND6D.js.map → chunk-AGGPT4UE.js.map} +0 -0
  470. /package/dist/{chunk-RB4DOPGZ.js.map → chunk-AKIEBFIJ.js.map} +0 -0
  471. /package/dist/{chunk-VHBKYN2J.js.map → chunk-B3B6HV5S.js.map} +0 -0
  472. /package/dist/{chunk-JWWYRR4Q.js.map → chunk-B6EWMGFX.js.map} +0 -0
  473. /package/dist/{chunk-WPOYWFSE.js.map → chunk-BJRKXNFP.js.map} +0 -0
  474. /package/dist/{chunk-H427H63K.js.map → chunk-BPQ5CRJF.js.map} +0 -0
  475. /package/dist/{chunk-VFHCKG5M.js.map → chunk-BVRJYMFZ.js.map} +0 -0
  476. /package/dist/{chunk-SMV2HRDU.js.map → chunk-DFC4WTJW.js.map} +0 -0
  477. /package/dist/{chunk-5A4345TG.js.map → chunk-DMIEKD24.js.map} +0 -0
  478. /package/dist/{chunk-TKVUE4JF.js.map → chunk-DQAXA2GK.js.map} +0 -0
  479. /package/dist/{chunk-AL6ML4LA.js.map → chunk-DWCFGF2K.js.map} +0 -0
  480. /package/dist/{chunk-QBLT6POL.js.map → chunk-FPF5HRBE.js.map} +0 -0
  481. /package/dist/{chunk-5WWDGFOS.js.map → chunk-GIQJGXV7.js.map} +0 -0
  482. /package/dist/{chunk-BVCUTXE3.js.map → chunk-H334G6KU.js.map} +0 -0
  483. /package/dist/{chunk-AEQGFRU4.js.map → chunk-HE7EAHGS.js.map} +0 -0
  484. /package/dist/{chunk-4V3Q35WG.js.map → chunk-ICF3TIGY.js.map} +0 -0
  485. /package/dist/{chunk-3L2NBKDR.js.map → chunk-IF2M43G4.js.map} +0 -0
  486. /package/dist/{chunk-AUKKUPVB.js.map → chunk-IVLRPRXM.js.map} +0 -0
  487. /package/dist/{chunk-Y2RKVFKR.js.map → chunk-K4JSTGXT.js.map} +0 -0
  488. /package/dist/{chunk-EJLV62NI.js.map → chunk-KN4LUMH6.js.map} +0 -0
  489. /package/dist/{chunk-23D6M6VM.js.map → chunk-KZA3DITX.js.map} +0 -0
  490. /package/dist/{chunk-E2N2T5ZO.js.map → chunk-L2VM64HK.js.map} +0 -0
  491. /package/dist/{chunk-O46CHQT7.js.map → chunk-MAQBYBUX.js.map} +0 -0
  492. /package/dist/{chunk-EZOAKKTB.js.map → chunk-MBPZMZVB.js.map} +0 -0
  493. /package/dist/{chunk-XQRFSKYM.js.map → chunk-MCNNZBG7.js.map} +0 -0
  494. /package/dist/{chunk-YRXFFWG4.js.map → chunk-MLVPMDOZ.js.map} +0 -0
  495. /package/dist/{chunk-5FE75J4S.js.map → chunk-MMCN7TLK.js.map} +0 -0
  496. /package/dist/{chunk-SYNY3VB5.js.map → chunk-NCTN2FW4.js.map} +0 -0
  497. /package/dist/{chunk-4T3SE27M.js.map → chunk-ND6S2DKC.js.map} +0 -0
  498. /package/dist/{chunk-3XJQBBZD.js.map → chunk-NTVKHQ3L.js.map} +0 -0
  499. /package/dist/{chunk-Q4UHJ5SN.js.map → chunk-O2VQ3K36.js.map} +0 -0
  500. /package/dist/{chunk-2GHDLTPE.js.map → chunk-OGKMRIIJ.js.map} +0 -0
  501. /package/dist/{chunk-N7EVQD5S.js.map → chunk-ONZ3B5EW.js.map} +0 -0
  502. /package/dist/{chunk-VKI2EB3N.js.map → chunk-OOPSMQX5.js.map} +0 -0
  503. /package/dist/{chunk-VMV5SBE4.js.map → chunk-OYEBSWLE.js.map} +0 -0
  504. /package/dist/{chunk-VVOLDVIR.js.map → chunk-PLTIJDQN.js.map} +0 -0
  505. /package/dist/{chunk-OKSTSITU.js.map → chunk-PR7ILCIH.js.map} +0 -0
  506. /package/dist/{chunk-7R2Q7CPL.js.map → chunk-QE3TLZ6Z.js.map} +0 -0
  507. /package/dist/{chunk-6QVKPHBF.js.map → chunk-QHG7GQKM.js.map} +0 -0
  508. /package/dist/{chunk-LIOVX5TJ.js.map → chunk-QT5ITL25.js.map} +0 -0
  509. /package/dist/{chunk-Q2XRFWOI.js.map → chunk-RRTQAQ3N.js.map} +0 -0
  510. /package/dist/{chunk-2PVXF5CS.js.map → chunk-SALY3LIJ.js.map} +0 -0
  511. /package/dist/{chunk-JOSPH3E5.js.map → chunk-SBAR5JQ6.js.map} +0 -0
  512. /package/dist/{chunk-N7UDP5VU.js.map → chunk-SCH2F7R2.js.map} +0 -0
  513. /package/dist/{chunk-MXKI4ABF.js.map → chunk-SOOAW6HK.js.map} +0 -0
  514. /package/dist/{chunk-TEHHROZL.js.map → chunk-T5EXREMW.js.map} +0 -0
  515. /package/dist/{chunk-M5B2W6YY.js.map → chunk-TDJVQTXD.js.map} +0 -0
  516. /package/dist/{chunk-QMWY2FDS.js.map → chunk-THQ3BHLM.js.map} +0 -0
  517. /package/dist/{chunk-FVH5QYY2.js.map → chunk-TRHUNPXP.js.map} +0 -0
  518. /package/dist/{chunk-747G6CT3.js.map → chunk-UORWAG7K.js.map} +0 -0
  519. /package/dist/{chunk-TZZBXPZK.js.map → chunk-VLQ6KT7F.js.map} +0 -0
  520. /package/dist/{chunk-NCO25JZO.js.map → chunk-VP37VUKQ.js.map} +0 -0
  521. /package/dist/{chunk-52MGURXO.js.map → chunk-WBUHHMLN.js.map} +0 -0
  522. /package/dist/{chunk-2MG3SW7Q.js.map → chunk-X6Z2SIRF.js.map} +0 -0
  523. /package/dist/{chunk-5UMK7GRI.js.map → chunk-XPNJH7GN.js.map} +0 -0
  524. /package/dist/{chunk-KZXDLBY6.js.map → chunk-XPW7T2GN.js.map} +0 -0
  525. /package/dist/{chunk-FFJFE4T7.js.map → chunk-YJGKOSQD.js.map} +0 -0
  526. /package/dist/{chunk-4JPMZTJY.js.map → chunk-ZF7KNSLU.js.map} +0 -0
  527. /package/dist/{chunk-2ODVB6LZ.js.map → chunk-ZGKODRGB.js.map} +0 -0
  528. /package/dist/{chunk-JIBUPZHA.js.map → chunk-ZNEKQFGF.js.map} +0 -0
  529. /package/dist/{chunk-DLD5LGDS.js.map → chunk-ZUTUNVFD.js.map} +0 -0
  530. /package/dist/{classified-marker-SIYKUU5L.js.map → classified-marker-WKP33U2R.js.map} +0 -0
  531. /package/dist/{collection-facade-CS7CA2XO.js.map → collection-facade-COSGZKLC.js.map} +0 -0
  532. /package/dist/{computed-FAD7SED4.js.map → computed-WN6V53ZV.js.map} +0 -0
  533. /package/dist/{dead-filter-4F3LWYKH.js.map → dead-filter-43WL3Y5H.js.map} +0 -0
  534. /package/dist/{derive-XLOJVXPU.js.map → delegation-5UWT4JGT.js.map} +0 -0
  535. /package/dist/{executor-FMPVN6DT.js.map → derive-IL5JNLEE.js.map} +0 -0
  536. /package/dist/{dispatch-JDZNGEB3.js.map → dispatch-LOQQD5JK.js.map} +0 -0
  537. /package/dist/{dispatch-H4HV32AM.js.map → dispatch-SHKTG57L.js.map} +0 -0
  538. /package/dist/{executor-LBBBRTN5.js.map → executor-6PQ7WAGV.js.map} +0 -0
  539. /package/dist/{executor-OSRZST2U.js.map → executor-6ZPQA6HS.js.map} +0 -0
  540. /package/dist/{export-accessible-RAOJAAU5.js.map → executor-OXRA64TY.js.map} +0 -0
  541. /package/dist/{extract-partition-JD5CUSTG.js.map → export-accessible-XG3FKJWW.js.map} +0 -0
  542. /package/dist/{find-JRN4RNQ5.js.map → extract-partition-33747NY5.js.map} +0 -0
  543. /package/dist/{fanout-sidecar-L7NHPIOC.js.map → fanout-sidecar-NEB6IYV7.js.map} +0 -0
  544. /package/dist/{issue-YIVBZUTH.js.map → find-VW543G3J.js.map} +0 -0
  545. /package/dist/{ledger-5ZMGE44K.js.map → issue-4ZPSY44M.js.map} +0 -0
  546. /package/dist/{liberate-WZSZM2W6.js.map → ledger-MZ25UFT2.js.map} +0 -0
  547. /package/dist/{link-set-MFXC24VK.js.map → liberate-OJIP2ZFX.js.map} +0 -0
  548. /package/dist/{managed-secret-MFTFT22X.js.map → link-set-4FRRAVTH.js.map} +0 -0
  549. /package/dist/{noydb-ITIGNKUF.js.map → managed-secret-SQWO2EUR.js.map} +0 -0
  550. /package/dist/{migrate-cek-DZRFFOHW.js.map → migrate-cek-JWEM4RP6.js.map} +0 -0
  551. /package/dist/{register-DT5HZ2LZ.js.map → noydb-U62OVKXB.js.map} +0 -0
  552. /package/dist/{pod-handle-A3LET7NO.js.map → pod-handle-R6Y4MILX.js.map} +0 -0
  553. /package/dist/{post-register-7ND27CF2.js.map → post-register-GRVQHBOH.js.map} +0 -0
  554. /package/dist/{registry-BHRZGZHF.js.map → register-YJ5YLQ36.js.map} +0 -0
  555. /package/dist/{registry-ET6ZFFWA.js.map → registry-ICOHBQFD.js.map} +0 -0
  556. /package/dist/{registry-HXFGLGTG.js.map → registry-MJ7MWCSW.js.map} +0 -0
  557. /package/dist/{registry-THCPDEOD.js.map → registry-MVEKKGWL.js.map} +0 -0
  558. /package/dist/{request-withdrawal-AV2MJJKY.js.map → registry-XP744FAP.js.map} +0 -0
  559. /package/dist/{revoke-6DWIEOCV.js.map → request-withdrawal-LSU4G6W3.js.map} +0 -0
  560. /package/dist/{reveal-B2TLP4JQ.js.map → reveal-AIHOIK2N.js.map} +0 -0
  561. /package/dist/{signer-MHGW3OIL.js.map → revoke-QUT7WWG3.js.map} +0 -0
  562. /package/dist/{stale-6GCFMOOR.js.map → signer-NYR4I3FO.js.map} +0 -0
  563. /package/dist/{storage-BYN5LO6Z.js.map → stale-PIJPAL5T.js.map} +0 -0
  564. /package/dist/{walk-4VPK7AS4.js.map → storage-VH6SPXHC.js.map} +0 -0
  565. /package/dist/{store-coordination-provider-C4BPT5XF.js.map → store-coordination-provider-2KSHCOPU.js.map} +0 -0
  566. /package/dist/{verify-UKALW7C2.js.map → verify-PCFS4PNS.js.map} +0 -0
  567. /package/dist/{withdraw-accessible-HL7GACUE.js.map → walk-OZCN6LJS.js.map} +0 -0
@@ -1,34 +1,4 @@
1
- import type { VaultPolicy, ReAuthOperation, NoydbPolicyApi, NoydbPolicyDeps, NoydbPolicyFactory } from '../../kernel/types.js';
2
- export declare class NoydbPolicy implements NoydbPolicyApi {
3
- private readonly deps;
4
- constructor(deps: NoydbPolicyDeps);
5
- /**
6
- * Touch the policy enforcer for a vault (records activity, resets
7
- * idle timer). Also touches the legacy session timer. No-op if no enforcer.
8
- */
9
- touchPolicy(vault?: string): void;
10
- /**
11
- * Check that a policy-guarded operation is permitted.
12
- * Throws `SessionPolicyError` if re-auth is required.
13
- */
14
- checkPolicyOperation(vault: string, op: ReAuthOperation): void;
15
- /**
16
- * Read the active policy for a vault. Loads from `_meta/policy` on
17
- * first call; subsequent calls hit the in-memory cache. Throws
18
- * `ValidationError` if the vault has not been opened.
19
- */
20
- getPolicy(vault: string): Promise<VaultPolicy>;
21
- /**
22
- * Replace the policy document at `_meta/policy` and update the
23
- * in-memory cache. Gated by the `enroll-user` policy (a policy
24
- * change is fundamentally a privilege-management action).
25
- */
26
- updatePolicy(vault: string, override: Partial<VaultPolicy>): Promise<VaultPolicy>;
27
- /** Read or persist the vault policy at `_meta/policy` on first open. */
28
- bootstrapPolicy(vault: string, opts?: {
29
- skipManagedCheck?: boolean;
30
- }): Promise<void>;
31
- }
1
+ import type { NoydbPolicyFactory } from '../../kernel/types.js';
32
2
  /**
33
3
  * Factory that builds the `NoydbPolicy` service. `createNoydb()`
34
4
  * pre-resolves this via a dynamic import (mirrors
@@ -19,11 +19,23 @@
19
19
  * collection, // collection name OR null for "every collection"
20
20
  * record, // optional specific record id
21
21
  * until, // ISO timestamp — token expires at this instant
22
- * wrappedDek, // base64 AES-KW-wrapped tier DEK, wrapped under target KEK
22
+ * wrappedDek, // base64 AES-KW-wrapped tier DEK, under the token's content key
23
+ * sealedCek, // that content key, RSA-OAEP-sealed to the target's inbox public half
23
24
  * createdAt, // ISO timestamp
24
25
  * }
25
26
  * ```
26
27
  *
28
+ * ## Cross-user (core#65)
29
+ *
30
+ * The wrap key is a per-token CONTENT KEY, not anybody's KEK: the tier DEKs are
31
+ * AES-KW-wrapped under it exactly as they used to be under a KEK, and the key
32
+ * itself is RSA-OAEP-sealed to the target's INBOX PUBLIC HALF (core#96 mints
33
+ * that pair for every grantee, private half sealed under a DEK only that
34
+ * member's own KEK unwraps). So a grantor delegates to somebody whose secret it
35
+ * does not know — the thing this module could not do — while the slot NAMES
36
+ * stay readable to any member holding the `_delegations` DEK, which is what
37
+ * makes an audit enumeration possible without making the keys usable.
38
+ *
27
39
  * The ciphertext is stored as a normal noy-db envelope — the
28
40
  * `_delegations` collection has its own DEK shared across all vault
29
41
  * users, so an operator can enumerate active delegations for audit
@@ -52,12 +64,57 @@ export interface DelegationToken {
52
64
  readonly toUser: string;
53
65
  readonly fromUser: string;
54
66
  readonly tier: number;
55
- /** Collection name or `null` for all collections. */
67
+ /**
68
+ * Collection name, or `null` for a COLLECTION-WIDE token — see
69
+ * {@link DelegationToken.wrappedDeks} for what that means and what it cannot
70
+ * mean.
71
+ */
56
72
  readonly collection: string | null;
57
73
  /** Optional specific record id scope. */
58
74
  readonly record?: string;
59
75
  readonly until: string;
60
- readonly wrappedDek: string;
76
+ /**
77
+ * The delegated tier DEK for {@link DelegationToken.collection}, wrapped
78
+ * under the target's KEK. Present on a per-collection token; absent on a
79
+ * collection-wide one, which carries {@link DelegationToken.wrappedDeks}.
80
+ */
81
+ readonly wrappedDek?: string;
82
+ /**
83
+ * A collection-wide token's payload: `<collection>#<tier>` → wrapped DEK, one
84
+ * entry per collection the grantor held at that tier (core#56).
85
+ *
86
+ * ## ⛔ Why a MAP and not one key
87
+ *
88
+ * Every collection has its OWN tier DEK — measured, `docs#1` and `ledger#1`
89
+ * are different keys. The original design tried to express "every collection"
90
+ * as a single DEK under a wildcard slot `__any#<tier>`, which cannot work: one
91
+ * key decrypts one collection. A wildcard accepted at the access gate would
92
+ * have passed the check and then failed decryption — a gate that says yes
93
+ * followed by a crypto error. `__any#` is gone; every entry here merges under
94
+ * its REAL `<collection>#<tier>` key, so `assertTierAccess` needs no wildcard
95
+ * and gains no new privilege surface.
96
+ *
97
+ * ## ⚠️ "Every collection" means "every collection AS OF ISSUE TIME"
98
+ *
99
+ * This is a SNAPSHOT. A collection created after the token was issued is not
100
+ * in it and will not be granted by it — the grantor did not hold its DEK to
101
+ * wrap. That is a real limit of the shape, not an oversight, and it is stated
102
+ * here because a caller who reads "all collections" will otherwise assume
103
+ * otherwise.
104
+ */
105
+ readonly wrappedDeks?: Readonly<Record<string, string>>;
106
+ /**
107
+ * core#65 — the token's CONTENT KEY, RSA-OAEP-sealed to the target's inbox
108
+ * public half. `wrappedDek` / `wrappedDeks` are AES-KW-wrapped under it, so
109
+ * only the target can unwrap them, and only they can: the matching private
110
+ * half is sealed in their keyring under a DEK their own KEK unwraps.
111
+ *
112
+ * Absent on a token written before core#65, whose wraps are under the
113
+ * grantor's own KEK — those still load for a target that shares that KEK
114
+ * (the only case that ever worked) and are skipped for anyone else, exactly
115
+ * as before.
116
+ */
117
+ readonly sealedCek?: string;
61
118
  readonly createdAt: string;
62
119
  }
63
120
  export interface IssueDelegationOptions {
@@ -68,11 +125,40 @@ export interface IssueDelegationOptions {
68
125
  readonly until: Date | string;
69
126
  }
70
127
  /**
71
- * Build and persist a delegation token. The caller must hold a tier-N
72
- * DEK and must have already located the target user's keyring file
73
- * (so the `wrappedDek` can be re-wrapped against their KEK).
128
+ * Build and persist a delegation token. The caller must hold a tier-N DEK; the
129
+ * target must have a keyring in this vault with an inbox key pair (core#96).
130
+ *
131
+ * core#65 — the wraps are keyed to a per-token content key sealed to that
132
+ * pair, so the grantor needs nothing of the target's but their PUBLIC half.
133
+ */
134
+ export declare function issueDelegation(store: NoydbStore, vault: string, grantor: UnlockedKeyring, delegationsDek: EnclaveKey, opts: IssueDelegationOptions): Promise<DelegationToken>;
135
+ /**
136
+ * ## Why the vault calls this EXPLICITLY, and never from `openVault` (core#56)
137
+ *
138
+ * The module header above describes a runtime that scans on every open. Doing
139
+ * that automatically would call `getDEK('_delegations')`, which MINTS a DEK when
140
+ * absent and persists the keyring — so merely opening a vault would write to it.
141
+ * Worse, on a vault whose shared `_delegations` DEK this user does not hold, it
142
+ * would mint a WRONG one and then fail to decrypt every token under it.
143
+ *
144
+ * ⛔ A read path must not have that side effect. `Vault.refreshDelegations()`
145
+ * therefore lists first, returns `[]` when nothing is written, and looks the DEK
146
+ * up WITHOUT minting — which also makes the module header's "at each open"
147
+ * cheap to honour, and its "periodic intervals (tracked by the caller)" is what
148
+ * an explicit method is.
149
+ *
150
+ * ## Cross-user delegation (core#65) — and the one thing it still needs
151
+ *
152
+ * A token's wraps are keyed to a per-token content key sealed to the target's
153
+ * INBOX PUBLIC HALF, so any member can be a target. Opening one therefore needs
154
+ * that member's inbox PRIVATE half, which is sealed in their keyring file under
155
+ * `deks[INBOX_KEY_ID]` — so this function reads the caller's own keyring file,
156
+ * once, and only when a sealed token is actually addressed to them.
157
+ *
158
+ * ⚠️ A pre-core#65 token (no `sealedCek`) is wrapped under the GRANTOR's KEK and
159
+ * still requires `user.kek`; it is skipped for anyone who does not share it,
160
+ * which is the behaviour those tokens were written under.
74
161
  */
75
- export declare function issueDelegation(store: NoydbStore, vault: string, grantor: UnlockedKeyring, targetKek: EnclaveKey | null, delegationsDek: EnclaveKey, opts: IssueDelegationOptions): Promise<DelegationToken>;
76
162
  /**
77
163
  * Enumerate every live (non-expired) delegation addressed to `toUser`
78
164
  * and merge the unwrapped tier DEKs into their keyring. Returns the
@@ -31,8 +31,6 @@
31
31
  import { type EchoSecretParts } from '../../capsule/index.js';
32
32
  import type { KeyringEchoBlock } from '../../kernel/types.js';
33
33
  import type { NoydbDeviceSeal } from './device-seal.js';
34
- /** Same iteration floor as the KEK (spec resolved question 1). */
35
- export declare const ECHO_KDF_ITERATIONS = 600000;
36
34
  export type EchoRevealChoice = {
37
35
  readonly kind: 'portable';
38
36
  } | {
@@ -18,6 +18,8 @@ export { TeamNotEnabledError } from '../../kernel/errors.js';
18
18
  export type { UnlockedKeyring } from './keyring.js';
19
19
  export { loadKeyring, createOwnerKeyring, grant, revoke, changeSecret, listUsers, listUsersWithEnvelopes, ensureCollectionDEK, persistKeyring, updateKeyringIdentity, buildRecipientKeyringFile, } from './keyring.js';
20
20
  export type { PodRecipient, ListUsersOptions } from './keyring.js';
21
+ export type { RotateResult, QuarantineResult, RosterVerifyResult } from './keyring.js';
22
+ export type { DelegationToken, IssueDelegationOptions } from './delegation.js';
21
23
  export type { LoadKeyringOptions, CreateOwnerKeyringOptions, RotateKeysOptions, ChangeSecretOptions, } from './keyring.js';
22
24
  export { enrollAuthenticator, removeAuthenticator, revokeAuthenticator, // #1445 — the three-step revocation; removeAuthenticator alone only hides
23
25
  updateAuthenticator, findAuthenticator, } from './authenticators.js';
@@ -85,17 +85,6 @@ export interface UnlockedKeyring {
85
85
  }
86
86
  /** Mint a fresh wrapped-canary string. Deterministic for a given KEK. */
87
87
  export declare function mintKeyringCanary(kek: EnclaveKey): Promise<string>;
88
- /**
89
- * The vault roster key held by this keyring, or `null` when the keyring
90
- * carries none.
91
- *
92
- * Null is expected on the resume-style paths (`kek: null` sessions, tier-3
93
- * PIN resume, plaintext mode) — none of which may write a keyring file.
94
- * Every stamping site null-guards this exactly as it guards `kek`: minting a
95
- * file without a verifiable `roster_tag` would be worse than refusing, since
96
- * it is indistinguishable on the next load from a store having stripped it.
97
- */
98
- export declare function rosterKeyOf(keyring: UnlockedKeyring): EnclaveKey | null;
99
88
  /**
100
89
  * Shared wording for the stamping-site guards — mirrors the `kek` guard's shape.
101
90
  * Exported so every roster-stamping site in the hub raises ONE error with one
@@ -110,8 +99,18 @@ export interface LoadKeyringOptions {
110
99
  * That user's secret — a single string for a standard keyring, or the
111
100
  * structured 3-part {@link EchoSecretParts} for an echo keyring (spec
112
101
  * #940, AG-1: a single string can never unlock an echo keyring).
102
+ * One of `secret` / `kek` is required.
113
103
  */
114
- readonly secret: string | EchoSecretParts;
104
+ readonly secret?: string | EchoSecretParts;
105
+ /**
106
+ * core#96 — a KEK this session already HOLDS, instead of re-deriving one
107
+ * from a secret. The in-session roster reload (core#82) uses it: the secret
108
+ * the vault was opened with is stale after an in-session `rotateSecret`,
109
+ * and 600K PBKDF2 iterations are not needed to adopt a file this KEK
110
+ * already opens. A file re-keyed under this member by somebody else fails
111
+ * the canary and reports `InvalidKeyError` — a defined event, not a hang.
112
+ */
113
+ readonly kek?: EnclaveKey;
115
114
  }
116
115
  /**
117
116
  * KDF dispatch for tier-1 unlock (spec #940). An echo keyring accepts
@@ -120,6 +119,7 @@ export interface LoadKeyringOptions {
120
119
  */
121
120
  export declare function deriveKekForKeyring(file: KeyringFile, secret: string | EchoSecretParts, salt: Uint8Array): Promise<EnclaveKey>;
122
121
  /** Parse a raw keyring envelope. Single sanctioned reader of `_data` for keyring files. */
122
+ /** Parse a keyring envelope's body. Exported for `keyring-mirror.ts` (core#75) — the one non-crypto reader. */
123
123
  export declare function parseKeyringEnvelope(envelope: EncryptedEnvelope): KeyringFile;
124
124
  /** Fetch + parse a user's keyring file; undefined when the row is missing. */
125
125
  export declare function readKeyringFile(store: NoydbStore, vault: string, userId: string): Promise<{
@@ -196,8 +196,18 @@ export interface CreateOwnerKeyringOptions extends SecretPolicy {
196
196
  export declare function createOwnerKeyring(store: NoydbStore, vault: string, opts: CreateOwnerKeyringOptions): Promise<UnlockedKeyring>;
197
197
  /** Grant access to a new user. Caller must have grant privilege. */
198
198
  export declare function grant(store: NoydbStore, vault: string, callerKeyring: UnlockedKeyring, options: GrantOptions): Promise<void>;
199
+ /**
200
+ * Reserved DEK-map slots that are KEYS, not collections, and can never be
201
+ * rotated — `rotateKeys` refuses each by name. Every caller that derives a
202
+ * rotation scope from a DEK map (`revoke`, `quarantineKeyring`) strips these
203
+ * first. ⛔ Kept as ONE set rather than a filter per caller: `quarantineKeyring`
204
+ * stripped only `_roster` and broke the moment the owner keyring gained an
205
+ * inbox key (core#65), which is the second time this list grew and a caller
206
+ * was missed.
207
+ */
208
+ export declare const NON_ROTATABLE_SLOTS: ReadonlySet<string>;
199
209
  /** Revoke a user's access. Optionally rotate keys for affected collections. */
200
- export declare function revoke(store: NoydbStore, vault: string, callerKeyring: UnlockedKeyring, options: RevokeOptions): Promise<void>;
210
+ export declare function revoke(store: NoydbStore, vault: string, callerKeyring: UnlockedKeyring, options: RevokeOptions): Promise<RevokeResult>;
201
211
  /** What {@link verifyRoster} found. */
202
212
  export interface RosterVerifyResult {
203
213
  /**
@@ -316,7 +326,19 @@ export declare function quarantineKeyring(store: NoydbStore, vault: string, call
316
326
  * @throws `ValidationError` when the diff is empty (nothing to update).
317
327
  *
318
328
  */
319
- export declare function updateKeyringIdentity(store: NoydbStore, vault: string, callerKeyring: UnlockedKeyring, options: UpdateUserOptions): Promise<void>;
329
+ /** What `updateKeyringIdentity` hands back to the kernel (core#96). */
330
+ export interface UpdateKeyringResult {
331
+ /** The role moved. The kernel re-registers the member with a broker host, if one is configured. */
332
+ readonly roleChanged: boolean;
333
+ /**
334
+ * A fresh `_broker_member` DEK, delivered through the inbox, when the member
335
+ * is (still) a sub-admin after a role change — the kernel seals the new seed
336
+ * under it and re-enrols. Absent otherwise (a promotion to owner/admin drops
337
+ * the slot: those roles use the shared `_broker` seed).
338
+ */
339
+ readonly brokerMemberDek?: EnclaveKey;
340
+ }
341
+ export declare function updateKeyringIdentity(store: NoydbStore, vault: string, callerKeyring: UnlockedKeyring, options: UpdateUserOptions): Promise<UpdateKeyringResult>;
320
342
  /**
321
343
  * Rotate DEKs for specified collections:
322
344
  * 1. Generate new DEKs
@@ -361,11 +383,38 @@ export interface RotateResult {
361
383
  readonly userId: string;
362
384
  readonly reason: KeyringTamperedReason;
363
385
  }>;
386
+ /**
387
+ * core#100 — every record this rotation re-encrypted, with its version.
388
+ * Rotation writes through the raw store, invisible to the sync dirty log,
389
+ * so a replica kept the OLD ciphertext until each record was edited again —
390
+ * a revoked member with store access went on reading it, and a survivor
391
+ * handed the new DEK read `TamperedError` (measured by pilot-1). The kernel
392
+ * dirty-tracks these on every sync engine so the next push carries them.
393
+ */
394
+ readonly rewritten: ReadonlyArray<{
395
+ readonly collection: string;
396
+ readonly id: string;
397
+ readonly version: number;
398
+ }>;
399
+ }
400
+ /** core#100 — what `revoke` hands the kernel: the rotation's rewrites, for the dirty log. */
401
+ export interface RevokeResult {
402
+ readonly rewritten: RotateResult['rewritten'];
364
403
  }
365
404
  /** Options for {@link rotateKeys} (#846b — was a bare `string[]`). */
366
405
  export interface RotateKeysOptions {
367
406
  /** Collections whose DEKs are re-minted. */
368
407
  readonly collections: readonly string[];
408
+ /**
409
+ * core#100 — members who must NOT be delivered the new keys: the member
410
+ * being revoked or quarantined (a store that suppresses the `_keyring`
411
+ * delete leaves their file in place — #1043 — and delivering to it would
412
+ * hand the revoked member the very key the rotation exists to take away),
413
+ * and a member being narrowed (the collection just left their file, but a
414
+ * pending inbox slot for it cannot be pulled out of its box). They get the
415
+ * drop, and appear in `needsRegrant` as before.
416
+ */
417
+ readonly exclude?: readonly string[];
369
418
  }
370
419
  export declare function rotateKeys(store: NoydbStore, vault: string, callerKeyring: UnlockedKeyring, opts: RotateKeysOptions): Promise<RotateResult>;
371
420
  /** Options for {@link changeSecret} (#846b). */
@@ -513,21 +562,42 @@ export declare function listUsersWithEnvelopes<T = unknown>(store: NoydbStore, v
513
562
  envelope: UserEnvelope<T> | null;
514
563
  }>>;
515
564
  export declare function ensureCollectionDEK(store: NoydbStore, vault: string, keyring: UnlockedKeyring): Promise<(collectionName: string) => Promise<EnclaveKey>>;
516
- /**
517
- * The `Permissions` catch-all key (#1010). `Permissions` has always documented
518
- * `'*'` as "the wildcard collection matching all collections in the vault", but
519
- * nothing expanded it — a grantee handed the documented catch-all got no keys
520
- * at all. It is honoured in three places, and they must agree: the DEK wrapping
521
- * in `grant()`, and both permission checks below.
522
- */
523
- export declare const PERMISSION_WILDCARD = "*";
524
- /** Does this permission map hand over the whole vault? */
525
- export declare function permissionsAreWildcard(permissions: Permissions | undefined): boolean;
526
565
  /** Check if a user has write permission for a collection. */
527
566
  export declare function hasWritePermission(keyring: UnlockedKeyring, collectionName: string): boolean;
528
567
  /** Check if a user has any access to a collection. */
529
568
  export declare function hasAccess(keyring: UnlockedKeyring, collectionName: string): boolean;
569
+ export declare function mintInboxKey(kek: EnclaveKey): Promise<{
570
+ wrappedInboxKey: string;
571
+ inboxKeyAes: EnclaveKey;
572
+ inboxKey: NonNullable<KeyringFile['inbox_key']>;
573
+ }>;
574
+ /** core#96 — the collections a member has pending in their inbox, over every box. */
575
+ export declare function inboxSlots(file: Pick<KeyringFile, 'inbox'>): string[];
576
+ /**
577
+ * core#65 — this member's INBOX KEY PAIR, rebuilt from their keyring file: the
578
+ * private half is sealed under `deks[INBOX_KEY_ID]`, which only their own KEK
579
+ * unwraps. The inbox drain below opens boxes with it; `with-party/team/
580
+ * delegation.ts` opens a delegation's content key with the same pair, so a
581
+ * grantor can hand a member a key without knowing their secret.
582
+ */
583
+ export declare function openInboxKeyPair(inboxKey: NonNullable<KeyringFile['inbox_key']>, inboxKeyAes: EnclaveKey): Promise<CryptoKeyPair>;
530
584
  /** Persist a keyring file to the store. */
585
+ /**
586
+ * ⛔⛔ core#132 — DO NOT ADD A RETRY HERE. An earlier cut of this change did,
587
+ * and it was wrong in a way that looked like a fix.
588
+ *
589
+ * This function writes the caller's in-memory `keyring.deks` WHOLESALE. If a
590
+ * CAS fails, the write that lost was based on a stale version — retrying it
591
+ * re-persists that same map over the winner's, which is exactly the clobber
592
+ * the CAS just caught, laundered into a success. The suite went green and the
593
+ * data loss stayed.
594
+ *
595
+ * ⭐ The resolution belongs where the intent is, not where the write is. The
596
+ * only caller that races in practice is the lazy DEK mint in
597
+ * `ensureCollectionDEK`, and it can resolve correctly because it has not
598
+ * encrypted anything yet: on conflict it adopts the winner's key and returns
599
+ * that. See the comment there.
600
+ */
531
601
  export declare function persistKeyring(store: NoydbStore, vault: string, keyring: UnlockedKeyring): Promise<void>;
532
602
  /**
533
603
  * Check whether a keyring is authorised for a given `@noy-db/as-*`
@@ -579,3 +649,42 @@ export declare function hasImportCapability(keyring: UnlockedKeyring, tier: 'bun
579
649
  */
580
650
  export declare function evaluateImportCapability(capability: ImportCapability | undefined, role: Role, tier: 'plaintext', format: ExportFormat): boolean;
581
651
  export declare function evaluateImportCapability(capability: ImportCapability | undefined, role: Role, tier: 'bundle'): boolean;
652
+ /**
653
+ * core#132 — what this write is based on.
654
+ *
655
+ * `{ on }` is the envelope the edit was computed from; the write then CASes
656
+ * against its `_v` and lands at `_v + 1`. `'create'` is a keyring that did not
657
+ * exist.
658
+ *
659
+ * ⭐ REQUIRED, not optional, and that is the point: keyring writes were a bare
660
+ * `store.put` with no `expectedVersion`, so two concurrent edits to one member
661
+ * were last-writer-wins, silently. Making the basis a required parameter means
662
+ * the COMPILER enumerates every call site — `NON_ROTATABLE_SLOTS`' own comment
663
+ * records two defects caused by enumerating callers with grep instead.
664
+ *
665
+ * ⛔ `'create'` is NOT protected, and the limit is in the store contract, not
666
+ * in this function: two concurrent creates of the same userId still clobber,
667
+ * because this path passes no `expectedVersion` at all. Do not read a
668
+ * `'create'` basis as protected.
669
+ *
670
+ * ⚠️ It is not that absence is inexpressible — core#134 measured that claim and
671
+ * it was wrong. Every version hub writes starts at 1, so on a store that
672
+ * compares only when the record is present, `expectedVersion: 0` lets the
673
+ * first create through and conflicts every later one: an exact "write only if
674
+ * absent", for free. Censused 2026-09-24, every record store in the family
675
+ * already behaves that way, `to-aws-s3` deliberately and by name.
676
+ *
677
+ * ⛔ What stops this call site adopting it is that NOTHING HOLDS that
678
+ * convergence: `@noy-db/ports/to` asserts none of it, so a third-party adapter
679
+ * owes it nothing and this would become a silent correctness dependency on
680
+ * behaviour no gate checks. Adopt it after the conformance case lands, not
681
+ * before. core#134 carries the decision.
682
+ */
683
+ export type KeyringWriteBasis = {
684
+ readonly on: EncryptedEnvelope;
685
+ } | 'create';
686
+ /** The basis for a write computed from a `readKeyringFile` result. */
687
+ export declare const basisOf: (found: {
688
+ readonly envelope: EncryptedEnvelope;
689
+ } | undefined) => KeyringWriteBasis;
690
+ export declare function writeKeyringFile(store: NoydbStore, vault: string, userId: string, keyringFile: KeyringFile, basis: KeyringWriteBasis): Promise<void>;
@@ -54,7 +54,17 @@ import { type EnclaveKey } from '../../capsule/index.js';
54
54
  export declare const MAGIC_LINK_GRANTS_COLLECTION = "_magic_link_grants";
55
55
  /** HKDF `info` for the AES-GCM content key. Version-namespaced. */
56
56
  export declare const MAGIC_LINK_CONTENT_INFO_PREFIX = "noydb-magic-link-content-v1:";
57
- /** HKDF `info` for the AES-KW KEK. Matches `@noy-db/on-magic-link`. */
57
+ /**
58
+ * HKDF `info` for the AES-KW KEK. Matches `@noy-db/on-magic-link`.
59
+ *
60
+ * No importer inside hub, and that is not a defect: this is one half of a
61
+ * CROSS-PACKAGE protocol constant. The satellite derives the same KEK from
62
+ * the same string, so the value has to be stated here to be reviewable
63
+ * against it. Deleting it would leave the wire format pinned in one repo
64
+ * only (#55).
65
+ *
66
+ * @seam
67
+ */
58
68
  export declare const MAGIC_LINK_KEK_INFO_PREFIX = "noydb-magic-link-v1:";
59
69
  /**
60
70
  * Decrypted payload of a magic-link grant record. Mirrors
@@ -24,7 +24,7 @@ import { type RotateSecretInput, type RecoverSecretInput, type RecoverSecretResu
24
24
  import { type RecoverUserOptions } from './peer-recover.js';
25
25
  import { type PaperRecoveryEntry, type ShamirRecoveryEntry } from './recovery.js';
26
26
  import type { Vault } from '../../kernel/vault.js';
27
- import type { UnlockedKeyring } from './keyring.js';
27
+ import type { UnlockedKeyring, RevokeResult } from './keyring.js';
28
28
  import { type EnrollAuthenticatorOptions, type UpdateAuthenticatorOptions } from './authenticators.js';
29
29
  import type { QuickUnlockStore, QuickUnlockState } from '../session/unlock-state.js';
30
30
  import type { SecretPolicy } from '../../kernel/validation.js';
@@ -53,6 +53,13 @@ export interface TeamFacadeDeps {
53
53
  getKeyringInternal(vault: string, opts?: {
54
54
  create: boolean;
55
55
  }): Promise<UnlockedKeyring>;
56
+ /** core#73 — re-enrol a recovered member with the broker host (kernel-resident; no-op without a broker). */
57
+ enrolBrokerMember(vault: string, member: {
58
+ readonly userId: string;
59
+ readonly secret: string;
60
+ }): Promise<void>;
61
+ /** core#96 — pull a member's keyring file from every sync target before an authority edit. */
62
+ refreshRoster(vault: string, userId: string): Promise<void>;
56
63
  /** Managed-recovery enrolment check (kernel-resident). */
57
64
  assertRecoveryEnrolled(vault: string, policy: VaultPolicy, opts?: {
58
65
  skipManagedCheck?: boolean;
@@ -71,7 +78,7 @@ export declare class TeamFacade {
71
78
  /** Gate + run a `grant` engine. See `Noydb.grant` for the public contract. */
72
79
  runGrant(engine: (adapter: NoydbStore, vault: string, callerKeyring: UnlockedKeyring, options: GrantOptions) => Promise<void>, vault: string, options: GrantOptions, factors?: FactorProofBundle): Promise<void>;
73
80
  /** Gate + run a `revoke` engine. See `Noydb.revoke` for the public contract. */
74
- runRevoke(engine: (adapter: NoydbStore, vault: string, callerKeyring: UnlockedKeyring, options: RevokeOptions) => Promise<void>, vault: string, options: RevokeOptions, factors?: FactorProofBundle): Promise<void>;
81
+ runRevoke(engine: (adapter: NoydbStore, vault: string, callerKeyring: UnlockedKeyring, options: RevokeOptions) => Promise<RevokeResult>, vault: string, options: RevokeOptions, factors?: FactorProofBundle): Promise<RevokeResult>;
75
82
  /** Gate + run a `rotateKeys` engine. See `Noydb.rotate` for the public contract. */
76
83
  runRotate(engine: (store: NoydbStore, vault: string, callerKeyring: UnlockedKeyring, opts: RotateKeysOptions) => Promise<RotateResult>, vault: string, collections: string[]): Promise<RotateResult>;
77
84
  /** Gate + run the `verifyRoster` engine (#1121). See `Noydb.verifyRoster`. */
@@ -166,6 +173,7 @@ export declare class TeamFacade {
166
173
  * meta: {
167
174
  * credentialId: e.credentialId,
168
175
  * wrapIv: e.wrapIv,
176
+ * rpId: e.rpId,
169
177
  * prfUsed: e.prfUsed,
170
178
  * beFlag: e.beFlag,
171
179
  * requireSingleDevice: e.requireSingleDevice,
@@ -174,6 +182,15 @@ export declare class TeamFacade {
174
182
  * })
175
183
  * ```
176
184
  *
185
+ * `meta` is a free-form blob — hub validates `credentialId` and nothing
186
+ * else, so this example IS the contract for what a slot carries. Record
187
+ * `rpId` (core#140): the slot rewrap / rotation ceremony falls back to
188
+ * `meta.rpId` when the caller passes no `options.rpId` and the enrollment
189
+ * record predates `WebAuthnEnrollment.rpId`. Omitting it does not break
190
+ * single-hostname deployments — absence correctly reads as "send no RP ID"
191
+ * — but on a shared registrable domain rotation then works only if every
192
+ * caller remembers to pass the RP ID by hand.
193
+ *
177
194
  * Returns the WebAuthn `credentialId` (extracted from `meta.credentialId`)
178
195
  * for the caller's lookup index (a bootstrap vault, a Cover,
179
196
  * a server-side allowlist).
@@ -25,17 +25,19 @@
25
25
  /** Reserved collection holding per-adapter sync transport secrets. */
26
26
  export declare const SYNC_CREDENTIALS_COLLECTION = "_sync_credentials";
27
27
  /**
28
- * Reserved (pre-allocated) name for the future credential broker (#479).
29
- * Not yet implemented — reserved now so that neither the public collection
30
- * handle nor grant propagation can ever expose it before its dedicated,
31
- * role-gated API lands.
28
+ * Reserved collection holding the credential broker's SHARED seed (#479):
29
+ * one record per `brokerId`, owner/admin only.
32
30
  */
33
31
  export declare const BROKER_COLLECTION = "_broker";
34
32
  /**
35
- * The set of reserved collection names whose record contents are
36
- * directly-usable secrets. Membership here means: never served via
37
- * `vault.collection()`, never propagated to sub-admin grantees.
33
+ * Reserved collection holding each MEMBER's own broker seed (core#73): one
34
+ * record per `userId`, each encrypted under a DEK minted for that grantee
35
+ * alone at `grant()` time. Secret-bearing like `_broker`, with one twist the
36
+ * propagation loops must honour: the grantor never HOLDS this DEK (it is
37
+ * per-grantee, minted and wrapped in one step), so there is nothing to
38
+ * withhold — the guard exists so the name can never be served by
39
+ * `vault.collection()`.
38
40
  */
39
- export declare const SECRET_BEARING_RESERVED_COLLECTIONS: ReadonlySet<string>;
41
+ export declare const BROKER_MEMBER_COLLECTION = "_broker_member";
40
42
  /** True when `name` is a secret-bearing reserved collection. */
41
43
  export declare function isSecretBearingReservedCollection(name: string): boolean;
@@ -44,7 +44,7 @@ export interface RosterTag {
44
44
  readonly iv: string;
45
45
  readonly data: string;
46
46
  }
47
- export type RosterAuthorityFields = Pick<KeyringFile, 'user_id' | 'role' | 'permissions' | 'granted_by' | 'expires_at' | 'export_capability' | 'import_capability' | 'deks' | 'pending_deks' | 'roster_epoch'>;
47
+ export type RosterAuthorityFields = Pick<KeyringFile, 'user_id' | 'role' | 'permissions' | 'granted_by' | 'expires_at' | 'export_capability' | 'import_capability' | 'deks' | 'pending_deks' | 'roster_epoch' | 'clearance' | 'inbox_key' | 'inbox'>;
48
48
  export declare function rosterCanonical(file: RosterAuthorityFields): string;
49
49
  export declare function mintRosterTag(file: RosterAuthorityFields, rosterKey: EnclaveKey): Promise<RosterTag>;
50
50
  /**
@@ -99,3 +99,44 @@ export declare function assertRosterAuthenticated(file: KeyringFile, deks: Reado
99
99
  * the point of the mechanism.
100
100
  */
101
101
  export declare function assertRosterTagValid(file: KeyringFile, rosterKey: EnclaveKey, userId: string): Promise<void>;
102
+ /**
103
+ * ⚠️ MOVED HERE from `roster-epoch.ts` (core#58), and the move is the point.
104
+ *
105
+ * That module carries an output-domain invariant — every function it exports
106
+ * must reach a published entry point — because its CALLER API
107
+ * (`assertRosterEpochCurrent`) once shipped reachable from nowhere (#1097).
108
+ * `stampAuthority` is writer-side plumbing and has no business on the published
109
+ * surface, so satisfying that invariant by exporting it would have been the
110
+ * wrong repair.
111
+ *
112
+ * It belongs here regardless: it stamps the derived fields that
113
+ * `rosterCanonical` below BINDS, and the two must change together. Adding a
114
+ * derived field means editing both functions in this one file.
115
+ */
116
+ /**
117
+ * Stamp a keyring's authority half with BOTH derived fields at once — the next
118
+ * roster epoch and the advisory clearance (core#58).
119
+ *
120
+ * ## Why one helper and not two call sites
121
+ *
122
+ * There are thirteen places that build a `KeyringFile`'s authority half, across
123
+ * `keyring.ts`, `rotate-recover.ts`, `peer-recover.ts`, `custody/liberate.ts`
124
+ * and `with-cargo/adopt-partition.ts`. Every one of them must stamp every
125
+ * derived field, or the field FLICKERS: present after a grant, absent after the
126
+ * next rotate or partition adopt, with no error anywhere.
127
+ *
128
+ * ⛔ That is not a hypothetical — it is the exact failure `clearance` already
129
+ * had in a weaker form, and adding a fourteenth call site is how it would come
130
+ * back. **Adding a derived field means adding it HERE**, which makes covering
131
+ * all thirteen sites the default rather than a thing to remember.
132
+ *
133
+ * `clearance` is derived from the DEK slot names in the very object being
134
+ * stamped, so it cannot disagree with them; see `keyringClearance` for why it
135
+ * is advisory and must stay so.
136
+ */
137
+ export declare function stampAuthority<T extends {
138
+ readonly deks?: Record<string, string>;
139
+ }>(authority: T, previousEpoch: number | undefined): T & {
140
+ roster_epoch: number;
141
+ clearance: number;
142
+ };
@@ -21,12 +21,43 @@ import type { UnlockedKeyring } from './keyring.js';
21
21
  import { dekKey } from '../../kernel/tier-visibility.js';
22
22
  export { dekKey };
23
23
  /**
24
- * Returns the user's effective clearance for a given collection: the
25
- * maximum tier for which their keyring holds a DEK. Falls back to 0
26
- * when the user has only the tier-0 DEK (or none — the getDEK caller
27
- * will raise separately).
24
+ * The user's effective clearance for ONE collection: the maximum tier for which
25
+ * their keyring holds a DEK. `0` when only the tier-0 DEK is held (or none —
26
+ * the `getDEK` caller raises separately).
27
+ *
28
+ * Takes DEK SLOT NAMES rather than an `UnlockedKeyring` (core#58), because the
29
+ * callers that need this are the ones BUILDING a `KeyringFile`, where the slot
30
+ * names exist and an unlocked keyring may not. Not published from any entry, so
31
+ * the signature is free to say what it means.
32
+ *
33
+ * ⚠️ `kernel/vault.ts`'s `elevate()` scan is NOT this predicate: that asks
34
+ * whether ANY collection has a DEK at ONE tier (`#N` suffix match); this asks
35
+ * the MAXIMUM tier for ONE collection (`name#` prefix match).
36
+ */
37
+ export declare function effectiveClearance(dekSlots: Iterable<string>, collection: string): number;
38
+ /**
39
+ * The whole keyring's clearance: the highest tier held for ANY collection.
40
+ *
41
+ * ## What this is, and the one thing it must never become (core#58)
42
+ *
43
+ * This is the value persisted as `KeyringFile.clearance`. It is **derived**,
44
+ * not independent — a pure function of the DEK slot names written into the same
45
+ * file — and that is deliberate on two counts:
46
+ *
47
+ * 1. `dek_slots` is already bound into the roster tag (#1115), so a clearance
48
+ * computed from it carries no authority the tag does not already cover. A
49
+ * store that forges one contradicts data it cannot forge.
50
+ * 2. Being derived at every write is what stops it drifting. A value computed
51
+ * once at grant time and carried forward goes stale the moment a tier DEK
52
+ * is added or revoked.
53
+ *
54
+ * ⛔ **It is ADVISORY and must stay advisory.** The real check is whether the
55
+ * DEK map carries a `collection#tier` entry — `assertTierAccess` is the gate,
56
+ * and access in this system IS the key. Never branch a privilege decision on
57
+ * this number: it would be a second, weaker representation of access sitting
58
+ * beside the authoritative one, which is how the two come to disagree.
28
59
  */
29
- export declare function effectiveClearance(keyring: UnlockedKeyring, collection: string): number;
60
+ export declare function keyringClearance(dekSlots: Iterable<string>): number;
30
61
  /**
31
62
  * Assert the caller is cleared for the requested tier. Owners and
32
63
  * admins always pass (they can mint any new tier DEK on demand);