@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,14 +1,28 @@
|
|
|
1
|
-
import {
|
|
2
|
-
VDIG_ITERATIONS,
|
|
3
|
-
normalizeForVerify,
|
|
4
|
-
pbkdf2VerifyDigest
|
|
5
|
-
} from "./chunk-LP7BEXCT.js";
|
|
6
1
|
import {
|
|
7
2
|
bufferToBase64
|
|
8
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-QMWY2FDS.js";
|
|
9
4
|
|
|
10
|
-
// src/
|
|
5
|
+
// src/capsule/enclave-aes/classify/digest.ts
|
|
11
6
|
var subtle = globalThis.crypto.subtle;
|
|
7
|
+
var VDIG_ITERATIONS = 6e5;
|
|
8
|
+
async function pbkdf2VerifyDigest(value, salt, iterations) {
|
|
9
|
+
const keyMaterial = await subtle.importKey(
|
|
10
|
+
"raw",
|
|
11
|
+
new TextEncoder().encode(value),
|
|
12
|
+
"PBKDF2",
|
|
13
|
+
false,
|
|
14
|
+
["deriveBits"]
|
|
15
|
+
);
|
|
16
|
+
const bits = await subtle.deriveBits(
|
|
17
|
+
{ name: "PBKDF2", salt, iterations, hash: "SHA-256" },
|
|
18
|
+
keyMaterial,
|
|
19
|
+
256
|
|
20
|
+
);
|
|
21
|
+
return new Uint8Array(bits);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// src/capsule/enclave-aes/classify/bidx.ts
|
|
25
|
+
var subtle2 = globalThis.crypto.subtle;
|
|
12
26
|
var CLASSIFY_INDEX_KEY_DOMAIN = "noydb-classify-index-v1";
|
|
13
27
|
var CLASSIFY_INDEX_SALT_DOMAIN = "noydb-classify-index-salt-v1";
|
|
14
28
|
var COST_BYTE_V1 = 1;
|
|
@@ -18,19 +32,19 @@ function iterationsForCostByte(b) {
|
|
|
18
32
|
return null;
|
|
19
33
|
}
|
|
20
34
|
async function deriveClassifyIndexKey(dek, collection, field) {
|
|
21
|
-
const rawDek = await
|
|
22
|
-
const hkdfKey = await
|
|
35
|
+
const rawDek = await subtle2.exportKey("raw", dek);
|
|
36
|
+
const hkdfKey = await subtle2.importKey("raw", rawDek, "HKDF", false, ["deriveBits"]);
|
|
23
37
|
const salt = new TextEncoder().encode(CLASSIFY_INDEX_KEY_DOMAIN);
|
|
24
38
|
const info = new TextEncoder().encode(JSON.stringify([CLASSIFY_INDEX_KEY_DOMAIN, collection, field]));
|
|
25
|
-
const bits = await
|
|
26
|
-
return
|
|
39
|
+
const bits = await subtle2.deriveBits({ name: "HKDF", hash: "SHA-256", salt, info }, hkdfKey, 256);
|
|
40
|
+
return subtle2.importKey("raw", bits, { name: "HMAC", hash: "SHA-256" }, false, ["sign"]);
|
|
27
41
|
}
|
|
28
42
|
async function deriveClassifyIndexSalt(dek, collection, field) {
|
|
29
|
-
const rawDek = await
|
|
30
|
-
const hkdfKey = await
|
|
43
|
+
const rawDek = await subtle2.exportKey("raw", dek);
|
|
44
|
+
const hkdfKey = await subtle2.importKey("raw", rawDek, "HKDF", false, ["deriveBits"]);
|
|
31
45
|
const salt = new TextEncoder().encode(CLASSIFY_INDEX_SALT_DOMAIN);
|
|
32
46
|
const info = new TextEncoder().encode(JSON.stringify([CLASSIFY_INDEX_SALT_DOMAIN, collection, field]));
|
|
33
|
-
const bits = await
|
|
47
|
+
const bits = await subtle2.deriveBits({ name: "HKDF", hash: "SHA-256", salt, info }, hkdfKey, 256);
|
|
34
48
|
return new Uint8Array(bits);
|
|
35
49
|
}
|
|
36
50
|
async function mintAt(normalized, dek, collection, field, costByte) {
|
|
@@ -41,7 +55,7 @@ async function mintAt(normalized, dek, collection, field, costByte) {
|
|
|
41
55
|
const saltCf = await deriveClassifyIndexSalt(dek, collection, field);
|
|
42
56
|
const inner = await pbkdf2VerifyDigest(normalized, saltCf, iterations);
|
|
43
57
|
const kIdx = await deriveClassifyIndexKey(dek, collection, field);
|
|
44
|
-
const mac = await
|
|
58
|
+
const mac = await subtle2.sign("HMAC", kIdx, inner);
|
|
45
59
|
const tag = new Uint8Array(1 + 32);
|
|
46
60
|
tag[0] = costByte;
|
|
47
61
|
tag.set(new Uint8Array(mac), 1);
|
|
@@ -51,19 +65,14 @@ async function mintBidxTag(normalized, dek, collection, field) {
|
|
|
51
65
|
return mintAt(normalized, dek, collection, field, CURRENT_COST_BYTE);
|
|
52
66
|
}
|
|
53
67
|
|
|
54
|
-
// src/kernel/enclave/classify/find.ts
|
|
55
|
-
async function computeBidxTarget(candidate, normalize, dek, collection, field, costByte) {
|
|
56
|
-
const resolvedCostByte = costByte ?? CURRENT_COST_BYTE;
|
|
57
|
-
const iters = iterationsForCostByte(resolvedCostByte);
|
|
58
|
-
if (iters === null) return null;
|
|
59
|
-
const normalized = normalizeForVerify(normalize, candidate);
|
|
60
|
-
return mintAt(normalized, dek, collection, field, resolvedCostByte);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
68
|
export {
|
|
69
|
+
VDIG_ITERATIONS,
|
|
70
|
+
pbkdf2VerifyDigest,
|
|
71
|
+
CURRENT_COST_BYTE,
|
|
72
|
+
iterationsForCostByte,
|
|
64
73
|
deriveClassifyIndexKey,
|
|
65
74
|
deriveClassifyIndexSalt,
|
|
66
|
-
|
|
67
|
-
|
|
75
|
+
mintAt,
|
|
76
|
+
mintBidxTag
|
|
68
77
|
};
|
|
69
|
-
//# sourceMappingURL=chunk-
|
|
78
|
+
//# sourceMappingURL=chunk-EZOAKKTB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/capsule/enclave-aes/classify/digest.ts","../src/capsule/enclave-aes/classify/bidx.ts"],"sourcesContent":["/**\n * Verify-digest primitive for classified `digest-only` fields (stage 2).\n * PBKDF2-SHA256 → fixed 32-byte digest. The digest NEVER leaves the enclave\n * in recoverable form — it is sealed into the `_vdig` envelope slot (vdig.ts)\n * or compared in-enclave (verify.ts). @module\n */\nconst subtle = globalThis.crypto.subtle\n\n/** Family KDF constant — matches crypto.ts PBKDF2_ITERATIONS (600K). */\nexport const VDIG_ITERATIONS = 600_000\n\n/**\n * Digest a (pre-normalized) candidate/value to exactly 32 bytes.\n * PBKDF2-SHA256 with a per-record per-write random salt (§2): verify\n * digests are non-equatable by construction.\n */\nexport async function pbkdf2VerifyDigest(\n value: string,\n salt: Uint8Array,\n iterations: number,\n): Promise<Uint8Array> {\n const keyMaterial = await subtle.importKey(\n 'raw',\n new TextEncoder().encode(value),\n 'PBKDF2',\n false,\n ['deriveBits'],\n )\n const bits = await subtle.deriveBits(\n { name: 'PBKDF2', salt: salt as BufferSource, iterations, hash: 'SHA-256' },\n keyMaterial,\n 256,\n )\n return new Uint8Array(bits)\n}\n","/**\n * Blind-index slow-tag primitive for classified `equatable` fields (stage 2).\n *\n * `mintBidxTag` mints a deterministic, key-and-cost-gated tag —\n * `COST_BYTE ‖ HMAC-SHA256(K_idx, PBKDF2-SHA256(normalized, salt_cf))` — that\n * lets `find.ts` do blind equality lookup over an otherwise-opaque field\n * without ever storing the plaintext or a fast dictionary-crackable digest.\n *\n * Rationale (M-2/I3, spec §4/Crypto #1):\n * - The outer HMAC is **keyed** by `K_idx`, a DEK-derived key never seen by\n * the store. A key-less adversary (store access only) cannot mint a\n * candidate tag to test against the index at all — the HMAC blocks the\n * classic \"key-less dictionary attack\" a plain digest would invite.\n * - The inner `pbkdf2VerifyDigest` (stage-2, `digest.ts`) reuses the\n * existing 600K-iteration cost floor, so even a **DEK holder** who can\n * compute `K_idx` still pays the PBKDF2 cost per guess — minting is not\n * free just because you crossed the door.\n * - Neither control is the real security boundary: the DOOR (who is ever\n * handed the DEK to begin with) is. These two costs only shape the\n * economics for whoever is already inside; they do not substitute for\n * access control.\n *\n * `K_idx` and `salt_cf` are separate HKDF derivations off the same DEK\n * (L-1, #554 precedent: dedicated keys from day one, no shared/legacy form) —\n * sign-key hygiene, not `HMAC(K_idx, const)`. Both derivations are\n * domain-separated per `(collection, field)` so a tag cannot be replayed\n * across fields or collections (join-attack separation).\n *\n * `CURRENT_COST_BYTE` is a 1-byte discriminator prefixed onto every tag so a\n * future iteration-tier bump can mint new tags while old ones still parse:\n * an unknown discriminator is a cheap, immediate non-match instead of a\n * PBKDF2 run at the wrong iteration count.\n *\n * @module\n */\nimport type { EnclaveKey } from '../crypto.js'\nimport { bufferToBase64 } from '../../plumbing/digest.js'\nimport { pbkdf2VerifyDigest, VDIG_ITERATIONS } from './digest.js'\n\nconst subtle = globalThis.crypto.subtle\n\n/** HKDF salt domain for the `K_idx` (blind-index HMAC key) derivation. */\nexport const CLASSIFY_INDEX_KEY_DOMAIN = 'noydb-classify-index-v1'\n\n/** HKDF salt domain for the `salt_cf` (per collection/field PBKDF2 salt) derivation. */\nexport const CLASSIFY_INDEX_SALT_DOMAIN = 'noydb-classify-index-salt-v1'\n\n/** Cost-byte discriminator: version 1, iteration-tier 600K. */\nexport const COST_BYTE_V1 = 0x01\n/** The cost byte new tags are minted at. */\nexport const CURRENT_COST_BYTE = COST_BYTE_V1\n\n/**\n * Map a tag's cost-byte discriminator to its PBKDF2 iteration count.\n * An unrecognized discriminator returns `null` — a mismatched/legacy byte\n * is a cheap non-match, never a PBKDF2 run at the wrong tier.\n */\nexport function iterationsForCostByte(b: number): number | null {\n if (b === COST_BYTE_V1) return VDIG_ITERATIONS\n return null\n}\n\n/**\n * Derive the collection+field's dedicated blind-index HMAC key `K_idx` from\n * the DEK via HKDF-SHA256. Non-extractable, `sign`-only — it never leaves\n * this module in usable form.\n */\nexport async function deriveClassifyIndexKey(\n dek: EnclaveKey,\n collection: string,\n field: string,\n): Promise<EnclaveKey> {\n const rawDek = await subtle.exportKey('raw', dek)\n const hkdfKey = await subtle.importKey('raw', rawDek, 'HKDF', false, ['deriveBits'])\n const salt = new TextEncoder().encode(CLASSIFY_INDEX_KEY_DOMAIN)\n const info = new TextEncoder().encode(JSON.stringify([CLASSIFY_INDEX_KEY_DOMAIN, collection, field]))\n const bits = await subtle.deriveBits({ name: 'HKDF', hash: 'SHA-256', salt, info }, hkdfKey, 256)\n return subtle.importKey('raw', bits, { name: 'HMAC', hash: 'SHA-256' }, false, ['sign'])\n}\n\n/**\n * Derive the collection+field's dedicated PBKDF2 salt `salt_cf` from the DEK\n * via a SEPARATE HKDF-deriveBits (distinct from {@link deriveClassifyIndexKey}\n * — sign-key hygiene, not `HMAC(K_idx, const)`). 32 raw bytes.\n */\nexport async function deriveClassifyIndexSalt(\n dek: EnclaveKey,\n collection: string,\n field: string,\n): Promise<Uint8Array> {\n const rawDek = await subtle.exportKey('raw', dek)\n const hkdfKey = await subtle.importKey('raw', rawDek, 'HKDF', false, ['deriveBits'])\n const salt = new TextEncoder().encode(CLASSIFY_INDEX_SALT_DOMAIN)\n const info = new TextEncoder().encode(JSON.stringify([CLASSIFY_INDEX_SALT_DOMAIN, collection, field]))\n const bits = await subtle.deriveBits({ name: 'HKDF', hash: 'SHA-256', salt, info }, hkdfKey, 256)\n return new Uint8Array(bits)\n}\n\n/**\n * Mint a blind-index tag at a given cost byte:\n * `tag = base64(COST_BYTE ‖ HMAC(K_idx, PBKDF2(normalized, salt_cf, iterations-for(COST_BYTE))))`.\n * Factored out of {@link mintBidxTag} so `find.ts`'s `computeBidxTarget` can\n * reuse the same crypto at a caller-chosen cost byte (e.g. to evaluate a\n * legacy tier) without duplicating the derivation/digest/MAC pipeline.\n */\nexport async function mintAt(\n normalized: string,\n dek: EnclaveKey,\n collection: string,\n field: string,\n costByte: number,\n): Promise<string> {\n const iterations = iterationsForCostByte(costByte)\n if (iterations == null) {\n throw new Error(`bidx: unknown cost byte 0x${costByte.toString(16)}`)\n }\n const saltCf = await deriveClassifyIndexSalt(dek, collection, field)\n const inner = await pbkdf2VerifyDigest(normalized, saltCf, iterations)\n const kIdx = await deriveClassifyIndexKey(dek, collection, field)\n const mac = await subtle.sign('HMAC', kIdx, inner as BufferSource)\n const tag = new Uint8Array(1 + 32)\n tag[0] = costByte\n tag.set(new Uint8Array(mac), 1)\n return bufferToBase64(tag)\n}\n\n/**\n * Mint a blind-index tag for an already-normalized value at\n * {@link CURRENT_COST_BYTE}. The caller normalizes once via\n * `normalizeForVerify` (the shared pipeline with `mintVdigSlot`) —\n * `mintBidxTag` never re-normalizes.\n */\nexport async function mintBidxTag(\n normalized: string,\n dek: EnclaveKey,\n collection: string,\n field: string,\n): Promise<string> {\n return mintAt(normalized, dek, collection, field, CURRENT_COST_BYTE)\n}\n"],"mappings":";;;;;AAMA,IAAM,SAAS,WAAW,OAAO;AAG1B,IAAM,kBAAkB;AAO/B,eAAsB,mBACpB,OACA,MACA,YACqB;AACrB,QAAM,cAAc,MAAM,OAAO;AAAA,IAC/B;AAAA,IACA,IAAI,YAAY,EAAE,OAAO,KAAK;AAAA,IAC9B;AAAA,IACA;AAAA,IACA,CAAC,YAAY;AAAA,EACf;AACA,QAAM,OAAO,MAAM,OAAO;AAAA,IACxB,EAAE,MAAM,UAAU,MAA4B,YAAY,MAAM,UAAU;AAAA,IAC1E;AAAA,IACA;AAAA,EACF;AACA,SAAO,IAAI,WAAW,IAAI;AAC5B;;;ACKA,IAAMA,UAAS,WAAW,OAAO;AAG1B,IAAM,4BAA4B;AAGlC,IAAM,6BAA6B;AAGnC,IAAM,eAAe;AAErB,IAAM,oBAAoB;AAO1B,SAAS,sBAAsB,GAA0B;AAC9D,MAAI,MAAM,aAAc,QAAO;AAC/B,SAAO;AACT;AAOA,eAAsB,uBACpB,KACA,YACA,OACqB;AACrB,QAAM,SAAS,MAAMA,QAAO,UAAU,OAAO,GAAG;AAChD,QAAM,UAAU,MAAMA,QAAO,UAAU,OAAO,QAAQ,QAAQ,OAAO,CAAC,YAAY,CAAC;AACnF,QAAM,OAAO,IAAI,YAAY,EAAE,OAAO,yBAAyB;AAC/D,QAAM,OAAO,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,CAAC,2BAA2B,YAAY,KAAK,CAAC,CAAC;AACpG,QAAM,OAAO,MAAMA,QAAO,WAAW,EAAE,MAAM,QAAQ,MAAM,WAAW,MAAM,KAAK,GAAG,SAAS,GAAG;AAChG,SAAOA,QAAO,UAAU,OAAO,MAAM,EAAE,MAAM,QAAQ,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;AACzF;AAOA,eAAsB,wBACpB,KACA,YACA,OACqB;AACrB,QAAM,SAAS,MAAMA,QAAO,UAAU,OAAO,GAAG;AAChD,QAAM,UAAU,MAAMA,QAAO,UAAU,OAAO,QAAQ,QAAQ,OAAO,CAAC,YAAY,CAAC;AACnF,QAAM,OAAO,IAAI,YAAY,EAAE,OAAO,0BAA0B;AAChE,QAAM,OAAO,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,CAAC,4BAA4B,YAAY,KAAK,CAAC,CAAC;AACrG,QAAM,OAAO,MAAMA,QAAO,WAAW,EAAE,MAAM,QAAQ,MAAM,WAAW,MAAM,KAAK,GAAG,SAAS,GAAG;AAChG,SAAO,IAAI,WAAW,IAAI;AAC5B;AASA,eAAsB,OACpB,YACA,KACA,YACA,OACA,UACiB;AACjB,QAAM,aAAa,sBAAsB,QAAQ;AACjD,MAAI,cAAc,MAAM;AACtB,UAAM,IAAI,MAAM,6BAA6B,SAAS,SAAS,EAAE,CAAC,EAAE;AAAA,EACtE;AACA,QAAM,SAAS,MAAM,wBAAwB,KAAK,YAAY,KAAK;AACnE,QAAM,QAAQ,MAAM,mBAAmB,YAAY,QAAQ,UAAU;AACrE,QAAM,OAAO,MAAM,uBAAuB,KAAK,YAAY,KAAK;AAChE,QAAM,MAAM,MAAMA,QAAO,KAAK,QAAQ,MAAM,KAAqB;AACjE,QAAM,MAAM,IAAI,WAAW,IAAI,EAAE;AACjC,MAAI,CAAC,IAAI;AACT,MAAI,IAAI,IAAI,WAAW,GAAG,GAAG,CAAC;AAC9B,SAAO,eAAe,GAAG;AAC3B;AAQA,eAAsB,YACpB,YACA,KACA,YACA,OACiB;AACjB,SAAO,OAAO,YAAY,KAAK,YAAY,OAAO,iBAAiB;AACrE;","names":["subtle"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// src/kernel/query/internal/core.ts
|
|
2
|
+
function installMethods(target, mixin) {
|
|
3
|
+
for (const name of Object.getOwnPropertyNames(mixin.prototype)) {
|
|
4
|
+
if (name === "constructor") continue;
|
|
5
|
+
const desc = Object.getOwnPropertyDescriptor(mixin.prototype, name);
|
|
6
|
+
if (desc) Object.defineProperty(target, name, desc);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export {
|
|
11
|
+
installMethods
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=chunk-F6NCB7KT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/kernel/query/internal/core.ts"],"sourcesContent":["/**\n * #1458 — how an extension group's methods reach `Query.prototype`.\n *\n * Each group defines its half of the builder as a MIXIN CLASS whose method\n * bodies moved out of `builder.ts` unchanged — `this.plan`, `this.source`,\n * `this.joinContext` and the rest still resolve, because TypeScript's\n * `private` is a compile-time construct and a method installed on the\n * prototype reads them like any other property. The mixin declares those\n * fields with `declare`, which emits nothing.\n *\n * ⭐ **Why a mixin CLASS rather than a file of `Query.prototype.x = function`\n * assignments.** The bodies are the point: several are 100+ lines carrying\n * prose that explains a decision, and a mechanical rewrite into assignment\n * form would have touched every one of them. As class methods they moved\n * byte-for-byte, so the diff shows a relocation rather than a rewrite — and an\n * overload set (`join`, `joinOn`, `aggregate`, `groupBy` all have them)\n * survives, which an assignment form cannot express.\n */\n\n/**\n * Copy a mixin's prototype methods onto a target prototype, replacing the Find\n * stubs.\n *\n * `getOwnPropertyNames` rather than `Object.assign`: class methods are\n * non-enumerable prototype properties, so `assign` copies nothing at all —\n * silently, leaving every stub in place. Descriptors are copied whole so a\n * getter stays a getter.\n */\nexport function installMethods(target: object, mixin: { prototype: object }): void {\n for (const name of Object.getOwnPropertyNames(mixin.prototype)) {\n if (name === 'constructor') continue\n const desc = Object.getOwnPropertyDescriptor(mixin.prototype, name)\n if (desc) Object.defineProperty(target, name, desc)\n }\n}\n"],"mappings":";AA4BO,SAAS,eAAe,QAAgB,OAAoC;AACjF,aAAW,QAAQ,OAAO,oBAAoB,MAAM,SAAS,GAAG;AAC9D,QAAI,SAAS,cAAe;AAC5B,UAAM,OAAO,OAAO,yBAAyB,MAAM,WAAW,IAAI;AAClE,QAAI,KAAM,QAAO,eAAe,QAAQ,MAAM,IAAI;AAAA,EACpD;AACF;","names":[]}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import {
|
|
2
|
+
LiveMaintainer,
|
|
3
|
+
canMaintainIncrementally
|
|
4
|
+
} from "./chunk-VHM7HCKB.js";
|
|
5
|
+
import {
|
|
6
|
+
projectDateTruncKeys
|
|
7
|
+
} from "./chunk-XBKH4FOC.js";
|
|
8
|
+
import {
|
|
9
|
+
buildOrderKeyPlan,
|
|
10
|
+
compareOrderKeys,
|
|
11
|
+
filterRecords,
|
|
12
|
+
fnViewDecoder,
|
|
13
|
+
orderKeyOf
|
|
14
|
+
} from "./chunk-AL6ML4LA.js";
|
|
15
|
+
|
|
16
|
+
// src/kernel/query/internal/maintenance.ts
|
|
17
|
+
var MaintenanceMethods = class {
|
|
18
|
+
/**
|
|
19
|
+
* Build the #1341 delta maintainer for this plan, or `undefined` when the
|
|
20
|
+
* plan shape or the source cannot support one (the query then re-runs in
|
|
21
|
+
* full, exactly as it did before #1341).
|
|
22
|
+
*
|
|
23
|
+
* Everything the maintainer needs is taken from THIS query so the two paths
|
|
24
|
+
* cannot diverge: `matches` is the same `filterRecords` call the eager
|
|
25
|
+
* pipeline makes, `compare` is the same comparator `sortRecords` sorts with,
|
|
26
|
+
* and `decode` is the same Via result decode `toArray()` applies after
|
|
27
|
+
* slicing.
|
|
28
|
+
*/
|
|
29
|
+
incrementalMaintainer(mode) {
|
|
30
|
+
const source = this.source;
|
|
31
|
+
const snapshotEntries = source.snapshotEntries?.bind(source);
|
|
32
|
+
const lookupById = source.lookupById?.bind(source);
|
|
33
|
+
if (!snapshotEntries || !lookupById) return void 0;
|
|
34
|
+
const orderBy = mode === "rows" ? this.plan.orderBy : [];
|
|
35
|
+
const limit = mode === "rows" ? this.plan.limit : void 0;
|
|
36
|
+
const indexes = source.getIndexes?.();
|
|
37
|
+
const probe = indexes ? { covers: (f) => indexes.has(f), sorted: (f) => indexes.hasSorted(f) } : null;
|
|
38
|
+
if (!canMaintainIncrementally({ ...this.plan, orderBy, limit }, probe)) return void 0;
|
|
39
|
+
const clauses = this.plan.clauses;
|
|
40
|
+
const decodeForFns = fnViewDecoder(source);
|
|
41
|
+
const via = source.via;
|
|
42
|
+
const keyPlan = orderBy.length > 0 ? buildOrderKeyPlan(orderBy, via) : void 0;
|
|
43
|
+
return new LiveMaintainer({
|
|
44
|
+
snapshotEntries,
|
|
45
|
+
lookupById,
|
|
46
|
+
matches: (record) => filterRecords([record], clauses, decodeForFns).length === 1,
|
|
47
|
+
...keyPlan ? {
|
|
48
|
+
order: {
|
|
49
|
+
keyOf: (record) => orderKeyOf(keyPlan, record),
|
|
50
|
+
compare: (a, b) => compareOrderKeys(keyPlan, a, b)
|
|
51
|
+
}
|
|
52
|
+
} : {},
|
|
53
|
+
offset: mode === "rows" ? this.plan.offset : 0,
|
|
54
|
+
limit,
|
|
55
|
+
...mode === "rows" && via?.hasResultDecode ? { decode: (rows) => this.decodeVia(rows) } : {}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Build the #1341 grouped-maintenance seam for this plan, or `undefined`
|
|
60
|
+
* when the plan shape or the source cannot support one (a grouped live
|
|
61
|
+
* reduction then re-runs in full, exactly as it did before).
|
|
62
|
+
*
|
|
63
|
+
* Same whitelist and the same three inputs `incrementalMaintainer('records')`
|
|
64
|
+
* uses, for the same reason: `.groupBy()`'s record pipeline IS
|
|
65
|
+
* `.aggregate()`'s — `candidateRecords` + `filterRecords`, with no sort, no
|
|
66
|
+
* window and no Via result decode — so `orderBy`/`limit` are stripped before
|
|
67
|
+
* the whitelist is asked. `matches` is the same `filterRecords` call the
|
|
68
|
+
* eager pipeline makes, which is what stops the two paths from drifting.
|
|
69
|
+
*
|
|
70
|
+
* The one addition is `project`: `.groupBy(dateTrunc(...))` (#1350) stamps a
|
|
71
|
+
* derived key onto each row AFTER filtering and before bucketing, and the
|
|
72
|
+
* maintainer has to stamp it too or it would bucket on a field that is not
|
|
73
|
+
* there. It is a pure per-record map, which is the only kind of projection
|
|
74
|
+
* this hook may carry.
|
|
75
|
+
*/
|
|
76
|
+
groupMaintenance(derived) {
|
|
77
|
+
const source = this.source;
|
|
78
|
+
const snapshotEntries = source.snapshotEntries?.bind(source);
|
|
79
|
+
const lookupById = source.lookupById?.bind(source);
|
|
80
|
+
if (!snapshotEntries || !lookupById) return void 0;
|
|
81
|
+
const indexes = source.getIndexes?.();
|
|
82
|
+
const probe = indexes ? { covers: (f) => indexes.has(f), sorted: (f) => indexes.hasSorted(f) } : null;
|
|
83
|
+
if (!canMaintainIncrementally({ ...this.plan, orderBy: [], limit: void 0 }, probe)) {
|
|
84
|
+
return void 0;
|
|
85
|
+
}
|
|
86
|
+
const clauses = this.plan.clauses;
|
|
87
|
+
const decodeForFns = fnViewDecoder(source);
|
|
88
|
+
return {
|
|
89
|
+
snapshotEntries,
|
|
90
|
+
lookupById,
|
|
91
|
+
matches: (record) => filterRecords([record], clauses, decodeForFns).length === 1,
|
|
92
|
+
...derived.length > 0 ? { project: (record) => projectDateTruncKeys([record], derived)[0] } : {}
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
export {
|
|
98
|
+
MaintenanceMethods
|
|
99
|
+
};
|
|
100
|
+
//# sourceMappingURL=chunk-FFJFE4T7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/kernel/query/internal/maintenance.ts"],"sourcesContent":["/**\n * #1458 — the incremental-maintenance methods, shared by Live and Reduce.\n *\n * `incrementalMaintainer` and `groupMaintenance` are Live's machinery, but\n * they are not Live's alone: a live REDUCTION (`aggregate()` /\n * `groupBy()` handed to `withReduce`) maintains its state through exactly the\n * same maintainer, and always has — `Query.aggregate()` called\n * `this.incrementalMaintainer('records')` while both lived in `builder.ts`.\n *\n * ⭐ **So this is a genuine Reduce → Live edge, and it is recorded here rather\n * than hidden.** Both groups' `install()` copy this mixin, so importing\n * `@noy-db/hub/query/reduce` alone still gets a correctly-maintained live\n * reduction — at the cost of `live/incremental.ts` in that bundle. The\n * alternative (a hook that degrades to a full re-run when Live is absent)\n * would make the SAME call site behave differently depending on an unrelated\n * import, which is worse than the bytes.\n */\nimport type { DateTruncKey } from '../reduce/date-trunc.js'\nimport { projectDateTruncKeys } from '../reduce/date-trunc.js'\nimport type { GroupMaintenanceSource } from '../live/incremental.js'\nimport { LiveMaintainer, canMaintainIncrementally } from '../live/incremental.js'\nimport type { DeclaredPredicate, InternalSource, QueryPlan } from '../builder.js'\n// @internal Find helpers — the maintainer re-runs the same predicate and sort\n// the executor does, so it must use the same functions rather than a second\n// implementation that can drift from them.\nimport { buildOrderKeyPlan, compareOrderKeys, filterRecords, fnViewDecoder, orderKeyOf } from '../builder.js'\nimport type { JoinContext } from '../relate/join.js'\nimport type { ReduceStrategy } from '../../../with-lookup/reduce/strategy.js'\n\n/** @internal — copied onto `Query.prototype` by both Live and Reduce. */\nexport class MaintenanceMethods {\n declare protected readonly source: InternalSource\n declare protected readonly plan: QueryPlan\n declare protected readonly joinContext: JoinContext | undefined\n declare protected readonly reduceStrategy: ReduceStrategy\n declare protected readonly predicates: ReadonlyMap<string, DeclaredPredicate> | undefined\n declare protected decodeVia: (records: readonly unknown[], locale?: string) => unknown[]\n\n /**\n * Build the #1341 delta maintainer for this plan, or `undefined` when the\n * plan shape or the source cannot support one (the query then re-runs in\n * full, exactly as it did before #1341).\n *\n * Everything the maintainer needs is taken from THIS query so the two paths\n * cannot diverge: `matches` is the same `filterRecords` call the eager\n * pipeline makes, `compare` is the same comparator `sortRecords` sorts with,\n * and `decode` is the same Via result decode `toArray()` applies after\n * slicing.\n */\n private incrementalMaintainer(mode: 'rows' | 'records'): LiveMaintainer | undefined {\n const source = this.source\n const snapshotEntries = source.snapshotEntries?.bind(source)\n const lookupById = source.lookupById?.bind(source)\n if (!snapshotEntries || !lookupById) return undefined\n // `.aggregate()` reduces the whole match set in candidate order — it never\n // sorts, offsets, limits or decodes — so its maintainer is the same engine\n // with the ordering/windowing half switched off.\n const orderBy = mode === 'rows' ? this.plan.orderBy : []\n const limit = mode === 'rows' ? this.plan.limit : undefined\n const indexes = source.getIndexes?.()\n const probe = indexes\n ? { covers: (f: string) => indexes.has(f), sorted: (f: string) => indexes.hasSorted(f) }\n : null\n if (!canMaintainIncrementally({ ...this.plan, orderBy, limit }, probe)) return undefined\n\n const clauses = this.plan.clauses\n const decodeForFns = fnViewDecoder(source)\n const via = source.via\n // The ordering comes from the SAME key plan `sortRecords` builds and the\n // keyset cursor compares against (#1346) — one definition of \"what order\n // is this query in\", so the maintained order cannot drift from a re-run's.\n // `by: 'label'` is refused above, so no label maps are needed here.\n const keyPlan = orderBy.length > 0 ? buildOrderKeyPlan(orderBy, via) : undefined\n return new LiveMaintainer({\n snapshotEntries,\n lookupById,\n matches: record => filterRecords([record], clauses, decodeForFns).length === 1,\n ...(keyPlan\n ? {\n order: {\n keyOf: (record: unknown) => orderKeyOf(keyPlan, record),\n compare: (a: readonly unknown[], b: readonly unknown[]) => compareOrderKeys(keyPlan, a, b),\n },\n }\n : {}),\n offset: mode === 'rows' ? this.plan.offset : 0,\n limit,\n ...(mode === 'rows' && via?.hasResultDecode\n ? { decode: (rows: readonly unknown[]) => this.decodeVia(rows) }\n : {}),\n })\n }\n\n /**\n * Build the #1341 grouped-maintenance seam for this plan, or `undefined`\n * when the plan shape or the source cannot support one (a grouped live\n * reduction then re-runs in full, exactly as it did before).\n *\n * Same whitelist and the same three inputs `incrementalMaintainer('records')`\n * uses, for the same reason: `.groupBy()`'s record pipeline IS\n * `.aggregate()`'s — `candidateRecords` + `filterRecords`, with no sort, no\n * window and no Via result decode — so `orderBy`/`limit` are stripped before\n * the whitelist is asked. `matches` is the same `filterRecords` call the\n * eager pipeline makes, which is what stops the two paths from drifting.\n *\n * The one addition is `project`: `.groupBy(dateTrunc(...))` (#1350) stamps a\n * derived key onto each row AFTER filtering and before bucketing, and the\n * maintainer has to stamp it too or it would bucket on a field that is not\n * there. It is a pure per-record map, which is the only kind of projection\n * this hook may carry.\n */\n private groupMaintenance(derived: readonly DateTruncKey[]): GroupMaintenanceSource | undefined {\n const source = this.source\n const snapshotEntries = source.snapshotEntries?.bind(source)\n const lookupById = source.lookupById?.bind(source)\n if (!snapshotEntries || !lookupById) return undefined\n const indexes = source.getIndexes?.()\n const probe = indexes\n ? { covers: (f: string) => indexes.has(f), sorted: (f: string) => indexes.hasSorted(f) }\n : null\n if (!canMaintainIncrementally({ ...this.plan, orderBy: [], limit: undefined }, probe)) {\n return undefined\n }\n const clauses = this.plan.clauses\n const decodeForFns = fnViewDecoder(source)\n return {\n snapshotEntries,\n lookupById,\n matches: (record: unknown) => filterRecords([record], clauses, decodeForFns).length === 1,\n ...(derived.length > 0\n ? { project: (record: unknown) => projectDateTruncKeys([record], derived)[0] }\n : {}),\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AA8BO,IAAM,qBAAN,MAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBtB,sBAAsB,MAAsD;AAClF,UAAM,SAAS,KAAK;AACpB,UAAM,kBAAkB,OAAO,iBAAiB,KAAK,MAAM;AAC3D,UAAM,aAAa,OAAO,YAAY,KAAK,MAAM;AACjD,QAAI,CAAC,mBAAmB,CAAC,WAAY,QAAO;AAI5C,UAAM,UAAU,SAAS,SAAS,KAAK,KAAK,UAAU,CAAC;AACvD,UAAM,QAAQ,SAAS,SAAS,KAAK,KAAK,QAAQ;AAClD,UAAM,UAAU,OAAO,aAAa;AACpC,UAAM,QAAQ,UACV,EAAE,QAAQ,CAAC,MAAc,QAAQ,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAc,QAAQ,UAAU,CAAC,EAAE,IACrF;AACJ,QAAI,CAAC,yBAAyB,EAAE,GAAG,KAAK,MAAM,SAAS,MAAM,GAAG,KAAK,EAAG,QAAO;AAE/E,UAAM,UAAU,KAAK,KAAK;AAC1B,UAAM,eAAe,cAAc,MAAM;AACzC,UAAM,MAAM,OAAO;AAKnB,UAAM,UAAU,QAAQ,SAAS,IAAI,kBAAkB,SAAS,GAAG,IAAI;AACvE,WAAO,IAAI,eAAe;AAAA,MACxB;AAAA,MACA;AAAA,MACA,SAAS,YAAU,cAAc,CAAC,MAAM,GAAG,SAAS,YAAY,EAAE,WAAW;AAAA,MAC7E,GAAI,UACA;AAAA,QACE,OAAO;AAAA,UACL,OAAO,CAAC,WAAoB,WAAW,SAAS,MAAM;AAAA,UACtD,SAAS,CAAC,GAAuB,MAA0B,iBAAiB,SAAS,GAAG,CAAC;AAAA,QAC3F;AAAA,MACF,IACA,CAAC;AAAA,MACL,QAAQ,SAAS,SAAS,KAAK,KAAK,SAAS;AAAA,MAC7C;AAAA,MACA,GAAI,SAAS,UAAU,KAAK,kBACxB,EAAE,QAAQ,CAAC,SAA6B,KAAK,UAAU,IAAI,EAAE,IAC7D,CAAC;AAAA,IACP,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBQ,iBAAiB,SAAsE;AAC7F,UAAM,SAAS,KAAK;AACpB,UAAM,kBAAkB,OAAO,iBAAiB,KAAK,MAAM;AAC3D,UAAM,aAAa,OAAO,YAAY,KAAK,MAAM;AACjD,QAAI,CAAC,mBAAmB,CAAC,WAAY,QAAO;AAC5C,UAAM,UAAU,OAAO,aAAa;AACpC,UAAM,QAAQ,UACV,EAAE,QAAQ,CAAC,MAAc,QAAQ,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAc,QAAQ,UAAU,CAAC,EAAE,IACrF;AACJ,QAAI,CAAC,yBAAyB,EAAE,GAAG,KAAK,MAAM,SAAS,CAAC,GAAG,OAAO,OAAU,GAAG,KAAK,GAAG;AACrF,aAAO;AAAA,IACT;AACA,UAAM,UAAU,KAAK,KAAK;AAC1B,UAAM,eAAe,cAAc,MAAM;AACzC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,SAAS,CAAC,WAAoB,cAAc,CAAC,MAAM,GAAG,SAAS,YAAY,EAAE,WAAW;AAAA,MACxF,GAAI,QAAQ,SAAS,IACjB,EAAE,SAAS,CAAC,WAAoB,qBAAqB,CAAC,MAAM,GAAG,OAAO,EAAE,CAAC,EAAE,IAC3E,CAAC;AAAA,IACP;AAAA,EACF;AACF;","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
TierWriteRefusedError
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-37EPTBBR.js";
|
|
4
4
|
|
|
5
5
|
// src/kernel/tier-visibility.ts
|
|
6
6
|
async function peekLiveTier(adapter, vault, name, id) {
|
|
@@ -49,4 +49,4 @@ export {
|
|
|
49
49
|
dekKey,
|
|
50
50
|
parseDekKey
|
|
51
51
|
};
|
|
52
|
-
//# sourceMappingURL=chunk-
|
|
52
|
+
//# sourceMappingURL=chunk-FLPCETP6.js.map
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import {
|
|
2
|
+
CollectionNotHydratedError
|
|
3
|
+
} from "./chunk-37EPTBBR.js";
|
|
4
|
+
|
|
5
|
+
// src/kernel/query/hydration.ts
|
|
6
|
+
var INSPECT = /* @__PURE__ */ Symbol.for("nodejs.util.inspect.custom");
|
|
7
|
+
function pendingResult(gate, terminal, compute) {
|
|
8
|
+
let settled;
|
|
9
|
+
const settle = () => settled ??= gate.hydrate().then(() => compute());
|
|
10
|
+
const refuse = () => {
|
|
11
|
+
throw new CollectionNotHydratedError(gate.collection, terminal, gate.label);
|
|
12
|
+
};
|
|
13
|
+
const proxy = new Proxy(
|
|
14
|
+
// #1462 — the target is `[]`, NOT `{}`, and it is load-bearing: `IsArray`
|
|
15
|
+
// unwraps a proxy to its target, so this is what makes
|
|
16
|
+
// `Array.isArray(rows)` answer `true` and send the idiomatic guard into
|
|
17
|
+
// the throwing path below instead of into a silent `[]`. Every trap still
|
|
18
|
+
// fires — the target is never read, only classified.
|
|
19
|
+
[],
|
|
20
|
+
{
|
|
21
|
+
get(_target, prop) {
|
|
22
|
+
if (prop === "then") {
|
|
23
|
+
return (onOk, onErr) => settle().then(onOk, onErr);
|
|
24
|
+
}
|
|
25
|
+
if (prop === "catch") {
|
|
26
|
+
return (onErr) => settle().catch(onErr);
|
|
27
|
+
}
|
|
28
|
+
if (prop === "finally") {
|
|
29
|
+
return (fn) => settle().finally(fn);
|
|
30
|
+
}
|
|
31
|
+
if (prop === Symbol.toStringTag) return "NoydbPendingResult";
|
|
32
|
+
if (prop === INSPECT) {
|
|
33
|
+
return () => `[noydb: ${terminal}() on unhydrated collection "${gate.label}" \u2014 await it, or await list()/get() first]`;
|
|
34
|
+
}
|
|
35
|
+
return refuse();
|
|
36
|
+
},
|
|
37
|
+
has: refuse,
|
|
38
|
+
ownKeys: refuse,
|
|
39
|
+
set: refuse,
|
|
40
|
+
getOwnPropertyDescriptor: refuse
|
|
41
|
+
}
|
|
42
|
+
);
|
|
43
|
+
return proxy;
|
|
44
|
+
}
|
|
45
|
+
function gateTerminal(gate, terminal, compute) {
|
|
46
|
+
if (gate === void 0 || gate.isHydrated()) return compute();
|
|
47
|
+
return pendingResult(gate, terminal, compute);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export {
|
|
51
|
+
gateTerminal
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=chunk-FOEDQATO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/kernel/query/hydration.ts"],"sourcesContent":["import { CollectionNotHydratedError } from '../errors.js'\n\n/**\n * #1414 — the cold-collection gate.\n *\n * An eager collection that has never been read asynchronously holds an EMPTY\n * cache. Before this module every synchronous query terminal answered out of\n * that cache, so a cold collection reported `[]` / `0` / `false` with total\n * confidence, forever, until some `list()`/`get()` hydrated it. Guards inherit\n * the same source through `ReadOnlyVaultFacade`, and both failure directions\n * were measured on shipped stable: a valid write refused because the guard's\n * lookup came back empty, and — worse — a write that a warm instance REFUSES\n * committing on a cold one, because the guard's `await …toArray()` saw nothing.\n *\n * **Empty and unable-to-answer are different facts.** Same posture as #1402\n * (\"an index that cannot answer must say so, not return nothing\") and #1410.\n *\n * The fix has to serve two callers at once, and that is what shapes this\n * module:\n *\n * - the AWAITED caller (`await q.toArray()`, and therefore every guard, since\n * `GuardSpec.check` is async) must transparently hydrate and get the rows.\n * This is the half that closes the bypass.\n * - the SYNCHRONOUS caller must be told, loudly, that the answer it is about\n * to trust is not an answer.\n *\n * A terminal cannot both throw and be awaitable, so a cold terminal returns a\n * **pending result**: a thenable that hydrates and re-runs the terminal when\n * awaited, and throws {@link CollectionNotHydratedError} on every use that\n * READS it — indexing, `.length`, iteration, spread, `.map()`, `JSON.stringify`,\n * `String()`, `in`, `Object.keys`, arithmetic, any property read.\n *\n * ⛔ **THE EXACT BOUNDARY, enumerated — because \"any other use\" is what this\n * doc used to say, and it was not true (#1462).** Two operations answer\n * without reaching a proxy trap, and NEITHER CAN BE MADE TO THROW:\n *\n * | use | result | why it cannot throw |\n * |---|---|---|\n * | `typeof rows` | `'object'` | answered from the value's type, no trap |\n * | `if (rows)` / `Boolean(rows)` — truthiness | `true` | `ToBoolean` never calls a trap |\n *\n * Do not try to close either with a `valueOf` returning `false` — that would\n * resurrect the confident-wrong-answer this whole module exists to abolish, in\n * the one shape nobody would ever check.\n *\n * ⭐ **`Array.isArray` used to be a third row, and it was the dangerous one.**\n * `toArray()` is declared `T[]`, so `Array.isArray(rows) ? rows : []` is the\n * ORDINARY defensive shape for the declared type — and it returned `[]` on a\n * cold collection, restoring the silent empty read this module abolishes,\n * behind code that looks like it handles the edge case. It is closed: the\n * proxy's target is `[]`, and `IsArray` unwraps a proxy to its target, so the\n * check answers `true` and the guard falls through to the throwing path. That\n * cost one character of target and no change to the design — the report that\n * found it assumed it needed a real array exotic object.\n *\n * ⚠️ **So the rule for anyone extending this: a use that reaches a trap must\n * throw, and a use that cannot reach one must be IN THE TABLE ABOVE.** The\n * table is pinned by `__tests__/1462-pending-result-surface.test.ts`, which\n * also asserts this comment no longer claims a total guarantee — a probe\n * written against \"any other use\" passes vacuously, because the phrase names\n * no specific use for anything to contradict.\n */\nexport interface HydrationGate {\n /** `<vault>/<collection>` — names the collection in the error. */\n readonly label: string\n /** Collection name alone, for the error's structured field. */\n readonly collection: string\n /** False only while the eager cache has never been bulk-loaded. */\n isHydrated(): boolean\n /** Bulk-load the collection. Idempotent. */\n hydrate(): Promise<void>\n}\n\nconst INSPECT = Symbol.for('nodejs.util.inspect.custom')\n\n/**\n * Wrap a terminal's result for an unhydrated collection. `compute` is re-run\n * AFTER hydration — it must be the terminal itself, not a captured value, or\n * the awaited caller would receive the cold answer it came here to avoid.\n */\nfunction pendingResult<V>(gate: HydrationGate, terminal: string, compute: () => V): V {\n let settled: Promise<V> | undefined\n const settle = (): Promise<V> => (settled ??= gate.hydrate().then(() => compute()))\n const refuse = (): never => {\n throw new CollectionNotHydratedError(gate.collection, terminal, gate.label)\n }\n const proxy = new Proxy(\n // #1462 — the target is `[]`, NOT `{}`, and it is load-bearing: `IsArray`\n // unwraps a proxy to its target, so this is what makes\n // `Array.isArray(rows)` answer `true` and send the idiomatic guard into\n // the throwing path below instead of into a silent `[]`. Every trap still\n // fires — the target is never read, only classified.\n [],\n {\n get(_target, prop) {\n if (prop === 'then') {\n return (onOk?: (v: V) => unknown, onErr?: (e: unknown) => unknown): Promise<unknown> =>\n settle().then(onOk, onErr)\n }\n if (prop === 'catch') {\n return (onErr?: (e: unknown) => unknown): Promise<unknown> => settle().catch(onErr)\n }\n if (prop === 'finally') {\n return (fn?: () => void): Promise<V> => settle().finally(fn)\n }\n if (prop === Symbol.toStringTag) return 'NoydbPendingResult'\n if (prop === INSPECT) {\n return () => `[noydb: ${terminal}() on unhydrated collection \"${gate.label}\" — await it, or await list()/get() first]`\n }\n return refuse()\n },\n has: refuse,\n ownKeys: refuse,\n set: refuse,\n getOwnPropertyDescriptor: refuse,\n },\n )\n return proxy as V\n}\n\n/**\n * Terminal wrapper. Returns `compute()` unchanged whenever the source is\n * hydrated (or carries no gate at all — a plain-object source, a join source,\n * a lazy collection), so the hot path is one property read and a boolean.\n */\nexport function gateTerminal<V>(\n gate: HydrationGate | undefined,\n terminal: string,\n compute: () => V,\n): V {\n if (gate === undefined || gate.isHydrated()) return compute()\n return pendingResult(gate, terminal, compute)\n}\n"],"mappings":";;;;;AAyEA,IAAM,UAAU,uBAAO,IAAI,4BAA4B;AAOvD,SAAS,cAAiB,MAAqB,UAAkB,SAAqB;AACpF,MAAI;AACJ,QAAM,SAAS,MAAmB,YAAY,KAAK,QAAQ,EAAE,KAAK,MAAM,QAAQ,CAAC;AACjF,QAAM,SAAS,MAAa;AAC1B,UAAM,IAAI,2BAA2B,KAAK,YAAY,UAAU,KAAK,KAAK;AAAA,EAC5E;AACA,QAAM,QAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMhB,CAAC;AAAA,IACD;AAAA,MACE,IAAI,SAAS,MAAM;AACjB,YAAI,SAAS,QAAQ;AACnB,iBAAO,CAAC,MAA0B,UAChC,OAAO,EAAE,KAAK,MAAM,KAAK;AAAA,QAC7B;AACA,YAAI,SAAS,SAAS;AACpB,iBAAO,CAAC,UAAsD,OAAO,EAAE,MAAM,KAAK;AAAA,QACpF;AACA,YAAI,SAAS,WAAW;AACtB,iBAAO,CAAC,OAAgC,OAAO,EAAE,QAAQ,EAAE;AAAA,QAC7D;AACA,YAAI,SAAS,OAAO,YAAa,QAAO;AACxC,YAAI,SAAS,SAAS;AACpB,iBAAO,MAAM,WAAW,QAAQ,gCAAgC,KAAK,KAAK;AAAA,QAC5E;AACA,eAAO,OAAO;AAAA,MAChB;AAAA,MACA,KAAK;AAAA,MACL,SAAS;AAAA,MACT,KAAK;AAAA,MACL,0BAA0B;AAAA,IAC5B;AAAA,EACF;AACA,SAAO;AACT;AAOO,SAAS,aACd,MACA,UACA,SACG;AACH,MAAI,SAAS,UAAa,KAAK,WAAW,EAAG,QAAO,QAAQ;AAC5D,SAAO,cAAc,MAAM,UAAU,OAAO;AAC9C;","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
DuplicateBehaviorNameError
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-37EPTBBR.js";
|
|
4
4
|
|
|
5
5
|
// src/with-audit/guards/registry.ts
|
|
6
6
|
var GuardRegistry = class {
|
|
@@ -141,4 +141,4 @@ var GuardRegistry = class {
|
|
|
141
141
|
export {
|
|
142
142
|
GuardRegistry
|
|
143
143
|
};
|
|
144
|
-
//# sourceMappingURL=chunk-
|
|
144
|
+
//# sourceMappingURL=chunk-FVH5QYY2.js.map
|
|
@@ -1,33 +1,30 @@
|
|
|
1
1
|
import {
|
|
2
2
|
assertTierAccess
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-7XMHMVTS.js";
|
|
4
4
|
import {
|
|
5
5
|
dekKey,
|
|
6
6
|
liveRecordIsElevated,
|
|
7
7
|
liveRecordTier
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import {
|
|
10
|
-
buildRecordAad,
|
|
11
|
-
openEnvelopeJson,
|
|
12
|
-
writeEnvelopeBody
|
|
13
|
-
} from "./chunk-4ZS56W5S.js";
|
|
14
|
-
import {
|
|
15
|
-
buildRecordEnvelope,
|
|
16
|
-
buildSealedRecordEnvelope
|
|
17
|
-
} from "./chunk-SZJ3DLZA.js";
|
|
8
|
+
} from "./chunk-FLPCETP6.js";
|
|
18
9
|
import {
|
|
19
10
|
base64ToBuffer,
|
|
20
11
|
bufferToBase64,
|
|
12
|
+
buildRecordAad,
|
|
13
|
+
buildRecordEnvelope,
|
|
14
|
+
buildSealedRecordEnvelope,
|
|
21
15
|
decryptBytesWithAAD,
|
|
22
16
|
deriveBlobAddressKey,
|
|
23
17
|
encrypt,
|
|
24
18
|
encryptBytesWithAAD,
|
|
25
19
|
generateDEK,
|
|
26
20
|
hmacSha256Hex,
|
|
21
|
+
openEnvelopeJson,
|
|
22
|
+
sealedBodyArgs,
|
|
27
23
|
sha256Hex,
|
|
28
24
|
unwrapCek,
|
|
29
|
-
wrapCek
|
|
30
|
-
|
|
25
|
+
wrapCek,
|
|
26
|
+
writeEnvelopeBody
|
|
27
|
+
} from "./chunk-EZGV6F47.js";
|
|
31
28
|
import {
|
|
32
29
|
BLOB_ADDRESS_KEY_ID,
|
|
33
30
|
BlobIntentPendingError,
|
|
@@ -39,7 +36,7 @@ import {
|
|
|
39
36
|
UnsupportedTierCompositionError,
|
|
40
37
|
ValidationError,
|
|
41
38
|
isConflictError
|
|
42
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-37EPTBBR.js";
|
|
43
40
|
|
|
44
41
|
// src/with-shape/blobs/blob-pinning.ts
|
|
45
42
|
function memoryBlobPinStore() {
|
|
@@ -452,6 +449,8 @@ var BlobSet = class _BlobSet {
|
|
|
452
449
|
* a cleared view: see `ownerRecordElevated()`/`ownerTier()`.
|
|
453
450
|
*/
|
|
454
451
|
clearedTier;
|
|
452
|
+
/** #1452 — see `BlobsStrategyOpenArgs.assertOwnerWritable`. */
|
|
453
|
+
assertOwnerWritable;
|
|
455
454
|
constructor(opts) {
|
|
456
455
|
this.store = opts.store;
|
|
457
456
|
this.vault = opts.vault;
|
|
@@ -469,6 +468,7 @@ var BlobSet = class _BlobSet {
|
|
|
469
468
|
this.keyring = opts.keyring;
|
|
470
469
|
this.clearedTier = opts.clearedTier;
|
|
471
470
|
this.pinCache = opts.pinCache;
|
|
471
|
+
this.assertOwnerWritable = opts.assertOwnerWritable;
|
|
472
472
|
}
|
|
473
473
|
/**
|
|
474
474
|
* #724 I1 completion: a legacy (non-`perRecordKeys`) blob has no per-blob
|
|
@@ -671,7 +671,7 @@ var BlobSet = class _BlobSet {
|
|
|
671
671
|
if (!envelope) return { slots: {}, version: 0 };
|
|
672
672
|
if (!this.encrypted) {
|
|
673
673
|
return {
|
|
674
|
-
slots: JSON.parse(envelope._data),
|
|
674
|
+
slots: JSON.parse(envelope._data ?? ""),
|
|
675
675
|
version: envelope._v
|
|
676
676
|
};
|
|
677
677
|
}
|
|
@@ -696,7 +696,7 @@ var BlobSet = class _BlobSet {
|
|
|
696
696
|
const envelope = await this.store.get(this.vault, this.slotsCollection, this.recordId);
|
|
697
697
|
if (!envelope) return { slots: {}, version: 0, atTier: fromTier };
|
|
698
698
|
if (!this.encrypted) {
|
|
699
|
-
return { slots: JSON.parse(envelope._data), version: envelope._v, atTier: fromTier };
|
|
699
|
+
return { slots: JSON.parse(envelope._data ?? ""), version: envelope._v, atTier: fromTier };
|
|
700
700
|
}
|
|
701
701
|
const fromDek = await this.getDEK(dekKey(this.collection, fromTier));
|
|
702
702
|
try {
|
|
@@ -850,7 +850,7 @@ var BlobSet = class _BlobSet {
|
|
|
850
850
|
const envelope = await this.store.get(this.vault, BLOB_INDEX_COLLECTION, eTag);
|
|
851
851
|
if (!envelope) return null;
|
|
852
852
|
if (!this.encrypted) {
|
|
853
|
-
return { blob: JSON.parse(envelope._data), version: envelope._v, atTier: 0 };
|
|
853
|
+
return { blob: JSON.parse(envelope._data ?? ""), version: envelope._v, atTier: 0 };
|
|
854
854
|
}
|
|
855
855
|
const t = tier ?? await this.ownerTier();
|
|
856
856
|
const fallbackTier = alsoTryTier ?? (t > 0 ? 0 : void 0);
|
|
@@ -1109,7 +1109,7 @@ var BlobSet = class _BlobSet {
|
|
|
1109
1109
|
* covered by rotation.
|
|
1110
1110
|
*
|
|
1111
1111
|
* This also makes one ordering rule true across the blob subsystem rather
|
|
1112
|
-
* than two opposite ones: `
|
|
1112
|
+
* than two opposite ones: `capsule/plumbing/rekey-blob.ts` already
|
|
1113
1113
|
* re-encrypts chunks before re-sealing their index entry, and documents that
|
|
1114
1114
|
* order as its resume property.
|
|
1115
1115
|
*
|
|
@@ -1515,7 +1515,7 @@ var BlobSet = class _BlobSet {
|
|
|
1515
1515
|
const envelope = await this.store.get(this.vault, this.versionsCollection, key);
|
|
1516
1516
|
if (!envelope) continue;
|
|
1517
1517
|
try {
|
|
1518
|
-
const record = this.encrypted ? JSON.parse(await openEnvelopeJson({ collection: this.versionsCollection, id: key }, envelope, dek)) : JSON.parse(envelope._data);
|
|
1518
|
+
const record = this.encrypted ? JSON.parse(await openEnvelopeJson({ collection: this.versionsCollection, id: key }, envelope, dek)) : JSON.parse(envelope._data ?? "");
|
|
1519
1519
|
holds.set(record.eTag, (holds.get(record.eTag) ?? 0) + 1);
|
|
1520
1520
|
readable.push(key);
|
|
1521
1521
|
} catch {
|
|
@@ -1795,7 +1795,7 @@ var BlobSet = class _BlobSet {
|
|
|
1795
1795
|
async loadVersionRecordAtKeyTolerant(key, fromTier, toTier) {
|
|
1796
1796
|
const envelope = await this.store.get(this.vault, this.versionsCollection, key);
|
|
1797
1797
|
if (!envelope) return null;
|
|
1798
|
-
if (!this.encrypted) return { record: JSON.parse(envelope._data), atTier: fromTier };
|
|
1798
|
+
if (!this.encrypted) return { record: JSON.parse(envelope._data ?? ""), atTier: fromTier };
|
|
1799
1799
|
const fromDek = await this.getDEK(dekKey(this.collection, fromTier));
|
|
1800
1800
|
try {
|
|
1801
1801
|
const json2 = await openEnvelopeJson({ collection: this.versionsCollection, id: key }, envelope, fromDek);
|
|
@@ -1986,9 +1986,9 @@ var BlobSet = class _BlobSet {
|
|
|
1986
1986
|
if (!envelope) return null;
|
|
1987
1987
|
if (dek) {
|
|
1988
1988
|
const aad = chunkAAD(eTag, index, chunkCount);
|
|
1989
|
-
return await decryptBytesWithAAD(envelope
|
|
1989
|
+
return await decryptBytesWithAAD(...sealedBodyArgs(envelope, "blobSet"), dek, aad);
|
|
1990
1990
|
}
|
|
1991
|
-
return base64ToBuffer(envelope._data);
|
|
1991
|
+
return base64ToBuffer(envelope._data ?? "");
|
|
1992
1992
|
}
|
|
1993
1993
|
// ─── Version record I/O ───────────────────────────────────────────
|
|
1994
1994
|
/** #752: '::' is the version-key separator (`versionKey`) — a recordId/slotName/label
|
|
@@ -2024,7 +2024,7 @@ var BlobSet = class _BlobSet {
|
|
|
2024
2024
|
const envelope = await this.store.get(this.vault, this.versionsCollection, key);
|
|
2025
2025
|
if (!envelope) return null;
|
|
2026
2026
|
if (!this.encrypted) {
|
|
2027
|
-
return JSON.parse(envelope._data);
|
|
2027
|
+
return JSON.parse(envelope._data ?? "");
|
|
2028
2028
|
}
|
|
2029
2029
|
const dek = await this.getDEK(dekKey(this.collection, tier ?? await this.ownerTier()));
|
|
2030
2030
|
const json = await openEnvelopeJson({ collection: this.versionsCollection, id: key }, envelope, dek);
|
|
@@ -2155,6 +2155,7 @@ var BlobSet = class _BlobSet {
|
|
|
2155
2155
|
async put(slotName, data, opts) {
|
|
2156
2156
|
this.assertKeyPartSafe(this.recordId, "record id");
|
|
2157
2157
|
this.assertKeyPartSafe(slotName, "slot name");
|
|
2158
|
+
await this.assertOwnerWritable?.();
|
|
2158
2159
|
await this.resolvePendingIntent();
|
|
2159
2160
|
if (this.objectStore && this.blobFields?.[slotName]?.external) {
|
|
2160
2161
|
const policy = this.blobFields[slotName];
|
|
@@ -2503,6 +2504,7 @@ var BlobSet = class _BlobSet {
|
|
|
2503
2504
|
* bucket. Writes the external slot record (the catalog entry).
|
|
2504
2505
|
*/
|
|
2505
2506
|
async adoptExternal(slotName, ref) {
|
|
2507
|
+
await this.assertOwnerWritable?.();
|
|
2506
2508
|
this.assertKeyPartSafe(this.recordId, "record id");
|
|
2507
2509
|
this.assertKeyPartSafe(slotName, "slot name");
|
|
2508
2510
|
this.assertExternalDeclared(slotName);
|
|
@@ -2591,10 +2593,32 @@ var BlobSet = class _BlobSet {
|
|
|
2591
2593
|
});
|
|
2592
2594
|
}
|
|
2593
2595
|
/**
|
|
2594
|
-
* Delete the named slot from this record.
|
|
2595
|
-
*
|
|
2596
|
+
* Delete the named slot from this record and decrement the blob's refCount.
|
|
2597
|
+
* At refCount 0 an erasable blob (`perRecordKeys`) is crypto-shredded on the
|
|
2598
|
+
* spot; a legacy blob keeps its chunks until
|
|
2599
|
+
* `vault.compact({ reclaimLegacyBlobs: true })` reclaims them (#1453), or
|
|
2600
|
+
* `blob(id).migrate()` makes it erasable first.
|
|
2601
|
+
*
|
|
2602
|
+
* Gated on the owning record (#1452): refused where an update of the record
|
|
2603
|
+
* would be refused.
|
|
2596
2604
|
*/
|
|
2597
2605
|
async delete(slotName) {
|
|
2606
|
+
await this.assertOwnerWritable?.();
|
|
2607
|
+
return this.releaseSlot(slotName);
|
|
2608
|
+
}
|
|
2609
|
+
/**
|
|
2610
|
+
* #1451 — release EVERY slot this record holds. Called by
|
|
2611
|
+
* `Collection.delete()` after the record is gone, so "the record is deleted"
|
|
2612
|
+
* and "its attachments are released" are one operation. Ungated: the record
|
|
2613
|
+
* delete itself already passed the gate bus. Ref-counted like any release —
|
|
2614
|
+
* content another record still holds survives.
|
|
2615
|
+
*/
|
|
2616
|
+
async releaseAll() {
|
|
2617
|
+
const { slots } = await this.loadSlots();
|
|
2618
|
+
for (const name of Object.keys(slots)) await this.releaseSlot(name);
|
|
2619
|
+
}
|
|
2620
|
+
/** The body of {@link delete}, minus the owner gate. */
|
|
2621
|
+
async releaseSlot(slotName) {
|
|
2598
2622
|
await this.resolvePendingIntent();
|
|
2599
2623
|
let eTagToRelease;
|
|
2600
2624
|
let externalKeyToDelete;
|
|
@@ -2901,6 +2925,7 @@ var BlobSet = class _BlobSet {
|
|
|
2901
2925
|
* `rehomeForTier`) — no separate tier-scoping needed for the content side.
|
|
2902
2926
|
*/
|
|
2903
2927
|
async publish(slotName, label) {
|
|
2928
|
+
await this.assertOwnerWritable?.();
|
|
2904
2929
|
this.assertKeyPartSafe(this.recordId, "record id");
|
|
2905
2930
|
this.assertKeyPartSafe(slotName, "slot name");
|
|
2906
2931
|
this.assertKeyPartSafe(label, "version label");
|
|
@@ -2951,7 +2976,7 @@ var BlobSet = class _BlobSet {
|
|
|
2951
2976
|
const envelope = await this.store.get(this.vault, this.versionsCollection, key);
|
|
2952
2977
|
if (!envelope) continue;
|
|
2953
2978
|
if (!this.encrypted) {
|
|
2954
|
-
versions.push(JSON.parse(envelope._data));
|
|
2979
|
+
versions.push(JSON.parse(envelope._data ?? ""));
|
|
2955
2980
|
} else {
|
|
2956
2981
|
const dek = await this.getDEK(this.collection);
|
|
2957
2982
|
const json = await openEnvelopeJson({ collection: this.versionsCollection, id: key }, envelope, dek);
|
|
@@ -2964,6 +2989,7 @@ var BlobSet = class _BlobSet {
|
|
|
2964
2989
|
* Delete a published version. Decrements refCount on its blob.
|
|
2965
2990
|
*/
|
|
2966
2991
|
async deleteVersion(slotName, label) {
|
|
2992
|
+
await this.assertOwnerWritable?.();
|
|
2967
2993
|
await this.resolvePendingIntent();
|
|
2968
2994
|
const record = await this.loadVersionRecord(slotName, label);
|
|
2969
2995
|
if (!record) return;
|
|
@@ -3061,7 +3087,7 @@ var BlobSet = class _BlobSet {
|
|
|
3061
3087
|
return this.buildResponse(slot, result.blob, { inline: true });
|
|
3062
3088
|
}
|
|
3063
3089
|
const aad = chunkAAD(slot.eTag, 0, result.blob.chunkCount);
|
|
3064
|
-
const decrypted = await decryptBytesWithAAD(envelope
|
|
3090
|
+
const decrypted = await decryptBytesWithAAD(...sealedBodyArgs(envelope, "blobSet"), chunkKey, aad);
|
|
3065
3091
|
const plaintext = result.blob.compression === "gzip" ? await decompressBytes(decrypted) : decrypted;
|
|
3066
3092
|
const recomputed = await hmacSha256Hex(await this.addressKey(await this.ownerTier()), plaintext);
|
|
3067
3093
|
if (recomputed !== slot.eTag) {
|
|
@@ -3137,4 +3163,4 @@ export {
|
|
|
3137
3163
|
DEFAULT_CHUNK_SIZE,
|
|
3138
3164
|
BlobSet
|
|
3139
3165
|
};
|
|
3140
|
-
//# sourceMappingURL=chunk-
|
|
3166
|
+
//# sourceMappingURL=chunk-G2MVBDFP.js.map
|