@noy-db/hub 0.7.1-pre.0 → 0.8.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 +147 -14
- package/LICENSE +202 -21
- package/NOTICE +1 -0
- package/README.md +5 -5
- package/codemods/0.8.0-pre.json +61 -0
- package/dist/api-OS747DS4.js +18 -0
- package/dist/as/index.js +11 -12
- package/dist/as/index.js.map +1 -1
- package/dist/at/index.js +9 -10
- package/dist/attestation/index.js +37 -26
- package/dist/attestation/index.js.map +1 -1
- package/dist/{backup-XKCXVKV3.js → backup-YE2VQ26S.js} +15 -16
- package/dist/backup-YE2VQ26S.js.map +1 -0
- package/dist/blobs/index.js +13 -14
- package/dist/blobs/index.js.map +1 -1
- package/dist/broker/index.js +12 -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/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 +335 -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 +80 -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-VOLX3QRQ.js +209 -0
- package/dist/cargo/index.js +39 -36
- package/dist/{chunk-Q2MPFCQ7.js → chunk-23D6M6VM.js} +5 -5
- package/dist/chunk-23D6M6VM.js.map +1 -0
- package/dist/{chunk-R7BX2NB3.js → chunk-244QBK7Z.js} +4 -4
- package/dist/chunk-244QBK7Z.js.map +1 -0
- package/dist/chunk-2AFX33YA.js +936 -0
- package/dist/chunk-2AFX33YA.js.map +1 -0
- package/dist/{chunk-MVMXZYXT.js → chunk-2GHDLTPE.js} +2 -2
- package/dist/{chunk-GYGLAVCX.js → chunk-2MG3SW7Q.js} +6 -2
- package/dist/chunk-2MG3SW7Q.js.map +1 -0
- package/dist/{chunk-XLMEZIAJ.js → chunk-2ODVB6LZ.js} +2 -2
- package/dist/{chunk-HJUWN7JN.js → chunk-2PVXF5CS.js} +33 -8
- package/dist/chunk-2PVXF5CS.js.map +1 -0
- package/dist/{chunk-YJRT5UQM.js → chunk-2RH777HH.js} +21 -20
- package/dist/{chunk-YJRT5UQM.js.map → chunk-2RH777HH.js.map} +1 -1
- package/dist/{chunk-7O3Y4PPD.js → chunk-37EPTBBR.js} +153 -16
- package/dist/chunk-37EPTBBR.js.map +1 -0
- package/dist/{chunk-2ENE6445.js → chunk-3A5DUZ56.js} +102 -16
- package/dist/chunk-3A5DUZ56.js.map +1 -0
- package/dist/chunk-3EWS67C7.js +461 -0
- package/dist/chunk-3EWS67C7.js.map +1 -0
- package/dist/{chunk-SGZAIJCV.js → chunk-3L2NBKDR.js} +4 -8
- package/dist/chunk-3L2NBKDR.js.map +1 -0
- package/dist/{chunk-YMUFFJCO.js → chunk-3TDUWVWB.js} +5 -2
- package/dist/chunk-3TDUWVWB.js.map +1 -0
- package/dist/{chunk-4GVM6QZA.js → chunk-3XJQBBZD.js} +26 -28
- package/dist/chunk-3XJQBBZD.js.map +1 -0
- package/dist/{chunk-4ZS56W5S.js → chunk-42ALPZ2B.js} +672 -664
- package/dist/chunk-42ALPZ2B.js.map +1 -0
- package/dist/chunk-4CIQDWRB.js +524 -0
- package/dist/chunk-4CIQDWRB.js.map +1 -0
- package/dist/{chunk-RMS3NEA3.js → chunk-4JPMZTJY.js} +2 -2
- package/dist/{chunk-P3MG6QCN.js → chunk-4T3SE27M.js} +5 -9
- package/dist/chunk-4T3SE27M.js.map +1 -0
- package/dist/chunk-4V3Q35WG.js +204 -0
- package/dist/chunk-4V3Q35WG.js.map +1 -0
- package/dist/{chunk-NQKIUNW5.js → chunk-52MGURXO.js} +2 -2
- package/dist/{chunk-EQEYOJBM.js → chunk-5A4345TG.js} +4 -4
- package/dist/chunk-5A4345TG.js.map +1 -0
- package/dist/{chunk-334WSVOW.js → chunk-5FE75J4S.js} +6 -6
- package/dist/chunk-5FE75J4S.js.map +1 -0
- package/dist/chunk-5KC7QYEC.js +565 -0
- package/dist/chunk-5KC7QYEC.js.map +1 -0
- package/dist/{chunk-RSGLUIO6.js → chunk-5UMK7GRI.js} +13 -12
- package/dist/chunk-5UMK7GRI.js.map +1 -0
- package/dist/chunk-5WWDGFOS.js +275 -0
- package/dist/chunk-5WWDGFOS.js.map +1 -0
- package/dist/{chunk-QPQUVOZ2.js → chunk-6QVKPHBF.js} +3 -5
- package/dist/chunk-6QVKPHBF.js.map +1 -0
- package/dist/{chunk-ACAQ2DSG.js → chunk-747G6CT3.js} +2 -2
- package/dist/chunk-747G6CT3.js.map +1 -0
- package/dist/{chunk-QTQUH4DS.js → chunk-7R2Q7CPL.js} +16 -16
- package/dist/chunk-7R2Q7CPL.js.map +1 -0
- package/dist/{chunk-UGTBXF5U.js → chunk-7XMHMVTS.js} +3 -3
- package/dist/{chunk-YJX7EOJD.js → chunk-A4XMIZT3.js} +6 -6
- package/dist/{chunk-YJX7EOJD.js.map → chunk-A4XMIZT3.js.map} +1 -1
- package/dist/{chunk-A66I4JOA.js → chunk-AEQGFRU4.js} +4 -4
- package/dist/chunk-AEQGFRU4.js.map +1 -0
- package/dist/chunk-AL6ML4LA.js +1558 -0
- package/dist/chunk-AL6ML4LA.js.map +1 -0
- package/dist/{chunk-BZ3534YM.js → chunk-AUKKUPVB.js} +2 -2
- package/dist/{chunk-CUZLNGD5.js → chunk-B2YY6WDD.js} +1 -1
- package/dist/chunk-B2YY6WDD.js.map +1 -0
- package/dist/chunk-BKT776R5.js +1 -0
- package/dist/chunk-BNWA3WG5.js +22 -0
- package/dist/chunk-BNWA3WG5.js.map +1 -0
- package/dist/{chunk-VXANTWBJ.js → chunk-BPWYQ25R.js} +92 -6
- package/dist/{chunk-VXANTWBJ.js.map → chunk-BPWYQ25R.js.map} +1 -1
- package/dist/{chunk-6LKOJBV6.js → chunk-BVCUTXE3.js} +2 -2
- package/dist/chunk-CY2CYVWZ.js +41 -0
- package/dist/chunk-CY2CYVWZ.js.map +1 -0
- package/dist/{chunk-M4YPHYEH.js → chunk-DHHGL42E.js} +70 -25
- package/dist/chunk-DHHGL42E.js.map +1 -0
- package/dist/{chunk-VTFVLCUH.js → chunk-DIZLQVAA.js} +2 -2
- package/dist/{chunk-G73UVHCA.js → chunk-DLD5LGDS.js} +11 -12
- package/dist/chunk-DLD5LGDS.js.map +1 -0
- package/dist/{chunk-WQBG4SZS.js → chunk-DQESF6RP.js} +60 -49
- package/dist/chunk-DQESF6RP.js.map +1 -0
- package/dist/{chunk-LWBCUYZW.js → chunk-E2N2T5ZO.js} +2 -2
- package/dist/{chunk-3PGS7TYR.js → chunk-EGVJ7TM4.js} +29 -32
- package/dist/chunk-EGVJ7TM4.js.map +1 -0
- package/dist/{chunk-JVIBCBC7.js → chunk-EJLV62NI.js} +2 -2
- package/dist/{chunk-KKEESNPE.js → chunk-EYG2CY2X.js} +126 -19
- package/dist/chunk-EYG2CY2X.js.map +1 -0
- package/dist/{enclave-55PAM4YO.js → chunk-EZGV6F47.js} +83 -56
- package/dist/chunk-EZGV6F47.js.map +1 -0
- package/dist/{chunk-CHQCZZWC.js → chunk-EZOAKKTB.js} +36 -27
- package/dist/chunk-EZOAKKTB.js.map +1 -0
- package/dist/chunk-F6NCB7KT.js +13 -0
- package/dist/chunk-F6NCB7KT.js.map +1 -0
- package/dist/chunk-FFJFE4T7.js +100 -0
- package/dist/chunk-FFJFE4T7.js.map +1 -0
- package/dist/{chunk-JMGDHKQF.js → chunk-FLPCETP6.js} +2 -2
- package/dist/chunk-FOEDQATO.js +53 -0
- package/dist/chunk-FOEDQATO.js.map +1 -0
- package/dist/{chunk-DGOZ4UZD.js → chunk-FVH5QYY2.js} +2 -2
- package/dist/{chunk-HIWCKBEY.js → chunk-G2MVBDFP.js} +54 -28
- package/dist/chunk-G2MVBDFP.js.map +1 -0
- package/dist/chunk-GMKGGY7V.js +234 -0
- package/dist/chunk-GMKGGY7V.js.map +1 -0
- package/dist/{chunk-EIPVYUEP.js → chunk-GQ4MF3CM.js} +3 -3
- package/dist/chunk-GQ4MF3CM.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-5VCRVKOZ.js → chunk-GUZET4SG.js} +12 -4
- package/dist/chunk-GUZET4SG.js.map +1 -0
- package/dist/{chunk-JBDFMYKQ.js → chunk-GZT3NQRA.js} +2 -2
- package/dist/{chunk-K23VKTN4.js → chunk-H23XHRTT.js} +19 -34
- package/dist/chunk-H23XHRTT.js.map +1 -0
- package/dist/{chunk-TFR7DSOV.js → chunk-H427H63K.js} +2 -2
- package/dist/{chunk-DFMWUOU5.js → chunk-H7JBY4P7.js} +23 -32
- package/dist/chunk-H7JBY4P7.js.map +1 -0
- package/dist/{chunk-SKGMN35F.js → chunk-HS554XAF.js} +3 -3
- package/dist/chunk-HS554XAF.js.map +1 -0
- package/dist/{chunk-HK67PX4J.js → chunk-HW7CMKUG.js} +1 -1
- package/dist/chunk-HW7CMKUG.js.map +1 -0
- package/dist/{chunk-3BVH633C.js → chunk-IMQKWR46.js} +5 -7
- package/dist/chunk-IMQKWR46.js.map +1 -0
- package/dist/{chunk-R42NSZI6.js → chunk-IUBMZPHM.js} +7 -7
- package/dist/chunk-IUBMZPHM.js.map +1 -0
- package/dist/{chunk-CUQPWYRX.js → chunk-IUT3GWP3.js} +75 -386
- package/dist/chunk-IUT3GWP3.js.map +1 -0
- package/dist/{chunk-RF6D3Y5E.js → chunk-JDEYF3PJ.js} +4 -8
- package/dist/{chunk-RF6D3Y5E.js.map → chunk-JDEYF3PJ.js.map} +1 -1
- package/dist/{chunk-PPTHY5QO.js → chunk-JIBUPZHA.js} +99 -8
- package/dist/chunk-JIBUPZHA.js.map +1 -0
- package/dist/{chunk-SMH6SRX7.js → chunk-JOSPH3E5.js} +2 -2
- package/dist/chunk-JQYKPKG6.js +193 -0
- package/dist/chunk-JQYKPKG6.js.map +1 -0
- package/dist/{chunk-7APJ6CO6.js → chunk-JSMTXZR3.js} +45 -13
- package/dist/chunk-JSMTXZR3.js.map +1 -0
- package/dist/chunk-JWWYRR4Q.js +12 -0
- package/dist/chunk-JWWYRR4Q.js.map +1 -0
- package/dist/{chunk-BVN6KXL2.js → chunk-KZXDLBY6.js} +14 -9
- package/dist/chunk-KZXDLBY6.js.map +1 -0
- package/dist/chunk-LGNDFRYC.js +23 -0
- package/dist/chunk-LGNDFRYC.js.map +1 -0
- package/dist/{chunk-XKWGNJ26.js → chunk-LIOVX5TJ.js} +7 -11
- package/dist/chunk-LIOVX5TJ.js.map +1 -0
- package/dist/{chunk-AYX7AINO.js → chunk-LNSVGRHO.js} +5 -7
- package/dist/chunk-LNSVGRHO.js.map +1 -0
- package/dist/chunk-M5B2W6YY.js +293 -0
- package/dist/chunk-M5B2W6YY.js.map +1 -0
- package/dist/chunk-MBMTND6D.js +456 -0
- package/dist/chunk-MBMTND6D.js.map +1 -0
- package/dist/{chunk-3BZZJJMQ.js → chunk-MILI22XQ.js} +3 -3
- package/dist/{chunk-A2HKRLPV.js → chunk-MXKI4ABF.js} +18 -59
- package/dist/chunk-MXKI4ABF.js.map +1 -0
- package/dist/{chunk-ZYIYHJ5R.js → chunk-MXOQ5JCG.js} +869 -238
- package/dist/chunk-MXOQ5JCG.js.map +1 -0
- package/dist/{chunk-V7ZRRCRJ.js → chunk-N7EVQD5S.js} +9 -13
- package/dist/chunk-N7EVQD5S.js.map +1 -0
- package/dist/chunk-N7UDP5VU.js +757 -0
- package/dist/chunk-N7UDP5VU.js.map +1 -0
- package/dist/chunk-NBQ3KK6X.js +270 -0
- package/dist/chunk-NBQ3KK6X.js.map +1 -0
- package/dist/{chunk-ZORTV6NH.js → chunk-NCO25JZO.js} +88 -4
- package/dist/chunk-NCO25JZO.js.map +1 -0
- package/dist/chunk-NH2UOV3B.js +18 -0
- package/dist/chunk-NH2UOV3B.js.map +1 -0
- package/dist/chunk-NYMLINRP.js +28 -0
- package/dist/chunk-NYMLINRP.js.map +1 -0
- package/dist/{chunk-YYP7WSEB.js → chunk-O2IMQSNA.js} +2 -2
- package/dist/chunk-O46CHQT7.js +215 -0
- package/dist/chunk-O46CHQT7.js.map +1 -0
- package/dist/chunk-OIEO4WDL.js +27 -0
- package/dist/chunk-OIEO4WDL.js.map +1 -0
- package/dist/{chunk-TRGTKX5E.js → chunk-OKSTSITU.js} +27 -4
- package/dist/chunk-OKSTSITU.js.map +1 -0
- package/dist/chunk-OYW3I5M4.js +31 -0
- package/dist/chunk-OYW3I5M4.js.map +1 -0
- package/dist/{chunk-Q7HZX3IF.js → chunk-PD64727P.js} +2 -2
- package/dist/chunk-PD64727P.js.map +1 -0
- package/dist/{chunk-FET5XCAT.js → chunk-PP3K67AJ.js} +34 -6
- package/dist/chunk-PP3K67AJ.js.map +1 -0
- package/dist/chunk-Q2XRFWOI.js +40 -0
- package/dist/chunk-Q2XRFWOI.js.map +1 -0
- package/dist/{chunk-QIZPZMUI.js → chunk-Q4UHJ5SN.js} +2 -2
- package/dist/{chunk-FAHMLERK.js → chunk-QBLT6POL.js} +2 -2
- package/dist/chunk-QMWY2FDS.js +157 -0
- package/dist/chunk-QMWY2FDS.js.map +1 -0
- package/dist/{chunk-LH5A3ZPG.js → chunk-RB4DOPGZ.js} +150 -22
- package/dist/chunk-RB4DOPGZ.js.map +1 -0
- package/dist/chunk-RHVMZSUU.js +7 -0
- package/dist/chunk-RHVMZSUU.js.map +1 -0
- package/dist/{chunk-BUE2D7PX.js → chunk-SMV2HRDU.js} +2 -2
- package/dist/chunk-SUZKW6UR.js +25 -0
- package/dist/chunk-SUZKW6UR.js.map +1 -0
- package/dist/{chunk-7MG7SJT7.js → chunk-SV2PM2OY.js} +1 -1
- package/dist/chunk-SV2PM2OY.js.map +1 -0
- package/dist/{chunk-UXVWEX5L.js → chunk-SYNY3VB5.js} +6 -2
- package/dist/chunk-SYNY3VB5.js.map +1 -0
- package/dist/{chunk-4GFX6MPA.js → chunk-TEHHROZL.js} +6 -8
- package/dist/chunk-TEHHROZL.js.map +1 -0
- package/dist/chunk-TKVUE4JF.js +1289 -0
- package/dist/chunk-TKVUE4JF.js.map +1 -0
- package/dist/{chunk-SFAWCTEM.js → chunk-TZZBXPZK.js} +2 -2
- package/dist/{chunk-F3W6YMDC.js → chunk-U2FZNEWJ.js} +4 -4
- package/dist/chunk-U2FZNEWJ.js.map +1 -0
- package/dist/{chunk-BLN54W3L.js → chunk-UA372JHH.js} +56 -3
- package/dist/chunk-UA372JHH.js.map +1 -0
- package/dist/{chunk-6YXCPL4T.js → chunk-UEFOQH74.js} +2 -2
- package/dist/chunk-UEFOQH74.js.map +1 -0
- package/dist/{chunk-2N5ML6HT.js → chunk-UIYESRD6.js} +9 -11
- package/dist/chunk-UIYESRD6.js.map +1 -0
- package/dist/{chunk-UHHPLO3I.js → chunk-V3RWOOSO.js} +4 -4
- package/dist/{chunk-KTFRCC5C.js → chunk-V7ADQF5O.js} +82 -8
- package/dist/chunk-V7ADQF5O.js.map +1 -0
- package/dist/{chunk-453F654R.js → chunk-VAORSCSU.js} +3 -3
- package/dist/chunk-VAORSCSU.js.map +1 -0
- package/dist/{chunk-GPNTB4Y7.js → chunk-VFHCKG5M.js} +6 -10
- package/dist/chunk-VFHCKG5M.js.map +1 -0
- package/dist/{chunk-2577DKXB.js → chunk-VHBKYN2J.js} +3 -3
- package/dist/chunk-VHBKYN2J.js.map +1 -0
- package/dist/chunk-VHM7HCKB.js +220 -0
- package/dist/chunk-VHM7HCKB.js.map +1 -0
- package/dist/{chunk-ZHKOPKE3.js → chunk-VKI2EB3N.js} +3 -3
- package/dist/chunk-VKI2EB3N.js.map +1 -0
- package/dist/{chunk-UDHWDSRL.js → chunk-VMV5SBE4.js} +16 -17
- package/dist/chunk-VMV5SBE4.js.map +1 -0
- package/dist/{chunk-SPYWXKJN.js → chunk-VQDZYB2B.js} +3 -3
- package/dist/chunk-VQDZYB2B.js.map +1 -0
- package/dist/{chunk-Q2PU57HC.js → chunk-VVOLDVIR.js} +2 -2
- package/dist/{chunk-3VF3WQ4F.js → chunk-WPOYWFSE.js} +7 -7
- package/dist/{chunk-3VF3WQ4F.js.map → chunk-WPOYWFSE.js.map} +1 -1
- package/dist/{chunk-OTQZ7ZWU.js → chunk-WXE4W2U6.js} +7 -11
- package/dist/chunk-WXE4W2U6.js.map +1 -0
- package/dist/chunk-XBKH4FOC.js +195 -0
- package/dist/chunk-XBKH4FOC.js.map +1 -0
- package/dist/{chunk-TUFM4UZP.js → chunk-XQRFSKYM.js} +2 -2
- package/dist/{chunk-3V4KWFX7.js → chunk-XSPFDUDG.js} +58 -53
- package/dist/chunk-XSPFDUDG.js.map +1 -0
- package/dist/{chunk-GY4WYNNG.js → chunk-Y2RKVFKR.js} +2 -2
- package/dist/{chunk-UP4BECPY.js → chunk-Y3LPTBG7.js} +89 -27
- package/dist/chunk-Y3LPTBG7.js.map +1 -0
- package/dist/{chunk-4OZNXTO4.js → chunk-YRXFFWG4.js} +2 -2
- package/dist/classified/index.js +5 -5
- package/dist/{classified-marker-BWOFVYAC.js → classified-marker-SIYKUU5L.js} +3 -3
- package/dist/classified-marker-SIYKUU5L.js.map +1 -0
- package/dist/collection-facade-CS7CA2XO.js +47 -0
- package/dist/{computed-VPOKQK4N.js → computed-FAD7SED4.js} +3 -3
- package/dist/consent/index.js +10 -11
- package/dist/consent/index.js.map +1 -1
- package/dist/cover/index.js +10 -11
- package/dist/coverage/index.js +306 -0
- package/dist/coverage/index.js.map +1 -0
- package/dist/custody/index.js +12 -13
- package/dist/{dead-filter-PKQDLOT4.js → dead-filter-4F3LWYKH.js} +11 -3
- package/dist/dead-filter-4F3LWYKH.js.map +1 -0
- package/dist/debug/index.js +11 -2
- package/dist/debug/index.js.map +1 -1
- package/dist/{delegation-DS5NRILW.js → delegation-NANZDG4N.js} +13 -16
- package/dist/delegation-NANZDG4N.js.map +1 -0
- package/dist/derivations/index.js +25 -23
- package/dist/derive-XLOJVXPU.js +20 -0
- package/dist/directory/index.js +10 -11
- package/dist/{dispatch-IEPAVQUM.js → dispatch-H4HV32AM.js} +5 -5
- package/dist/{dispatch-Q6MWLOJY.js → dispatch-JDZNGEB3.js} +20 -21
- package/dist/dispatch-JDZNGEB3.js.map +1 -0
- package/dist/executor-FMPVN6DT.js +35 -0
- package/dist/executor-LBBBRTN5.js +8 -0
- package/dist/executor-OSRZST2U.js +8 -0
- package/dist/export-accessible-RAOJAAU5.js +22 -0
- package/dist/extract-partition-JD5CUSTG.js +37 -0
- package/dist/{fanout-sidecar-S3QL53YX.js → fanout-sidecar-L7NHPIOC.js} +13 -15
- package/dist/fanout-sidecar-L7NHPIOC.js.map +1 -0
- package/dist/find-JRN4RNQ5.js +10 -0
- package/dist/forget/index.js +9 -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 +36 -14
- package/dist/index.js +970 -163
- package/dist/index.js.map +1 -1
- package/dist/indexing/index.js +13 -5
- package/dist/indexing/index.js.map +1 -1
- package/dist/introspection/index.js +11 -12
- package/dist/issue-YIVBZUTH.js +19 -0
- package/dist/ivf-flat-UZ6DQDLS.js +314 -0
- package/dist/ivf-flat-UZ6DQDLS.js.map +1 -0
- package/dist/{json-schema-V3M5MUCM.js → json-schema-3SHX72CC.js} +2 -1
- package/dist/json-schema-3SHX72CC.js.map +1 -0
- package/dist/kernel/attestation-types.d.ts +62 -0
- package/dist/kernel/collection-config.d.ts +5 -68
- package/dist/kernel/collection.d.ts +30 -9
- package/dist/kernel/cutover-transform.d.ts +1 -1
- package/dist/kernel/errors.d.ts +257 -38
- package/dist/kernel/generation-map.d.ts +48 -0
- package/dist/kernel/merge-authority.d.ts +1 -1
- package/dist/kernel/noydb.d.ts +6 -1
- package/dist/kernel/paths.d.ts +29 -5
- package/dist/kernel/prepared-write.d.ts +1 -1
- package/dist/kernel/present-cache.d.ts +58 -0
- package/dist/kernel/query/all.d.ts +7 -0
- package/dist/kernel/query/builder.d.ts +601 -270
- package/dist/kernel/query/civil-date.d.ts +64 -0
- package/dist/kernel/query/cursor.d.ts +40 -0
- package/dist/kernel/query/distinct-key.d.ts +98 -0
- package/dist/kernel/query/hydration.d.ts +76 -0
- package/dist/kernel/query/index.d.ts +31 -15
- package/dist/kernel/query/internal/core.d.ts +30 -0
- package/dist/kernel/query/internal/hooks.d.ts +22 -0
- package/dist/kernel/query/internal/maintenance.d.ts +43 -0
- package/dist/kernel/query/live/incremental.d.ts +314 -0
- package/dist/kernel/query/live/index.d.ts +22 -0
- package/dist/kernel/query/live/install.d.ts +2 -0
- package/dist/kernel/query/{live.d.ts → live/live.d.ts} +39 -9
- package/dist/kernel/query/live/methods.d.ts +107 -0
- package/dist/kernel/query/predicate.d.ts +119 -1
- package/dist/kernel/query/reduce/date-trunc.d.ts +75 -0
- package/dist/kernel/query/reduce/index.d.ts +36 -0
- package/dist/kernel/query/reduce/install.d.ts +2 -0
- package/dist/kernel/query/reduce/methods.d.ts +259 -0
- package/dist/kernel/query/reduce/scan-methods.d.ts +121 -0
- package/dist/kernel/query/relate/explain.d.ts +199 -0
- package/dist/kernel/query/relate/index.d.ts +48 -0
- package/dist/kernel/query/relate/install.d.ts +2 -0
- package/dist/kernel/query/relate/join-on.d.ts +126 -0
- package/dist/kernel/query/relate/join-reduce.d.ts +16 -0
- package/dist/kernel/query/relate/join.d.ts +452 -0
- package/dist/kernel/query/relate/methods.d.ts +426 -0
- package/dist/kernel/query/relate/partition.d.ts +87 -0
- package/dist/kernel/query/relate/scan-methods.d.ts +163 -0
- package/dist/kernel/query/relate/traverse.d.ts +109 -0
- package/dist/kernel/query/scan-builder.d.ts +79 -176
- package/dist/kernel/query/sort-key.d.ts +52 -0
- package/dist/kernel/secret-mode.d.ts +1 -1
- package/dist/kernel/tx-write-gate.d.ts +77 -0
- package/dist/kernel/types.d.ts +113 -8
- package/dist/kernel/validation.d.ts +27 -10
- package/dist/kernel/vault.d.ts +11 -6
- package/dist/kernel/via/compose.d.ts +3 -0
- package/dist/kernel/via/index.d.ts +56 -0
- package/dist/kernel/via/pipeline.d.ts +48 -0
- package/dist/kernel/write-queue.d.ts +17 -0
- package/dist/{ledger-EDXFFZQL.js → ledger-5ZMGE44K.js} +11 -12
- package/dist/liberate-WZSZM2W6.js +24 -0
- package/dist/link-set-MFXC24VK.js +29 -0
- package/dist/{managed-secret-NCWEMPUQ.js → managed-secret-MFTFT22X.js} +10 -11
- package/dist/materialized-views/index.js +30 -24
- package/dist/{migrate-cek-5ENH64AA.js → migrate-cek-DZRFFOHW.js} +2 -2
- package/dist/money/index.js +5 -5
- package/dist/noydb-ITIGNKUF.js +96 -0
- package/dist/overlay-views/index.js +4 -4
- package/dist/periods/index.js +12 -13
- package/dist/pod/index.js +74 -67
- package/dist/{pod-handle-ECVCDIXW.js → pod-handle-A3LET7NO.js} +10 -11
- package/dist/pod-handle-A3LET7NO.js.map +1 -0
- package/dist/policy/index.js +10 -11
- package/dist/port/on/index.d.ts +1 -1
- package/dist/port/to/index.d.ts +1 -1
- package/dist/port/with/blob-strategy.d.ts +10 -1
- package/dist/port/with/classified-strategy.d.ts +1 -1
- package/dist/port/with/collection-options.d.ts +6 -1
- package/dist/port/with/collection-registries.d.ts +1 -1
- package/dist/port/with/coverage-strategy.d.ts +83 -0
- package/dist/port/with/lookup-strategy.d.ts +2 -2
- package/dist/port/with/service-bus.d.ts +46 -0
- package/dist/port/with/strategies.d.ts +2 -0
- package/dist/portability/index.js +8 -8
- package/dist/{post-register-3IPCSG6Q.js → post-register-7ND27CF2.js} +6 -6
- package/dist/post-register-7ND27CF2.js.map +1 -0
- package/dist/query/all/index.js +31 -0
- package/dist/query/index.js +20 -32
- package/dist/query/live/index.js +21 -0
- package/dist/query/live/index.js.map +1 -0
- package/dist/query/reduce/index.js +33 -0
- package/dist/query/reduce/index.js.map +1 -0
- package/dist/query/relate/index.js +56 -0
- package/dist/query/relate/index.js.map +1 -0
- package/dist/reduce/index.js +72 -18
- package/dist/reduce/index.js.map +1 -1
- package/dist/register-DT5HZ2LZ.js +30 -0
- package/dist/registry-BHRZGZHF.js +8 -0
- package/dist/registry-ET6ZFFWA.js +34 -0
- package/dist/registry-HXFGLGTG.js +8 -0
- package/dist/registry-THCPDEOD.js +23 -0
- package/dist/request-withdrawal-AV2MJJKY.js +30 -0
- package/dist/{reveal-QZDHSGD4.js → reveal-B2TLP4JQ.js} +10 -9
- package/dist/reveal-B2TLP4JQ.js.map +1 -0
- package/dist/revoke-6DWIEOCV.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 +11 -5
- package/dist/{seed-X5CC22CQ.js → seed-XNSE4U3S.js} +15 -18
- package/dist/seed-XNSE4U3S.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-MHGW3OIL.js +23 -0
- package/dist/snapshots/index.js +11 -11
- package/dist/stale-6GCFMOOR.js +28 -0
- package/dist/storage-BYN5LO6Z.js +21 -0
- package/dist/storage-BYN5LO6Z.js.map +1 -0
- package/dist/store/index.js +1 -1
- package/dist/{store-coordination-provider-4WZAIRHC.js → store-coordination-provider-C4BPT5XF.js} +11 -12
- package/dist/store-coordination-provider-C4BPT5XF.js.map +1 -0
- package/dist/sync/index.js +10 -11
- package/dist/sync/index.js.map +1 -1
- package/dist/team/index.js +17 -16
- package/dist/tiers/index.js +13 -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-6MDTIUEV.js → verify-UKALW7C2.js} +14 -12
- package/dist/verify-UKALW7C2.js.map +1 -0
- package/dist/via/blob/index.d.ts +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/geo/binding.d.ts +31 -0
- package/dist/via/geo/descriptor.d.ts +54 -0
- package/dist/via/geo/geohash.d.ts +95 -0
- package/dist/via/geo/index.d.ts +13 -0
- package/dist/via/geo/where.d.ts +50 -0
- package/dist/via/i18n/core.d.ts +1 -1
- package/dist/via/lookup/handle.d.ts +4 -4
- package/dist/via/lookup/registry.d.ts +1 -1
- package/dist/via/lookup/snapshot.d.ts +3 -3
- package/dist/walk-4VPK7AS4.js +20 -0
- package/dist/walk-4VPK7AS4.js.map +1 -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 +2 -2
- package/dist/with-audit/attestation/types.d.ts +10 -0
- package/dist/with-audit/attestation/vault-facade.d.ts +2 -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/coverage/accounting.d.ts +112 -0
- package/dist/with-audit/coverage/active.d.ts +29 -0
- package/dist/with-audit/coverage/index.d.ts +61 -0
- package/dist/with-audit/coverage/sketch.d.ts +75 -0
- package/dist/with-audit/forget/subject-index.d.ts +1 -1
- package/dist/with-audit/periods/periods.d.ts +55 -7
- package/dist/with-audit/periods/reserved-collections.d.ts +3 -0
- package/dist/with-audit/periods/vault-facade.d.ts +18 -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 +53 -2
- package/dist/with-audit/tiers/strategy.d.ts +8 -0
- package/dist/with-cargo/adopt-partition.d.ts +1 -1
- package/dist/with-cargo/extract-partition.d.ts +1 -1
- package/dist/with-cargo/floor.d.ts +3 -3
- 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 -1
- package/dist/with-commit/sequence/index.d.ts +1 -1
- package/dist/with-commit/tx/invariants.d.ts +1 -1
- package/dist/with-commit/tx/transaction.d.ts +13 -3
- 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 +1 -1
- package/dist/with-commit/vault-head/verify.d.ts +1 -1
- 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/materialized-views/dependency-analyzer.d.ts +4 -3
- package/dist/with-formula/materialized-views/emit-memo.d.ts +40 -0
- package/dist/with-formula/materialized-views/executor.d.ts +8 -0
- package/dist/with-formula/materialized-views/index.d.ts +1 -1
- package/dist/with-formula/materialized-views/registry.d.ts +15 -0
- package/dist/with-formula/materialized-views/types.d.ts +106 -14
- package/dist/with-formula/materialized-views/window-stage.d.ts +11 -0
- package/dist/with-formula/overlay-views/types.d.ts +1 -1
- package/dist/with-formula/overlay-views/virtual-collection.d.ts +13 -4
- package/dist/with-lookup/embeddings/chunks.d.ts +79 -0
- package/dist/with-lookup/embeddings/descriptor.d.ts +21 -0
- package/dist/with-lookup/embeddings/index.d.ts +3 -0
- package/dist/with-lookup/embeddings/ivf-flat.d.ts +93 -0
- package/dist/with-lookup/embeddings/vector-index.d.ts +73 -0
- package/dist/with-lookup/embeddings/vector-set.d.ts +94 -1
- package/dist/with-lookup/embeddings/with-vector-index.d.ts +67 -0
- package/dist/with-lookup/indexing/collection-facade.d.ts +86 -3
- package/dist/with-lookup/indexing/compound-indexes.d.ts +129 -0
- package/dist/with-lookup/indexing/eager-indexes.d.ts +170 -1
- package/dist/with-lookup/indexing/index-snapshot.d.ts +62 -0
- package/dist/with-lookup/indexing/lazy-builder.d.ts +33 -0
- package/dist/with-lookup/indexing/persisted-field-indexes.d.ts +104 -0
- package/dist/with-lookup/indexing/persisted-indexes.d.ts +12 -0
- package/dist/with-lookup/indexing/sorted-indexes.d.ts +117 -0
- package/dist/with-lookup/indexing/unique-constraints.d.ts +106 -23
- package/dist/with-lookup/reduce/active.d.ts +2 -24
- package/dist/with-lookup/reduce/group-core.d.ts +43 -0
- package/dist/with-lookup/reduce/groupby.d.ts +195 -36
- package/dist/with-lookup/reduce/incremental-group.d.ts +153 -0
- package/dist/with-lookup/reduce/index.d.ts +26 -5
- package/dist/with-lookup/reduce/reducers.d.ts +255 -1
- package/dist/with-lookup/reduce/reduction.d.ts +44 -13
- package/dist/with-lookup/reduce/strategy.d.ts +43 -3
- package/dist/with-lookup/reduce/window.d.ts +262 -0
- package/dist/with-lookup/search/collection-facade.d.ts +45 -9
- package/dist/with-lookup/search/index-store.d.ts +5 -3
- package/dist/with-lookup/search/index.d.ts +4 -2
- package/dist/with-lookup/search/inverted-index.d.ts +38 -2
- package/dist/with-lookup/search/persisted-index-store.d.ts +5 -2
- package/dist/with-lookup/search/phrase.d.ts +28 -0
- package/dist/with-lookup/search/retrieve-types.d.ts +57 -1
- package/dist/with-lookup/search/serialize.d.ts +29 -3
- package/dist/with-lookup/search/strategy.d.ts +2 -6
- package/dist/with-party/broker/index.d.ts +3 -3
- package/dist/with-party/directory/cover/index.d.ts +1 -1
- package/dist/with-party/directory/cover/storage.d.ts +1 -1
- package/dist/with-party/directory/cover/types.d.ts +1 -1
- package/dist/with-party/directory/index.d.ts +1 -1
- package/dist/with-party/directory/types.d.ts +1 -1
- package/dist/with-party/directory/user-envelope/api.d.ts +1 -1
- package/dist/with-party/directory/user-envelope/storage.d.ts +1 -1
- package/dist/with-party/policy/engine.d.ts +1 -1
- package/dist/with-party/policy/index.d.ts +1 -1
- package/dist/with-party/policy/presets.d.ts +1 -1
- package/dist/with-party/team/authenticators.d.ts +91 -1
- package/dist/with-party/team/delegation.d.ts +1 -1
- package/dist/with-party/team/echo-secret.d.ts +2 -2
- package/dist/with-party/team/index.d.ts +4 -3
- package/dist/with-party/team/keyring.d.ts +2 -2
- package/dist/with-party/team/magic-link-grant.d.ts +1 -1
- package/dist/with-party/team/managed-secret.d.ts +1 -1
- package/dist/with-party/team/noydb-facade.d.ts +12 -3
- package/dist/with-party/team/recovery.d.ts +1 -1
- package/dist/with-party/team/roster-tag.d.ts +1 -1
- package/dist/with-party/team/rotate-recover.d.ts +1 -1
- package/dist/with-party/team/wrapped-deks.d.ts +1 -1
- package/dist/with-pod/format.d.ts +1 -1
- package/dist/with-pod/index.d.ts +1 -1
- package/dist/with-pod/pod.d.ts +1 -1
- package/dist/with-shape/blobs/blob-compaction.d.ts +17 -1
- package/dist/with-shape/blobs/blob-intent.d.ts +1 -1
- package/dist/with-shape/blobs/blob-set.d.ts +23 -4
- package/dist/with-shape/blobs/legacy-sweep.d.ts +35 -0
- package/dist/with-shape/introspection/describe.d.ts +7 -1
- package/dist/with-shape/introspection/field-meta.d.ts +18 -0
- package/dist/with-shape/introspection/types.d.ts +57 -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/links/vault-facade.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-store/partitioned/index.d.ts +337 -0
- package/dist/with-sync/change-broadcast.d.ts +153 -0
- package/dist/with-sync/presence.d.ts +5 -10
- package/dist/withdraw-accessible-HL7GACUE.js +27 -0
- package/dist/withdraw-accessible-HL7GACUE.js.map +1 -0
- package/package.json +48 -12
- package/dist/api-WYW4YEQG.js +0 -19
- package/dist/backup-XKCXVKV3.js.map +0 -1
- package/dist/chunk-2577DKXB.js.map +0 -1
- package/dist/chunk-2ENE6445.js.map +0 -1
- package/dist/chunk-2N5ML6HT.js.map +0 -1
- package/dist/chunk-334WSVOW.js.map +0 -1
- package/dist/chunk-3BVH633C.js.map +0 -1
- package/dist/chunk-3PGS7TYR.js.map +0 -1
- package/dist/chunk-3V4KWFX7.js.map +0 -1
- package/dist/chunk-453F654R.js.map +0 -1
- package/dist/chunk-4GFX6MPA.js.map +0 -1
- package/dist/chunk-4GVM6QZA.js.map +0 -1
- package/dist/chunk-4ZS56W5S.js.map +0 -1
- package/dist/chunk-5VCRVKOZ.js.map +0 -1
- package/dist/chunk-6YXCPL4T.js.map +0 -1
- package/dist/chunk-7APJ6CO6.js.map +0 -1
- package/dist/chunk-7MG2LHO5.js +0 -1616
- package/dist/chunk-7MG2LHO5.js.map +0 -1
- package/dist/chunk-7MG7SJT7.js.map +0 -1
- package/dist/chunk-7O3Y4PPD.js.map +0 -1
- package/dist/chunk-A2HKRLPV.js.map +0 -1
- package/dist/chunk-A66I4JOA.js.map +0 -1
- package/dist/chunk-ACAQ2DSG.js.map +0 -1
- package/dist/chunk-ATL3ZVXT.js +0 -151
- package/dist/chunk-ATL3ZVXT.js.map +0 -1
- package/dist/chunk-AYX7AINO.js.map +0 -1
- package/dist/chunk-BLN54W3L.js.map +0 -1
- package/dist/chunk-BRLKZUBT.js +0 -95
- package/dist/chunk-BRLKZUBT.js.map +0 -1
- package/dist/chunk-BTDR2PXY.js +0 -29
- package/dist/chunk-BTDR2PXY.js.map +0 -1
- package/dist/chunk-BVN6KXL2.js.map +0 -1
- package/dist/chunk-CHQCZZWC.js.map +0 -1
- package/dist/chunk-CUQPWYRX.js.map +0 -1
- package/dist/chunk-CUZLNGD5.js.map +0 -1
- package/dist/chunk-DFMWUOU5.js.map +0 -1
- package/dist/chunk-EIPVYUEP.js.map +0 -1
- package/dist/chunk-EQEYOJBM.js.map +0 -1
- package/dist/chunk-F3W6YMDC.js.map +0 -1
- package/dist/chunk-FET5XCAT.js.map +0 -1
- package/dist/chunk-G73UVHCA.js.map +0 -1
- package/dist/chunk-GPNTB4Y7.js.map +0 -1
- package/dist/chunk-GYGLAVCX.js.map +0 -1
- package/dist/chunk-HIWCKBEY.js.map +0 -1
- package/dist/chunk-HJUWN7JN.js.map +0 -1
- package/dist/chunk-HK67PX4J.js.map +0 -1
- package/dist/chunk-HPVZCW43.js +0 -479
- package/dist/chunk-HPVZCW43.js.map +0 -1
- package/dist/chunk-I3ISCYT7.js +0 -159
- package/dist/chunk-I3ISCYT7.js.map +0 -1
- package/dist/chunk-K23VKTN4.js.map +0 -1
- package/dist/chunk-KKEESNPE.js.map +0 -1
- package/dist/chunk-KTFRCC5C.js.map +0 -1
- package/dist/chunk-LH5A3ZPG.js.map +0 -1
- package/dist/chunk-LP7BEXCT.js +0 -32
- package/dist/chunk-LP7BEXCT.js.map +0 -1
- package/dist/chunk-M4YPHYEH.js.map +0 -1
- package/dist/chunk-NSITFOCJ.js +0 -99
- package/dist/chunk-NSITFOCJ.js.map +0 -1
- package/dist/chunk-OTQZ7ZWU.js.map +0 -1
- package/dist/chunk-P3MG6QCN.js.map +0 -1
- package/dist/chunk-PEOZ34EM.js.map +0 -1
- package/dist/chunk-PPTHY5QO.js.map +0 -1
- package/dist/chunk-Q2MPFCQ7.js.map +0 -1
- package/dist/chunk-Q7HZX3IF.js.map +0 -1
- package/dist/chunk-QPQUVOZ2.js.map +0 -1
- package/dist/chunk-QTQUH4DS.js.map +0 -1
- package/dist/chunk-R42NSZI6.js.map +0 -1
- package/dist/chunk-R7BX2NB3.js.map +0 -1
- package/dist/chunk-RSGLUIO6.js.map +0 -1
- package/dist/chunk-RTBJ5IOO.js +0 -87
- package/dist/chunk-RTBJ5IOO.js.map +0 -1
- package/dist/chunk-SGZAIJCV.js.map +0 -1
- package/dist/chunk-SKGMN35F.js.map +0 -1
- package/dist/chunk-SPYWXKJN.js.map +0 -1
- package/dist/chunk-SZJ3DLZA.js +0 -66
- package/dist/chunk-SZJ3DLZA.js.map +0 -1
- package/dist/chunk-TRGTKX5E.js.map +0 -1
- package/dist/chunk-UDHWDSRL.js.map +0 -1
- package/dist/chunk-UP4BECPY.js.map +0 -1
- package/dist/chunk-UXVWEX5L.js.map +0 -1
- package/dist/chunk-V7ZRRCRJ.js.map +0 -1
- package/dist/chunk-WQBG4SZS.js.map +0 -1
- package/dist/chunk-XKWGNJ26.js.map +0 -1
- package/dist/chunk-YMUFFJCO.js.map +0 -1
- package/dist/chunk-ZHKOPKE3.js.map +0 -1
- package/dist/chunk-ZN4FD4PE.js +0 -364
- package/dist/chunk-ZN4FD4PE.js.map +0 -1
- package/dist/chunk-ZORTV6NH.js.map +0 -1
- package/dist/chunk-ZYIYHJ5R.js.map +0 -1
- package/dist/classified-marker-BWOFVYAC.js.map +0 -1
- package/dist/collection-facade-JSJYIKS4.js +0 -45
- package/dist/dead-filter-PKQDLOT4.js.map +0 -1
- package/dist/delegation-DS5NRILW.js.map +0 -1
- package/dist/derive-E642AOUB.js +0 -21
- package/dist/dispatch-Q6MWLOJY.js.map +0 -1
- package/dist/executor-5NIMLSKZ.js +0 -8
- package/dist/executor-7UQ3BZ4F.js +0 -29
- package/dist/executor-AQVXV5GZ.js +0 -8
- package/dist/export-accessible-ORMKLA3E.js +0 -22
- package/dist/extract-partition-NKYO3WNG.js +0 -37
- package/dist/fanout-sidecar-S3QL53YX.js.map +0 -1
- package/dist/find-NOGJ25VX.js +0 -10
- package/dist/issue-3DTQ7VJJ.js +0 -18
- package/dist/json-schema-V3M5MUCM.js.map +0 -1
- 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/kernel/query/join.d.ts +0 -232
- package/dist/liberate-V35QUHJP.js +0 -24
- package/dist/link-set-2TTM3IZC.js +0 -30
- package/dist/noydb-62MX4QUG.js +0 -90
- package/dist/pod-handle-ECVCDIXW.js.map +0 -1
- package/dist/post-register-3IPCSG6Q.js.map +0 -1
- package/dist/register-HHLXEQDN.js +0 -31
- package/dist/registry-23WF3TGH.js +0 -8
- package/dist/registry-4AYVUNXK.js +0 -8
- package/dist/registry-JS3YFQQM.js +0 -18
- package/dist/registry-XX2Z7B46.js +0 -32
- package/dist/request-withdrawal-CHPATE4G.js +0 -30
- package/dist/reveal-QZDHSGD4.js.map +0 -1
- package/dist/revoke-7M2VW4ON.js +0 -23
- package/dist/seed-X5CC22CQ.js.map +0 -1
- package/dist/signer-SJQJVSM6.js +0 -24
- package/dist/stale-BZS6H2RY.js +0 -29
- package/dist/storage-RW4QBS23.js +0 -22
- package/dist/store-coordination-provider-4WZAIRHC.js.map +0 -1
- package/dist/verify-6MDTIUEV.js.map +0 -1
- package/dist/walk-ZURCH6RZ.js +0 -21
- package/dist/withdraw-accessible-PXR4IXDX.js +0 -27
- /package/dist/{api-WYW4YEQG.js.map → api-OS747DS4.js.map} +0 -0
- /package/dist/{computed-VPOKQK4N.js.map → capsule/contract.js.map} +0 -0
- /package/dist/{kernel/enclave → capsule/enclave-aes}/broker/proof.d.ts +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/{collection-facade-JSJYIKS4.js.map → capsule-VOLX3QRQ.js.map} +0 -0
- /package/dist/{chunk-MVMXZYXT.js.map → chunk-2GHDLTPE.js.map} +0 -0
- /package/dist/{chunk-XLMEZIAJ.js.map → chunk-2ODVB6LZ.js.map} +0 -0
- /package/dist/{chunk-RMS3NEA3.js.map → chunk-4JPMZTJY.js.map} +0 -0
- /package/dist/{chunk-NQKIUNW5.js.map → chunk-52MGURXO.js.map} +0 -0
- /package/dist/{chunk-UGTBXF5U.js.map → chunk-7XMHMVTS.js.map} +0 -0
- /package/dist/{chunk-BZ3534YM.js.map → chunk-AUKKUPVB.js.map} +0 -0
- /package/dist/{derive-E642AOUB.js.map → chunk-BKT776R5.js.map} +0 -0
- /package/dist/{chunk-6LKOJBV6.js.map → chunk-BVCUTXE3.js.map} +0 -0
- /package/dist/{chunk-VTFVLCUH.js.map → chunk-DIZLQVAA.js.map} +0 -0
- /package/dist/{chunk-LWBCUYZW.js.map → chunk-E2N2T5ZO.js.map} +0 -0
- /package/dist/{chunk-JVIBCBC7.js.map → chunk-EJLV62NI.js.map} +0 -0
- /package/dist/{chunk-JMGDHKQF.js.map → chunk-FLPCETP6.js.map} +0 -0
- /package/dist/{chunk-DGOZ4UZD.js.map → chunk-FVH5QYY2.js.map} +0 -0
- /package/dist/{chunk-JBDFMYKQ.js.map → chunk-GZT3NQRA.js.map} +0 -0
- /package/dist/{chunk-TFR7DSOV.js.map → chunk-H427H63K.js.map} +0 -0
- /package/dist/{chunk-SMH6SRX7.js.map → chunk-JOSPH3E5.js.map} +0 -0
- /package/dist/{chunk-3BZZJJMQ.js.map → chunk-MILI22XQ.js.map} +0 -0
- /package/dist/{chunk-YYP7WSEB.js.map → chunk-O2IMQSNA.js.map} +0 -0
- /package/dist/{chunk-QIZPZMUI.js.map → chunk-Q4UHJ5SN.js.map} +0 -0
- /package/dist/{chunk-FAHMLERK.js.map → chunk-QBLT6POL.js.map} +0 -0
- /package/dist/{chunk-BUE2D7PX.js.map → chunk-SMV2HRDU.js.map} +0 -0
- /package/dist/{chunk-SFAWCTEM.js.map → chunk-TZZBXPZK.js.map} +0 -0
- /package/dist/{chunk-UHHPLO3I.js.map → chunk-V3RWOOSO.js.map} +0 -0
- /package/dist/{chunk-Q2PU57HC.js.map → chunk-VVOLDVIR.js.map} +0 -0
- /package/dist/{chunk-TUFM4UZP.js.map → chunk-XQRFSKYM.js.map} +0 -0
- /package/dist/{chunk-GY4WYNNG.js.map → chunk-Y2RKVFKR.js.map} +0 -0
- /package/dist/{chunk-4OZNXTO4.js.map → chunk-YRXFFWG4.js.map} +0 -0
- /package/dist/{enclave-55PAM4YO.js.map → collection-facade-CS7CA2XO.js.map} +0 -0
- /package/dist/{executor-5NIMLSKZ.js.map → computed-FAD7SED4.js.map} +0 -0
- /package/dist/{executor-7UQ3BZ4F.js.map → derive-XLOJVXPU.js.map} +0 -0
- /package/dist/{dispatch-IEPAVQUM.js.map → dispatch-H4HV32AM.js.map} +0 -0
- /package/dist/{executor-AQVXV5GZ.js.map → executor-FMPVN6DT.js.map} +0 -0
- /package/dist/{export-accessible-ORMKLA3E.js.map → executor-LBBBRTN5.js.map} +0 -0
- /package/dist/{extract-partition-NKYO3WNG.js.map → executor-OSRZST2U.js.map} +0 -0
- /package/dist/{find-NOGJ25VX.js.map → export-accessible-RAOJAAU5.js.map} +0 -0
- /package/dist/{issue-3DTQ7VJJ.js.map → extract-partition-JD5CUSTG.js.map} +0 -0
- /package/dist/{ledger-EDXFFZQL.js.map → find-JRN4RNQ5.js.map} +0 -0
- /package/dist/{liberate-V35QUHJP.js.map → issue-YIVBZUTH.js.map} +0 -0
- /package/dist/{link-set-2TTM3IZC.js.map → ledger-5ZMGE44K.js.map} +0 -0
- /package/dist/{managed-secret-NCWEMPUQ.js.map → liberate-WZSZM2W6.js.map} +0 -0
- /package/dist/{noydb-62MX4QUG.js.map → link-set-MFXC24VK.js.map} +0 -0
- /package/dist/{register-HHLXEQDN.js.map → managed-secret-MFTFT22X.js.map} +0 -0
- /package/dist/{migrate-cek-5ENH64AA.js.map → migrate-cek-DZRFFOHW.js.map} +0 -0
- /package/dist/{registry-23WF3TGH.js.map → noydb-ITIGNKUF.js.map} +0 -0
- /package/dist/{registry-4AYVUNXK.js.map → query/all/index.js.map} +0 -0
- /package/dist/{registry-JS3YFQQM.js.map → register-DT5HZ2LZ.js.map} +0 -0
- /package/dist/{registry-XX2Z7B46.js.map → registry-BHRZGZHF.js.map} +0 -0
- /package/dist/{request-withdrawal-CHPATE4G.js.map → registry-ET6ZFFWA.js.map} +0 -0
- /package/dist/{revoke-7M2VW4ON.js.map → registry-HXFGLGTG.js.map} +0 -0
- /package/dist/{signer-SJQJVSM6.js.map → registry-THCPDEOD.js.map} +0 -0
- /package/dist/{stale-BZS6H2RY.js.map → request-withdrawal-AV2MJJKY.js.map} +0 -0
- /package/dist/{storage-RW4QBS23.js.map → revoke-6DWIEOCV.js.map} +0 -0
- /package/dist/{walk-ZURCH6RZ.js.map → signer-MHGW3OIL.js.map} +0 -0
- /package/dist/{withdraw-accessible-PXR4IXDX.js.map → stale-6GCFMOOR.js.map} +0 -0
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/** AES key size in bits. Shared: every capsule that derives an AES-GCM subkey
|
|
2
|
+
* from the digest group produces a 256-bit key, or the derivations diverge. */
|
|
3
|
+
export declare const KEY_BITS = 256;
|
|
4
|
+
export declare const IV_BYTES = 12;
|
|
5
|
+
/** The echo-secret typed parts. Encoding lives here with `encodeEchoParts`; the
|
|
6
|
+
* KEK derivation that consumes it stays in the capsule's `authenticate` group. */
|
|
7
|
+
export interface EchoSecretParts {
|
|
8
|
+
readonly prompt: string;
|
|
9
|
+
readonly echo: string;
|
|
10
|
+
readonly key: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* AG-1 encoding: domain context + 4-byte big-endian length prefix per
|
|
14
|
+
* part. Two independent guarantees make a single typed string unable to
|
|
15
|
+
* derive an echo vault's KEK (spec AG-1):
|
|
16
|
+
*
|
|
17
|
+
* 1. The `0xFF` context prefix — UTF-8 never produces that byte, so the
|
|
18
|
+
* encoding is provably not the encoding of ANY string (not merely of
|
|
19
|
+
* no separator-joined form).
|
|
20
|
+
* 2. Structural length prefixes — part boundaries are key material, so
|
|
21
|
+
* re-splitting the same characters changes the derived KEK.
|
|
22
|
+
*
|
|
23
|
+
* @throws ValidationError when any part is not a string — the single
|
|
24
|
+
* chokepoint every echo KEK derivation and block mint passes through, so a
|
|
25
|
+
* malformed parts object cannot be `TextEncoder`-coerced into key material.
|
|
26
|
+
*/
|
|
27
|
+
export declare function encodeEchoParts(parts: EchoSecretParts): Uint8Array;
|
|
28
|
+
/**
|
|
29
|
+
* SHA-256 hex digest of raw bytes. Used to derive content-addressed
|
|
30
|
+
* eTags for blob deduplication. Computed on plaintext bytes
|
|
31
|
+
* before compression and encryption so the eTag identifies content, not
|
|
32
|
+
* ciphertext, and survives re-encryption (key rotation, re-upload).
|
|
33
|
+
*/
|
|
34
|
+
export declare function sha256Hex(data: Uint8Array): Promise<string>;
|
|
35
|
+
/** SHA-256 of raw bytes, as bytes. */
|
|
36
|
+
export declare function sha256Bytes(data: Uint8Array): Promise<Uint8Array>;
|
|
37
|
+
/**
|
|
38
|
+
* Derive the blob CONTENT-ADDRESSING key for one tier (#1126).
|
|
39
|
+
*
|
|
40
|
+
* The blob eTag is an HMAC over the plaintext. It used to be keyed by the
|
|
41
|
+
* `_blob` DEK — the very key `rotateKeys` replaces — so after any rotation
|
|
42
|
+
* `HMAC(live DEK, plaintext) !== storedETag` for every blob written before it,
|
|
43
|
+
* permanently. `decryptResponse()` checks that unconditionally, so the
|
|
44
|
+
* presigned-URL read path raised `TamperedError` on legitimate data forever;
|
|
45
|
+
* dedup also split, minting a second address for identical bytes.
|
|
46
|
+
*
|
|
47
|
+
* The fix is a `root` that rotation never touches (`_blob_addr`, refused by
|
|
48
|
+
* `rotateKeys` exactly as `_roster` is). Rotation then re-keys chunk BODIES
|
|
49
|
+
* while every address stays stable, which is what makes the AAD
|
|
50
|
+
* `{eTag}:{i}:{count}` and every `_blob_index` / `_blob_slots_*` /
|
|
51
|
+
* `_blob_versions_*` row survive it untouched.
|
|
52
|
+
*
|
|
53
|
+
* **Derived PER TIER, deliberately.** A single vault-wide address would make an
|
|
54
|
+
* elevated blob and a tier-0 blob with identical content share an eTag,
|
|
55
|
+
* leaking equality across a boundary the tier system exists to enforce — and
|
|
56
|
+
* `rehomeForTier` re-addresses on a tier move precisely because the address is
|
|
57
|
+
* tier-scoped today. Domain separation keeps that property while removing the
|
|
58
|
+
* rotation coupling: the two are independent axes, and only one of them was
|
|
59
|
+
* ever meant to change the address.
|
|
60
|
+
*
|
|
61
|
+
* Same HKDF idiom as `asKwKey`, with its own salt so the addressing key can
|
|
62
|
+
* never coincide with a wrapping or encryption key.
|
|
63
|
+
*/
|
|
64
|
+
export declare function deriveBlobAddressKey(root: CryptoKey, tier: number): Promise<CryptoKey>;
|
|
65
|
+
/**
|
|
66
|
+
* HMAC-SHA-256(key, data) as hex.
|
|
67
|
+
*
|
|
68
|
+
* Keyed, unlike {@link sha256Hex}: blob eTags derived with this are opaque to
|
|
69
|
+
* the store, so an attacker with store access cannot pre-compute the address of
|
|
70
|
+
* a file they guess at. Dedup still works inside a vault, where the key is shared.
|
|
71
|
+
*/
|
|
72
|
+
export declare function hmacSha256Hex(key: CryptoKey, data: Uint8Array): Promise<string>;
|
|
73
|
+
/**
|
|
74
|
+
* Derive an AES-256-GCM presence key from a collection DEK using HKDF-SHA256.
|
|
75
|
+
*
|
|
76
|
+
* The presence key is domain-separated from the data DEK by the fixed salt
|
|
77
|
+
* `'noydb-presence'` and the `info` = collection name. This means:
|
|
78
|
+
* - The adapter never sees the presence key.
|
|
79
|
+
* - Presence payloads rotate automatically when the collection DEK is rotated.
|
|
80
|
+
* - Revoked users cannot derive the new presence key after a DEK rotation.
|
|
81
|
+
*
|
|
82
|
+
* @param dek The collection's AES-256-GCM DEK (extractable).
|
|
83
|
+
* @param collectionName Used as the HKDF `info` parameter for domain separation.
|
|
84
|
+
* @returns A non-extractable AES-256-GCM key suitable for presence payload encryption.
|
|
85
|
+
*/
|
|
86
|
+
export declare function derivePresenceKey(dek: CryptoKey, collectionName: string): Promise<CryptoKey>;
|
|
87
|
+
/**
|
|
88
|
+
* Derive the presence-TAG key from a collection DEK: a non-extractable,
|
|
89
|
+
* sign-only HMAC-SHA256 key, HKDF-separated from the presence PAYLOAD key
|
|
90
|
+
* ({@link derivePresenceKey}) by its own salt. The tag is the adapter-opaque
|
|
91
|
+
* record id for storage-polled presence; the adapter never sees the userId.
|
|
92
|
+
*/
|
|
93
|
+
export declare function derivePresenceTagKey(dek: CryptoKey, collectionName: string): Promise<CryptoKey>;
|
|
94
|
+
/**
|
|
95
|
+
* HMAC-SHA256 hex with a key that IS an HMAC key (e.g. from
|
|
96
|
+
* {@link derivePresenceTagKey}). {@link hmacSha256Hex} takes an AES-GCM
|
|
97
|
+
* carrier and re-imports its raw bytes, which needs an extractable key;
|
|
98
|
+
* this one signs directly and works with non-extractable keys.
|
|
99
|
+
*/
|
|
100
|
+
export declare function hmacSignHex(key: CryptoKey, data: Uint8Array): Promise<string>;
|
|
101
|
+
/**
|
|
102
|
+
* HKDF-SHA256 → non-extractable AES-256-GCM key from caller-supplied input
|
|
103
|
+
* key material. The magic-link content key derives here from
|
|
104
|
+
* `(serverSecret, SHA-256(token), info)`; `salt`/`info` are the caller's
|
|
105
|
+
* domain separation, this function adds none.
|
|
106
|
+
*/
|
|
107
|
+
export declare function hkdfAesGcmKey(ikm: Uint8Array, salt: Uint8Array, info: Uint8Array): Promise<CryptoKey>;
|
|
108
|
+
/** Generate a random 12-byte IV for AES-GCM. */
|
|
109
|
+
export declare function generateIV(): Uint8Array;
|
|
110
|
+
/** Generate a random 32-byte salt for PBKDF2. */
|
|
111
|
+
export declare function generateSalt(): Uint8Array;
|
|
112
|
+
/**
|
|
113
|
+
* Mint a fresh recovery secret — the high-entropy value a recovery profile
|
|
114
|
+
* wraps the DEK set under and then hands out (Shamir splits it into shares;
|
|
115
|
+
* paper prints it). Not a salt: a salt is public, this is not, and a fork
|
|
116
|
+
* may size them differently. The reference enclave returns 32 bytes.
|
|
117
|
+
*
|
|
118
|
+
* Callers must zero the buffer once it has been wrapped and split.
|
|
119
|
+
*/
|
|
120
|
+
export declare function generateRecoverySecret(): Uint8Array;
|
|
121
|
+
export declare function bufferToBase64(buffer: ArrayBuffer | Uint8Array): string;
|
|
122
|
+
export declare function base64ToBuffer(base64: string): Uint8Array<ArrayBuffer>;
|
|
@@ -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,15 +101,45 @@ 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
|
*/
|
|
99
108
|
via: ViaPipeline | undefined;
|
|
109
|
+
/**
|
|
110
|
+
* Read-coverage observer (#1363), resolved once per Collection from
|
|
111
|
+
* `strategies.coverage.observer(...)`. `undefined` for every un-opted-in
|
|
112
|
+
* deployment AND for every collection the sensor does not account for, so
|
|
113
|
+
* the decrypt path costs one `!== undefined` test.
|
|
114
|
+
*
|
|
115
|
+
* ⛔⛔ TELEMETRY, NOT A CONTROL: an insider holding the device and local keys
|
|
116
|
+
* holds the DEK, so this observes an extraction it cannot prevent. It exists
|
|
117
|
+
* to make one visible early, attributable and loud. It may never grow a
|
|
118
|
+
* return value — a decrypt is not gated on it, and nothing here may refuse.
|
|
119
|
+
*/
|
|
120
|
+
readonly onDecrypt?: ((id: string) => void) | undefined;
|
|
100
121
|
}
|
|
101
|
-
|
|
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;
|
|
102
141
|
private readonly ctx;
|
|
103
|
-
constructor(ctx: RecordCodecContext<T>);
|
|
142
|
+
constructor(caps: CapsuleBinding, ctx: RecordCodecContext<T>);
|
|
104
143
|
/**
|
|
105
144
|
* @internal Update the live Via pipeline this codec's at-rest hooks read
|
|
106
145
|
* (#638 Task 3) — called by `via/graph-wiring.ts#applyTaintOverlay` right
|
|
@@ -183,7 +222,7 @@ export declare class RecordCodec<T> {
|
|
|
183
222
|
* the choice must be made before AAD is switched on, not inferred from this
|
|
184
223
|
* migration.
|
|
185
224
|
*/
|
|
186
|
-
encryptJsonString(ref: RecordRef, json: string, version: number, cek?:
|
|
225
|
+
encryptJsonString(ref: RecordRef, json: string, version: number, cek?: CapsuleKey, source?: string, sourceTs?: string): Promise<EncryptedEnvelope>;
|
|
187
226
|
/**
|
|
188
227
|
* `ref` is FIRST and required (#1051). It was previously a trailing optional
|
|
189
228
|
* `id?: string`, which TypeScript cannot promote to required because it sits
|
|
@@ -195,7 +234,7 @@ export declare class RecordCodec<T> {
|
|
|
195
234
|
* compile on the hottest write path. Carries the collection too — see
|
|
196
235
|
* {@link encryptJsonString} for why the codec must not assume its own.
|
|
197
236
|
*/
|
|
198
|
-
encryptRecord(ref: RecordRef, record: T, version: number, cek?:
|
|
237
|
+
encryptRecord(ref: RecordRef, record: T, version: number, cek?: CapsuleKey, source?: string, sourceTs?: string, vdig?: {
|
|
199
238
|
readonly id: string;
|
|
200
239
|
readonly prev: EncryptedEnvelope | null;
|
|
201
240
|
}): Promise<EncryptedEnvelope>;
|
|
@@ -207,7 +246,7 @@ export declare class RecordCodec<T> {
|
|
|
207
246
|
* ({@link decryptJsonString}) and the sealed-field path ({@link decryptRecord}
|
|
208
247
|
* / {@link toCacheRecord}) so both agree on the record's key.
|
|
209
248
|
*/
|
|
210
|
-
resolveEnvelopeCek(envelope: EncryptedEnvelope, id?: string): Promise<
|
|
249
|
+
resolveEnvelopeCek(envelope: EncryptedEnvelope, id?: string): Promise<CapsuleKey | undefined>;
|
|
211
250
|
/**
|
|
212
251
|
* Low-level: decrypt an envelope and return the raw JSON string.
|
|
213
252
|
*
|
|
@@ -230,6 +269,19 @@ export declare class RecordCodec<T> {
|
|
|
230
269
|
* perfectly good record (#1041).
|
|
231
270
|
*/
|
|
232
271
|
decryptJsonString(ref: RecordRef, envelope: EncryptedEnvelope): Promise<string | null>;
|
|
272
|
+
/**
|
|
273
|
+
* Fire the read-coverage observer for a successful record decrypt (#1363).
|
|
274
|
+
*
|
|
275
|
+
* ⚠️ ONLY for this codec's OWN collection. `ref.collection` can be a storage
|
|
276
|
+
* identity that is not the live collection — a history/version address, the
|
|
277
|
+
* `_vec` vector sidecar, the `_ft` lexical index (#1041) — and their ids are
|
|
278
|
+
* not this corpus's ids, so counting them would corrupt the very estimate
|
|
279
|
+
* the sensor exists to produce. The cost is a deliberate UNDER-count: a
|
|
280
|
+
* principal reading the corpus through its history sidecar is not accounted.
|
|
281
|
+
* A sensor that under-counts is honest; one that inflates cries wolf and
|
|
282
|
+
* gets turned off. Recorded rather than papered over.
|
|
283
|
+
*/
|
|
284
|
+
private observeDecrypt;
|
|
233
285
|
/**
|
|
234
286
|
* Unseal a single `_sealed[field]` slot to its plaintext value: derive the
|
|
235
287
|
* per-field key off the collection DEK, AES-GCM-decrypt the `iv:data` blob,
|
|
@@ -237,7 +289,7 @@ export declare class RecordCodec<T> {
|
|
|
237
289
|
* {@link Sealed} handle's `reveal()` — so the on-demand reveal and the eager
|
|
238
290
|
* materialisation always agree byte-for-byte.
|
|
239
291
|
*/
|
|
240
|
-
unsealField(field: string, blob: string, cek?:
|
|
292
|
+
unsealField(field: string, blob: string, cek?: CapsuleKey): Promise<unknown>;
|
|
241
293
|
/**
|
|
242
294
|
* Build the `ViaCryptoCtx` for forget()'s per-ref via-erase fold (#629
|
|
243
295
|
* Task 10) — resolves the live envelope's CEK exactly like
|
|
@@ -266,7 +318,7 @@ export declare class RecordCodec<T> {
|
|
|
266
318
|
* may sit in the working-set cache (or be logged/serialised) without
|
|
267
319
|
* exposing the value, which decrypts only on `reveal()`.
|
|
268
320
|
*/
|
|
269
|
-
makeSealedHandle(field: string, blob: string, cek?:
|
|
321
|
+
makeSealedHandle(field: string, blob: string, cek?: CapsuleKey): SealedHandle<unknown>;
|
|
270
322
|
/**
|
|
271
323
|
* Replace every field the just-written envelope actually sealed with a
|
|
272
324
|
* {@link Sealed} handle, leaving every other field as its plaintext value.
|
|
@@ -308,7 +360,7 @@ export declare class RecordCodec<T> {
|
|
|
308
360
|
* never a tier DEK (tier writes don't seal fields; `_sealed` reaches a
|
|
309
361
|
* tiered envelope only via a tier-0 write later elevated).
|
|
310
362
|
*/
|
|
311
|
-
applySealedSlots(record: T, sealed: Record<string, string>, cek:
|
|
363
|
+
applySealedSlots(record: T, sealed: Record<string, string>, cek: CapsuleKey | undefined, opts?: {
|
|
312
364
|
id?: string;
|
|
313
365
|
sealedAsHandles?: boolean;
|
|
314
366
|
}): Promise<T>;
|
|
@@ -338,7 +390,7 @@ export declare class RecordCodec<T> {
|
|
|
338
390
|
* output-recompute path, not the public per-record read surface schema
|
|
339
391
|
* validation guards.
|
|
340
392
|
*/
|
|
341
|
-
decryptRecordAtDek(ref: RecordRef, envelope: EncryptedEnvelope, dek:
|
|
393
|
+
decryptRecordAtDek(ref: RecordRef, envelope: EncryptedEnvelope, dek: CapsuleKey): Promise<T | null>;
|
|
342
394
|
/**
|
|
343
395
|
* Decrypt an envelope into a record of type `T`.
|
|
344
396
|
*
|
|
@@ -359,3 +411,11 @@ export declare class RecordCodec<T> {
|
|
|
359
411
|
sealedAsHandles?: boolean;
|
|
360
412
|
}): Promise<T | null>;
|
|
361
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
|
+
export type BoundRecordCodec = (new <T>(ctx: RecordCodecContext<T>) => RecordCodecBase<T>) & Omit<typeof RecordCodecBase, never>;
|
|
419
|
+
export declare function makeRecordCodec(p: CapsulePrimitives, slots: ReturnType<typeof makeSealedSlots>): {
|
|
420
|
+
RecordCodec: BoundRecordCodec;
|
|
421
|
+
};
|
|
@@ -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
|
+
};
|