@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
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Re-key a vault's blob set from an old `_blob` DEK to a new one (#1122).
|
|
3
|
-
*
|
|
4
|
-
* ## The defect this closes
|
|
5
|
-
*
|
|
6
|
-
* `rotateKeys` re-keys `store.list(vault, <slot>)` plus the derived refs
|
|
7
|
-
* `derivedRefsFor` declares. That assumes a DEK slot named `X` protects data
|
|
8
|
-
* filed under collection `X`. For `_blob` it is false: the slot is `_blob`, but
|
|
9
|
-
* every byte it protects lives in `_blob_index` and `_blob_chunks`. So rotating
|
|
10
|
-
* `_blob` minted a fresh DEK, re-encrypted **nothing**, and made every blob in
|
|
11
|
-
* the vault permanently unreadable — reported to the user as `TamperedError`,
|
|
12
|
-
* i.e. as an attack, when it was self-inflicted. An ordinary `revoke` of a
|
|
13
|
-
* whole-vault grantee reaches it, because such a grantee's DEK map contains
|
|
14
|
-
* `_blob`.
|
|
15
|
-
*
|
|
16
|
-
* ## Why this cannot be done by `rekeyEnvelopeIfNeeded` alone
|
|
17
|
-
*
|
|
18
|
-
* Two of the three surfaces do not have the shape that helper assumes:
|
|
19
|
-
*
|
|
20
|
-
* - a **chunk** envelope is sealed over raw bytes under a bespoke AAD
|
|
21
|
-
* (`{eTag}:{index}:{count}`), not under the record AAD, so the generic
|
|
22
|
-
* helper cannot open it;
|
|
23
|
-
* - an **index** envelope's body is JSON that may itself carry a wrapped
|
|
24
|
-
* per-blob content CEK (`_cek` / `_cekPending`). Re-encrypting the body under
|
|
25
|
-
* the new DEK without re-wrapping that CEK leaves a blob whose metadata opens
|
|
26
|
-
* and whose bytes never will.
|
|
27
|
-
*
|
|
28
|
-
* ## Why it lives in the enclave
|
|
29
|
-
*
|
|
30
|
-
* It reads and writes protected body slots and it unwraps/re-wraps keys — the
|
|
31
|
-
* two things `enclave-body-only` reserves to `kernel/enclave/**`, and the same
|
|
32
|
-
* reason `rekeyEnvelopeToDek` moved here in #1074. `with-party` orchestrates
|
|
33
|
-
* the rotation and must not touch a body to do it.
|
|
34
|
-
*
|
|
35
|
-
* The blob layout below is duplicated from its owner rather than imported:
|
|
36
|
-
* `with-shape/blobs/blob-set.ts` already imports `with-party/team/tiers.js`, so
|
|
37
|
-
* a `with-party → with-shape` import would close a cycle, and the kernel may
|
|
38
|
-
* not depend on a service. `BlobObject` itself is a kernel type, so only the
|
|
39
|
-
* three collection/id string layouts are copied, with their owner named.
|
|
40
|
-
*
|
|
41
|
-
* @packageDocumentation
|
|
42
|
-
*/
|
|
43
|
-
import { type EnclaveKey } from '../crypto.js';
|
|
44
|
-
import type { NoydbStore } from '../../types.js';
|
|
45
|
-
/**
|
|
46
|
-
* What a rotation did to the blob set.
|
|
47
|
-
*
|
|
48
|
-
* Deliberately NOT on the enclave barrel: no caller outside this module binds
|
|
49
|
-
* it, and that surface is the fork-swap trust boundary, so exporting a type
|
|
50
|
-
* nobody consumes is pure widening.
|
|
51
|
-
*
|
|
52
|
-
* It is a return value rather than a log line because `foreign` and `blobs`
|
|
53
|
-
* are the only way to tell "left alone, correctly" from "left alone, because
|
|
54
|
-
* the caller passed a wrong `otherDeks` set". Both re-key nothing and both
|
|
55
|
-
* return successfully. `rotate-preserves-blobs.test.ts` asserts these counts
|
|
56
|
-
* against a direct call for exactly that reason.
|
|
57
|
-
*/
|
|
58
|
-
export interface BlobRekeyReport {
|
|
59
|
-
/** Index envelopes moved onto the new DEK. */
|
|
60
|
-
readonly blobs: number;
|
|
61
|
-
/** Chunk envelopes re-encrypted under the new DEK. */
|
|
62
|
-
readonly chunks: number;
|
|
63
|
-
/**
|
|
64
|
-
* Index envelopes left alone because they open under a DEK the caller holds
|
|
65
|
-
* for a DIFFERENT slot — an elevated blob, sealed under `_blob#<tier>`. Those
|
|
66
|
-
* are that slot's rotation to do, not this one's.
|
|
67
|
-
*/
|
|
68
|
-
readonly foreign: number;
|
|
69
|
-
/** Index envelopes already under the new DEK — a resumed rotation. */
|
|
70
|
-
readonly alreadyMoved: number;
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Move every blob sealed under `oldDek` onto `newDek`.
|
|
74
|
-
*
|
|
75
|
-
* Chunks are re-encrypted BEFORE their index entry is re-sealed, and that order
|
|
76
|
-
* is the resume property: an index entry still readable under `oldDek` means
|
|
77
|
-
* its chunks may be half-moved (each one is probed individually), and an index
|
|
78
|
-
* entry readable under `newDek` means its chunks are already done. An
|
|
79
|
-
* interrupted rotation is finished by re-running it with the same `newDek`.
|
|
80
|
-
*
|
|
81
|
-
* `otherDeks` is what keeps a tier-elevated blob from being mistaken for a
|
|
82
|
-
* damaged one. Membership in `_blob_index` is by DEK, not by collection name:
|
|
83
|
-
* a record elevated to tier N has its blob metadata sealed under `_blob#N`. An
|
|
84
|
-
* envelope that opens under NONE of the keys the caller holds is genuinely
|
|
85
|
-
* unreadable and throws, exactly as `rekeyEnvelopeIfNeeded` does — silently
|
|
86
|
-
* walking past it would turn a loud failure into permanent quiet loss.
|
|
87
|
-
*/
|
|
88
|
-
export declare function rekeyBlobSet(adapter: NoydbStore, vault: string, oldDek: EnclaveKey, newDek: EnclaveKey, otherDeks?: readonly EnclaveKey[]): Promise<BlobRekeyReport>;
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Re-key one envelope from an old collection DEK to a new one (#1074).
|
|
3
|
-
*
|
|
4
|
-
* Lives in the enclave because it is envelope surgery: it reads and writes the
|
|
5
|
-
* protected body slots (`_iv`/`_data`/`_cek`), which `enclave-body-only`
|
|
6
|
-
* reserves to `kernel/enclave/**`. `rotateKeys` previously did this inline in
|
|
7
|
-
* `with-party/team/keyring.ts` and got it wrong in two ways that the guard
|
|
8
|
-
* would have caught had the code lived here.
|
|
9
|
-
*
|
|
10
|
-
* @packageDocumentation
|
|
11
|
-
*/
|
|
12
|
-
import { type EnclaveKey } from '../crypto.js';
|
|
13
|
-
import type { EncryptedEnvelope } from '../../types.js';
|
|
14
|
-
/**
|
|
15
|
-
* Produce the envelope `envelope` becomes once its collection's DEK rotates
|
|
16
|
-
* from `oldDek` to `newDek`.
|
|
17
|
-
*
|
|
18
|
-
* **Every slot is carried forward except `_bidx`.** The previous inline version
|
|
19
|
-
* built a fresh literal holding only `_noydb/_v/_ts/_iv/_data`, silently
|
|
20
|
-
* discarding `_by`, `_tier`, `_cek`, `_sealed`, `_vdig` and `_source`. Losing
|
|
21
|
-
* `_tier` was the worst of those: tier-0 reads treat elevated as missing, so an
|
|
22
|
-
* elevated record did not error after a rotation — it simply disappeared.
|
|
23
|
-
*
|
|
24
|
-
* `_bidx` is dropped deliberately. It is a DEK-rooted equality tag, so a tag
|
|
25
|
-
* carried across a DEK rotation can never be re-derived to match a query again
|
|
26
|
-
* while still leaking the old equality partition. Index coverage regrows
|
|
27
|
-
* per-record on the next `put()` under the new DEK.
|
|
28
|
-
*
|
|
29
|
-
* Two shapes, and picking the wrong one is why this needed a helper:
|
|
30
|
-
*
|
|
31
|
-
* - **per-record CEK** (`_cek` present) — the body is sealed under the CEK and
|
|
32
|
-
* the CEK is wrapped under the collection DEK, so rotation re-wraps the CEK
|
|
33
|
-
* and leaves the body **untouched**. The old inline code instead ran
|
|
34
|
-
* `decrypt(body, oldDek)` on these, which throws: rotation could not complete
|
|
35
|
-
* on a collection containing any CEK record.
|
|
36
|
-
* - **bare** — body sealed directly under the DEK, so decrypt and re-encrypt.
|
|
37
|
-
*
|
|
38
|
-
* Idempotence is the caller's problem, not this function's: it assumes
|
|
39
|
-
* `envelope` is still under `oldDek`. A resumable rotation must know which side
|
|
40
|
-
* of the migration each record is on before calling.
|
|
41
|
-
*/
|
|
42
|
-
export declare function rekeyEnvelopeToDek(ref: {
|
|
43
|
-
readonly collection: string;
|
|
44
|
-
readonly id: string;
|
|
45
|
-
}, envelope: EncryptedEnvelope, oldDek: EnclaveKey, newDek: EnclaveKey): Promise<EncryptedEnvelope>;
|
|
46
|
-
/**
|
|
47
|
-
* Resumable variant: returns the re-keyed envelope, or `null` when `envelope`
|
|
48
|
-
* is **already** under `newDek` and needs no work (#1074 part 2).
|
|
49
|
-
*
|
|
50
|
-
* A rotation interrupted mid-collection leaves records on both sides of the
|
|
51
|
-
* migration. Resuming means re-running the rotation with the *same* new DEK,
|
|
52
|
-
* which requires distinguishing "not yet moved" from "already moved" without
|
|
53
|
-
* the caller touching protected slots.
|
|
54
|
-
*
|
|
55
|
-
* Detection is by trial decryption under `oldDek`. There is no metadata that
|
|
56
|
-
* says which DEK sealed a record — deliberately, since such a marker would be
|
|
57
|
-
* store-writable and therefore a downgrade lever (the same reasoning that
|
|
58
|
-
* keeps the reader from branching on `_noydb`).
|
|
59
|
-
*
|
|
60
|
-
* A record that opens under *neither* key is genuinely damaged and rethrows,
|
|
61
|
-
* rather than being silently skipped: a rotation that quietly walked past
|
|
62
|
-
* unreadable records would convert a loud failure into permanent silent loss,
|
|
63
|
-
* which is the defect this whole issue is about.
|
|
64
|
-
*/
|
|
65
|
-
export declare function rekeyEnvelopeIfNeeded(ref: {
|
|
66
|
-
readonly collection: string;
|
|
67
|
-
readonly id: string;
|
|
68
|
-
}, envelope: EncryptedEnvelope, oldDek: EnclaveKey, newDek: EnclaveKey): Promise<EncryptedEnvelope | null>;
|
|
69
|
-
/**
|
|
70
|
-
* Does this envelope open under ANY of `keys`? A read-only probe — decrypts
|
|
71
|
-
* nothing into a caller-visible value and writes nothing.
|
|
72
|
-
*
|
|
73
|
-
* Exists so a rotation can tell *"this envelope belongs to a DIFFERENT DEK slot
|
|
74
|
-
* the caller also holds"* from *"this envelope is damaged"* (#1125). Those two
|
|
75
|
-
* look identical from a failed `rekeyEnvelopeIfNeeded`, and collapsing them
|
|
76
|
-
* either aborts a legitimate rotation or walks past unreadable data.
|
|
77
|
-
*
|
|
78
|
-
* **The question is deliberately asked of the KEY, not of the envelope's claimed
|
|
79
|
-
* `_tier`.** `_tier` is unencrypted — the store writes it — so routing a
|
|
80
|
-
* rotation on it would let a store mark a tier-0 record `_tier: 5` and have the
|
|
81
|
-
* rotation skip it, leaving a revoked member's DEK live on real data. That is
|
|
82
|
-
* #1115's defect wearing a different hat. A key either opens the body or it does
|
|
83
|
-
* not, and a store cannot forge that.
|
|
84
|
-
*
|
|
85
|
-
* Mirrors `rekeyBlobSet`'s `otherDeks` treatment, which asks the same question
|
|
86
|
-
* about the same kind of ambiguity.
|
|
87
|
-
*/
|
|
88
|
-
export declare function envelopeOpensUnderAny(ref: {
|
|
89
|
-
readonly collection: string;
|
|
90
|
-
readonly id: string;
|
|
91
|
-
}, envelope: EncryptedEnvelope, keys: readonly EnclaveKey[]): Promise<boolean>;
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/** Parse an `iv:data` sealed slot (split on the FIRST `:`). */
|
|
2
|
-
export declare function parseSealedSlot(blob: string): {
|
|
3
|
-
iv: string;
|
|
4
|
-
data: string;
|
|
5
|
-
};
|
|
6
|
-
/**
|
|
7
|
-
* Dual-read: decrypt a sealed slot trying the CEK-derived field key first,
|
|
8
|
-
* falling back to the collection-DEK field key. Legacy records
|
|
9
|
-
* (even ones whose body is CEK-encrypted) are sealed under the collection-DEK
|
|
10
|
-
* key; current writes seal under the per-record CEK. Try the CEK key first; on
|
|
11
|
-
* its AES-GCM auth failure, fall back to the DEK key. Throws only if BOTH fail.
|
|
12
|
-
* Returns the plaintext string (callers `JSON.parse` as needed).
|
|
13
|
-
*/
|
|
14
|
-
export declare function dualReadSealedSlot(blob: string, field: string, collection: string, cek: CryptoKey | undefined, dek: CryptoKey): Promise<string>;
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Sealed-slot sub-step — the "seal these declared fields into their own
|
|
3
|
-
* `iv:data` slots" mechanism, extracted byte-parity from `RecordCodec`
|
|
4
|
-
* (#629 Task 1; see `.superpowers/sdd/seam-map-classified-blobs.md` §2).
|
|
5
|
-
*
|
|
6
|
-
* This is the ONE genuinely separable sub-step `RecordCodec.encryptRecord`/
|
|
7
|
-
* `decryptRecord` perform (the digest-only `_vdig`/`_bidx` mechanism is NOT
|
|
8
|
-
* separable the same way — it needs write-history `prev` context, see the
|
|
9
|
-
* seam map's separability verdict). `sealFields`/`unsealFields` are the
|
|
10
|
-
* natural shape of a `via` `encodeAtRest`/`decodeAtRest` hook for a "seal
|
|
11
|
-
* this field" via-feature, and `makeSealedSlotCapability`/
|
|
12
|
-
* `makeReservedEnvelopes` (below) are the `ViaCryptoCtx` capability
|
|
13
|
-
* factories built on top of them.
|
|
14
|
-
*
|
|
15
|
-
* The capability factories live here (rather than a sibling
|
|
16
|
-
* `kernel/via-crypto.ts`) so they can call `deriveSealedFieldKey`/
|
|
17
|
-
* `deriveSealedFieldKeyFromCek`/`encrypt`/`decrypt` directly — this file IS
|
|
18
|
-
* kernel enclave code (C3), so it is exempt from `enclave-barrel-only` the
|
|
19
|
-
* same way `record-codec.ts`/`sealing.ts` are. A file outside
|
|
20
|
-
* `kernel/enclave/**` would have had to go through the enclave barrel
|
|
21
|
-
* (`kernel/enclave/index.ts`), which does not (yet) export these symbols.
|
|
22
|
-
*/
|
|
23
|
-
import { type EnclaveKey } from '../crypto.js';
|
|
24
|
-
import { SealedHandle } from '../../types.js';
|
|
25
|
-
import type { ViaCryptoCtx } from '../../via/index.js';
|
|
26
|
-
/**
|
|
27
|
-
* Key material for one collection's sealed-field derivation. `cek`, when
|
|
28
|
-
* supplied, is preferred (record-scoped); `getDEK` is the fallback (and,
|
|
29
|
-
* for legacy/no-CEK collections, the only key) — mirrors the dual-read
|
|
30
|
-
* `RecordCodec` has always done.
|
|
31
|
-
*/
|
|
32
|
-
export interface SealKeyMaterial {
|
|
33
|
-
readonly collection: string;
|
|
34
|
-
readonly cek?: EnclaveKey;
|
|
35
|
-
getDEK(): Promise<EnclaveKey>;
|
|
36
|
-
}
|
|
37
|
-
export interface SealFieldsResult {
|
|
38
|
-
readonly openRecord: Record<string, unknown>;
|
|
39
|
-
readonly sealed: Record<string, string> | undefined;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Peel declared `sensitiveFields` out of `record` BEFORE building `_data`,
|
|
43
|
-
* sealing each into its own `iv:data` slot. Extracted byte-parity from
|
|
44
|
-
* `RecordCodec.encryptRecord` step 2 (pre-#629 `record-codec.ts:261-288`).
|
|
45
|
-
* Returns `record` untouched (and `sealed: undefined`) when no declared
|
|
46
|
-
* field is present with a defined value — the envelope stays byte-identical
|
|
47
|
-
* to legacy output, exactly as before.
|
|
48
|
-
*/
|
|
49
|
-
export declare function sealFields(record: Record<string, unknown>, sensitiveFields: ReadonlySet<string>, keyMaterial: SealKeyMaterial): Promise<SealFieldsResult>;
|
|
50
|
-
/**
|
|
51
|
-
* Unseal one `_sealed[field]` slot to its plaintext value: dual-read (try
|
|
52
|
-
* the CEK-derived key, fall back to the DEK-derived key for legacy
|
|
53
|
-
* records), AES-GCM-decrypt the `iv:data` blob, and JSON-parse the result.
|
|
54
|
-
* Extracted byte-parity from `RecordCodec.unsealField`
|
|
55
|
-
* (pre-#629 `record-codec.ts:485-493`).
|
|
56
|
-
*/
|
|
57
|
-
export declare function unsealOneField(field: string, blob: string, keyMaterial: SealKeyMaterial): Promise<unknown>;
|
|
58
|
-
/**
|
|
59
|
-
* Build a non-leaking {@link SealedHandle} producer over sealed key
|
|
60
|
-
* material: each call captures only the ciphertext `blob` and a closure to
|
|
61
|
-
* {@link unsealOneField} — the plaintext is never stored on the handle, and
|
|
62
|
-
* (crucially) the DEK is fetched lazily on `reveal()`, never at handle-
|
|
63
|
-
* construction time. Extracted byte-parity from
|
|
64
|
-
* `RecordCodec.makeSealedHandle` (pre-#629 `record-codec.ts:552-554`).
|
|
65
|
-
*/
|
|
66
|
-
export declare function makeHandleProducer(keyMaterial: SealKeyMaterial): (field: string, blob: string) => SealedHandle<unknown>;
|
|
67
|
-
/**
|
|
68
|
-
* Restore every `[field]: blob` entry in `sealed` onto `record` (mutated in
|
|
69
|
-
* place, matching the original's mutate-then-return shape): eagerly unseal
|
|
70
|
-
* to plaintext (`opts.asHandles` falsy) or wrap each in a
|
|
71
|
-
* {@link SealedHandle} (`opts.asHandles: true`) so the plaintext is never
|
|
72
|
-
* materialised. Extracted byte-parity from `RecordCodec.decryptRecord`'s
|
|
73
|
-
* sealed-handle block (pre-#629 `record-codec.ts:615-623`).
|
|
74
|
-
*/
|
|
75
|
-
export declare function unsealFields(record: Record<string, unknown>, sealed: Record<string, string>, keyMaterial: SealKeyMaterial, opts?: {
|
|
76
|
-
asHandles?: boolean;
|
|
77
|
-
}): Promise<Record<string, unknown>>;
|
|
78
|
-
/** What {@link makeSealedSlotCapability} needs — a subset of `RecordCodecContext`. */
|
|
79
|
-
export interface SealedSlotCapabilityCtx {
|
|
80
|
-
readonly name: string;
|
|
81
|
-
getDEK(): Promise<EnclaveKey>;
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Build a `ViaCryptoCtx.sealedSlots` capability pre-bound to one
|
|
85
|
-
* `(collection, recordId)`. The key material (`cek`/DEK resolver) is closed
|
|
86
|
-
* over and never placed on the returned object — `Object.keys`/
|
|
87
|
-
* `Object.values` of the capability expose only the three methods, never a
|
|
88
|
-
* key (zero-knowledge: capabilities never expose keys).
|
|
89
|
-
*
|
|
90
|
-
* `delete(field)` is **advisory and capability-instance-local, not real
|
|
91
|
-
* erasure** — it has no store to reach and never will by itself: it just
|
|
92
|
-
* adds `field` to a `Set` closed over by THIS ONE capability object, so a
|
|
93
|
-
* later `unseal` call on that SAME object refuses. No I/O happens. A fresh
|
|
94
|
-
* capability for the same record (e.g. `seal()`'d again, or a new
|
|
95
|
-
* `makeSealedSlotCapability(...)` call) has an empty set and sees no
|
|
96
|
-
* deletion at all — `seal()` on a given field also clears any prior mark
|
|
97
|
-
* for it. Do not build production logic on `delete()` persisting anything.
|
|
98
|
-
* The real erasure guarantee for a forgotten record is `vault.forget()`'s
|
|
99
|
-
* unconditional `_writeTombstone` call, which replaces the whole live
|
|
100
|
-
* envelope with a fresh, `_sealed`-free tombstone — `_sealed` disappears
|
|
101
|
-
* from the store regardless of what any capability's `delete()` marked.
|
|
102
|
-
* (#629 Task 10 traced this end-to-end; see task-10-report.md "sealedSlots
|
|
103
|
-
* .delete()" section. Removing/changing this method's shape is a phase-E
|
|
104
|
-
* decision, not implied by this comment.)
|
|
105
|
-
*/
|
|
106
|
-
export declare function makeSealedSlotCapability(ctx: SealedSlotCapabilityCtx, recordId: string, cek?: EnclaveKey): ViaCryptoCtx['sealedSlots'];
|
|
107
|
-
/** Resolve the DEK for an arbitrary (possibly synthetic, e.g. `_dict_en`) collection name. */
|
|
108
|
-
export type ReservedEnvelopeDekResolver = (collection: string) => Promise<EnclaveKey>;
|
|
109
|
-
/**
|
|
110
|
-
* Build a `ViaCryptoCtx.reservedEnvelopes` capability: a whole-envelope
|
|
111
|
-
* encrypt/decrypt door scoped to collection names under a declared prefix
|
|
112
|
-
* (e.g. `_dict_`) — the shape `via/i18n/dictionary.ts`'s
|
|
113
|
-
* `DictionaryHandle` needs (seam map Part 3): build JSON → encrypt under a
|
|
114
|
-
* DEK → wrap in an `EncryptedEnvelope`; decrypt → JSON text. No per-record
|
|
115
|
-
* CEK — reserved envelopes are whole-DEK-encrypted, same as the dictionary
|
|
116
|
-
* grandfather.
|
|
117
|
-
*
|
|
118
|
-
* `reservedEnvelopes(prefix)` throws `ValidationError` immediately when
|
|
119
|
-
* `prefix` is not in `declaredPrefixes`; each `encrypt`/`decrypt` call
|
|
120
|
-
* throws `ValidationError` when its `collection` argument does not start
|
|
121
|
-
* with `prefix`.
|
|
122
|
-
*/
|
|
123
|
-
export declare function makeReservedEnvelopes(dekResolver: ReservedEnvelopeDekResolver, declaredPrefixes: readonly string[]): ViaCryptoCtx['reservedEnvelopes'];
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Record-scoped CEK sealing — grantor side.
|
|
3
|
-
*
|
|
4
|
-
* The **grantor** holds the collection DEK and seals ONE record's CEK to an
|
|
5
|
-
* `at-*` host so that host — and only that host — can decrypt exactly that
|
|
6
|
-
* record, with no access to the vault DEK and no ability to read any other
|
|
7
|
-
* record. This is the counterpart to the host-side `openSealedRecord`
|
|
8
|
-
* (`@noy-db/hub/sealed-record`), which holds no DEK.
|
|
9
|
-
*
|
|
10
|
-
* These functions are the orchestration behind `vault.sealRecordToHost` /
|
|
11
|
-
* `vault.revokeSealedRecord` / `vault.rotateRecordCek`, lifted off `Vault`
|
|
12
|
-
* behind a narrow {@link SealingContext} so the kernel file delegates. They
|
|
13
|
-
* live in `record-keys/` (the vault-side CEK policy layer), NOT in
|
|
14
|
-
* `sealed-record/`, so the host-side subpath stays DEK-free — the wire
|
|
15
|
-
* *types* they share are spine-owned (`kernel/types.ts`), not imported from
|
|
16
|
-
* `sealed-record/` directly.
|
|
17
|
-
*/
|
|
18
|
-
import { type EnclaveKey } from '../crypto.js';
|
|
19
|
-
import { type NoydbStore, type RecipientSealer } from '../../types.js';
|
|
20
|
-
/** The `_sealed_cek` delivery namespace (one envelope per `collection/id/pid`). */
|
|
21
|
-
export declare const SEALED_CEK_NS = "_sealed_cek";
|
|
22
|
-
/** What the grantor functions need from their `Vault`. */
|
|
23
|
-
export interface SealingContext {
|
|
24
|
-
readonly adapter: NoydbStore;
|
|
25
|
-
/** Vault id (the adapter's first coordinate). */
|
|
26
|
-
readonly vault: string;
|
|
27
|
-
/** Resolve the DEK a record's CEK is wrapped under. */
|
|
28
|
-
getDEK(collection: string): Promise<EnclaveKey>;
|
|
29
|
-
/** Actor id stamped on `_by` (empty string → omit). */
|
|
30
|
-
readonly actor: string;
|
|
31
|
-
/** Evict the per-record CEK cache + decrypted-record cache after a rotation. */
|
|
32
|
-
invalidateRecordCaches(collection: string, id: string): Promise<void>;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Seal a record's CEK to a host. See `vault.sealRecordToHost` for the contract.
|
|
36
|
-
* Returns `{ pid, envelopeKey }`.
|
|
37
|
-
*/
|
|
38
|
-
export declare function sealRecordToHost(ctx: SealingContext, collection: string, id: string, hostSealer: RecipientSealer, opts: {
|
|
39
|
-
expiresAt: string;
|
|
40
|
-
}): Promise<{
|
|
41
|
-
pid: string;
|
|
42
|
-
envelopeKey: string;
|
|
43
|
-
}>;
|
|
44
|
-
/**
|
|
45
|
-
* Revoke one sealed-CEK grant.
|
|
46
|
-
*
|
|
47
|
-
* **Default (`{ hard: false }`) is SOFT** — it only deletes the delivery
|
|
48
|
-
* envelope from the store. A host that already fetched (or cached the unsealed
|
|
49
|
-
* CEK from) that envelope KEEPS decrypt capability for the record; soft revoke
|
|
50
|
-
* is a "stop new fetches" control, not a cryptographic cutoff.
|
|
51
|
-
*
|
|
52
|
-
* **`{ hard: true }`** additionally rotates the record's CEK (via
|
|
53
|
-
* {@link rotateRecordCek}): the live body is re-encrypted under a fresh CEK and
|
|
54
|
-
* EVERY sealed-CEK delivery envelope for the record (all pids) is deleted, so
|
|
55
|
-
* any previously-sealed CEK fails the AES-GCM auth tag on the rotated body —
|
|
56
|
-
* future opens are cryptographically denied. (PRE-rotation history versions,
|
|
57
|
-
* which keep their old `_cek`, remain openable — same semantics as
|
|
58
|
-
* `rotateRecordCek`.)
|
|
59
|
-
*/
|
|
60
|
-
export declare function revokeSealedRecord(ctx: SealingContext, collection: string, id: string, pid: string, opts?: {
|
|
61
|
-
hard?: boolean;
|
|
62
|
-
}): Promise<void>;
|
|
63
|
-
/**
|
|
64
|
-
* HARD-rotate a record's CEK: re-encrypt the live body under a fresh CEK, evict
|
|
65
|
-
* caches, and delete EVERY sealed-CEK delivery envelope for the record. See
|
|
66
|
-
* `vault.rotateRecordCek` for why this bypasses `Collection.put` (no guards, no
|
|
67
|
-
* history bump — a key rotation must not re-encrypt prior history under the new
|
|
68
|
-
* CEK).
|
|
69
|
-
*/
|
|
70
|
-
export declare function rotateRecordCek(ctx: SealingContext, collection: string, id: string): Promise<void>;
|
|
@@ -1,232 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Query DSL `.join()` — eager, single-FK, intra-vault joins.
|
|
3
|
-
*
|
|
4
|
-
* resolves a ref()-declared foreign key into an attached
|
|
5
|
-
* right-side record under an alias, using one of two planner paths
|
|
6
|
-
* selected automatically:
|
|
7
|
-
*
|
|
8
|
-
* - **nested-loop** — right-side source exposes `lookupById`, so
|
|
9
|
-
* each left row costs O(1). This is the common path for joins
|
|
10
|
-
* against a Collection, which backs `lookupById` with a Map
|
|
11
|
-
* lookup.
|
|
12
|
-
* - **hash** — right-side has only `snapshot()`. Build a
|
|
13
|
-
* `Map<id, record>` once, probe per left row. Same asymptotic
|
|
14
|
-
* cost for our collections, but the path exists as a fallback
|
|
15
|
-
* for custom QuerySource implementations and as an explicit
|
|
16
|
-
* test-only override via `{ strategy: 'hash' }`.
|
|
17
|
-
*
|
|
18
|
-
* Scope:
|
|
19
|
-
*
|
|
20
|
-
* - Equi-joins on declared `ref()` fields only. Joins on
|
|
21
|
-
* undeclared fields throw at plan time with an actionable error
|
|
22
|
-
* naming the field and collection.
|
|
23
|
-
* - Same-vault only. Cross-vault correlation goes
|
|
24
|
-
* through `queryAcross`; this is an architectural
|
|
25
|
-
* invariant, not a limitation we plan to lift.
|
|
26
|
-
* - Hard row ceiling via `JoinTooLargeError` — default 50k per
|
|
27
|
-
* side, override via `{ maxRows }`. Warns at 80% of the ceiling
|
|
28
|
-
* on the existing warn channel.
|
|
29
|
-
* - Three ref-mode behaviors on dangling refs:
|
|
30
|
-
* strict → `DanglingReferenceError`,
|
|
31
|
-
* warn → attach `null` with a one-shot warning,
|
|
32
|
-
* cascade → attach `null` silently (cascade is a delete-time
|
|
33
|
-
* mode; any dangling refs still present at read time are
|
|
34
|
-
* mid-flight cascades or orphans from earlier, not a DSL error).
|
|
35
|
-
*
|
|
36
|
-
* Partition-awareness seam:
|
|
37
|
-
*
|
|
38
|
-
* Every `JoinLeg` carries a `partitionScope` field that is always
|
|
39
|
-
* `'all'` in. The executor never reads this field.
|
|
40
|
-
* partition-aware joins will start populating it from `where()`
|
|
41
|
-
* predicates on the partition key without changing the planner's
|
|
42
|
-
* external shape — this is the whole reason it exists now.
|
|
43
|
-
*
|
|
44
|
-
* Joins stay OUT of the ledger: reads don't touch `_ledger/`,
|
|
45
|
-
* including joined reads.
|
|
46
|
-
*/
|
|
47
|
-
import type { RefDescriptor, RefMode } from '../refs.js';
|
|
48
|
-
import type { Clause } from './predicate.js';
|
|
49
|
-
/** Planner strategy for a single join leg. Auto-selected unless overridden. */
|
|
50
|
-
export type JoinStrategy = 'hash' | 'nested';
|
|
51
|
-
/** Default per-side row ceiling before `.join()` throws `JoinTooLargeError`. */
|
|
52
|
-
export declare const DEFAULT_JOIN_MAX_ROWS = 50000;
|
|
53
|
-
/**
|
|
54
|
-
* Internal representation of a single join leg in the query plan.
|
|
55
|
-
*
|
|
56
|
-
* This is the primary place where constraint #1 is honored:
|
|
57
|
-
* every leg carries a `partitionScope` field that is always `'all'`
|
|
58
|
-
* in and is never read by the executor. partition-aware
|
|
59
|
-
* joins will start populating it from `where()` predicates on the
|
|
60
|
-
* partition key without changing the planner's external shape.
|
|
61
|
-
*/
|
|
62
|
-
export interface JoinLeg {
|
|
63
|
-
/** Field on the left-side record holding the foreign key value. */
|
|
64
|
-
readonly field: string;
|
|
65
|
-
/** Alias key under which the joined right-side record attaches. */
|
|
66
|
-
readonly as: string;
|
|
67
|
-
/** Target collection name, resolved from the `ref()` declaration. */
|
|
68
|
-
readonly target: string;
|
|
69
|
-
/** Ref mode controlling behavior on dangling refs at read time. */
|
|
70
|
-
readonly mode: RefMode;
|
|
71
|
-
/** Manual planner strategy override. `undefined` → auto-select. */
|
|
72
|
-
readonly strategy: JoinStrategy | undefined;
|
|
73
|
-
/** Per-side row ceiling override. `undefined` → DEFAULT_JOIN_MAX_ROWS. */
|
|
74
|
-
readonly maxRows: number | undefined;
|
|
75
|
-
/**
|
|
76
|
-
* Partition scope for future partition-aware joins. Always `'all'`
|
|
77
|
-
* today — the executor never reads this field. Future versions will
|
|
78
|
-
* populate it from `where()` predicates without breaking the
|
|
79
|
-
* planner's external shape. Do not remove even though it looks
|
|
80
|
-
* unused today — that's the whole point of having it.
|
|
81
|
-
*/
|
|
82
|
-
readonly partitionScope: 'all' | readonly string[];
|
|
83
|
-
/**
|
|
84
|
-
* When `true`, this is a dictionary join. The executor
|
|
85
|
-
* resolves the left-field value against the dict snapshot and
|
|
86
|
-
* attaches `{ ...labels, key }` rather than a right-side record.
|
|
87
|
-
* `target` holds the dictionary name (not a collection name).
|
|
88
|
-
*/
|
|
89
|
-
readonly isDictJoin?: true;
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Minimal shape of a joinable right-side record source.
|
|
93
|
-
*
|
|
94
|
-
* Collections implement this structurally via their `QuerySource`;
|
|
95
|
-
* sources without `lookupById` force the hash-join fallback. Kept as
|
|
96
|
-
* a thin interface so tests can wire up plain-object sources without
|
|
97
|
-
* pulling in the full Collection class.
|
|
98
|
-
*
|
|
99
|
-
* The optional `subscribe` is used by `Query.live()` to merge
|
|
100
|
-
* right-side change streams into the live re-run trigger. Sources
|
|
101
|
-
* that omit `subscribe` still work for live joins — they just
|
|
102
|
-
* don't drive re-fires when their right side mutates. Collection
|
|
103
|
-
* implements `subscribe` by hooking into the existing per-
|
|
104
|
-
* vault event emitter.
|
|
105
|
-
*/
|
|
106
|
-
export interface JoinableSource {
|
|
107
|
-
snapshot(): readonly unknown[];
|
|
108
|
-
lookupById?(id: string): unknown;
|
|
109
|
-
/**
|
|
110
|
-
* Default locale a label-resolving query falls back to when the query
|
|
111
|
-
* itself is locale-less. Set by a `staticDict()`-backed source from its
|
|
112
|
-
* `displayLocale` so `{ by: 'label' }` resolves under a locale-less read.
|
|
113
|
-
* Plain `_dict_*`-backed sources omit it.
|
|
114
|
-
*/
|
|
115
|
-
readonly displayLocale?: string;
|
|
116
|
-
/**
|
|
117
|
-
* Sync present-for-join dressing (#626 retirement, #650 Task 6) — when
|
|
118
|
-
* present and the query carries a locale, each joined right-side record
|
|
119
|
-
* is passed through this hook (built by the right-side `Collection` from
|
|
120
|
-
* its own i18n-text + lookup-label bindings) BEFORE it is attached under
|
|
121
|
-
* the leg's alias — so a joined `i18nText` field resolves to a string
|
|
122
|
-
* (not a raw `{ locale }` map) and a joined lookup field gains its
|
|
123
|
-
* `<field>Label`. Locale-less queries leave joined fields raw
|
|
124
|
-
* (consistent with a locale-less read). Replaces the old `i18nFields`
|
|
125
|
-
* data field — the join executor no longer resolves i18n locale itself,
|
|
126
|
-
* it just calls this hook.
|
|
127
|
-
*/
|
|
128
|
-
readonly presentForJoin?: (record: unknown, locale: string) => unknown;
|
|
129
|
-
/**
|
|
130
|
-
* Subscribe to mutations on this source. The callback fires
|
|
131
|
-
* AFTER the underlying record set has been updated. Returns an
|
|
132
|
-
* unsubscribe function. Optional — sources without this method
|
|
133
|
-
* cannot trigger live-join re-fires from their side.
|
|
134
|
-
*/
|
|
135
|
-
subscribe?(cb: () => void): () => void;
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Join resolution context attached to a `Query` when it's constructed
|
|
139
|
-
* from a `Collection`. Holds everything the `.join()` method needs to
|
|
140
|
-
* translate a field name into a target collection + ref mode, and
|
|
141
|
-
* everything the executor needs to read the right side.
|
|
142
|
-
*
|
|
143
|
-
* Kept as a structural interface so `Vault` can implement it
|
|
144
|
-
* without `Query` needing to import `Vault` (circular-import
|
|
145
|
-
* avoid). The Collection wires this up in its `query()` method using
|
|
146
|
-
* the `joinResolver` back-reference the Vault passes in.
|
|
147
|
-
*/
|
|
148
|
-
export interface JoinContext {
|
|
149
|
-
/** Name of the left-side (owning) collection. */
|
|
150
|
-
readonly leftCollection: string;
|
|
151
|
-
/**
|
|
152
|
-
* The owning collection's default locale. Used to resolve joined
|
|
153
|
-
* i18n fields at the `join` layer when a terminal call doesn't pass an
|
|
154
|
-
* explicit locale — so `openVault({ locale })` flows to joins like it does
|
|
155
|
-
* to `get`/`list`. A per-call `toArray({ locale })` overrides it.
|
|
156
|
-
*/
|
|
157
|
-
readonly defaultLocale?: string;
|
|
158
|
-
/** Look up a `RefDescriptor` by field name on the left collection. */
|
|
159
|
-
resolveRef(field: string): RefDescriptor | null;
|
|
160
|
-
/** Resolve a right-side source by target collection name. */
|
|
161
|
-
resolveSource(collectionName: string): JoinableSource | null;
|
|
162
|
-
/**
|
|
163
|
-
* Resolve a dictKey join source. Returns a `JoinableSource`
|
|
164
|
-
* whose snapshot exposes `{ key, ...labels }` records, keyed by the
|
|
165
|
-
* stable dictionary key. `null` when the field is not a dictKey.
|
|
166
|
-
*
|
|
167
|
-
* The source is built from the compartment's in-memory dictionary
|
|
168
|
-
* snapshot — same data as `DictionaryHandle.list()`, O(1) per lookup.
|
|
169
|
-
*/
|
|
170
|
-
resolveDictSource?(field: string): JoinableSource | null;
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Split a plan's clauses into those evaluable before the join legs run and
|
|
174
|
-
* those that need the joined shape (#1030).
|
|
175
|
-
*
|
|
176
|
-
* Join legs attach after `where` so the left set can be narrowed (and
|
|
177
|
-
* index-driven) first. That is the right default, but it silently broke any
|
|
178
|
-
* predicate addressing a joined alias: the field did not exist yet, so
|
|
179
|
-
* `readPath` returned `undefined`, nothing matched, and the query returned an
|
|
180
|
-
* empty result with no error.
|
|
181
|
-
*
|
|
182
|
-
* The split is deliberately narrow. When no clause addresses an alias — every
|
|
183
|
-
* query written against the previous behaviour — `postJoin` is empty and the
|
|
184
|
-
* caller takes its original path unchanged. The reordered pipeline therefore
|
|
185
|
-
* only ever runs for queries that match nothing today.
|
|
186
|
-
*
|
|
187
|
-
* KNOWN RESIDUAL: `.filter(r => r.client?.name === 'Ann')` cannot be
|
|
188
|
-
* classified (the predicate is a closure), so it still runs pre-join and still
|
|
189
|
-
* sees no alias. Prefer `.where()` for anything addressing a joined field.
|
|
190
|
-
*
|
|
191
|
-
* Shared by the eager `Query` and the streaming `ScanBuilder` so the two
|
|
192
|
-
* cannot drift on which side a clause belongs to.
|
|
193
|
-
*/
|
|
194
|
-
export declare function splitAroundJoins(clauses: readonly Clause[], joins: readonly JoinLeg[]): {
|
|
195
|
-
readonly preJoin: readonly Clause[];
|
|
196
|
-
readonly postJoin: readonly Clause[];
|
|
197
|
-
};
|
|
198
|
-
/**
|
|
199
|
-
* Apply every join leg in the plan against a base set of left-side
|
|
200
|
-
* rows. Called by the query executor after `where` / `orderBy` /
|
|
201
|
-
* `offset` / `limit` have narrowed the left set.
|
|
202
|
-
*
|
|
203
|
-
* Each leg attaches a `leg.as` field to every row. Returns a new
|
|
204
|
-
* array of plain objects — the original left rows are not mutated
|
|
205
|
-
* (structural sharing is fine for the inner fields, but the
|
|
206
|
-
* top-level object is a fresh clone so consumers can further mutate
|
|
207
|
-
* safely).
|
|
208
|
-
*
|
|
209
|
-
* **Ordering:** joins run AFTER orderBy / limit / offset in v1.
|
|
210
|
-
* This keeps the planner simple and means queries like "top 10
|
|
211
|
-
* invoices with client" sort and paginate the left side first, then
|
|
212
|
-
* join. Sorting *by* a joined field is out of scope for — users
|
|
213
|
-
* can post-sort the result array in userland or wait for
|
|
214
|
-
* (multi-FK chaining) which can be layered on top.
|
|
215
|
-
*
|
|
216
|
-
* **Multi-FK chaining:** each leg's `maxRows` is enforced
|
|
217
|
-
* against the current left-row count independently. Because
|
|
218
|
-
* joins are equi-joins on the target's primary key (one-to-one or
|
|
219
|
-
* one-to-null), the left row count is constant across legs — no
|
|
220
|
-
* cartesian blowup. The per-leg left-side check is still necessary
|
|
221
|
-
* so that a later leg with a tighter ceiling correctly fires on a
|
|
222
|
-
* query like `.join('a', { maxRows: 100_000 }).join('b', { maxRows: 50 })`,
|
|
223
|
-
* which should throw on the second leg if the left set exceeds 50.
|
|
224
|
-
*/
|
|
225
|
-
export declare function applyJoins(rows: readonly unknown[], joins: readonly JoinLeg[], context: JoinContext, locale?: string): unknown[];
|
|
226
|
-
/**
|
|
227
|
-
* Test-only: reset the join warning deduplication state between
|
|
228
|
-
* tests. Production code never calls this — the dedup state is
|
|
229
|
-
* intentionally process-scoped so a noisy query doesn't spam the
|
|
230
|
-
* console once per component render.
|
|
231
|
-
*/
|
|
232
|
-
export declare function resetJoinWarnings(): void;
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
liberateVault
|
|
3
|
-
} from "./chunk-2N5ML6HT.js";
|
|
4
|
-
import "./chunk-3BVH633C.js";
|
|
5
|
-
import "./chunk-JVIBCBC7.js";
|
|
6
|
-
import "./chunk-4GVM6QZA.js";
|
|
7
|
-
import "./chunk-BVN6KXL2.js";
|
|
8
|
-
import "./chunk-EQEYOJBM.js";
|
|
9
|
-
import "./chunk-3V4KWFX7.js";
|
|
10
|
-
import "./chunk-XKWGNJ26.js";
|
|
11
|
-
import "./chunk-JMGDHKQF.js";
|
|
12
|
-
import "./chunk-4ZS56W5S.js";
|
|
13
|
-
import "./chunk-SZJ3DLZA.js";
|
|
14
|
-
import "./chunk-BRLKZUBT.js";
|
|
15
|
-
import "./chunk-BTDR2PXY.js";
|
|
16
|
-
import "./chunk-CHQCZZWC.js";
|
|
17
|
-
import "./chunk-LP7BEXCT.js";
|
|
18
|
-
import "./chunk-HPVZCW43.js";
|
|
19
|
-
import "./chunk-7MG7SJT7.js";
|
|
20
|
-
import "./chunk-7O3Y4PPD.js";
|
|
21
|
-
export {
|
|
22
|
-
liberateVault
|
|
23
|
-
};
|
|
24
|
-
//# sourceMappingURL=liberate-V35QUHJP.js.map
|