@noy-db/hub 0.8.0-pre.0 → 0.9.0-pre.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +78 -0
- package/README.md +8 -8
- package/codemods/0.4.0-pre.json +1 -1
- package/codemods/0.8.0-pre.json +1 -1
- package/dist/api-MSJXVYQG.js +18 -0
- package/dist/as/index.js +34 -25
- package/dist/as/index.js.map +1 -1
- package/dist/at/index.js +9 -10
- package/dist/attestation/index.js +39 -28
- package/dist/attestation/index.js.map +1 -1
- package/dist/{backup-7TFRVFLH.js → backup-7RKNZMQO.js} +15 -16
- package/dist/backup-7RKNZMQO.js.map +1 -0
- package/dist/blobs/index.js +13 -14
- package/dist/blobs/index.js.map +1 -1
- package/dist/broker/index.js +20 -13
- package/dist/broker/index.js.map +1 -1
- package/dist/by/index.js +2 -2
- package/dist/capsule/contract.d.ts +159 -0
- package/dist/capsule/contract.js +95 -0
- package/dist/capsule/enclave-aes/bound.d.ts +52 -0
- package/dist/{kernel/enclave → capsule/enclave-aes}/broker/proof.d.ts +12 -3
- package/dist/capsule/enclave-aes/capabilities.d.ts +2 -0
- package/dist/capsule/enclave-aes/classify/compare.d.ts +20 -0
- package/dist/{kernel/enclave → capsule/enclave-aes}/classify/find.d.ts +1 -1
- package/dist/{kernel/enclave → capsule/enclave-aes}/classify/reveal.d.ts +1 -1
- package/dist/{kernel/enclave → capsule/enclave-aes}/classify/verify.d.ts +2 -2
- package/dist/{kernel/enclave → capsule/enclave-aes}/classify/write.d.ts +1 -1
- package/dist/{kernel/enclave → capsule/enclave-aes}/crypto.d.ts +33 -129
- package/dist/capsule/enclave-aes/index.d.ts +113 -0
- package/dist/capsule/enclave-aes/index.js +361 -0
- package/dist/capsule/enclave-aes/index.js.map +1 -0
- package/dist/capsule/enclave-aes/primitives.d.ts +29 -0
- package/dist/capsule/index.d.ts +27 -0
- package/dist/capsule/plumbing/ct-equal.d.ts +11 -0
- package/dist/{kernel/enclave/record-keys → capsule/plumbing}/deterministic.d.ts +8 -21
- package/dist/capsule/plumbing/digest.d.ts +122 -0
- package/dist/{kernel/enclave/record-keys → capsule/plumbing}/envelope-body.d.ts +44 -48
- package/dist/capsule/plumbing/index.d.ts +100 -0
- package/dist/capsule/plumbing/lifecycle.d.ts +50 -0
- package/dist/{kernel/enclave/record-keys → capsule/plumbing}/record-codec.d.ts +62 -20
- package/dist/{kernel/enclave → capsule/plumbing}/record-envelope.d.ts +1 -1
- package/dist/capsule/plumbing/rekey-blob.d.ts +33 -0
- package/dist/capsule/plumbing/rekey.d.ts +44 -0
- package/dist/capsule/plumbing/sealed-slot.d.ts +22 -0
- package/dist/capsule/plumbing/sealed-slots.d.ts +37 -0
- package/dist/capsule/plumbing/sealing.d.ts +29 -0
- package/dist/capsule/plumbing/sign.d.ts +9 -0
- package/dist/{kernel/enclave/record-keys → capsule/plumbing}/tombstone.d.ts +2 -2
- package/dist/capsule-57BDK7LG.js +209 -0
- package/dist/cargo/index.js +36 -36
- package/dist/{chunk-BUDAGWL5.js → chunk-226V6XXJ.js} +41 -6
- package/dist/chunk-226V6XXJ.js.map +1 -0
- package/dist/{chunk-QWGU66MP.js → chunk-2A56DSRI.js} +5 -7
- package/dist/chunk-2A56DSRI.js.map +1 -0
- package/dist/chunk-2DX4JCRI.js +1 -0
- package/dist/{chunk-ODVPTDPK.js → chunk-2ELOCEXE.js} +1 -1
- package/dist/chunk-2ELOCEXE.js.map +1 -0
- package/dist/{chunk-CKNGS5MH.js → chunk-2WJKJZSO.js} +3 -5
- package/dist/chunk-2WJKJZSO.js.map +1 -0
- package/dist/{chunk-ZSX4S5XB.js → chunk-2ZFD2UJC.js} +9 -9
- package/dist/{chunk-YSK2CU2Q.js → chunk-3V6LZHUO.js} +3 -3
- package/dist/chunk-3V6LZHUO.js.map +1 -0
- package/dist/{chunk-HT2AHGQI.js → chunk-3Y5JLSXS.js} +2 -2
- package/dist/{chunk-M7NI3IWE.js → chunk-45VHWE4C.js} +67 -60
- package/dist/chunk-45VHWE4C.js.map +1 -0
- package/dist/{chunk-LGNDFRYC.js → chunk-4CFHL5RY.js} +1 -1
- package/dist/chunk-4CFHL5RY.js.map +1 -0
- package/dist/{enclave-27SMF6GF.js → chunk-4J3MNVVX.js} +83 -56
- package/dist/chunk-4J3MNVVX.js.map +1 -0
- package/dist/{chunk-SI3V7D4G.js → chunk-4UIP3QNW.js} +2 -2
- package/dist/{chunk-WNJ4AVGE.js → chunk-55P6OBB7.js} +2 -2
- package/dist/{chunk-6LNL42F5.js → chunk-5HNW4ZTA.js} +12 -15
- package/dist/chunk-5HNW4ZTA.js.map +1 -0
- package/dist/{chunk-SYVZW77S.js → chunk-5LMCVBMY.js} +6 -8
- package/dist/chunk-5LMCVBMY.js.map +1 -0
- package/dist/{chunk-MKXXMNJH.js → chunk-5UUJE4FP.js} +3 -3
- package/dist/chunk-5XONHAFD.js +12 -0
- package/dist/chunk-5XONHAFD.js.map +1 -0
- package/dist/{chunk-X4773RBR.js → chunk-6QLCS7ET.js} +2 -2
- package/dist/chunk-6QLCS7ET.js.map +1 -0
- package/dist/{chunk-FW22ZCXT.js → chunk-6WS35E6X.js} +2 -2
- package/dist/{chunk-FCKWQE2H.js → chunk-6Y5E4SJU.js} +7 -8
- package/dist/chunk-6Y5E4SJU.js.map +1 -0
- package/dist/{chunk-4AF3TUMP.js → chunk-72XBVN4J.js} +8 -2
- package/dist/{chunk-4AF3TUMP.js.map → chunk-72XBVN4J.js.map} +1 -1
- package/dist/{chunk-QBBUZ3I3.js → chunk-7BMOS4JQ.js} +11 -11
- package/dist/chunk-7BMOS4JQ.js.map +1 -0
- package/dist/{chunk-5FDLC6G7.js → chunk-7CT6SX4M.js} +3 -3
- package/dist/chunk-7CT6SX4M.js.map +1 -0
- package/dist/{chunk-LQ4ZHOKP.js → chunk-ABU6A4Z5.js} +36 -27
- package/dist/chunk-ABU6A4Z5.js.map +1 -0
- package/dist/{chunk-WX5ADGTZ.js → chunk-AJFPAHMW.js} +3 -3
- package/dist/chunk-AJFPAHMW.js.map +1 -0
- package/dist/{chunk-ZE4CHIED.js → chunk-APFFJN5T.js} +39 -37
- package/dist/chunk-APFFJN5T.js.map +1 -0
- package/dist/{chunk-6OWXYZK2.js → chunk-B65CC6Z6.js} +2 -2
- package/dist/{chunk-F2TDU7MQ.js → chunk-BJH77UY2.js} +2 -2
- package/dist/{chunk-L7DOS3TE.js → chunk-BMHQHH7Q.js} +3 -3
- package/dist/chunk-BMHQHH7Q.js.map +1 -0
- package/dist/{chunk-BJ2IXQ5Q.js → chunk-BNFNQNEP.js} +2 -2
- package/dist/chunk-BU2ABHFW.js +74 -0
- package/dist/chunk-BU2ABHFW.js.map +1 -0
- package/dist/{chunk-HLEK5VAN.js → chunk-BUE7R3B5.js} +2 -2
- package/dist/{chunk-ISZQJBML.js → chunk-BVF3SXD7.js} +6 -6
- package/dist/chunk-BVF3SXD7.js.map +1 -0
- package/dist/{chunk-M522UYZ2.js → chunk-BYHCKX73.js} +6 -10
- package/dist/chunk-BYHCKX73.js.map +1 -0
- package/dist/{chunk-EOVMT6TB.js → chunk-C53ER7AG.js} +2 -2
- package/dist/{chunk-K6W7BVZ6.js → chunk-CAD7N6HQ.js} +3 -3
- package/dist/chunk-CB4467G3.js +565 -0
- package/dist/chunk-CB4467G3.js.map +1 -0
- package/dist/{chunk-NWHBJQAL.js → chunk-D4V5JJAK.js} +4 -4
- package/dist/chunk-D4V5JJAK.js.map +1 -0
- package/dist/{chunk-QWFHIOD2.js → chunk-D5A3GCZ4.js} +11 -12
- package/dist/chunk-D5A3GCZ4.js.map +1 -0
- package/dist/{chunk-5O7D6ZTW.js → chunk-DHU2AQ6T.js} +2 -2
- package/dist/{chunk-DC5QVPV7.js → chunk-DL6BZKP3.js} +3 -3
- package/dist/chunk-DL6BZKP3.js.map +1 -0
- package/dist/{chunk-FQ54DWUQ.js → chunk-EA4VDI5D.js} +4 -4
- package/dist/chunk-EA4VDI5D.js.map +1 -0
- package/dist/{chunk-IT22PWKV.js → chunk-ECGXA4LT.js} +2 -2
- package/dist/{chunk-BP6DARYA.js → chunk-EMAWOGVH.js} +4 -4
- package/dist/chunk-EMAWOGVH.js.map +1 -0
- package/dist/{chunk-3F7GLNAE.js → chunk-EUD3HQM4.js} +7 -11
- package/dist/chunk-EUD3HQM4.js.map +1 -0
- package/dist/{chunk-T2LBQ5DV.js → chunk-FSQNGPHH.js} +335 -250
- package/dist/chunk-FSQNGPHH.js.map +1 -0
- package/dist/{chunk-7VCXZDA4.js → chunk-FZXRLNJO.js} +7 -11
- package/dist/chunk-FZXRLNJO.js.map +1 -0
- package/dist/{chunk-6LMQ5R26.js → chunk-G46JSSVX.js} +7 -7
- package/dist/{chunk-6LMQ5R26.js.map → chunk-G46JSSVX.js.map} +1 -1
- package/dist/{chunk-GF5BZ7D4.js → chunk-G5EDYVSE.js} +11 -13
- package/dist/chunk-G5EDYVSE.js.map +1 -0
- package/dist/chunk-G66YXUTY.js +60 -0
- package/dist/chunk-G66YXUTY.js.map +1 -0
- package/dist/{chunk-FFWI7UH7.js → chunk-GAGT3YZN.js} +1 -1
- package/dist/chunk-GAGT3YZN.js.map +1 -0
- package/dist/{chunk-4MXI3ODD.js → chunk-GCUMOKTN.js} +3 -3
- package/dist/{chunk-FH2L2E34.js → chunk-GETUTTZU.js} +4 -4
- package/dist/{chunk-FH2L2E34.js.map → chunk-GETUTTZU.js.map} +1 -1
- package/dist/chunk-GMKGGY7V.js +234 -0
- package/dist/chunk-GMKGGY7V.js.map +1 -0
- package/dist/{chunk-B6SJIBQK.js → chunk-GOJQ5DZA.js} +4 -4
- package/dist/{chunk-EIPVYUEP.js → chunk-GQ4MF3CM.js} +3 -3
- package/dist/chunk-GQ4MF3CM.js.map +1 -0
- package/dist/{chunk-PDCG6PR5.js → chunk-GRS2HIV6.js} +2 -2
- package/dist/chunk-GRS2HIV6.js.map +1 -0
- package/dist/{chunk-PEOZ34EM.js → chunk-GSAK56VF.js} +1 -1
- package/dist/chunk-GSAK56VF.js.map +1 -0
- package/dist/{chunk-3H5KLDZN.js → chunk-H3YM66EI.js} +4 -8
- package/dist/chunk-H3YM66EI.js.map +1 -0
- package/dist/{chunk-NRT6QZQB.js → chunk-IVMFIKNA.js} +6 -6
- package/dist/chunk-IVMFIKNA.js.map +1 -0
- package/dist/{chunk-PSIV7CJV.js → chunk-J4KAPKBJ.js} +2 -2
- package/dist/chunk-J4KAPKBJ.js.map +1 -0
- package/dist/{chunk-N5DNADLQ.js → chunk-JA25QG5M.js} +224 -34
- package/dist/chunk-JA25QG5M.js.map +1 -0
- package/dist/{chunk-T7IR4N2S.js → chunk-JBMMWYOH.js} +3 -1
- package/dist/{chunk-T7IR4N2S.js.map → chunk-JBMMWYOH.js.map} +1 -1
- package/dist/{chunk-YNIUIERI.js → chunk-JPSL5GIZ.js} +18 -59
- package/dist/chunk-JPSL5GIZ.js.map +1 -0
- package/dist/{chunk-TKUOEU2F.js → chunk-JSWKVZCR.js} +2 -2
- package/dist/chunk-JZ4EDEIP.js +22 -0
- package/dist/chunk-JZ4EDEIP.js.map +1 -0
- package/dist/{chunk-QOOUUR4A.js → chunk-K673OO6B.js} +10 -4
- package/dist/chunk-K673OO6B.js.map +1 -0
- package/dist/{chunk-NNARWO72.js → chunk-K7RW7FI4.js} +13 -12
- package/dist/chunk-K7RW7FI4.js.map +1 -0
- package/dist/{chunk-ZXABPVM6.js → chunk-L2F3CFCH.js} +9 -13
- package/dist/chunk-L2F3CFCH.js.map +1 -0
- package/dist/{chunk-X25NWUZB.js → chunk-L5A3KR7R.js} +3 -3
- package/dist/{chunk-T52GX4SA.js → chunk-LGGIFKJP.js} +4 -4
- package/dist/{chunk-ID6Z6E66.js → chunk-MQ7YWBQ5.js} +2 -2
- package/dist/{chunk-FXQBGFOX.js → chunk-MRJDLXI3.js} +14 -8
- package/dist/{chunk-FXQBGFOX.js.map → chunk-MRJDLXI3.js.map} +1 -1
- package/dist/chunk-NH2UOV3B.js +18 -0
- package/dist/chunk-NH2UOV3B.js.map +1 -0
- package/dist/{chunk-FN5EBVTQ.js → chunk-NIXRB5BP.js} +2 -2
- package/dist/{chunk-RHVMZSUU.js → chunk-NV4OESHC.js} +1 -1
- package/dist/chunk-NV4OESHC.js.map +1 -0
- package/dist/{chunk-HBRLNOHL.js → chunk-NYJBYVBG.js} +4 -4
- package/dist/{chunk-DF73H4UN.js → chunk-NZULV7LK.js} +5 -5
- package/dist/chunk-NZULV7LK.js.map +1 -0
- package/dist/{chunk-HK67PX4J.js → chunk-OFD2HD6F.js} +1 -1
- package/dist/chunk-OFD2HD6F.js.map +1 -0
- package/dist/{chunk-WY2XXTET.js → chunk-OJU67C23.js} +4 -4
- package/dist/{chunk-WY2XXTET.js.map → chunk-OJU67C23.js.map} +1 -1
- package/dist/{chunk-ZUVBC32X.js → chunk-OK57EATL.js} +2 -2
- package/dist/{chunk-KJFW62P4.js → chunk-OM3SEDI4.js} +652 -662
- package/dist/chunk-OM3SEDI4.js.map +1 -0
- package/dist/{chunk-TOPYQ6GA.js → chunk-PCYPXLEX.js} +6 -6
- package/dist/{chunk-GYGLAVCX.js → chunk-PFCTSXHU.js} +6 -2
- package/dist/chunk-PFCTSXHU.js.map +1 -0
- package/dist/{chunk-VNNRUGMM.js → chunk-PGC35KXE.js} +2 -2
- package/dist/{chunk-4I522ERM.js → chunk-PT2YCQVK.js} +4 -4
- package/dist/{chunk-Z5HTYMMQ.js → chunk-PTJY5R3O.js} +2 -2
- package/dist/chunk-PUBI455O.js +157 -0
- package/dist/chunk-PUBI455O.js.map +1 -0
- package/dist/{chunk-MTL7MXGR.js → chunk-QDHHHI5Q.js} +16 -17
- package/dist/chunk-QDHHHI5Q.js.map +1 -0
- package/dist/{chunk-F24ZZTHQ.js → chunk-QGFEBNHO.js} +4 -4
- package/dist/{chunk-A6IJU4TK.js → chunk-QGSNJD3B.js} +2 -2
- package/dist/chunk-QJNAHPVT.js +91 -0
- package/dist/chunk-QJNAHPVT.js.map +1 -0
- package/dist/{chunk-BK2HHQGN.js → chunk-QSHATAXJ.js} +2 -2
- package/dist/{chunk-ANWPSTZU.js → chunk-QXJXG7DN.js} +57 -30
- package/dist/chunk-QXJXG7DN.js.map +1 -0
- package/dist/{chunk-HBPPGWUM.js → chunk-RDOEOPOI.js} +14 -9
- package/dist/chunk-RDOEOPOI.js.map +1 -0
- package/dist/{chunk-JCN44NCY.js → chunk-RIZTZJX6.js} +2 -2
- package/dist/{chunk-MVZ2TPVP.js → chunk-RNACRT5H.js} +2 -2
- package/dist/chunk-RWFQVNXR.js +24 -0
- package/dist/chunk-RWFQVNXR.js.map +1 -0
- package/dist/{chunk-TROR3ALR.js → chunk-SFCD6OU7.js} +2 -2
- package/dist/{chunk-S57HTZ6X.js → chunk-SNM7LSYG.js} +5 -8
- package/dist/chunk-SNM7LSYG.js.map +1 -0
- package/dist/chunk-SPPOUJLN.js +40 -0
- package/dist/chunk-SPPOUJLN.js.map +1 -0
- package/dist/{chunk-3ELRMVJK.js → chunk-SWXLZ4HX.js} +31 -35
- package/dist/chunk-SWXLZ4HX.js.map +1 -0
- package/dist/{chunk-6B3VNR4P.js → chunk-TFWFPZRU.js} +26 -35
- package/dist/chunk-TFWFPZRU.js.map +1 -0
- package/dist/{chunk-F7XGHL5O.js → chunk-TMIJAR2X.js} +3 -3
- package/dist/{chunk-F7XGHL5O.js.map → chunk-TMIJAR2X.js.map} +1 -1
- package/dist/{chunk-I3JDRCMW.js → chunk-TZYTMZZY.js} +10 -10
- package/dist/{chunk-AOWGXU6D.js → chunk-UAKY6E4N.js} +2 -2
- package/dist/chunk-UHFGK6YA.js +40 -0
- package/dist/chunk-UHFGK6YA.js.map +1 -0
- package/dist/{chunk-3JWHAR6E.js → chunk-UNSQZSZP.js} +2 -2
- package/dist/{chunk-FQ5VRHIB.js → chunk-UOZOWN73.js} +5 -9
- package/dist/chunk-UOZOWN73.js.map +1 -0
- package/dist/{chunk-GHLTDZRS.js → chunk-V55JASXO.js} +25 -4
- package/dist/chunk-V55JASXO.js.map +1 -0
- package/dist/{chunk-244VXYPG.js → chunk-VSUQI5Q6.js} +45 -4
- package/dist/chunk-VSUQI5Q6.js.map +1 -0
- package/dist/{chunk-6K7DPM7D.js → chunk-WFWFXDNS.js} +2 -2
- package/dist/{chunk-CF5UU4S7.js → chunk-WHOKGHJ3.js} +7 -7
- package/dist/{chunk-LGRLME4M.js → chunk-X2RP4TO5.js} +16 -16
- package/dist/chunk-X2RP4TO5.js.map +1 -0
- package/dist/{chunk-VNPEWFPD.js → chunk-XA34THLF.js} +8 -6
- package/dist/chunk-XA34THLF.js.map +1 -0
- package/dist/{chunk-HVSCEIYL.js → chunk-XITHENBI.js} +12 -14
- package/dist/chunk-XITHENBI.js.map +1 -0
- package/dist/{chunk-ENAG3IY7.js → chunk-XKBTJGFP.js} +26 -28
- package/dist/chunk-XKBTJGFP.js.map +1 -0
- package/dist/{chunk-32YV3TJT.js → chunk-XXNWU5QZ.js} +2 -2
- package/dist/{chunk-B57AFBY2.js → chunk-XXQ5XIYY.js} +2 -2
- package/dist/{chunk-ORDURZBU.js → chunk-YFFMPZPY.js} +2 -2
- package/dist/{chunk-MDWKM2XC.js → chunk-YKGJ44Z7.js} +3 -3
- package/dist/{chunk-IUWCVHQ7.js → chunk-YQFBH5ZJ.js} +4 -4
- package/dist/{chunk-IUWCVHQ7.js.map → chunk-YQFBH5ZJ.js.map} +1 -1
- package/dist/{chunk-UPD5NWI5.js → chunk-Z3ZXVB2Y.js} +29 -16
- package/dist/chunk-Z3ZXVB2Y.js.map +1 -0
- package/dist/chunk-ZBUAX4EF.js +27 -0
- package/dist/chunk-ZBUAX4EF.js.map +1 -0
- package/dist/{chunk-MLPHLJIQ.js → chunk-ZHQJAV6D.js} +2 -2
- package/dist/{chunk-UD5EVGZ7.js → chunk-ZMVSKYTJ.js} +56 -96
- package/dist/chunk-ZMVSKYTJ.js.map +1 -0
- package/dist/{chunk-7JE7BDYJ.js → chunk-ZVSKSUGI.js} +5 -5
- package/dist/{chunk-J6UOHJY5.js → chunk-ZWF3EWZA.js} +4 -8
- package/dist/chunk-ZWF3EWZA.js.map +1 -0
- package/dist/classified/index.js +5 -5
- package/dist/{classified-marker-W3USLL5M.js → classified-marker-KHDOYIJB.js} +3 -3
- package/dist/classified-marker-KHDOYIJB.js.map +1 -0
- package/dist/collection-facade-LZIF7GWD.js +41 -0
- package/dist/{computed-TPFBX7U4.js → computed-XMFTHAXV.js} +3 -3
- package/dist/consent/index.js +10 -11
- package/dist/consent/index.js.map +1 -1
- package/dist/cover/index.js +9 -10
- package/dist/coverage/index.js +1 -1
- package/dist/custody/index.js +13 -13
- package/dist/{dead-filter-U2UYKSZL.js → dead-filter-CXV5NS67.js} +11 -3
- package/dist/dead-filter-CXV5NS67.js.map +1 -0
- package/dist/debug/index.js +11 -2
- package/dist/debug/index.js.map +1 -1
- package/dist/{delegation-S3AEPW2T.js → delegation-ONLM4JFI.js} +52 -31
- package/dist/delegation-ONLM4JFI.js.map +1 -0
- package/dist/derivations/index.js +25 -25
- package/dist/derive-3YSIS36W.js +20 -0
- package/dist/directory/index.js +10 -11
- package/dist/{dispatch-RH4LHKBH.js → dispatch-2MQFMEGY.js} +22 -23
- package/dist/dispatch-2MQFMEGY.js.map +1 -0
- package/dist/{dispatch-3CQDJV5Q.js → dispatch-OFDA4WQV.js} +5 -5
- package/dist/executor-E6YDJ7YA.js +8 -0
- package/dist/executor-NJX3YQQ4.js +35 -0
- package/dist/executor-WWM3DD4P.js +8 -0
- package/dist/export-accessible-RLHU5G4W.js +22 -0
- package/dist/extract-partition-QII2EDCS.js +35 -0
- package/dist/{fanout-sidecar-OT6RYLOL.js → fanout-sidecar-BO67PCPO.js} +13 -15
- package/dist/fanout-sidecar-BO67PCPO.js.map +1 -0
- package/dist/find-6M7GYDUZ.js +10 -0
- package/dist/forget/index.js +26 -10
- package/dist/forget/index.js.map +1 -1
- package/dist/guards/index.js +4 -4
- package/dist/history/index.js +13 -14
- package/dist/history/index.js.map +1 -1
- package/dist/i18n/index.js +14 -15
- package/dist/i18n/index.js.map +1 -1
- package/dist/index.d.ts +15 -13
- package/dist/index.js +198 -187
- package/dist/index.js.map +1 -1
- package/dist/indexing/index.js +6 -6
- package/dist/introspection/index.js +16 -13
- package/dist/issue-LPEEEMPP.js +19 -0
- package/dist/kernel/attestation-types.d.ts +62 -0
- package/dist/kernel/cache/index.d.ts +1 -1
- package/dist/kernel/collection-config.d.ts +1 -48
- package/dist/kernel/collection.d.ts +2 -1
- package/dist/kernel/cutover-transform.d.ts +1 -1
- package/dist/kernel/errors.d.ts +63 -6
- package/dist/kernel/export-scope.d.ts +40 -0
- package/dist/kernel/merge-authority.d.ts +1 -1
- package/dist/kernel/noydb.d.ts +3 -1
- package/dist/kernel/paths.d.ts +29 -5
- package/dist/kernel/prepared-write.d.ts +1 -1
- package/dist/kernel/put-many-atomic.d.ts +1 -1
- package/dist/kernel/query/live/live.d.ts +2 -1
- package/dist/kernel/query/sort-key.d.ts +0 -2
- package/dist/kernel/secret-mode.d.ts +1 -1
- package/dist/kernel/tx-write-gate.d.ts +2 -4
- package/dist/kernel/types.d.ts +135 -11
- package/dist/kernel/validation.d.ts +0 -10
- package/dist/kernel/vault.d.ts +6 -2
- package/dist/kernel/via/reconcile.d.ts +1 -42
- package/dist/kernel/write-queue.d.ts +17 -0
- package/dist/{ledger-KZPCMVZY.js → ledger-MSJGWKGW.js} +11 -12
- package/dist/liberate-LEKDYKTC.js +25 -0
- package/dist/link-set-QXXSPPHL.js +29 -0
- package/dist/{managed-secret-S3MQ6SH6.js → managed-secret-VSK7ANQI.js} +10 -11
- package/dist/materialized-views/index.js +27 -28
- package/dist/{migrate-cek-V7GKJZ7O.js → migrate-cek-GEBFYBDC.js} +2 -2
- package/dist/money/index.js +5 -5
- package/dist/noydb-F2AUF6KL.js +98 -0
- package/dist/on/index.js +25 -0
- package/dist/overlay-views/index.js +4 -4
- package/dist/periods/index.js +12 -13
- package/dist/pod/index.js +76 -74
- package/dist/{pod-handle-WGDFB4C2.js → pod-handle-YE7CT66T.js} +10 -11
- package/dist/pod-handle-YE7CT66T.js.map +1 -0
- package/dist/policy/index.js +10 -11
- package/dist/port/as/active.d.ts +4 -0
- package/dist/port/as/index.d.ts +1 -0
- package/dist/port/by/index.d.ts +14 -5
- package/dist/port/on/index.d.ts +27 -1
- package/dist/port/to/index.d.ts +1 -1
- package/dist/port/with/blob-strategy.d.ts +1 -1
- package/dist/port/with/broker-strategy.d.ts +14 -0
- package/dist/port/with/classified-strategy.d.ts +1 -1
- package/dist/port/with/collection-options.d.ts +1 -1
- package/dist/port/with/collection-registries.d.ts +1 -1
- package/dist/port/with/coverage-strategy.d.ts +17 -1
- package/dist/port/with/formats-strategy.d.ts +34 -1
- package/dist/port/with/lookup-strategy.d.ts +87 -6
- package/dist/port/with/service-bus.d.ts +2 -1
- package/dist/portability/index.js +8 -8
- package/dist/{post-register-SLSXIPBV.js → post-register-QC5TEAW3.js} +6 -6
- package/dist/post-register-QC5TEAW3.js.map +1 -0
- package/dist/query/all/index.js +16 -16
- package/dist/query/index.js +8 -8
- package/dist/query/live/index.js +7 -7
- package/dist/query/reduce/index.js +10 -10
- package/dist/query/relate/index.js +10 -10
- package/dist/reduce/index.js +8 -8
- package/dist/register-SN72QALV.js +30 -0
- package/dist/registry-253FF7C6.js +35 -0
- package/dist/registry-3AZWQTDT.js +23 -0
- package/dist/registry-7UEBTHWG.js +8 -0
- package/dist/registry-IVJ67NFQ.js +8 -0
- package/dist/request-withdrawal-UKVJZKX2.js +28 -0
- package/dist/{reveal-4BCKPEC2.js → reveal-YQTRNQFH.js} +10 -9
- package/dist/reveal-YQTRNQFH.js.map +1 -0
- package/dist/revoke-G2KXJQA5.js +24 -0
- package/dist/satellites/index.js +1 -1
- package/dist/schema-update/index.js +2 -2
- package/dist/sealed-record/index.js +16 -18
- package/dist/sealed-record/index.js.map +1 -1
- package/dist/search/index.js +4 -4
- package/dist/{seed-4JS2RJ4A.js → seed-JMQTRKRE.js} +125 -34
- package/dist/seed-JMQTRKRE.js.map +1 -0
- package/dist/sequence/index.js +9 -10
- package/dist/session/index.js +9 -10
- package/dist/session/index.js.map +1 -1
- package/dist/shadow/index.js +2 -2
- package/dist/signer-IUIYR3CX.js +23 -0
- package/dist/snapshots/index.js +11 -11
- package/dist/stale-SKV33PBU.js +28 -0
- package/dist/storage-NPBYP2SM.js +21 -0
- package/dist/store/index.js +1 -1
- package/dist/{store-coordination-provider-2O2VUHKW.js → store-coordination-provider-Z6HKPOGM.js} +11 -12
- package/dist/store-coordination-provider-Z6HKPOGM.js.map +1 -0
- package/dist/sync/index.js +18 -13
- package/dist/sync/index.js.map +1 -1
- package/dist/team/index.js +18 -17
- package/dist/tiers/index.js +11 -12
- package/dist/to/index.js +2 -2
- package/dist/transactions/index.js +3 -3
- package/dist/util/index.js +1 -1
- package/dist/vault-head/index.js +11 -14
- package/dist/vault-head/index.js.map +1 -1
- package/dist/{verify-RVT67IMH.js → verify-KWQIWLGH.js} +14 -12
- package/dist/verify-KWQIWLGH.js.map +1 -0
- package/dist/via/classified/binding.d.ts +2 -2
- package/dist/via/classified/config-drift.d.ts +2 -2
- package/dist/via/classified/errors.d.ts +1 -1
- package/dist/via/classified/presets.d.ts +29 -0
- package/dist/via/classified/resolve.d.ts +7 -0
- package/dist/via/geo/binding.d.ts +0 -4
- package/dist/via/lookup/handle.d.ts +4 -4
- package/dist/via/lookup/index.d.ts +32 -0
- package/dist/via/money/binding.d.ts +0 -9
- package/dist/walk-F4OLXI5H.js +20 -0
- package/dist/with-audit/attestation/index.d.ts +2 -1
- package/dist/with-audit/attestation/issue.d.ts +2 -2
- package/dist/with-audit/attestation/revoke.d.ts +2 -2
- package/dist/with-audit/attestation/scheme.d.ts +7 -0
- package/dist/with-audit/attestation/signer.d.ts +1 -1
- package/dist/with-audit/attestation/strategy.d.ts +4 -3
- package/dist/with-audit/attestation/types.d.ts +10 -0
- package/dist/with-audit/attestation/vault-facade.d.ts +9 -2
- package/dist/with-audit/attestation/verifier.d.ts +6 -0
- package/dist/with-audit/consent/consent.d.ts +1 -1
- package/dist/with-audit/consent/strategy.d.ts +1 -1
- package/dist/with-audit/forget/completeness.d.ts +66 -0
- package/dist/with-audit/forget/index.d.ts +2 -0
- package/dist/with-audit/forget/strategy.d.ts +65 -0
- package/dist/with-audit/forget/subject-index.d.ts +1 -1
- package/dist/with-audit/periods/periods.d.ts +0 -9
- package/dist/with-audit/periods/reserved-collections.d.ts +7 -0
- package/dist/with-audit/periods/vault-facade.d.ts +1 -1
- package/dist/with-audit/portability/request-withdrawal.d.ts +0 -1
- package/dist/with-audit/portability/withdraw-accessible.d.ts +0 -1
- package/dist/with-audit/sealed-record/index.d.ts +2 -2
- package/dist/with-audit/sealed-record/strategy.d.ts +1 -1
- package/dist/with-audit/tiers/index.d.ts +3 -3
- package/dist/with-audit/tiers/strategy.d.ts +19 -0
- package/dist/with-cargo/adopt-partition.d.ts +1 -1
- package/dist/with-cargo/extract-partition.d.ts +1 -47
- package/dist/with-cargo/floor.d.ts +1 -1
- package/dist/with-commit/history/history.d.ts +2 -2
- package/dist/with-commit/history/index.d.ts +1 -1
- package/dist/with-commit/history/ledger/store.d.ts +1 -1
- package/dist/with-commit/history/strategy.d.ts +1 -1
- package/dist/with-commit/history/time-machine.d.ts +1 -1
- package/dist/with-commit/numbering/index.d.ts +1 -3
- package/dist/with-commit/sequence/index.d.ts +1 -1
- package/dist/with-commit/tx/transaction.d.ts +2 -24
- package/dist/with-commit/vault-head/head.d.ts +1 -1
- package/dist/with-commit/vault-head/index.d.ts +1 -1
- package/dist/with-commit/vault-head/strategy.d.ts +8 -1
- package/dist/with-commit/vault-head/verify.d.ts +1 -1
- package/dist/with-fork/snapshots/noydb-facade.d.ts +7 -0
- package/dist/with-formula/derivations/dispatch.d.ts +1 -1
- package/dist/with-formula/derivations/fanout-sidecar.d.ts +1 -1
- package/dist/with-formula/derivations/trigger-match.d.ts +8 -5
- package/dist/with-formula/materialized-views/emit-memo.d.ts +0 -2
- package/dist/with-lookup/embeddings/index.d.ts +1 -2
- package/dist/with-lookup/indexing/collection-facade.d.ts +2 -16
- package/dist/with-lookup/indexing/eager-indexes.d.ts +2 -1
- package/dist/with-lookup/search/collection-facade.d.ts +1 -13
- package/dist/with-party/broker/index.d.ts +4 -4
- package/dist/with-party/broker/seed.d.ts +25 -10
- package/dist/with-party/directory/user-envelope/storage.d.ts +1 -1
- package/dist/with-party/policy/noydb-facade.d.ts +1 -31
- package/dist/with-party/team/delegation.d.ts +59 -3
- package/dist/with-party/team/echo-secret.d.ts +2 -4
- package/dist/with-party/team/index.d.ts +1 -1
- package/dist/with-party/team/keyring.d.ts +2 -22
- package/dist/with-party/team/magic-link-grant.d.ts +12 -2
- package/dist/with-party/team/noydb-facade.d.ts +5 -0
- package/dist/with-party/team/recovery.d.ts +1 -1
- package/dist/with-party/team/reserved-secret-collections.d.ts +10 -8
- package/dist/with-party/team/roster-tag.d.ts +43 -2
- package/dist/with-party/team/rotate-recover.d.ts +1 -1
- package/dist/with-party/team/tiers.d.ts +36 -5
- package/dist/with-party/team/wrapped-deks.d.ts +1 -1
- package/dist/with-pod/index.d.ts +1 -1
- package/dist/with-shape/blobs/blob-compaction.d.ts +1 -1
- package/dist/with-shape/blobs/blob-intent.d.ts +1 -1
- package/dist/with-shape/blobs/blob-set.d.ts +25 -2
- package/dist/with-shape/blobs/legacy-sweep.d.ts +17 -1
- package/dist/with-shape/introspection/describe.d.ts +2 -3
- package/dist/with-shape/introspection/index.d.ts +1 -0
- package/dist/with-shape/introspection/types.d.ts +2 -1
- package/dist/with-shape/introspection/walk.d.ts +1 -1
- package/dist/with-shape/links/lazy-handle.d.ts +1 -1
- package/dist/with-shape/links/link-set.d.ts +1 -1
- package/dist/with-shape/manifest/derive.d.ts +1 -1
- package/dist/with-shape/manifest/storage.d.ts +1 -1
- package/dist/with-shape/persisted-schemas/register.d.ts +1 -1
- package/dist/with-shape/persisted-schemas/storage.d.ts +1 -1
- package/dist/with-shape/satellites/dead-filter.d.ts +1 -1
- package/dist/with-shape/satellites/declare.d.ts +1 -1
- package/dist/with-shape/satellites/marker.d.ts +1 -1
- package/dist/with-shape/satellites/post-register.d.ts +1 -1
- package/dist/with-shape/schema-update/fence.d.ts +7 -0
- package/dist/with-sync/engine.d.ts +30 -1
- package/dist/with-sync/presence.d.ts +5 -10
- package/dist/with-sync/reserved-mirror.d.ts +89 -0
- package/dist/with-sync/strategy.d.ts +7 -0
- package/dist/with-sync/tab-write-relay.d.ts +0 -10
- package/dist/withdraw-accessible-ZKPLZ66E.js +25 -0
- package/dist/withdraw-accessible-ZKPLZ66E.js.map +1 -0
- package/package.json +14 -5
- package/dist/api-GVYEKSJE.js +0 -19
- package/dist/backup-7TFRVFLH.js.map +0 -1
- package/dist/chunk-244VXYPG.js.map +0 -1
- package/dist/chunk-3ELRMVJK.js.map +0 -1
- package/dist/chunk-3F7GLNAE.js.map +0 -1
- package/dist/chunk-3H5KLDZN.js.map +0 -1
- package/dist/chunk-5FDLC6G7.js.map +0 -1
- package/dist/chunk-6B3VNR4P.js.map +0 -1
- package/dist/chunk-6LNL42F5.js.map +0 -1
- package/dist/chunk-6QSQQLSE.js +0 -95
- package/dist/chunk-6QSQQLSE.js.map +0 -1
- package/dist/chunk-7VCXZDA4.js.map +0 -1
- package/dist/chunk-ANWPSTZU.js.map +0 -1
- package/dist/chunk-BP6DARYA.js.map +0 -1
- package/dist/chunk-BUDAGWL5.js.map +0 -1
- package/dist/chunk-CKNGS5MH.js.map +0 -1
- package/dist/chunk-DC5QVPV7.js.map +0 -1
- package/dist/chunk-DE4DH2RZ.js +0 -29
- package/dist/chunk-DE4DH2RZ.js.map +0 -1
- package/dist/chunk-DF73H4UN.js.map +0 -1
- package/dist/chunk-EIPVYUEP.js.map +0 -1
- package/dist/chunk-ENAG3IY7.js.map +0 -1
- package/dist/chunk-FCKWQE2H.js.map +0 -1
- package/dist/chunk-FFWI7UH7.js.map +0 -1
- package/dist/chunk-FQ54DWUQ.js.map +0 -1
- package/dist/chunk-FQ5VRHIB.js.map +0 -1
- package/dist/chunk-GF5BZ7D4.js.map +0 -1
- package/dist/chunk-GHLTDZRS.js.map +0 -1
- package/dist/chunk-GYGLAVCX.js.map +0 -1
- package/dist/chunk-HBPPGWUM.js.map +0 -1
- package/dist/chunk-HK67PX4J.js.map +0 -1
- package/dist/chunk-HVSCEIYL.js.map +0 -1
- package/dist/chunk-IEX7NK2K.js +0 -125
- package/dist/chunk-IEX7NK2K.js.map +0 -1
- package/dist/chunk-ISZQJBML.js.map +0 -1
- package/dist/chunk-J6UOHJY5.js.map +0 -1
- package/dist/chunk-KJFW62P4.js.map +0 -1
- package/dist/chunk-L7DOS3TE.js.map +0 -1
- package/dist/chunk-LGNDFRYC.js.map +0 -1
- package/dist/chunk-LGRLME4M.js.map +0 -1
- package/dist/chunk-LP7BEXCT.js +0 -32
- package/dist/chunk-LP7BEXCT.js.map +0 -1
- package/dist/chunk-LQ4ZHOKP.js.map +0 -1
- package/dist/chunk-M522UYZ2.js.map +0 -1
- package/dist/chunk-M7NI3IWE.js.map +0 -1
- package/dist/chunk-MTL7MXGR.js.map +0 -1
- package/dist/chunk-N5DNADLQ.js.map +0 -1
- package/dist/chunk-NNARWO72.js.map +0 -1
- package/dist/chunk-NRT6QZQB.js.map +0 -1
- package/dist/chunk-NWHBJQAL.js.map +0 -1
- package/dist/chunk-ODVPTDPK.js.map +0 -1
- package/dist/chunk-PDCG6PR5.js.map +0 -1
- package/dist/chunk-PEOZ34EM.js.map +0 -1
- package/dist/chunk-PSIV7CJV.js.map +0 -1
- package/dist/chunk-QBBUZ3I3.js.map +0 -1
- package/dist/chunk-QOOUUR4A.js.map +0 -1
- package/dist/chunk-QWFHIOD2.js.map +0 -1
- package/dist/chunk-QWGU66MP.js.map +0 -1
- package/dist/chunk-RHVMZSUU.js.map +0 -1
- package/dist/chunk-S57HTZ6X.js.map +0 -1
- package/dist/chunk-SEE332EV.js +0 -66
- package/dist/chunk-SEE332EV.js.map +0 -1
- package/dist/chunk-SOIQ4MM4.js +0 -20
- package/dist/chunk-SOIQ4MM4.js.map +0 -1
- package/dist/chunk-SYVZW77S.js.map +0 -1
- package/dist/chunk-T2LBQ5DV.js.map +0 -1
- package/dist/chunk-UBSFPGVJ.js +0 -1
- package/dist/chunk-UD5EVGZ7.js.map +0 -1
- package/dist/chunk-UPD5NWI5.js.map +0 -1
- package/dist/chunk-UYB234ZR.js +0 -479
- package/dist/chunk-UYB234ZR.js.map +0 -1
- package/dist/chunk-VNPEWFPD.js.map +0 -1
- package/dist/chunk-WX5ADGTZ.js.map +0 -1
- package/dist/chunk-X4773RBR.js.map +0 -1
- package/dist/chunk-YNIUIERI.js.map +0 -1
- package/dist/chunk-YSK2CU2Q.js.map +0 -1
- package/dist/chunk-ZE4CHIED.js.map +0 -1
- package/dist/chunk-ZXABPVM6.js.map +0 -1
- package/dist/classified-marker-W3USLL5M.js.map +0 -1
- package/dist/collection-facade-QU6IJBN3.js +0 -48
- package/dist/dead-filter-U2UYKSZL.js.map +0 -1
- package/dist/delegation-S3AEPW2T.js.map +0 -1
- package/dist/derive-OX7F6TGG.js +0 -21
- package/dist/dispatch-RH4LHKBH.js.map +0 -1
- package/dist/executor-B6SRO2QS.js +0 -36
- package/dist/executor-BI5CHWRY.js +0 -8
- package/dist/executor-RBKM5W5K.js +0 -8
- package/dist/export-accessible-VMA3YM5V.js +0 -22
- package/dist/extract-partition-NF7PXGPP.js +0 -37
- package/dist/fanout-sidecar-OT6RYLOL.js.map +0 -1
- package/dist/find-LZMP26KF.js +0 -10
- package/dist/issue-IHARXWW5.js +0 -18
- package/dist/kernel/enclave/classify/compare.d.ts +0 -10
- package/dist/kernel/enclave/index.d.ts +0 -87
- package/dist/kernel/enclave/record-keys/lifecycle.d.ts +0 -124
- package/dist/kernel/enclave/record-keys/rekey-blob.d.ts +0 -88
- package/dist/kernel/enclave/record-keys/rekey.d.ts +0 -91
- package/dist/kernel/enclave/record-keys/sealed-slot.d.ts +0 -14
- package/dist/kernel/enclave/record-keys/sealed-slots.d.ts +0 -123
- package/dist/kernel/enclave/record-keys/sealing.d.ts +0 -70
- package/dist/liberate-GRLCZMW4.js +0 -24
- package/dist/link-set-JCMJ7ULP.js +0 -30
- package/dist/noydb-SWQJ3MZS.js +0 -97
- package/dist/pod-handle-WGDFB4C2.js.map +0 -1
- package/dist/post-register-SLSXIPBV.js.map +0 -1
- package/dist/register-F3OYE7MJ.js +0 -31
- package/dist/registry-CILQFXFK.js +0 -8
- package/dist/registry-XNNYQVKV.js +0 -8
- package/dist/registry-YCDZV3VW.js +0 -35
- package/dist/registry-ZGYS33TE.js +0 -24
- package/dist/request-withdrawal-Z5NC6TXT.js +0 -30
- package/dist/reveal-4BCKPEC2.js.map +0 -1
- package/dist/revoke-ZL62WC2D.js +0 -23
- package/dist/seed-4JS2RJ4A.js.map +0 -1
- package/dist/signer-MBZZMXTC.js +0 -24
- package/dist/stale-TJ3DYZMQ.js +0 -29
- package/dist/storage-SVMKRGCW.js +0 -22
- package/dist/store-coordination-provider-2O2VUHKW.js.map +0 -1
- package/dist/verify-RVT67IMH.js.map +0 -1
- package/dist/walk-HJ42EISE.js +0 -21
- package/dist/withdraw-accessible-5NZUPAVA.js +0 -27
- /package/dist/{api-GVYEKSJE.js.map → api-MSJXVYQG.js.map} +0 -0
- /package/dist/{collection-facade-QU6IJBN3.js.map → capsule/contract.js.map} +0 -0
- /package/dist/{kernel/enclave → capsule/enclave-aes}/classify/bidx.d.ts +0 -0
- /package/dist/{kernel/enclave → capsule/enclave-aes}/classify/digest.d.ts +0 -0
- /package/dist/{kernel/enclave → capsule/enclave-aes}/classify/vdig.d.ts +0 -0
- /package/dist/{kernel/enclave/classify → capsule/plumbing}/kofn.d.ts +0 -0
- /package/dist/{kernel/enclave/classify → capsule/plumbing}/normalize.d.ts +0 -0
- /package/dist/{kernel/enclave → capsule/plumbing}/record-aad.d.ts +0 -0
- /package/dist/{chunk-UBSFPGVJ.js.map → capsule-57BDK7LG.js.map} +0 -0
- /package/dist/{computed-TPFBX7U4.js.map → chunk-2DX4JCRI.js.map} +0 -0
- /package/dist/{chunk-ZSX4S5XB.js.map → chunk-2ZFD2UJC.js.map} +0 -0
- /package/dist/{chunk-HT2AHGQI.js.map → chunk-3Y5JLSXS.js.map} +0 -0
- /package/dist/{chunk-SI3V7D4G.js.map → chunk-4UIP3QNW.js.map} +0 -0
- /package/dist/{chunk-WNJ4AVGE.js.map → chunk-55P6OBB7.js.map} +0 -0
- /package/dist/{chunk-MKXXMNJH.js.map → chunk-5UUJE4FP.js.map} +0 -0
- /package/dist/{chunk-FW22ZCXT.js.map → chunk-6WS35E6X.js.map} +0 -0
- /package/dist/{chunk-6OWXYZK2.js.map → chunk-B65CC6Z6.js.map} +0 -0
- /package/dist/{chunk-F2TDU7MQ.js.map → chunk-BJH77UY2.js.map} +0 -0
- /package/dist/{chunk-BJ2IXQ5Q.js.map → chunk-BNFNQNEP.js.map} +0 -0
- /package/dist/{chunk-HLEK5VAN.js.map → chunk-BUE7R3B5.js.map} +0 -0
- /package/dist/{chunk-EOVMT6TB.js.map → chunk-C53ER7AG.js.map} +0 -0
- /package/dist/{chunk-K6W7BVZ6.js.map → chunk-CAD7N6HQ.js.map} +0 -0
- /package/dist/{chunk-5O7D6ZTW.js.map → chunk-DHU2AQ6T.js.map} +0 -0
- /package/dist/{chunk-IT22PWKV.js.map → chunk-ECGXA4LT.js.map} +0 -0
- /package/dist/{chunk-4MXI3ODD.js.map → chunk-GCUMOKTN.js.map} +0 -0
- /package/dist/{chunk-B6SJIBQK.js.map → chunk-GOJQ5DZA.js.map} +0 -0
- /package/dist/{chunk-TKUOEU2F.js.map → chunk-JSWKVZCR.js.map} +0 -0
- /package/dist/{chunk-X25NWUZB.js.map → chunk-L5A3KR7R.js.map} +0 -0
- /package/dist/{chunk-T52GX4SA.js.map → chunk-LGGIFKJP.js.map} +0 -0
- /package/dist/{chunk-ID6Z6E66.js.map → chunk-MQ7YWBQ5.js.map} +0 -0
- /package/dist/{chunk-FN5EBVTQ.js.map → chunk-NIXRB5BP.js.map} +0 -0
- /package/dist/{chunk-HBRLNOHL.js.map → chunk-NYJBYVBG.js.map} +0 -0
- /package/dist/{chunk-ZUVBC32X.js.map → chunk-OK57EATL.js.map} +0 -0
- /package/dist/{chunk-TOPYQ6GA.js.map → chunk-PCYPXLEX.js.map} +0 -0
- /package/dist/{chunk-VNNRUGMM.js.map → chunk-PGC35KXE.js.map} +0 -0
- /package/dist/{chunk-4I522ERM.js.map → chunk-PT2YCQVK.js.map} +0 -0
- /package/dist/{chunk-Z5HTYMMQ.js.map → chunk-PTJY5R3O.js.map} +0 -0
- /package/dist/{chunk-F24ZZTHQ.js.map → chunk-QGFEBNHO.js.map} +0 -0
- /package/dist/{chunk-A6IJU4TK.js.map → chunk-QGSNJD3B.js.map} +0 -0
- /package/dist/{chunk-BK2HHQGN.js.map → chunk-QSHATAXJ.js.map} +0 -0
- /package/dist/{chunk-JCN44NCY.js.map → chunk-RIZTZJX6.js.map} +0 -0
- /package/dist/{chunk-MVZ2TPVP.js.map → chunk-RNACRT5H.js.map} +0 -0
- /package/dist/{chunk-TROR3ALR.js.map → chunk-SFCD6OU7.js.map} +0 -0
- /package/dist/{chunk-I3JDRCMW.js.map → chunk-TZYTMZZY.js.map} +0 -0
- /package/dist/{chunk-AOWGXU6D.js.map → chunk-UAKY6E4N.js.map} +0 -0
- /package/dist/{chunk-3JWHAR6E.js.map → chunk-UNSQZSZP.js.map} +0 -0
- /package/dist/{chunk-6K7DPM7D.js.map → chunk-WFWFXDNS.js.map} +0 -0
- /package/dist/{chunk-CF5UU4S7.js.map → chunk-WHOKGHJ3.js.map} +0 -0
- /package/dist/{chunk-32YV3TJT.js.map → chunk-XXNWU5QZ.js.map} +0 -0
- /package/dist/{chunk-B57AFBY2.js.map → chunk-XXQ5XIYY.js.map} +0 -0
- /package/dist/{chunk-ORDURZBU.js.map → chunk-YFFMPZPY.js.map} +0 -0
- /package/dist/{chunk-MDWKM2XC.js.map → chunk-YKGJ44Z7.js.map} +0 -0
- /package/dist/{chunk-MLPHLJIQ.js.map → chunk-ZHQJAV6D.js.map} +0 -0
- /package/dist/{chunk-7JE7BDYJ.js.map → chunk-ZVSKSUGI.js.map} +0 -0
- /package/dist/{derive-OX7F6TGG.js.map → collection-facade-LZIF7GWD.js.map} +0 -0
- /package/dist/{enclave-27SMF6GF.js.map → computed-XMFTHAXV.js.map} +0 -0
- /package/dist/{executor-B6SRO2QS.js.map → derive-3YSIS36W.js.map} +0 -0
- /package/dist/{dispatch-3CQDJV5Q.js.map → dispatch-OFDA4WQV.js.map} +0 -0
- /package/dist/{executor-BI5CHWRY.js.map → executor-E6YDJ7YA.js.map} +0 -0
- /package/dist/{executor-RBKM5W5K.js.map → executor-NJX3YQQ4.js.map} +0 -0
- /package/dist/{export-accessible-VMA3YM5V.js.map → executor-WWM3DD4P.js.map} +0 -0
- /package/dist/{extract-partition-NF7PXGPP.js.map → export-accessible-RLHU5G4W.js.map} +0 -0
- /package/dist/{find-LZMP26KF.js.map → extract-partition-QII2EDCS.js.map} +0 -0
- /package/dist/{issue-IHARXWW5.js.map → find-6M7GYDUZ.js.map} +0 -0
- /package/dist/{ledger-KZPCMVZY.js.map → issue-LPEEEMPP.js.map} +0 -0
- /package/dist/{liberate-GRLCZMW4.js.map → ledger-MSJGWKGW.js.map} +0 -0
- /package/dist/{link-set-JCMJ7ULP.js.map → liberate-LEKDYKTC.js.map} +0 -0
- /package/dist/{managed-secret-S3MQ6SH6.js.map → link-set-QXXSPPHL.js.map} +0 -0
- /package/dist/{noydb-SWQJ3MZS.js.map → managed-secret-VSK7ANQI.js.map} +0 -0
- /package/dist/{migrate-cek-V7GKJZ7O.js.map → migrate-cek-GEBFYBDC.js.map} +0 -0
- /package/dist/{register-F3OYE7MJ.js.map → noydb-F2AUF6KL.js.map} +0 -0
- /package/dist/{registry-CILQFXFK.js.map → register-SN72QALV.js.map} +0 -0
- /package/dist/{registry-XNNYQVKV.js.map → registry-253FF7C6.js.map} +0 -0
- /package/dist/{registry-YCDZV3VW.js.map → registry-3AZWQTDT.js.map} +0 -0
- /package/dist/{registry-ZGYS33TE.js.map → registry-7UEBTHWG.js.map} +0 -0
- /package/dist/{request-withdrawal-Z5NC6TXT.js.map → registry-IVJ67NFQ.js.map} +0 -0
- /package/dist/{revoke-ZL62WC2D.js.map → request-withdrawal-UKVJZKX2.js.map} +0 -0
- /package/dist/{signer-MBZZMXTC.js.map → revoke-G2KXJQA5.js.map} +0 -0
- /package/dist/{stale-TJ3DYZMQ.js.map → signer-IUIYR3CX.js.map} +0 -0
- /package/dist/{storage-SVMKRGCW.js.map → stale-SKV33PBU.js.map} +0 -0
- /package/dist/{walk-HJ42EISE.js.map → storage-NPBYP2SM.js.map} +0 -0
- /package/dist/{withdraw-accessible-5NZUPAVA.js.map → walk-F4OLXI5H.js.map} +0 -0
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* `_v`, `_ts`, `_by`, `_source`, `_sourceTs`, `_tier`, `_elevatedBy`) and a
|
|
6
6
|
* protected body (enclave-owned; `_iv`, `_data`, `_cek`, `_det`, `_sealed`,
|
|
7
7
|
* `_debug`). The four helpers below are the ONLY sanctioned way for code
|
|
8
|
-
* outside `
|
|
8
|
+
* outside `capsule/enclave-aes/**` to read or construct the protected body —
|
|
9
9
|
* later migration batches move the ~121 direct `_iv`/`_data`/`_cek`/`_sealed`
|
|
10
10
|
* access sites in `with-*` services onto these.
|
|
11
11
|
*
|
|
@@ -13,41 +13,40 @@
|
|
|
13
13
|
* per-function doc for its oracle call site) — this file introduces no new
|
|
14
14
|
* crypto or semantics, only a narrower door onto what already runs.
|
|
15
15
|
*/
|
|
16
|
-
import { type RecordIdentity, type RecordRef } from '
|
|
17
|
-
import {
|
|
18
|
-
import type { EncryptedEnvelope } from '../../types.js';
|
|
16
|
+
import { type RecordIdentity, type RecordRef } from './record-aad.js';
|
|
17
|
+
import type { CapsuleKey, CapsulePrimitives } from '../contract.js';
|
|
18
|
+
import type { EncryptedEnvelope } from '../../kernel/types.js';
|
|
19
19
|
/**
|
|
20
|
-
*
|
|
20
|
+
* The sealed body, or a typed refusal (#15).
|
|
21
21
|
*
|
|
22
|
-
*
|
|
23
|
-
* `
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
22
|
+
* Since `_iv`/`_data` became optional, every AES path that is about to call
|
|
23
|
+
* `decrypt()` needs this one narrowing. It is deliberately the ONLY place in
|
|
24
|
+
* the enclave that turns absence into an error: the alternative — a `!` or a
|
|
25
|
+
* `?? ''` at each of the two dozen decrypt sites — would have spelled the
|
|
26
|
+
* same decision twenty-four times and produced an AEAD failure (i.e. hub's
|
|
27
|
+
* tamper alert) instead of an honest one.
|
|
28
|
+
*
|
|
29
|
+
* Ask {@link hasSealedBody} FIRST when absence is a legitimate outcome; this
|
|
30
|
+
* helper is for the paths where it is not.
|
|
30
31
|
*/
|
|
31
|
-
export declare function
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
export declare function requireSealedBody(env: Pick<EncryptedEnvelope, '_iv' | '_data'>, where: string): {
|
|
33
|
+
iv: string;
|
|
34
|
+
data: string;
|
|
35
|
+
};
|
|
34
36
|
/**
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
+
* {@link requireSealedBody} shaped for the `decrypt(iv, data, …)` argument
|
|
38
|
+
* list, so a narrowing can be spliced into an existing call without
|
|
39
|
+
* restructuring the statement around it:
|
|
40
|
+
*
|
|
41
|
+
* ```ts
|
|
42
|
+
* await decrypt(...sealedBodyArgs(env, 'rekeyRecord'), dek, aad)
|
|
43
|
+
* ```
|
|
37
44
|
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
* - `opts.perRecordKey === true` → mints a fresh per-record CEK, encrypts
|
|
42
|
-
* the body under it, and AES-KW-wraps the CEK under `key` (mirrors
|
|
43
|
-
* `encryptJsonString`'s `cek !== undefined` branch, except the CEK is
|
|
44
|
-
* generated here rather than supplied by the caller).
|
|
45
|
-
* - otherwise → legacy path, body encrypted directly under `key`.
|
|
45
|
+
* The tuple return type is load-bearing — it is what lets the spread satisfy
|
|
46
|
+
* two fixed positional parameters. Widening it to `string[]` would compile
|
|
47
|
+
* here and fail at every call site.
|
|
46
48
|
*/
|
|
47
|
-
export declare function
|
|
48
|
-
encrypted?: boolean;
|
|
49
|
-
perRecordKey?: boolean;
|
|
50
|
-
}): Promise<Pick<EncryptedEnvelope, '_iv' | '_data' | '_cek'>>;
|
|
49
|
+
export declare function sealedBodyArgs(env: Pick<EncryptedEnvelope, '_iv' | '_data'>, where: string): [string, string];
|
|
51
50
|
/**
|
|
52
51
|
* Approximate protected-body payload size for KPI/telemetry (#807's
|
|
53
52
|
* period-scoped pull download counters): `_data` + `_iv` string length —
|
|
@@ -79,7 +78,7 @@ export declare function hasPerRecordKey(env: EncryptedEnvelope): boolean;
|
|
|
79
78
|
*
|
|
80
79
|
* Deliberately reimplements the two-key-object canonicalization inline
|
|
81
80
|
* rather than importing `with-commit/history/ledger/entry.ts`'s general
|
|
82
|
-
* `canonicalJson` — `
|
|
81
|
+
* `canonicalJson` — `capsule/enclave-aes/**` may import only spine types (C3),
|
|
83
82
|
* never a `with-*` service. For this fixed `{ _data: string; _sealed:
|
|
84
83
|
* Record<string, string> }` shape the two produce byte-identical output
|
|
85
84
|
* (verified against that exact call site's oracle expression in
|
|
@@ -99,21 +98,18 @@ export declare function envelopeBodyForHash(env: EncryptedEnvelope): string;
|
|
|
99
98
|
*/
|
|
100
99
|
export declare function hasSealedBody(env: Pick<EncryptedEnvelope, '_iv'>): boolean;
|
|
101
100
|
/**
|
|
102
|
-
*
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
* `enclave-body-only` reserves to this folder. An earlier draft did that test
|
|
107
|
-
* in `kernel/noydb.ts` and the guard refused it — correctly, since a caller
|
|
108
|
-
* outside the enclave inspecting protected fields is how envelope knowledge
|
|
109
|
-
* leaks back out.
|
|
110
|
-
*
|
|
111
|
-
* Returns a boolean rather than throwing: `applyRemote` must be able to reject
|
|
112
|
-
* one poisoned record without halting an entire sync, and a hostile store
|
|
113
|
-
* would very much like the opposite.
|
|
114
|
-
*
|
|
115
|
-
* **A record with no sealed body is vacuously authentic** — a tombstone carries
|
|
116
|
-
* none, and a plaintext collection has no AEAD to verify. Those are pass-through
|
|
117
|
-
* by construction, not by omission.
|
|
101
|
+
* The cipher-dependent half: the three doors that actually reach the capsule's
|
|
102
|
+
* `encrypt`/`decrypt`. Everything above this line is cipher-FREE — it inspects
|
|
103
|
+
* envelope fields or derives hash input, so it stays a plain module export that
|
|
104
|
+
* both capsules share with nothing to bind.
|
|
118
105
|
*/
|
|
119
|
-
export declare function
|
|
106
|
+
export declare function makeEnvelopeBody(p: CapsulePrimitives): {
|
|
107
|
+
openEnvelopeJson: (ref: RecordRef, env: EncryptedEnvelope, key: CapsuleKey, opts?: {
|
|
108
|
+
encrypted?: boolean;
|
|
109
|
+
}) => Promise<string>;
|
|
110
|
+
writeEnvelopeBody: (identity: RecordIdentity, json: string, key: CapsuleKey, opts?: {
|
|
111
|
+
encrypted?: boolean;
|
|
112
|
+
perRecordKey?: boolean;
|
|
113
|
+
}) => Promise<Pick<EncryptedEnvelope, "_iv" | "_data" | "_cek">>;
|
|
114
|
+
verifyRecordIdentity: (ref: RecordRef, env: EncryptedEnvelope, key: CapsuleKey) => Promise<boolean>;
|
|
115
|
+
};
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `makeCapsule()` — hub's envelope plumbing, bound to one capsule's cipher.
|
|
3
|
+
*
|
|
4
|
+
* ⭐ WHY THIS EXISTS. `enclave-aes` is ~4,200 lines, but only ~1,200 touch
|
|
5
|
+
* `crypto.subtle`. The other ~3,000 — envelope assembly, record-identity AAD,
|
|
6
|
+
* tombstones, the record codec, sealed slots, rekeying — encode HUB'S ENVELOPE
|
|
7
|
+
* FORMAT, not anyone's cipher, so they are identical for every capsule. This
|
|
8
|
+
* module is the single copy; a capsule supplies {@link CapsulePrimitives} and
|
|
9
|
+
* gets the whole surface back.
|
|
10
|
+
*
|
|
11
|
+
* The alternative was copying the plumbing into each capsule. Rejected because
|
|
12
|
+
* nothing would fail when the copies drifted: a change to the tombstone shape
|
|
13
|
+
* or the AAD would have to be made twice, and the miss surfaces as an envelope
|
|
14
|
+
* one capsule writes and the other cannot read — at runtime, in a consumer.
|
|
15
|
+
*
|
|
16
|
+
* ⚠️ BINDING IS PER-CALL, NOT PER-PROCESS, and that is load-bearing. An
|
|
17
|
+
* earlier sketch bound primitives once into module state (`setPrimitives(p)`),
|
|
18
|
+
* which is simpler and wrong: the conformance kit runs two capsules in the
|
|
19
|
+
* same process, so a single global would make the second one silently inherit
|
|
20
|
+
* the first one's cipher — and both suites would still pass.
|
|
21
|
+
*
|
|
22
|
+
* Cipher-FREE helpers are NOT in here. They are plain exports of their own
|
|
23
|
+
* modules (`buildRecordAad`, `isTombstone`, `hasSealedBody`, …) because they
|
|
24
|
+
* inspect envelope fields and need nothing bound. Re-exported below so the
|
|
25
|
+
* capsule surface stays one import for consumers.
|
|
26
|
+
*/
|
|
27
|
+
import type { CapsulePrimitives } from '../contract.js';
|
|
28
|
+
export { buildRecordAad, recordAadFor, type RecordIdentity, type RecordRef, } from './record-aad.js';
|
|
29
|
+
export { buildRecordEnvelope } from './record-envelope.js';
|
|
30
|
+
export { isTombstone, isTombstoneShape, buildTombstone, isDeleteMarker, buildDeleteMarker, } from './tombstone.js';
|
|
31
|
+
export { normalizeForVerify } from './normalize.js';
|
|
32
|
+
export { parseSealedSlot } from './sealed-slot.js';
|
|
33
|
+
export { requireSealedBody, sealedBodyArgs, envelopeBodySize, hasPerRecordKey, envelopeBodyForHash, hasSealedBody, } from './envelope-body.js';
|
|
34
|
+
/**
|
|
35
|
+
* Bind the plumbing to a capsule's primitives.
|
|
36
|
+
*
|
|
37
|
+
* Composition order is a real dependency order, not a style choice:
|
|
38
|
+
* `sealedSlot` feeds both `sealedSlots` and `sealing`; `sealedSlots` feeds the
|
|
39
|
+
* codec. Everything else depends only on `p`.
|
|
40
|
+
*/
|
|
41
|
+
export declare function makeCapsule(p: CapsulePrimitives): {
|
|
42
|
+
findByDet: <T>(ctx: import("./deterministic.js").DeterministicContext<T>, field: string, value: unknown) => Promise<T | null>;
|
|
43
|
+
queryByDet: <T>(ctx: import("./deterministic.js").DeterministicContext<T>, field: string, value: unknown) => Promise<T[]>;
|
|
44
|
+
SEALED_CEK_NS: string;
|
|
45
|
+
sealRecordToHost: (ctx: import("./sealing.js").SealingContext, collection: string, id: string, hostSealer: import("../../index.js").RecipientSealer, opts: {
|
|
46
|
+
expiresAt: string;
|
|
47
|
+
}) => Promise<{
|
|
48
|
+
pid: string;
|
|
49
|
+
envelopeKey: string;
|
|
50
|
+
}>;
|
|
51
|
+
revokeSealedRecord: (ctx: import("./sealing.js").SealingContext, collection: string, id: string, pid: string, opts?: {
|
|
52
|
+
hard?: boolean;
|
|
53
|
+
}) => Promise<void>;
|
|
54
|
+
rotateRecordCek: (ctx: import("./sealing.js").SealingContext, collection: string, id: string) => Promise<void>;
|
|
55
|
+
rekeyBlobSet: (adapter: import("../../index.js").NoydbStore, vault: string, oldDek: import("../contract.js").CapsuleKey, newDek: import("../contract.js").CapsuleKey, otherDeks?: readonly import("../contract.js").CapsuleKey[]) => Promise<import("./rekey-blob.js").BlobRekeyReport>;
|
|
56
|
+
rekeyEnvelopeToDek: (ref: {
|
|
57
|
+
readonly collection: string;
|
|
58
|
+
readonly id: string;
|
|
59
|
+
}, envelope: import("../../index.js").EncryptedEnvelope, oldDek: import("../contract.js").CapsuleKey, newDek: import("../contract.js").CapsuleKey) => Promise<import("../../index.js").EncryptedEnvelope>;
|
|
60
|
+
rekeyEnvelopeIfNeeded: (ref: {
|
|
61
|
+
readonly collection: string;
|
|
62
|
+
readonly id: string;
|
|
63
|
+
}, envelope: import("../../index.js").EncryptedEnvelope, oldDek: import("../contract.js").CapsuleKey, newDek: import("../contract.js").CapsuleKey) => Promise<import("../../index.js").EncryptedEnvelope | null>;
|
|
64
|
+
envelopeOpensUnderAny: (ref: {
|
|
65
|
+
readonly collection: string;
|
|
66
|
+
readonly id: string;
|
|
67
|
+
}, envelope: import("../../index.js").EncryptedEnvelope, keys: readonly import("../contract.js").CapsuleKey[]) => Promise<boolean>;
|
|
68
|
+
resolveStableCek: (deps: import("./lifecycle.js").StableCekDeps, id: string) => Promise<import("../contract.js").CapsuleKey>;
|
|
69
|
+
rewrapBodyToDek: (from: import("./record-aad.js").RecordIdentity, to: import("./record-aad.js").RecordIdentity, envelope: Pick<import("../../index.js").EncryptedEnvelope, "_iv" | "_data" | "_cek" | "_tier" | "_by">, fromDek: import("../contract.js").CapsuleKey, toDek: import("../contract.js").CapsuleKey) => Promise<import("./lifecycle.js").RewrappedBody>;
|
|
70
|
+
applyRewrappedBody: (envelope: import("../../index.js").EncryptedEnvelope, body: import("./lifecycle.js").RewrappedBody) => import("../../index.js").EncryptedEnvelope;
|
|
71
|
+
rewrapEnvelope: (identity: import("./record-aad.js").RecordIdentity, envelope: import("../../index.js").EncryptedEnvelope, fromDek: import("../contract.js").CapsuleKey, toDek: import("../contract.js").CapsuleKey) => Promise<import("../../index.js").EncryptedEnvelope>;
|
|
72
|
+
isRewrappedUnder: (identity: import("./record-aad.js").RecordIdentity, envelope: Pick<import("../../index.js").EncryptedEnvelope, "_iv" | "_data" | "_cek">, dek: import("../contract.js").CapsuleKey) => Promise<boolean>;
|
|
73
|
+
RecordCodec: import("./record-codec.js").BoundRecordCodec;
|
|
74
|
+
sealFields: (record: Record<string, unknown>, sensitiveFields: ReadonlySet<string>, keyMaterial: import("./sealed-slots.js").SealKeyMaterial) => Promise<import("./sealed-slots.js").SealFieldsResult>;
|
|
75
|
+
unsealOneField: (field: string, blob: string, keyMaterial: import("./sealed-slots.js").SealKeyMaterial) => Promise<unknown>;
|
|
76
|
+
makeHandleProducer: (keyMaterial: import("./sealed-slots.js").SealKeyMaterial) => (field: string, blob: string) => import("../../index.js").SealedHandle<unknown>;
|
|
77
|
+
unsealFields: (record: Record<string, unknown>, sealed: Record<string, string>, keyMaterial: import("./sealed-slots.js").SealKeyMaterial, opts?: {
|
|
78
|
+
asHandles?: boolean;
|
|
79
|
+
}) => Promise<Record<string, unknown>>;
|
|
80
|
+
makeSealedSlotCapability: (ctx: import("./sealed-slots.js").SealedSlotCapabilityCtx, recordId: string, cek?: import("../contract.js").CapsuleKey) => import("../../kernel/via/index.js").ViaCryptoCtx["sealedSlots"];
|
|
81
|
+
makeReservedEnvelopes: (dekResolver: import("./sealed-slots.js").ReservedEnvelopeDekResolver, declaredPrefixes: readonly string[]) => import("../../kernel/via/index.js").ViaCryptoCtx["reservedEnvelopes"];
|
|
82
|
+
dualReadSealedSlot: (blob: string, field: string, collection: string, cek: CryptoKey | undefined, dek: CryptoKey) => Promise<string>;
|
|
83
|
+
openEnvelopeJson: (ref: import("./record-aad.js").RecordRef, env: import("../../index.js").EncryptedEnvelope, key: import("../contract.js").CapsuleKey, opts?: {
|
|
84
|
+
encrypted?: boolean;
|
|
85
|
+
}) => Promise<string>;
|
|
86
|
+
writeEnvelopeBody: (identity: import("./record-aad.js").RecordIdentity, json: string, key: import("../contract.js").CapsuleKey, opts?: {
|
|
87
|
+
encrypted?: boolean;
|
|
88
|
+
perRecordKey?: boolean;
|
|
89
|
+
}) => Promise<Pick<import("../../index.js").EncryptedEnvelope, "_iv" | "_data" | "_cek">>;
|
|
90
|
+
verifyRecordIdentity: (ref: import("./record-aad.js").RecordRef, env: import("../../index.js").EncryptedEnvelope, key: import("../contract.js").CapsuleKey) => Promise<boolean>;
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* `RecordCodec` as a TYPE is the module-level generic base class; as a VALUE
|
|
94
|
+
* it is the capsule-bound subclass `makeCapsule()` returns. Hub parameterises
|
|
95
|
+
* the type in six places, and an `InstanceType<…>` alias would have dropped
|
|
96
|
+
* `T` at every one of them without an error — see the note in
|
|
97
|
+
* `record-codec.ts`.
|
|
98
|
+
*/
|
|
99
|
+
export type { RecordCodecBase as RecordCodec } from './record-codec.js';
|
|
100
|
+
export type Capsule = ReturnType<typeof makeCapsule>;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-record CEK lifecycle helpers for the WRITE path.
|
|
3
|
+
*
|
|
4
|
+
* These are the collection-coupled CEK operations, lifted off `Collection`
|
|
5
|
+
* behind narrow deps so the kernel file delegates instead of carrying the
|
|
6
|
+
* crypto inline:
|
|
7
|
+
*
|
|
8
|
+
* - {@link resolveStableCek} — the stable-CEK rule: an update or history
|
|
9
|
+
* snapshot reuses the record's existing CEK so a single CEK delete kills
|
|
10
|
+
* the whole version chain; a genuine insert (or legacy record being
|
|
11
|
+
* migrated) mints a fresh one.
|
|
12
|
+
* - {@link rewrapBodyToDek} — move a record body's wrapping from one DEK to
|
|
13
|
+
* another (tier elevate/demote, bundle re-key) WITHOUT changing the body
|
|
14
|
+
* key: unwrap the CEK under the source DEK, re-encrypt the body under the
|
|
15
|
+
* same CEK, re-wrap the CEK under the destination DEK. History-chain
|
|
16
|
+
* identity is preserved because the body key never changes.
|
|
17
|
+
*
|
|
18
|
+
* Both are pure functions over their deps — the `cekCache` ownership stays on
|
|
19
|
+
* the collection (its lifetime is tied to `load()`), so callers cache the
|
|
20
|
+
* returned key themselves.
|
|
21
|
+
*/
|
|
22
|
+
import type { EncryptedEnvelope } from '../../kernel/types.js';
|
|
23
|
+
import { type RecordIdentity } from './record-aad.js';
|
|
24
|
+
import type { Lru } from '../../kernel/cache/index.js';
|
|
25
|
+
/** Dependencies {@link resolveStableCek} needs from its collection. */
|
|
26
|
+
import type { CapsuleKey, CapsulePrimitives } from '../contract.js';
|
|
27
|
+
export interface StableCekDeps {
|
|
28
|
+
/** The collection's per-record CEK cache (`null` → no caching). */
|
|
29
|
+
readonly cache: Lru<string, CapsuleKey> | null;
|
|
30
|
+
/** Read the record's live envelope (to recover an existing `_cek`). */
|
|
31
|
+
getLive(id: string): Promise<EncryptedEnvelope | null>;
|
|
32
|
+
/** The DEK the CEK is wrapped under (the collection DEK on the normal path). */
|
|
33
|
+
getDEK(): Promise<CapsuleKey>;
|
|
34
|
+
}
|
|
35
|
+
/** Re-wrapped body bytes + the (optional) CEK to cache. */
|
|
36
|
+
export interface RewrappedBody {
|
|
37
|
+
readonly _iv: string;
|
|
38
|
+
readonly _data: string;
|
|
39
|
+
/** Present iff the source envelope carried a CEK (per-record-key record). */
|
|
40
|
+
readonly _cek?: string;
|
|
41
|
+
/** The body key when one exists, so the caller can cache it; `null` for a legacy record. */
|
|
42
|
+
readonly cek: CapsuleKey | null;
|
|
43
|
+
}
|
|
44
|
+
export declare function makeLifecycle(p: CapsulePrimitives): {
|
|
45
|
+
resolveStableCek: (deps: StableCekDeps, id: string) => Promise<CapsuleKey>;
|
|
46
|
+
rewrapBodyToDek: (from: RecordIdentity, to: RecordIdentity, envelope: Pick<EncryptedEnvelope, "_iv" | "_data" | "_cek" | "_tier" | "_by">, fromDek: CapsuleKey, toDek: CapsuleKey) => Promise<RewrappedBody>;
|
|
47
|
+
applyRewrappedBody: (envelope: EncryptedEnvelope, body: RewrappedBody) => EncryptedEnvelope;
|
|
48
|
+
rewrapEnvelope: (identity: RecordIdentity, envelope: EncryptedEnvelope, fromDek: CapsuleKey, toDek: CapsuleKey) => Promise<EncryptedEnvelope>;
|
|
49
|
+
isRewrappedUnder: (identity: RecordIdentity, envelope: Pick<EncryptedEnvelope, "_iv" | "_data" | "_cek">, dek: CapsuleKey) => Promise<boolean>;
|
|
50
|
+
};
|
|
@@ -16,24 +16,33 @@
|
|
|
16
16
|
*
|
|
17
17
|
* Internal service — not exported as a `@noy-db/hub/*` subpath.
|
|
18
18
|
*/
|
|
19
|
-
import { type
|
|
20
|
-
import { type
|
|
21
|
-
import { type
|
|
22
|
-
import {
|
|
23
|
-
import type {
|
|
24
|
-
import type {
|
|
25
|
-
import type { ViaPipeline } from '../../via/pipeline.js';
|
|
19
|
+
import { type EncryptedEnvelope, type CrdtMode, type CrdtStrategy, type VdigFieldPolicy, type SealedHandle } from '../../kernel/types.js';
|
|
20
|
+
import { type RecordIdentity, type RecordRef } from './record-aad.js';
|
|
21
|
+
import { type StandardSchemaV1 } from '../../kernel/schema.js';
|
|
22
|
+
import type { Lru } from '../../kernel/cache/index.js';
|
|
23
|
+
import type { ViaCryptoCtx } from '../../kernel/via/index.js';
|
|
24
|
+
import type { ViaPipeline } from '../../kernel/via/pipeline.js';
|
|
26
25
|
/**
|
|
27
|
-
* One classified per-slot verdict from {@link
|
|
26
|
+
* One classified per-slot verdict from {@link RecordCodecBase.classifySealedShred}.
|
|
28
27
|
* `shreddable` — CEK-only, tombstone makes it undecryptable. `dekResidue` —
|
|
29
28
|
* collection-DEK-keyed, survives in synced/backup copies. The third class is
|
|
30
29
|
* BOTH: a `_bidx` blind-index tag is live-dropped by the tombstone yet retained
|
|
31
30
|
* under the surviving DEK in any pre-forget backup (honest dual accounting).
|
|
32
31
|
*/
|
|
32
|
+
import type { CapsuleKey, CapsulePrimitives } from '../contract.js';
|
|
33
|
+
import type { makeSealedSlots } from './sealed-slots.js';
|
|
33
34
|
export type SealedShredSlot = {
|
|
34
35
|
readonly field: string;
|
|
35
36
|
readonly class: 'shreddable' | 'dekResidue' | 'live-shreddable+dekResidue-in-backups';
|
|
36
37
|
};
|
|
38
|
+
/**
|
|
39
|
+
* The record codec, bound to a capsule.
|
|
40
|
+
*
|
|
41
|
+
* ⚠️ `RecordCodec` is a CLASS declared inside this factory, so the NAME is no
|
|
42
|
+
* longer a module-level type. Hub names it in ~40 places as a type, which is
|
|
43
|
+
* why `plumbing/index.ts` re-exports an `InstanceType<…>` alias under the same
|
|
44
|
+
* name — the type keeps working unchanged for every existing consumer.
|
|
45
|
+
*/
|
|
37
46
|
/** Everything the moving crypto methods touched on `this.*`, as a flat context. */
|
|
38
47
|
export interface RecordCodecContext<T> {
|
|
39
48
|
/** Collection name — the crypto AAD scope and schema-error context. */
|
|
@@ -75,13 +84,13 @@ export interface RecordCodecContext<T> {
|
|
|
75
84
|
* `_dict_status` collection) so a binding's at-rest hook can address a
|
|
76
85
|
* different collection's DEK without ever holding the resolver itself.
|
|
77
86
|
*/
|
|
78
|
-
getDEK(collection?: string): Promise<
|
|
87
|
+
getDEK(collection?: string): Promise<CapsuleKey>;
|
|
79
88
|
/**
|
|
80
89
|
* The collection's per-record CEK cache (SHARED reference, not a copy).
|
|
81
90
|
* Ownership/lifetime stays on Collection; codec reads+writes it in
|
|
82
91
|
* resolveEnvelopeCek exactly as the inline code did. `null` → no caching.
|
|
83
92
|
*/
|
|
84
|
-
readonly cekCache: Lru<string,
|
|
93
|
+
readonly cekCache: Lru<string, CapsuleKey> | null;
|
|
85
94
|
/**
|
|
86
95
|
* Compiled Via pipeline (money, i18n, …), or undefined for a collection
|
|
87
96
|
* with none declared. `encryptRecord`/`decryptRecord` consult
|
|
@@ -92,7 +101,7 @@ export interface RecordCodecContext<T> {
|
|
|
92
101
|
*
|
|
93
102
|
* Mutable (not `readonly`, #638 Task 3): `Collection.via` can be
|
|
94
103
|
* reassigned post-construction (the taint overlay, `via/graph-wiring.ts#
|
|
95
|
-
* applyTaintOverlay`) — `
|
|
104
|
+
* applyTaintOverlay`) — `RecordCodecBase.setVia` below keeps this in sync so
|
|
96
105
|
* at-rest hooks read the LIVE pipeline, not a stale construction-time
|
|
97
106
|
* snapshot.
|
|
98
107
|
*/
|
|
@@ -110,9 +119,27 @@ export interface RecordCodecContext<T> {
|
|
|
110
119
|
*/
|
|
111
120
|
readonly onDecrypt?: ((id: string) => void) | undefined;
|
|
112
121
|
}
|
|
113
|
-
|
|
122
|
+
/**
|
|
123
|
+
* The codec's capsule-provided surface: the 15 primitives + sealed-slot helpers
|
|
124
|
+
* its methods call.
|
|
125
|
+
*/
|
|
126
|
+
export type CapsuleBinding = CapsulePrimitives & ReturnType<typeof makeSealedSlots>;
|
|
127
|
+
/**
|
|
128
|
+
* ⚠️ MODULE-LEVEL AND GENERIC ON PURPOSE. The obvious shape — declaring the
|
|
129
|
+
* class inside `makeRecordCodec` and exporting `InstanceType<…>` — compiles and
|
|
130
|
+
* silently DROPS `T`: `RecordCodec<Invoice>` degrades to `RecordCodec<unknown>`
|
|
131
|
+
* at the six places hub parameterises it, turning typed records into `unknown`
|
|
132
|
+
* with no error anywhere.
|
|
133
|
+
*
|
|
134
|
+
* The other way to keep `T` would be a hand-written `interface RecordCodec<T>`
|
|
135
|
+
* that the class implements — i.e. a second declaration of 15 signatures that
|
|
136
|
+
* nothing checks against the first. That is exactly the drift #16 was, so it
|
|
137
|
+
* was not done twice. A base class has one declaration and cannot drift.
|
|
138
|
+
*/
|
|
139
|
+
export declare class RecordCodecBase<T> {
|
|
140
|
+
protected readonly caps: CapsuleBinding;
|
|
114
141
|
private readonly ctx;
|
|
115
|
-
constructor(ctx: RecordCodecContext<T>);
|
|
142
|
+
constructor(caps: CapsuleBinding, ctx: RecordCodecContext<T>);
|
|
116
143
|
/**
|
|
117
144
|
* @internal Update the live Via pipeline this codec's at-rest hooks read
|
|
118
145
|
* (#638 Task 3) — called by `via/graph-wiring.ts#applyTaintOverlay` right
|
|
@@ -195,7 +222,7 @@ export declare class RecordCodec<T> {
|
|
|
195
222
|
* the choice must be made before AAD is switched on, not inferred from this
|
|
196
223
|
* migration.
|
|
197
224
|
*/
|
|
198
|
-
encryptJsonString(ref: RecordRef, json: string, version: number, cek?:
|
|
225
|
+
encryptJsonString(ref: RecordRef, json: string, version: number, cek?: CapsuleKey, source?: string, sourceTs?: string): Promise<EncryptedEnvelope>;
|
|
199
226
|
/**
|
|
200
227
|
* `ref` is FIRST and required (#1051). It was previously a trailing optional
|
|
201
228
|
* `id?: string`, which TypeScript cannot promote to required because it sits
|
|
@@ -207,7 +234,7 @@ export declare class RecordCodec<T> {
|
|
|
207
234
|
* compile on the hottest write path. Carries the collection too — see
|
|
208
235
|
* {@link encryptJsonString} for why the codec must not assume its own.
|
|
209
236
|
*/
|
|
210
|
-
encryptRecord(ref: RecordRef, record: T, version: number, cek?:
|
|
237
|
+
encryptRecord(ref: RecordRef, record: T, version: number, cek?: CapsuleKey, source?: string, sourceTs?: string, vdig?: {
|
|
211
238
|
readonly id: string;
|
|
212
239
|
readonly prev: EncryptedEnvelope | null;
|
|
213
240
|
}): Promise<EncryptedEnvelope>;
|
|
@@ -219,7 +246,7 @@ export declare class RecordCodec<T> {
|
|
|
219
246
|
* ({@link decryptJsonString}) and the sealed-field path ({@link decryptRecord}
|
|
220
247
|
* / {@link toCacheRecord}) so both agree on the record's key.
|
|
221
248
|
*/
|
|
222
|
-
resolveEnvelopeCek(envelope: EncryptedEnvelope, id?: string): Promise<
|
|
249
|
+
resolveEnvelopeCek(envelope: EncryptedEnvelope, id?: string): Promise<CapsuleKey | undefined>;
|
|
223
250
|
/**
|
|
224
251
|
* Low-level: decrypt an envelope and return the raw JSON string.
|
|
225
252
|
*
|
|
@@ -262,7 +289,7 @@ export declare class RecordCodec<T> {
|
|
|
262
289
|
* {@link Sealed} handle's `reveal()` — so the on-demand reveal and the eager
|
|
263
290
|
* materialisation always agree byte-for-byte.
|
|
264
291
|
*/
|
|
265
|
-
unsealField(field: string, blob: string, cek?:
|
|
292
|
+
unsealField(field: string, blob: string, cek?: CapsuleKey): Promise<unknown>;
|
|
266
293
|
/**
|
|
267
294
|
* Build the `ViaCryptoCtx` for forget()'s per-ref via-erase fold (#629
|
|
268
295
|
* Task 10) — resolves the live envelope's CEK exactly like
|
|
@@ -291,7 +318,7 @@ export declare class RecordCodec<T> {
|
|
|
291
318
|
* may sit in the working-set cache (or be logged/serialised) without
|
|
292
319
|
* exposing the value, which decrypts only on `reveal()`.
|
|
293
320
|
*/
|
|
294
|
-
makeSealedHandle(field: string, blob: string, cek?:
|
|
321
|
+
makeSealedHandle(field: string, blob: string, cek?: CapsuleKey): SealedHandle<unknown>;
|
|
295
322
|
/**
|
|
296
323
|
* Replace every field the just-written envelope actually sealed with a
|
|
297
324
|
* {@link Sealed} handle, leaving every other field as its plaintext value.
|
|
@@ -333,7 +360,7 @@ export declare class RecordCodec<T> {
|
|
|
333
360
|
* never a tier DEK (tier writes don't seal fields; `_sealed` reaches a
|
|
334
361
|
* tiered envelope only via a tier-0 write later elevated).
|
|
335
362
|
*/
|
|
336
|
-
applySealedSlots(record: T, sealed: Record<string, string>, cek:
|
|
363
|
+
applySealedSlots(record: T, sealed: Record<string, string>, cek: CapsuleKey | undefined, opts?: {
|
|
337
364
|
id?: string;
|
|
338
365
|
sealedAsHandles?: boolean;
|
|
339
366
|
}): Promise<T>;
|
|
@@ -363,7 +390,7 @@ export declare class RecordCodec<T> {
|
|
|
363
390
|
* output-recompute path, not the public per-record read surface schema
|
|
364
391
|
* validation guards.
|
|
365
392
|
*/
|
|
366
|
-
decryptRecordAtDek(ref: RecordRef, envelope: EncryptedEnvelope, dek:
|
|
393
|
+
decryptRecordAtDek(ref: RecordRef, envelope: EncryptedEnvelope, dek: CapsuleKey): Promise<T | null>;
|
|
367
394
|
/**
|
|
368
395
|
* Decrypt an envelope into a record of type `T`.
|
|
369
396
|
*
|
|
@@ -384,3 +411,18 @@ export declare class RecordCodec<T> {
|
|
|
384
411
|
sealedAsHandles?: boolean;
|
|
385
412
|
}): Promise<T | null>;
|
|
386
413
|
}
|
|
414
|
+
/**
|
|
415
|
+
* The capsule-bound codec constructor: same shape callers have always used
|
|
416
|
+
* (`new RecordCodec(ctx)`), with the capsule already closed over.
|
|
417
|
+
*/
|
|
418
|
+
/**
|
|
419
|
+
* `BoundRecordCodec` — PUBLISHED API, reachable from @noy-db/hub/capsule. Flagged as unused because
|
|
420
|
+
* nothing inside hub imports it from this module; a consumer does. Do not narrow
|
|
421
|
+
* or delete without a seam change (#55).
|
|
422
|
+
*
|
|
423
|
+
* @public
|
|
424
|
+
*/
|
|
425
|
+
export type BoundRecordCodec = (new <T>(ctx: RecordCodecContext<T>) => RecordCodecBase<T>) & Omit<typeof RecordCodecBase, never>;
|
|
426
|
+
export declare function makeRecordCodec(p: CapsulePrimitives, slots: ReturnType<typeof makeSealedSlots>): {
|
|
427
|
+
RecordCodec: BoundRecordCodec;
|
|
428
|
+
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { EncryptedEnvelope } from '
|
|
1
|
+
import type { EncryptedEnvelope } from '../../kernel/types.js';
|
|
2
2
|
import type { RecordIdentity } from './record-aad.js';
|
|
3
3
|
/** The body an envelope carries, independent of who is writing it. */
|
|
4
4
|
export interface RecordEnvelopeBody {
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { NoydbStore } from '../../kernel/types.js';
|
|
2
|
+
/** Blob metadata envelopes, keyed by eTag. owner: with-shape/blobs/blob-set.ts */
|
|
3
|
+
import type { CapsuleKey, CapsulePrimitives } from '../contract.js';
|
|
4
|
+
/**
|
|
5
|
+
* What a rotation did to the blob set.
|
|
6
|
+
*
|
|
7
|
+
* Deliberately NOT on the enclave barrel: no caller outside this module binds
|
|
8
|
+
* it, and that surface is the fork-swap trust boundary, so exporting a type
|
|
9
|
+
* nobody consumes is pure widening.
|
|
10
|
+
*
|
|
11
|
+
* It is a return value rather than a log line because `foreign` and `blobs`
|
|
12
|
+
* are the only way to tell "left alone, correctly" from "left alone, because
|
|
13
|
+
* the caller passed a wrong `otherDeks` set". Both re-key nothing and both
|
|
14
|
+
* return successfully. `rotate-preserves-blobs.test.ts` asserts these counts
|
|
15
|
+
* against a direct call for exactly that reason.
|
|
16
|
+
*/
|
|
17
|
+
export interface BlobRekeyReport {
|
|
18
|
+
/** Index envelopes moved onto the new DEK. */
|
|
19
|
+
readonly blobs: number;
|
|
20
|
+
/** Chunk envelopes re-encrypted under the new DEK. */
|
|
21
|
+
readonly chunks: number;
|
|
22
|
+
/**
|
|
23
|
+
* Index envelopes left alone because they open under a DEK the caller holds
|
|
24
|
+
* for a DIFFERENT slot — an elevated blob, sealed under `_blob#<tier>`. Those
|
|
25
|
+
* are that slot's rotation to do, not this one's.
|
|
26
|
+
*/
|
|
27
|
+
readonly foreign: number;
|
|
28
|
+
/** Index envelopes already under the new DEK — a resumed rotation. */
|
|
29
|
+
readonly alreadyMoved: number;
|
|
30
|
+
}
|
|
31
|
+
export declare function makeRekeyBlob(p: CapsulePrimitives): {
|
|
32
|
+
rekeyBlobSet: (adapter: NoydbStore, vault: string, oldDek: CapsuleKey, newDek: CapsuleKey, otherDeks?: readonly CapsuleKey[]) => Promise<BlobRekeyReport>;
|
|
33
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { EncryptedEnvelope } from '../../kernel/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Produce the envelope `envelope` becomes once its collection's DEK rotates
|
|
4
|
+
* from `oldDek` to `newDek`.
|
|
5
|
+
*
|
|
6
|
+
* **Every slot is carried forward except `_bidx`.** The previous inline version
|
|
7
|
+
* built a fresh literal holding only `_noydb/_v/_ts/_iv/_data`, silently
|
|
8
|
+
* discarding `_by`, `_tier`, `_cek`, `_sealed`, `_vdig` and `_source`. Losing
|
|
9
|
+
* `_tier` was the worst of those: tier-0 reads treat elevated as missing, so an
|
|
10
|
+
* elevated record did not error after a rotation — it simply disappeared.
|
|
11
|
+
*
|
|
12
|
+
* `_bidx` is dropped deliberately. It is a DEK-rooted equality tag, so a tag
|
|
13
|
+
* carried across a DEK rotation can never be re-derived to match a query again
|
|
14
|
+
* while still leaking the old equality partition. Index coverage regrows
|
|
15
|
+
* per-record on the next `put()` under the new DEK.
|
|
16
|
+
*
|
|
17
|
+
* Two shapes, and picking the wrong one is why this needed a helper:
|
|
18
|
+
*
|
|
19
|
+
* - **per-record CEK** (`_cek` present) — the body is sealed under the CEK and
|
|
20
|
+
* the CEK is wrapped under the collection DEK, so rotation re-wraps the CEK
|
|
21
|
+
* and leaves the body **untouched**. The old inline code instead ran
|
|
22
|
+
* `decrypt(body, oldDek)` on these, which throws: rotation could not complete
|
|
23
|
+
* on a collection containing any CEK record.
|
|
24
|
+
* - **bare** — body sealed directly under the DEK, so decrypt and re-encrypt.
|
|
25
|
+
*
|
|
26
|
+
* Idempotence is the caller's problem, not this function's: it assumes
|
|
27
|
+
* `envelope` is still under `oldDek`. A resumable rotation must know which side
|
|
28
|
+
* of the migration each record is on before calling.
|
|
29
|
+
*/
|
|
30
|
+
import type { CapsuleKey, CapsulePrimitives } from '../contract.js';
|
|
31
|
+
export declare function makeRekey(p: CapsulePrimitives): {
|
|
32
|
+
rekeyEnvelopeToDek: (ref: {
|
|
33
|
+
readonly collection: string;
|
|
34
|
+
readonly id: string;
|
|
35
|
+
}, envelope: EncryptedEnvelope, oldDek: CapsuleKey, newDek: CapsuleKey) => Promise<EncryptedEnvelope>;
|
|
36
|
+
rekeyEnvelopeIfNeeded: (ref: {
|
|
37
|
+
readonly collection: string;
|
|
38
|
+
readonly id: string;
|
|
39
|
+
}, envelope: EncryptedEnvelope, oldDek: CapsuleKey, newDek: CapsuleKey) => Promise<EncryptedEnvelope | null>;
|
|
40
|
+
envelopeOpensUnderAny: (ref: {
|
|
41
|
+
readonly collection: string;
|
|
42
|
+
readonly id: string;
|
|
43
|
+
}, envelope: EncryptedEnvelope, keys: readonly CapsuleKey[]) => Promise<boolean>;
|
|
44
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sealed-slot (`iv:data`) parsing + the CEK/DEK dual-read, factored out so the
|
|
3
|
+
* three callers that decrypt a `_sealed[field]` slot share ONE implementation
|
|
4
|
+
* with no coupling between them:
|
|
5
|
+
*
|
|
6
|
+
* - {@link RecordCodec.unsealField} / `classifySealedShred` (read + classify),
|
|
7
|
+
* - `record-keys/sealing.ts:rotateRecordCek` (re-seal under a new CEK).
|
|
8
|
+
*
|
|
9
|
+
* These are pure helpers over an explicit `(cek, dek)` pair — NOT a context
|
|
10
|
+
* object — so `sealing.ts` (which holds only the DEK) can import them without
|
|
11
|
+
* pulling in the whole codec, avoiding a codec↔sealing dependency cycle.
|
|
12
|
+
*/
|
|
13
|
+
import type { CapsulePrimitives } from '../contract.js';
|
|
14
|
+
/** Parse an `iv:data` sealed slot (split on the FIRST `:`). Cipher-free, so it
|
|
15
|
+
* needs no primitives and stays a plain module-level export. */
|
|
16
|
+
export declare function parseSealedSlot(blob: string): {
|
|
17
|
+
iv: string;
|
|
18
|
+
data: string;
|
|
19
|
+
};
|
|
20
|
+
export declare function makeSealedSlot(p: CapsulePrimitives): {
|
|
21
|
+
dualReadSealedSlot: (blob: string, field: string, collection: string, cek: CryptoKey | undefined, dek: CryptoKey) => Promise<string>;
|
|
22
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { SealedHandle } from '../../kernel/types.js';
|
|
2
|
+
import type { ViaCryptoCtx } from '../../kernel/via/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Key material for one collection's sealed-field derivation. `cek`, when
|
|
5
|
+
* supplied, is preferred (record-scoped); `getDEK` is the fallback (and,
|
|
6
|
+
* for legacy/no-CEK collections, the only key) — mirrors the dual-read
|
|
7
|
+
* `RecordCodec` has always done.
|
|
8
|
+
*/
|
|
9
|
+
import type { CapsuleKey, CapsulePrimitives } from '../contract.js';
|
|
10
|
+
export interface SealKeyMaterial {
|
|
11
|
+
readonly collection: string;
|
|
12
|
+
readonly cek?: CapsuleKey;
|
|
13
|
+
getDEK(): Promise<CapsuleKey>;
|
|
14
|
+
}
|
|
15
|
+
export interface SealFieldsResult {
|
|
16
|
+
readonly openRecord: Record<string, unknown>;
|
|
17
|
+
readonly sealed: Record<string, string> | undefined;
|
|
18
|
+
}
|
|
19
|
+
/** What {@link makeSealedSlotCapability} needs — a subset of `RecordCodecContext`. */
|
|
20
|
+
export interface SealedSlotCapabilityCtx {
|
|
21
|
+
readonly name: string;
|
|
22
|
+
getDEK(): Promise<CapsuleKey>;
|
|
23
|
+
}
|
|
24
|
+
/** Resolve the DEK for an arbitrary (possibly synthetic, e.g. `_dict_en`) collection name. */
|
|
25
|
+
export type ReservedEnvelopeDekResolver = (collection: string) => Promise<CapsuleKey>;
|
|
26
|
+
export declare function makeSealedSlots(p: CapsulePrimitives, sealedSlot: {
|
|
27
|
+
dualReadSealedSlot: (blob: string, field: string, collection: string, cek: CapsuleKey | undefined, dek: CapsuleKey) => Promise<string>;
|
|
28
|
+
}): {
|
|
29
|
+
sealFields: (record: Record<string, unknown>, sensitiveFields: ReadonlySet<string>, keyMaterial: SealKeyMaterial) => Promise<SealFieldsResult>;
|
|
30
|
+
unsealOneField: (field: string, blob: string, keyMaterial: SealKeyMaterial) => Promise<unknown>;
|
|
31
|
+
makeHandleProducer: (keyMaterial: SealKeyMaterial) => (field: string, blob: string) => SealedHandle<unknown>;
|
|
32
|
+
unsealFields: (record: Record<string, unknown>, sealed: Record<string, string>, keyMaterial: SealKeyMaterial, opts?: {
|
|
33
|
+
asHandles?: boolean;
|
|
34
|
+
}) => Promise<Record<string, unknown>>;
|
|
35
|
+
makeSealedSlotCapability: (ctx: SealedSlotCapabilityCtx, recordId: string, cek?: CapsuleKey) => ViaCryptoCtx["sealedSlots"];
|
|
36
|
+
makeReservedEnvelopes: (dekResolver: ReservedEnvelopeDekResolver, declaredPrefixes: readonly string[]) => ViaCryptoCtx["reservedEnvelopes"];
|
|
37
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type NoydbStore, type RecipientSealer } from '../../kernel/types.js';
|
|
2
|
+
import type { CapsuleKey, CapsulePrimitives } from '../contract.js';
|
|
3
|
+
/** What the grantor functions need from their `Vault`. */
|
|
4
|
+
export interface SealingContext {
|
|
5
|
+
readonly adapter: NoydbStore;
|
|
6
|
+
/** Vault id (the adapter's first coordinate). */
|
|
7
|
+
readonly vault: string;
|
|
8
|
+
/** Resolve the DEK a record's CEK is wrapped under. */
|
|
9
|
+
getDEK(collection: string): Promise<CapsuleKey>;
|
|
10
|
+
/** Actor id stamped on `_by` (empty string → omit). */
|
|
11
|
+
readonly actor: string;
|
|
12
|
+
/** Evict the per-record CEK cache + decrypted-record cache after a rotation. */
|
|
13
|
+
invalidateRecordCaches(collection: string, id: string): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
export declare function makeSealing(p: CapsulePrimitives, sealedSlot: {
|
|
16
|
+
dualReadSealedSlot: (blob: string, field: string, collection: string, cek: CapsuleKey | undefined, dek: CapsuleKey) => Promise<string>;
|
|
17
|
+
}): {
|
|
18
|
+
SEALED_CEK_NS: string;
|
|
19
|
+
sealRecordToHost: (ctx: SealingContext, collection: string, id: string, hostSealer: RecipientSealer, opts: {
|
|
20
|
+
expiresAt: string;
|
|
21
|
+
}) => Promise<{
|
|
22
|
+
pid: string;
|
|
23
|
+
envelopeKey: string;
|
|
24
|
+
}>;
|
|
25
|
+
revokeSealedRecord: (ctx: SealingContext, collection: string, id: string, pid: string, opts?: {
|
|
26
|
+
hard?: boolean;
|
|
27
|
+
}) => Promise<void>;
|
|
28
|
+
rotateRecordCek: (ctx: SealingContext, collection: string, id: string) => Promise<void>;
|
|
29
|
+
};
|