@noy-db/hub 0.8.0 → 0.9.0-pre.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +49 -0
- package/README.md +8 -8
- package/codemods/0.4.0-pre.json +1 -1
- package/codemods/0.8.0-pre.json +1 -1
- package/dist/api-6EFD43KN.js +18 -0
- package/dist/as/index.js +33 -23
- package/dist/as/index.js.map +1 -1
- package/dist/at/index.js +8 -8
- package/dist/attestation/index.js +18 -18
- package/dist/{backup-YE2VQ26S.js → backup-RJBFQSHE.js} +92 -31
- package/dist/backup-RJBFQSHE.js.map +1 -0
- package/dist/blobs/index.js +12 -12
- package/dist/broker/index.js +19 -11
- package/dist/broker/index.js.map +1 -1
- package/dist/by/index.js +2 -2
- package/dist/capsule/contract.d.ts +1 -1
- package/dist/capsule/contract.js +6 -6
- package/dist/capsule/enclave-aes/broker/proof.d.ts +12 -3
- package/dist/capsule/enclave-aes/crypto.d.ts +18 -0
- package/dist/capsule/enclave-aes/index.d.ts +3 -3
- package/dist/capsule/enclave-aes/index.js +46 -14
- package/dist/capsule/enclave-aes/index.js.map +1 -1
- package/dist/capsule/index.d.ts +2 -2
- package/dist/capsule/plumbing/record-codec.d.ts +7 -0
- package/dist/{capsule-VOLX3QRQ.js → capsule-6LJAVQNM.js} +14 -8
- package/dist/cargo/index.js +35 -35
- package/dist/{chunk-GZT3NQRA.js → chunk-25FXU6WS.js} +8 -2
- package/dist/chunk-25FXU6WS.js.map +1 -0
- package/dist/{chunk-OYW3I5M4.js → chunk-2DOCDOPL.js} +6 -6
- package/dist/chunk-2DX4JCRI.js +1 -0
- package/dist/{chunk-FLPCETP6.js → chunk-2LBS62AC.js} +2 -2
- package/dist/{chunk-WXE4W2U6.js → chunk-2ST3WA3C.js} +4 -4
- package/dist/{chunk-DQESF6RP.js → chunk-3G3GOGZZ.js} +50 -40
- package/dist/chunk-3G3GOGZZ.js.map +1 -0
- package/dist/{chunk-O2IMQSNA.js → chunk-3YBIVLTC.js} +2 -2
- package/dist/{chunk-LGNDFRYC.js → chunk-4CFHL5RY.js} +1 -1
- package/dist/chunk-4CFHL5RY.js.map +1 -0
- package/dist/{chunk-DIZLQVAA.js → chunk-4CHM2TRS.js} +2 -2
- package/dist/{chunk-V7ADQF5O.js → chunk-4CUJLEOA.js} +4 -4
- package/dist/{chunk-3EWS67C7.js → chunk-4TG2ITRW.js} +2 -2
- package/dist/{chunk-HS554XAF.js → chunk-5HQFROZS.js} +2 -2
- package/dist/{chunk-IUBMZPHM.js → chunk-5ZVE3N5C.js} +5 -6
- package/dist/chunk-5ZVE3N5C.js.map +1 -0
- package/dist/{chunk-PP3K67AJ.js → chunk-654RE5YC.js} +3 -3
- package/dist/{chunk-FOEDQATO.js → chunk-66GD7XXU.js} +2 -2
- package/dist/{chunk-BNWA3WG5.js → chunk-72FQ46VW.js} +3 -3
- package/dist/{chunk-EYG2CY2X.js → chunk-7JPA3LIH.js} +11 -11
- package/dist/chunk-7JPA3LIH.js.map +1 -0
- package/dist/{chunk-JQYKPKG6.js → chunk-7K42TSCY.js} +4 -4
- package/dist/{chunk-BPWYQ25R.js → chunk-7Q6IU3R7.js} +4 -4
- package/dist/{chunk-BPWYQ25R.js.map → chunk-7Q6IU3R7.js.map} +1 -1
- package/dist/{chunk-T7IR4N2S.js → chunk-7UHLO4ZN.js} +37 -2
- package/dist/chunk-7UHLO4ZN.js.map +1 -0
- package/dist/{chunk-UEFOQH74.js → chunk-ADCXTW7L.js} +2 -2
- package/dist/{chunk-MBMTND6D.js → chunk-AGGPT4UE.js} +2 -2
- package/dist/{chunk-RB4DOPGZ.js → chunk-AKIEBFIJ.js} +10 -10
- package/dist/{chunk-VHBKYN2J.js → chunk-B3B6HV5S.js} +2 -2
- package/dist/{chunk-JWWYRR4Q.js → chunk-B6EWMGFX.js} +2 -2
- package/dist/{chunk-H7JBY4P7.js → chunk-B7Y2BRQA.js} +14 -14
- package/dist/chunk-B7Y2BRQA.js.map +1 -0
- package/dist/{chunk-4CIQDWRB.js → chunk-BFJE2GPP.js} +14 -8
- package/dist/{chunk-4CIQDWRB.js.map → chunk-BFJE2GPP.js.map} +1 -1
- package/dist/{chunk-WPOYWFSE.js → chunk-BJRKXNFP.js} +7 -7
- package/dist/{chunk-H427H63K.js → chunk-BPQ5CRJF.js} +2 -2
- package/dist/{chunk-VFHCKG5M.js → chunk-BVRJYMFZ.js} +3 -3
- package/dist/{chunk-244QBK7Z.js → chunk-C4XV3PSJ.js} +4 -4
- package/dist/{chunk-244QBK7Z.js.map → chunk-C4XV3PSJ.js.map} +1 -1
- package/dist/{chunk-SMV2HRDU.js → chunk-DFC4WTJW.js} +2 -2
- package/dist/{chunk-5A4345TG.js → chunk-DMIEKD24.js} +3 -3
- package/dist/{chunk-TKVUE4JF.js → chunk-DQAXA2GK.js} +9 -9
- package/dist/{chunk-AL6ML4LA.js → chunk-DWCFGF2K.js} +5 -5
- package/dist/{chunk-Y3LPTBG7.js → chunk-E2C6FFSI.js} +6 -9
- package/dist/chunk-E2C6FFSI.js.map +1 -0
- package/dist/{chunk-LNSVGRHO.js → chunk-EQ6C2ZPT.js} +17 -51
- package/dist/chunk-EQ6C2ZPT.js.map +1 -0
- package/dist/chunk-EZOFTI4K.js +60 -0
- package/dist/chunk-EZOFTI4K.js.map +1 -0
- package/dist/{chunk-PD64727P.js → chunk-FMINS2B6.js} +2 -2
- package/dist/chunk-FMINS2B6.js.map +1 -0
- package/dist/{chunk-QBLT6POL.js → chunk-FPF5HRBE.js} +2 -2
- package/dist/{chunk-UA372JHH.js → chunk-FZVCZEVI.js} +3 -3
- package/dist/chunk-FZVCZEVI.js.map +1 -0
- package/dist/{chunk-FFWI7UH7.js → chunk-GAGT3YZN.js} +1 -1
- package/dist/chunk-GAGT3YZN.js.map +1 -0
- package/dist/{chunk-5WWDGFOS.js → chunk-GIQJGXV7.js} +2 -2
- package/dist/{chunk-V3RWOOSO.js → chunk-GYZICGRU.js} +4 -4
- package/dist/chunk-GYZICGRU.js.map +1 -0
- package/dist/{chunk-BVCUTXE3.js → chunk-H334G6KU.js} +2 -2
- package/dist/{chunk-AEQGFRU4.js → chunk-HE7EAHGS.js} +3 -3
- package/dist/chunk-HKB4HZDU.js +74 -0
- package/dist/chunk-HKB4HZDU.js.map +1 -0
- package/dist/{chunk-4V3Q35WG.js → chunk-ICF3TIGY.js} +3 -3
- package/dist/{chunk-3L2NBKDR.js → chunk-IF2M43G4.js} +2 -2
- package/dist/{chunk-37EPTBBR.js → chunk-IKPQ2GGB.js} +46 -4
- package/dist/chunk-IKPQ2GGB.js.map +1 -0
- package/dist/{chunk-DHHGL42E.js → chunk-IKS2CPAG.js} +27 -11
- package/dist/chunk-IKS2CPAG.js.map +1 -0
- package/dist/{chunk-3A5DUZ56.js → chunk-IMIQAGR7.js} +6 -6
- package/dist/{chunk-3A5DUZ56.js.map → chunk-IMIQAGR7.js.map} +1 -1
- package/dist/{chunk-A4XMIZT3.js → chunk-IQAJ4OR6.js} +41 -6
- package/dist/chunk-IQAJ4OR6.js.map +1 -0
- package/dist/{chunk-IUT3GWP3.js → chunk-IUD7WU67.js} +17 -93
- package/dist/chunk-IUD7WU67.js.map +1 -0
- package/dist/{chunk-AUKKUPVB.js → chunk-IVLRPRXM.js} +2 -2
- package/dist/{chunk-GUZET4SG.js → chunk-JAQHWHUN.js} +4 -4
- package/dist/chunk-JAQHWHUN.js.map +1 -0
- package/dist/{chunk-Y2RKVFKR.js → chunk-K4JSTGXT.js} +2 -2
- package/dist/{chunk-EJLV62NI.js → chunk-KN4LUMH6.js} +2 -2
- package/dist/{chunk-23D6M6VM.js → chunk-KZA3DITX.js} +4 -4
- package/dist/{chunk-E2N2T5ZO.js → chunk-L2VM64HK.js} +2 -2
- package/dist/chunk-L4UL4IAR.js +55 -0
- package/dist/chunk-L4UL4IAR.js.map +1 -0
- package/dist/{chunk-UIYESRD6.js → chunk-LUCQY3OM.js} +10 -10
- package/dist/{chunk-UIYESRD6.js.map → chunk-LUCQY3OM.js.map} +1 -1
- package/dist/{chunk-O46CHQT7.js → chunk-MAQBYBUX.js} +4 -4
- package/dist/{chunk-EZOAKKTB.js → chunk-MBPZMZVB.js} +2 -2
- package/dist/{chunk-XQRFSKYM.js → chunk-MCNNZBG7.js} +2 -2
- package/dist/{chunk-YRXFFWG4.js → chunk-MLVPMDOZ.js} +2 -2
- package/dist/{chunk-5FE75J4S.js → chunk-MMCN7TLK.js} +5 -5
- package/dist/{chunk-MXOQ5JCG.js → chunk-MRCR7ZMC.js} +686 -202
- package/dist/chunk-MRCR7ZMC.js.map +1 -0
- package/dist/{chunk-SYNY3VB5.js → chunk-NCTN2FW4.js} +2 -2
- package/dist/{chunk-4T3SE27M.js → chunk-ND6S2DKC.js} +2 -2
- package/dist/{chunk-3XJQBBZD.js → chunk-NTVKHQ3L.js} +2 -2
- package/dist/{chunk-RHVMZSUU.js → chunk-NV4OESHC.js} +1 -1
- package/dist/chunk-NV4OESHC.js.map +1 -0
- package/dist/chunk-NXQEOC3X.js +40 -0
- package/dist/chunk-NXQEOC3X.js.map +1 -0
- package/dist/{chunk-Q4UHJ5SN.js → chunk-O2VQ3K36.js} +2 -2
- package/dist/{chunk-HW7CMKUG.js → chunk-OFD2HD6F.js} +1 -1
- package/dist/{chunk-HW7CMKUG.js.map → chunk-OFD2HD6F.js.map} +1 -1
- package/dist/{chunk-2GHDLTPE.js → chunk-OGKMRIIJ.js} +2 -2
- package/dist/{chunk-N7EVQD5S.js → chunk-ONZ3B5EW.js} +4 -4
- package/dist/{chunk-VKI2EB3N.js → chunk-OOPSMQX5.js} +3 -3
- package/dist/{chunk-VMV5SBE4.js → chunk-OYEBSWLE.js} +5 -5
- package/dist/{chunk-JDEYF3PJ.js → chunk-P6FATPXQ.js} +2 -2
- package/dist/chunk-P6FATPXQ.js.map +1 -0
- package/dist/{chunk-VVOLDVIR.js → chunk-PLTIJDQN.js} +2 -2
- package/dist/{chunk-OKSTSITU.js → chunk-PR7ILCIH.js} +3 -3
- package/dist/{chunk-7R2Q7CPL.js → chunk-QE3TLZ6Z.js} +7 -7
- package/dist/{chunk-G2MVBDFP.js → chunk-QFW4MYGN.js} +39 -9
- package/dist/chunk-QFW4MYGN.js.map +1 -0
- package/dist/{chunk-6QVKPHBF.js → chunk-QHG7GQKM.js} +2 -2
- package/dist/chunk-QJNAHPVT.js +91 -0
- package/dist/chunk-QJNAHPVT.js.map +1 -0
- package/dist/{chunk-LIOVX5TJ.js → chunk-QT5ITL25.js} +3 -3
- package/dist/{chunk-IMQKWR46.js → chunk-R2ZULFXU.js} +4 -5
- package/dist/chunk-R2ZULFXU.js.map +1 -0
- package/dist/{chunk-Q2XRFWOI.js → chunk-RRTQAQ3N.js} +2 -2
- package/dist/{chunk-H23XHRTT.js → chunk-RUE6TCES.js} +809 -101
- package/dist/chunk-RUE6TCES.js.map +1 -0
- package/dist/chunk-RWFQVNXR.js +24 -0
- package/dist/chunk-RWFQVNXR.js.map +1 -0
- package/dist/{chunk-2PVXF5CS.js → chunk-SALY3LIJ.js} +3 -3
- package/dist/{chunk-JOSPH3E5.js → chunk-SBAR5JQ6.js} +2 -2
- package/dist/{chunk-N7UDP5VU.js → chunk-SCH2F7R2.js} +7 -7
- package/dist/{chunk-MXKI4ABF.js → chunk-SOOAW6HK.js} +3 -3
- package/dist/{chunk-VQDZYB2B.js → chunk-T4VTRKCY.js} +3 -3
- package/dist/{chunk-VQDZYB2B.js.map → chunk-T4VTRKCY.js.map} +1 -1
- package/dist/{chunk-TEHHROZL.js → chunk-T5EXREMW.js} +5 -5
- package/dist/{chunk-M5B2W6YY.js → chunk-TDJVQTXD.js} +3 -3
- package/dist/{chunk-QMWY2FDS.js → chunk-THQ3BHLM.js} +2 -2
- package/dist/{chunk-VAORSCSU.js → chunk-TLIFNRU5.js} +2 -2
- package/dist/chunk-TLIFNRU5.js.map +1 -0
- package/dist/{chunk-FVH5QYY2.js → chunk-TRHUNPXP.js} +2 -2
- package/dist/{chunk-EGVJ7TM4.js → chunk-UL6MTRMJ.js} +8 -9
- package/dist/chunk-UL6MTRMJ.js.map +1 -0
- package/dist/chunk-UNL6YGL5.js +169 -0
- package/dist/chunk-UNL6YGL5.js.map +1 -0
- package/dist/{chunk-747G6CT3.js → chunk-UORWAG7K.js} +2 -2
- package/dist/{chunk-XSPFDUDG.js → chunk-V7AKGAXY.js} +314 -77
- package/dist/chunk-V7AKGAXY.js.map +1 -0
- package/dist/{chunk-TZZBXPZK.js → chunk-VLQ6KT7F.js} +2 -2
- package/dist/{chunk-NCO25JZO.js → chunk-VP37VUKQ.js} +4 -4
- package/dist/{chunk-52MGURXO.js → chunk-WBUHHMLN.js} +2 -2
- package/dist/{chunk-EZGV6F47.js → chunk-WRLWEYHY.js} +7 -1
- package/dist/chunk-WRLWEYHY.js.map +1 -0
- package/dist/{chunk-2MG3SW7Q.js → chunk-X6Z2SIRF.js} +2 -2
- package/dist/{chunk-U2FZNEWJ.js → chunk-XLKWF3L4.js} +8 -6
- package/dist/{chunk-U2FZNEWJ.js.map → chunk-XLKWF3L4.js.map} +1 -1
- package/dist/{chunk-5UMK7GRI.js → chunk-XPNJH7GN.js} +5 -5
- package/dist/{chunk-KZXDLBY6.js → chunk-XPW7T2GN.js} +5 -5
- package/dist/{chunk-SV2PM2OY.js → chunk-XX4R7TUB.js} +1 -1
- package/dist/chunk-XX4R7TUB.js.map +1 -0
- package/dist/{chunk-NBQ3KK6X.js → chunk-Y55XHMQB.js} +4 -4
- package/dist/chunk-Y55XHMQB.js.map +1 -0
- package/dist/{chunk-5KC7QYEC.js → chunk-YH4OUOSI.js} +33 -7
- package/dist/chunk-YH4OUOSI.js.map +1 -0
- package/dist/{chunk-FFJFE4T7.js → chunk-YJGKOSQD.js} +2 -2
- package/dist/{chunk-2AFX33YA.js → chunk-Z3STG43F.js} +3 -3
- package/dist/chunk-Z3STG43F.js.map +1 -0
- package/dist/{chunk-OIEO4WDL.js → chunk-ZD7WFMV2.js} +2 -2
- package/dist/chunk-ZD7WFMV2.js.map +1 -0
- package/dist/{chunk-42ALPZ2B.js → chunk-ZF6JECDT.js} +4 -4
- package/dist/{chunk-42ALPZ2B.js.map → chunk-ZF6JECDT.js.map} +1 -1
- package/dist/{chunk-4JPMZTJY.js → chunk-ZF7KNSLU.js} +2 -2
- package/dist/{chunk-2ODVB6LZ.js → chunk-ZGKODRGB.js} +2 -2
- package/dist/{chunk-JIBUPZHA.js → chunk-ZNEKQFGF.js} +4 -4
- package/dist/{chunk-DLD5LGDS.js → chunk-ZUTUNVFD.js} +3 -3
- package/dist/{chunk-JSMTXZR3.js → chunk-ZWMOHANW.js} +8 -6
- package/dist/chunk-ZWMOHANW.js.map +1 -0
- package/dist/{chunk-MILI22XQ.js → chunk-ZZZ4VCY2.js} +10 -10
- package/dist/chunk-ZZZ4VCY2.js.map +1 -0
- package/dist/classified/index.js +5 -5
- package/dist/{classified-marker-SIYKUU5L.js → classified-marker-WKP33U2R.js} +3 -3
- package/dist/collection-facade-COSGZKLC.js +41 -0
- package/dist/{computed-FAD7SED4.js → computed-WN6V53ZV.js} +3 -3
- package/dist/consent/index.js +8 -8
- package/dist/cover/index.js +8 -8
- package/dist/coverage/index.js +1 -1
- package/dist/custody/index.js +12 -11
- package/dist/{dead-filter-4F3LWYKH.js → dead-filter-43WL3Y5H.js} +10 -10
- package/dist/debug/index.js +7 -7
- package/dist/delegation-5UWT4JGT.js +26 -0
- package/dist/derivations/index.js +24 -23
- package/dist/derive-IL5JNLEE.js +20 -0
- package/dist/directory/index.js +9 -9
- package/dist/{dispatch-JDZNGEB3.js → dispatch-LOQQD5JK.js} +20 -20
- package/dist/{dispatch-H4HV32AM.js → dispatch-SHKTG57L.js} +5 -5
- package/dist/executor-6PQ7WAGV.js +35 -0
- package/dist/executor-6ZPQA6HS.js +8 -0
- package/dist/executor-OXRA64TY.js +8 -0
- package/dist/export-accessible-XG3FKJWW.js +22 -0
- package/dist/extract-partition-33747NY5.js +35 -0
- package/dist/{fanout-sidecar-L7NHPIOC.js → fanout-sidecar-NEB6IYV7.js} +8 -8
- package/dist/find-VW543G3J.js +10 -0
- package/dist/forget/index.js +25 -8
- package/dist/forget/index.js.map +1 -1
- package/dist/guards/index.js +4 -4
- package/dist/history/index.js +15 -13
- package/dist/history/index.js.map +1 -1
- package/dist/i18n/index.js +13 -13
- package/dist/index.d.ts +9 -6
- package/dist/index.js +126 -110
- package/dist/index.js.map +1 -1
- package/dist/indexing/index.js +6 -6
- package/dist/introspection/index.js +15 -11
- package/dist/issue-4ZPSY44M.js +19 -0
- package/dist/kernel/cache/index.d.ts +1 -1
- package/dist/kernel/collection.d.ts +86 -6
- package/dist/kernel/constants.d.ts +7 -0
- package/dist/kernel/errors.d.ts +42 -4
- package/dist/kernel/export-scope.d.ts +40 -0
- package/dist/kernel/merge-authority.d.ts +5 -1
- package/dist/kernel/noydb.d.ts +118 -21
- package/dist/kernel/put-many-atomic.d.ts +1 -1
- package/dist/kernel/query/live/live.d.ts +2 -1
- package/dist/kernel/query/sort-key.d.ts +0 -2
- package/dist/kernel/rejection-seal.d.ts +13 -0
- package/dist/kernel/sync-wiring.d.ts +55 -0
- package/dist/kernel/tx-write-gate.d.ts +2 -4
- package/dist/kernel/types.d.ts +463 -14
- package/dist/kernel/validation.d.ts +0 -10
- package/dist/kernel/vault.d.ts +42 -4
- package/dist/kernel/via/reconcile.d.ts +1 -42
- package/dist/{ledger-5ZMGE44K.js → ledger-MZ25UFT2.js} +10 -10
- package/dist/liberate-OJIP2ZFX.js +25 -0
- package/dist/{link-set-MFXC24VK.js → link-set-4FRRAVTH.js} +10 -10
- package/dist/{managed-secret-MFTFT22X.js → managed-secret-SQWO2EUR.js} +9 -9
- package/dist/materialized-views/index.js +26 -26
- package/dist/{migrate-cek-DZRFFOHW.js → migrate-cek-JWEM4RP6.js} +2 -2
- package/dist/money/index.js +5 -5
- package/dist/noydb-U62OVKXB.js +100 -0
- package/dist/on/index.js +25 -0
- package/dist/overlay-views/index.js +4 -4
- package/dist/periods/index.js +11 -11
- package/dist/pod/index.js +71 -67
- package/dist/{pod-handle-A3LET7NO.js → pod-handle-R6Y4MILX.js} +8 -8
- package/dist/policy/index.js +9 -9
- package/dist/port/as/active.d.ts +4 -0
- package/dist/port/as/index.d.ts +1 -0
- package/dist/port/by/index.d.ts +14 -5
- package/dist/port/on/index.d.ts +26 -0
- package/dist/port/to/index.d.ts +1 -1
- package/dist/port/with/admission-authority.d.ts +34 -0
- package/dist/port/with/broker-strategy.d.ts +24 -0
- package/dist/port/with/coverage-strategy.d.ts +17 -1
- package/dist/port/with/formats-strategy.d.ts +34 -1
- package/dist/port/with/lookup-strategy.d.ts +85 -4
- package/dist/port/with/rejection-courier.d.ts +37 -0
- package/dist/port/with/restore-host.d.ts +33 -0
- package/dist/port/with/service-bus.d.ts +20 -1
- package/dist/port/with/team-strategy.d.ts +2 -2
- package/dist/port/with/write-hooks.d.ts +2 -0
- package/dist/portability/index.js +8 -8
- package/dist/{post-register-7ND27CF2.js → post-register-GRVQHBOH.js} +6 -6
- package/dist/query/all/index.js +16 -16
- package/dist/query/index.js +8 -8
- package/dist/query/live/index.js +7 -7
- package/dist/query/reduce/index.js +10 -10
- package/dist/query/relate/index.js +10 -10
- package/dist/reduce/index.js +8 -8
- package/dist/register-YJ5YLQ36.js +30 -0
- package/dist/registry-ICOHBQFD.js +8 -0
- package/dist/registry-MJ7MWCSW.js +35 -0
- package/dist/registry-MVEKKGWL.js +23 -0
- package/dist/registry-XP744FAP.js +8 -0
- package/dist/request-withdrawal-LSU4G6W3.js +28 -0
- package/dist/restore-to-DVBHAQAA.js +66 -0
- package/dist/restore-to-DVBHAQAA.js.map +1 -0
- package/dist/{reveal-B2TLP4JQ.js → reveal-AIHOIK2N.js} +7 -7
- package/dist/revoke-QUT7WWG3.js +24 -0
- package/dist/satellites/index.js +1 -1
- package/dist/schema-update/index.js +2 -2
- package/dist/sealed-record/index.js +11 -11
- package/dist/search/index.js +4 -4
- package/dist/{seed-XNSE4U3S.js → seed-GFLA4FCK.js} +136 -27
- package/dist/seed-GFLA4FCK.js.map +1 -0
- package/dist/sequence/index.js +8 -8
- package/dist/session/index.js +8 -8
- package/dist/shadow/index.js +2 -2
- package/dist/signer-NYR4I3FO.js +23 -0
- package/dist/snapshots/index.js +9 -9
- package/dist/{stale-6GCFMOOR.js → stale-PIJPAL5T.js} +9 -9
- package/dist/storage-VH6SPXHC.js +21 -0
- package/dist/{store-coordination-provider-C4BPT5XF.js → store-coordination-provider-2KSHCOPU.js} +9 -9
- package/dist/sync/index.js +19 -13
- package/dist/sync/index.js.map +1 -1
- package/dist/team/index.js +17 -15
- package/dist/tiers/index.js +10 -10
- 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 +8 -8
- package/dist/{verify-UKALW7C2.js → verify-PCFS4PNS.js} +7 -7
- package/dist/via/classified/presets.d.ts +29 -0
- package/dist/via/classified/resolve.d.ts +7 -0
- package/dist/via/geo/binding.d.ts +0 -4
- package/dist/via/lookup/index.d.ts +32 -0
- package/dist/via/money/binding.d.ts +0 -9
- package/dist/walk-OZCN6LJS.js +20 -0
- package/dist/with-audit/attestation/strategy.d.ts +2 -1
- package/dist/with-audit/attestation/vault-facade.d.ts +7 -0
- package/dist/with-audit/forget/completeness.d.ts +66 -0
- package/dist/with-audit/forget/index.d.ts +2 -0
- package/dist/with-audit/forget/strategy.d.ts +65 -0
- package/dist/with-audit/guards/types.d.ts +2 -0
- package/dist/with-audit/periods/periods.d.ts +0 -9
- package/dist/with-audit/periods/reserved-collections.d.ts +7 -0
- package/dist/with-audit/portability/request-withdrawal.d.ts +0 -1
- package/dist/with-audit/portability/withdraw-accessible.d.ts +0 -1
- package/dist/with-audit/tiers/index.d.ts +6 -6
- package/dist/with-audit/tiers/strategy.d.ts +19 -0
- package/dist/with-cargo/extract-partition.d.ts +0 -46
- package/dist/with-commit/history/history.d.ts +16 -0
- package/dist/with-commit/history/restore-to.d.ts +40 -0
- package/dist/with-commit/numbering/index.d.ts +0 -2
- package/dist/with-commit/tx/transaction.d.ts +2 -24
- package/dist/with-commit/vault-head/strategy.d.ts +7 -0
- package/dist/with-fork/snapshots/noydb-facade.d.ts +7 -0
- package/dist/with-formula/derivations/trigger-match.d.ts +8 -5
- package/dist/with-formula/materialized-views/emit-memo.d.ts +0 -2
- package/dist/with-lookup/embeddings/index.d.ts +1 -2
- package/dist/with-lookup/indexing/collection-facade.d.ts +1 -15
- package/dist/with-lookup/indexing/eager-indexes.d.ts +2 -1
- package/dist/with-lookup/search/collection-facade.d.ts +0 -12
- package/dist/with-party/broker/index.d.ts +2 -2
- package/dist/with-party/broker/seed.d.ts +29 -10
- package/dist/with-party/custody/strategy.d.ts +2 -2
- package/dist/with-party/policy/noydb-facade.d.ts +1 -31
- package/dist/with-party/team/delegation.d.ts +93 -7
- package/dist/with-party/team/echo-secret.d.ts +0 -2
- package/dist/with-party/team/index.d.ts +2 -0
- package/dist/with-party/team/keyring.d.ts +133 -24
- package/dist/with-party/team/magic-link-grant.d.ts +11 -1
- package/dist/with-party/team/noydb-facade.d.ts +19 -2
- package/dist/with-party/team/reserved-secret-collections.d.ts +10 -8
- package/dist/with-party/team/roster-tag.d.ts +42 -1
- package/dist/with-party/team/tiers.d.ts +36 -5
- package/dist/with-pod/backup.d.ts +9 -17
- package/dist/with-shape/blobs/blob-set.d.ts +23 -0
- package/dist/with-shape/blobs/legacy-sweep.d.ts +16 -0
- package/dist/with-shape/introspection/describe.d.ts +1 -2
- package/dist/with-shape/introspection/index.d.ts +1 -0
- package/dist/with-shape/introspection/types.d.ts +2 -1
- package/dist/with-shape/schema-update/fence.d.ts +7 -0
- package/dist/with-sync/active.d.ts +28 -1
- package/dist/with-sync/engine.d.ts +88 -2
- package/dist/with-sync/index.d.ts +1 -0
- package/dist/with-sync/reserved-mirror.d.ts +112 -0
- package/dist/with-sync/strategy.d.ts +9 -0
- package/dist/with-sync/tab-write-relay.d.ts +0 -10
- package/dist/withdraw-accessible-MTFP7OIB.js +25 -0
- package/dist/withdraw-accessible-MTFP7OIB.js.map +1 -0
- package/package.json +3 -3
- package/dist/api-OS747DS4.js +0 -18
- package/dist/backup-YE2VQ26S.js.map +0 -1
- package/dist/chunk-2AFX33YA.js.map +0 -1
- package/dist/chunk-2RH777HH.js +0 -126
- package/dist/chunk-2RH777HH.js.map +0 -1
- package/dist/chunk-37EPTBBR.js.map +0 -1
- package/dist/chunk-5KC7QYEC.js.map +0 -1
- package/dist/chunk-7XMHMVTS.js +0 -20
- package/dist/chunk-7XMHMVTS.js.map +0 -1
- package/dist/chunk-A4XMIZT3.js.map +0 -1
- package/dist/chunk-DHHGL42E.js.map +0 -1
- package/dist/chunk-DQESF6RP.js.map +0 -1
- package/dist/chunk-EGVJ7TM4.js.map +0 -1
- package/dist/chunk-EYG2CY2X.js.map +0 -1
- package/dist/chunk-EZGV6F47.js.map +0 -1
- package/dist/chunk-FFWI7UH7.js.map +0 -1
- package/dist/chunk-G2MVBDFP.js.map +0 -1
- package/dist/chunk-GUZET4SG.js.map +0 -1
- package/dist/chunk-GZT3NQRA.js.map +0 -1
- package/dist/chunk-H23XHRTT.js.map +0 -1
- package/dist/chunk-H7JBY4P7.js.map +0 -1
- package/dist/chunk-IMQKWR46.js.map +0 -1
- package/dist/chunk-IUBMZPHM.js.map +0 -1
- package/dist/chunk-IUT3GWP3.js.map +0 -1
- package/dist/chunk-JDEYF3PJ.js.map +0 -1
- package/dist/chunk-JSMTXZR3.js.map +0 -1
- package/dist/chunk-LGNDFRYC.js.map +0 -1
- package/dist/chunk-LNSVGRHO.js.map +0 -1
- package/dist/chunk-MILI22XQ.js.map +0 -1
- package/dist/chunk-MXOQ5JCG.js.map +0 -1
- package/dist/chunk-NBQ3KK6X.js.map +0 -1
- package/dist/chunk-OIEO4WDL.js.map +0 -1
- package/dist/chunk-PD64727P.js.map +0 -1
- package/dist/chunk-RHVMZSUU.js.map +0 -1
- package/dist/chunk-SV2PM2OY.js.map +0 -1
- package/dist/chunk-T7IR4N2S.js.map +0 -1
- package/dist/chunk-UA372JHH.js.map +0 -1
- package/dist/chunk-UBSFPGVJ.js +0 -1
- package/dist/chunk-V3RWOOSO.js.map +0 -1
- package/dist/chunk-VAORSCSU.js.map +0 -1
- package/dist/chunk-XSPFDUDG.js.map +0 -1
- package/dist/chunk-Y3LPTBG7.js.map +0 -1
- package/dist/collection-facade-CS7CA2XO.js +0 -47
- package/dist/delegation-NANZDG4N.js +0 -102
- package/dist/delegation-NANZDG4N.js.map +0 -1
- package/dist/derive-XLOJVXPU.js +0 -20
- package/dist/executor-FMPVN6DT.js +0 -35
- package/dist/executor-LBBBRTN5.js +0 -8
- package/dist/executor-OSRZST2U.js +0 -8
- package/dist/export-accessible-RAOJAAU5.js +0 -22
- package/dist/extract-partition-JD5CUSTG.js +0 -37
- package/dist/find-JRN4RNQ5.js +0 -10
- package/dist/issue-YIVBZUTH.js +0 -19
- package/dist/liberate-WZSZM2W6.js +0 -24
- package/dist/noydb-ITIGNKUF.js +0 -96
- package/dist/register-DT5HZ2LZ.js +0 -30
- package/dist/registry-BHRZGZHF.js +0 -8
- package/dist/registry-ET6ZFFWA.js +0 -34
- package/dist/registry-HXFGLGTG.js +0 -8
- package/dist/registry-THCPDEOD.js +0 -23
- package/dist/request-withdrawal-AV2MJJKY.js +0 -30
- package/dist/revoke-6DWIEOCV.js +0 -24
- package/dist/seed-XNSE4U3S.js.map +0 -1
- package/dist/signer-MHGW3OIL.js +0 -23
- package/dist/storage-BYN5LO6Z.js +0 -21
- package/dist/walk-4VPK7AS4.js +0 -20
- package/dist/withdraw-accessible-HL7GACUE.js +0 -27
- /package/dist/{api-OS747DS4.js.map → api-6EFD43KN.js.map} +0 -0
- /package/dist/{capsule-VOLX3QRQ.js.map → capsule-6LJAVQNM.js.map} +0 -0
- /package/dist/{chunk-OYW3I5M4.js.map → chunk-2DOCDOPL.js.map} +0 -0
- /package/dist/{chunk-UBSFPGVJ.js.map → chunk-2DX4JCRI.js.map} +0 -0
- /package/dist/{chunk-FLPCETP6.js.map → chunk-2LBS62AC.js.map} +0 -0
- /package/dist/{chunk-WXE4W2U6.js.map → chunk-2ST3WA3C.js.map} +0 -0
- /package/dist/{chunk-O2IMQSNA.js.map → chunk-3YBIVLTC.js.map} +0 -0
- /package/dist/{chunk-DIZLQVAA.js.map → chunk-4CHM2TRS.js.map} +0 -0
- /package/dist/{chunk-V7ADQF5O.js.map → chunk-4CUJLEOA.js.map} +0 -0
- /package/dist/{chunk-3EWS67C7.js.map → chunk-4TG2ITRW.js.map} +0 -0
- /package/dist/{chunk-HS554XAF.js.map → chunk-5HQFROZS.js.map} +0 -0
- /package/dist/{chunk-PP3K67AJ.js.map → chunk-654RE5YC.js.map} +0 -0
- /package/dist/{chunk-FOEDQATO.js.map → chunk-66GD7XXU.js.map} +0 -0
- /package/dist/{chunk-BNWA3WG5.js.map → chunk-72FQ46VW.js.map} +0 -0
- /package/dist/{chunk-JQYKPKG6.js.map → chunk-7K42TSCY.js.map} +0 -0
- /package/dist/{chunk-UEFOQH74.js.map → chunk-ADCXTW7L.js.map} +0 -0
- /package/dist/{chunk-MBMTND6D.js.map → chunk-AGGPT4UE.js.map} +0 -0
- /package/dist/{chunk-RB4DOPGZ.js.map → chunk-AKIEBFIJ.js.map} +0 -0
- /package/dist/{chunk-VHBKYN2J.js.map → chunk-B3B6HV5S.js.map} +0 -0
- /package/dist/{chunk-JWWYRR4Q.js.map → chunk-B6EWMGFX.js.map} +0 -0
- /package/dist/{chunk-WPOYWFSE.js.map → chunk-BJRKXNFP.js.map} +0 -0
- /package/dist/{chunk-H427H63K.js.map → chunk-BPQ5CRJF.js.map} +0 -0
- /package/dist/{chunk-VFHCKG5M.js.map → chunk-BVRJYMFZ.js.map} +0 -0
- /package/dist/{chunk-SMV2HRDU.js.map → chunk-DFC4WTJW.js.map} +0 -0
- /package/dist/{chunk-5A4345TG.js.map → chunk-DMIEKD24.js.map} +0 -0
- /package/dist/{chunk-TKVUE4JF.js.map → chunk-DQAXA2GK.js.map} +0 -0
- /package/dist/{chunk-AL6ML4LA.js.map → chunk-DWCFGF2K.js.map} +0 -0
- /package/dist/{chunk-QBLT6POL.js.map → chunk-FPF5HRBE.js.map} +0 -0
- /package/dist/{chunk-5WWDGFOS.js.map → chunk-GIQJGXV7.js.map} +0 -0
- /package/dist/{chunk-BVCUTXE3.js.map → chunk-H334G6KU.js.map} +0 -0
- /package/dist/{chunk-AEQGFRU4.js.map → chunk-HE7EAHGS.js.map} +0 -0
- /package/dist/{chunk-4V3Q35WG.js.map → chunk-ICF3TIGY.js.map} +0 -0
- /package/dist/{chunk-3L2NBKDR.js.map → chunk-IF2M43G4.js.map} +0 -0
- /package/dist/{chunk-AUKKUPVB.js.map → chunk-IVLRPRXM.js.map} +0 -0
- /package/dist/{chunk-Y2RKVFKR.js.map → chunk-K4JSTGXT.js.map} +0 -0
- /package/dist/{chunk-EJLV62NI.js.map → chunk-KN4LUMH6.js.map} +0 -0
- /package/dist/{chunk-23D6M6VM.js.map → chunk-KZA3DITX.js.map} +0 -0
- /package/dist/{chunk-E2N2T5ZO.js.map → chunk-L2VM64HK.js.map} +0 -0
- /package/dist/{chunk-O46CHQT7.js.map → chunk-MAQBYBUX.js.map} +0 -0
- /package/dist/{chunk-EZOAKKTB.js.map → chunk-MBPZMZVB.js.map} +0 -0
- /package/dist/{chunk-XQRFSKYM.js.map → chunk-MCNNZBG7.js.map} +0 -0
- /package/dist/{chunk-YRXFFWG4.js.map → chunk-MLVPMDOZ.js.map} +0 -0
- /package/dist/{chunk-5FE75J4S.js.map → chunk-MMCN7TLK.js.map} +0 -0
- /package/dist/{chunk-SYNY3VB5.js.map → chunk-NCTN2FW4.js.map} +0 -0
- /package/dist/{chunk-4T3SE27M.js.map → chunk-ND6S2DKC.js.map} +0 -0
- /package/dist/{chunk-3XJQBBZD.js.map → chunk-NTVKHQ3L.js.map} +0 -0
- /package/dist/{chunk-Q4UHJ5SN.js.map → chunk-O2VQ3K36.js.map} +0 -0
- /package/dist/{chunk-2GHDLTPE.js.map → chunk-OGKMRIIJ.js.map} +0 -0
- /package/dist/{chunk-N7EVQD5S.js.map → chunk-ONZ3B5EW.js.map} +0 -0
- /package/dist/{chunk-VKI2EB3N.js.map → chunk-OOPSMQX5.js.map} +0 -0
- /package/dist/{chunk-VMV5SBE4.js.map → chunk-OYEBSWLE.js.map} +0 -0
- /package/dist/{chunk-VVOLDVIR.js.map → chunk-PLTIJDQN.js.map} +0 -0
- /package/dist/{chunk-OKSTSITU.js.map → chunk-PR7ILCIH.js.map} +0 -0
- /package/dist/{chunk-7R2Q7CPL.js.map → chunk-QE3TLZ6Z.js.map} +0 -0
- /package/dist/{chunk-6QVKPHBF.js.map → chunk-QHG7GQKM.js.map} +0 -0
- /package/dist/{chunk-LIOVX5TJ.js.map → chunk-QT5ITL25.js.map} +0 -0
- /package/dist/{chunk-Q2XRFWOI.js.map → chunk-RRTQAQ3N.js.map} +0 -0
- /package/dist/{chunk-2PVXF5CS.js.map → chunk-SALY3LIJ.js.map} +0 -0
- /package/dist/{chunk-JOSPH3E5.js.map → chunk-SBAR5JQ6.js.map} +0 -0
- /package/dist/{chunk-N7UDP5VU.js.map → chunk-SCH2F7R2.js.map} +0 -0
- /package/dist/{chunk-MXKI4ABF.js.map → chunk-SOOAW6HK.js.map} +0 -0
- /package/dist/{chunk-TEHHROZL.js.map → chunk-T5EXREMW.js.map} +0 -0
- /package/dist/{chunk-M5B2W6YY.js.map → chunk-TDJVQTXD.js.map} +0 -0
- /package/dist/{chunk-QMWY2FDS.js.map → chunk-THQ3BHLM.js.map} +0 -0
- /package/dist/{chunk-FVH5QYY2.js.map → chunk-TRHUNPXP.js.map} +0 -0
- /package/dist/{chunk-747G6CT3.js.map → chunk-UORWAG7K.js.map} +0 -0
- /package/dist/{chunk-TZZBXPZK.js.map → chunk-VLQ6KT7F.js.map} +0 -0
- /package/dist/{chunk-NCO25JZO.js.map → chunk-VP37VUKQ.js.map} +0 -0
- /package/dist/{chunk-52MGURXO.js.map → chunk-WBUHHMLN.js.map} +0 -0
- /package/dist/{chunk-2MG3SW7Q.js.map → chunk-X6Z2SIRF.js.map} +0 -0
- /package/dist/{chunk-5UMK7GRI.js.map → chunk-XPNJH7GN.js.map} +0 -0
- /package/dist/{chunk-KZXDLBY6.js.map → chunk-XPW7T2GN.js.map} +0 -0
- /package/dist/{chunk-FFJFE4T7.js.map → chunk-YJGKOSQD.js.map} +0 -0
- /package/dist/{chunk-4JPMZTJY.js.map → chunk-ZF7KNSLU.js.map} +0 -0
- /package/dist/{chunk-2ODVB6LZ.js.map → chunk-ZGKODRGB.js.map} +0 -0
- /package/dist/{chunk-JIBUPZHA.js.map → chunk-ZNEKQFGF.js.map} +0 -0
- /package/dist/{chunk-DLD5LGDS.js.map → chunk-ZUTUNVFD.js.map} +0 -0
- /package/dist/{classified-marker-SIYKUU5L.js.map → classified-marker-WKP33U2R.js.map} +0 -0
- /package/dist/{collection-facade-CS7CA2XO.js.map → collection-facade-COSGZKLC.js.map} +0 -0
- /package/dist/{computed-FAD7SED4.js.map → computed-WN6V53ZV.js.map} +0 -0
- /package/dist/{dead-filter-4F3LWYKH.js.map → dead-filter-43WL3Y5H.js.map} +0 -0
- /package/dist/{derive-XLOJVXPU.js.map → delegation-5UWT4JGT.js.map} +0 -0
- /package/dist/{executor-FMPVN6DT.js.map → derive-IL5JNLEE.js.map} +0 -0
- /package/dist/{dispatch-JDZNGEB3.js.map → dispatch-LOQQD5JK.js.map} +0 -0
- /package/dist/{dispatch-H4HV32AM.js.map → dispatch-SHKTG57L.js.map} +0 -0
- /package/dist/{executor-LBBBRTN5.js.map → executor-6PQ7WAGV.js.map} +0 -0
- /package/dist/{executor-OSRZST2U.js.map → executor-6ZPQA6HS.js.map} +0 -0
- /package/dist/{export-accessible-RAOJAAU5.js.map → executor-OXRA64TY.js.map} +0 -0
- /package/dist/{extract-partition-JD5CUSTG.js.map → export-accessible-XG3FKJWW.js.map} +0 -0
- /package/dist/{find-JRN4RNQ5.js.map → extract-partition-33747NY5.js.map} +0 -0
- /package/dist/{fanout-sidecar-L7NHPIOC.js.map → fanout-sidecar-NEB6IYV7.js.map} +0 -0
- /package/dist/{issue-YIVBZUTH.js.map → find-VW543G3J.js.map} +0 -0
- /package/dist/{ledger-5ZMGE44K.js.map → issue-4ZPSY44M.js.map} +0 -0
- /package/dist/{liberate-WZSZM2W6.js.map → ledger-MZ25UFT2.js.map} +0 -0
- /package/dist/{link-set-MFXC24VK.js.map → liberate-OJIP2ZFX.js.map} +0 -0
- /package/dist/{managed-secret-MFTFT22X.js.map → link-set-4FRRAVTH.js.map} +0 -0
- /package/dist/{noydb-ITIGNKUF.js.map → managed-secret-SQWO2EUR.js.map} +0 -0
- /package/dist/{migrate-cek-DZRFFOHW.js.map → migrate-cek-JWEM4RP6.js.map} +0 -0
- /package/dist/{register-DT5HZ2LZ.js.map → noydb-U62OVKXB.js.map} +0 -0
- /package/dist/{pod-handle-A3LET7NO.js.map → pod-handle-R6Y4MILX.js.map} +0 -0
- /package/dist/{post-register-7ND27CF2.js.map → post-register-GRVQHBOH.js.map} +0 -0
- /package/dist/{registry-BHRZGZHF.js.map → register-YJ5YLQ36.js.map} +0 -0
- /package/dist/{registry-ET6ZFFWA.js.map → registry-ICOHBQFD.js.map} +0 -0
- /package/dist/{registry-HXFGLGTG.js.map → registry-MJ7MWCSW.js.map} +0 -0
- /package/dist/{registry-THCPDEOD.js.map → registry-MVEKKGWL.js.map} +0 -0
- /package/dist/{request-withdrawal-AV2MJJKY.js.map → registry-XP744FAP.js.map} +0 -0
- /package/dist/{revoke-6DWIEOCV.js.map → request-withdrawal-LSU4G6W3.js.map} +0 -0
- /package/dist/{reveal-B2TLP4JQ.js.map → reveal-AIHOIK2N.js.map} +0 -0
- /package/dist/{signer-MHGW3OIL.js.map → revoke-QUT7WWG3.js.map} +0 -0
- /package/dist/{stale-6GCFMOOR.js.map → signer-NYR4I3FO.js.map} +0 -0
- /package/dist/{storage-BYN5LO6Z.js.map → stale-PIJPAL5T.js.map} +0 -0
- /package/dist/{walk-4VPK7AS4.js.map → storage-VH6SPXHC.js.map} +0 -0
- /package/dist/{store-coordination-provider-C4BPT5XF.js.map → store-coordination-provider-2KSHCOPU.js.map} +0 -0
- /package/dist/{verify-UKALW7C2.js.map → verify-PCFS4PNS.js.map} +0 -0
- /package/dist/{withdraw-accessible-HL7GACUE.js.map → walk-OZCN6LJS.js.map} +0 -0
|
@@ -24,6 +24,8 @@
|
|
|
24
24
|
*/
|
|
25
25
|
export { withForget } from './active.js';
|
|
26
26
|
export { NO_FORGET } from './strategy.js';
|
|
27
|
+
export { erasureCompleteness } from './completeness.js';
|
|
28
|
+
export type { ErasureCompleteness } from './completeness.js';
|
|
27
29
|
export type { SubjectDeclaration, ForgetStrategy, ForgetResult, ScopedPurgeResidueNotice, } from './strategy.js';
|
|
28
30
|
export type { SubjectRef } from './subject-index.js';
|
|
29
31
|
export { SUBJECT_INDEX_COLLECTION } from './subject-index.js';
|
|
@@ -105,6 +105,71 @@ export interface ForgetResult {
|
|
|
105
105
|
readonly blobsRetainedShared: number;
|
|
106
106
|
/** Collections with blobs that could NOT be crypto-shredded — legacy (no `_cek`) or blobs disabled (see type docs). */
|
|
107
107
|
readonly blobResidueCollections: readonly string[];
|
|
108
|
+
/**
|
|
109
|
+
* #28 — the same residue as {@link blobResidueCollections}, at `collection:id`
|
|
110
|
+
* grain: which RECORDS held blob content that could not be crypto-shredded.
|
|
111
|
+
*
|
|
112
|
+
* ⭐ Prefer this one. `blobResidueCollections` answers "some blobs in
|
|
113
|
+
* `invoices` did not shred"; a specific erasure request asks "which of THIS
|
|
114
|
+
* subject's records are affected", and only a record-grained answer can say.
|
|
115
|
+
*
|
|
116
|
+
* ⚠️ "Could not be shredded" does NOT mean the bytes are still in the live
|
|
117
|
+
* store — `forget()` deletes legacy chunks, it just cannot crypto-shred them.
|
|
118
|
+
* See {@link blobResidueETags} for what the exposure actually is.
|
|
119
|
+
*
|
|
120
|
+
* ⚠️ `blobResidueCollections` is kept, unchanged, because it is published —
|
|
121
|
+
* widening it in place would silently change what every existing reader sees,
|
|
122
|
+
* with no type error (`string[]` either way). Both are populated from the
|
|
123
|
+
* same sites; this is the finer of the two.
|
|
124
|
+
*
|
|
125
|
+
* Reported by pilot-1, who noticed that this result type carries residue at
|
|
126
|
+
* `collection:id` (`unmigratedRecords`) and `collection:id:field`
|
|
127
|
+
* (`indexResidue`, `sealedResidue`) elsewhere, so the coarse one read as a
|
|
128
|
+
* defect rather than a design choice. It was: the record id was in scope on
|
|
129
|
+
* the line that recorded only the collection.
|
|
130
|
+
*/
|
|
131
|
+
readonly blobResidueRecords: readonly string[];
|
|
132
|
+
/**
|
|
133
|
+
* #28 — the eTags of blob content this erasure could not CRYPTO-SHRED.
|
|
134
|
+
*
|
|
135
|
+
* ⛔ READ THE MEANING CAREFULLY; it is not what the name suggests on first
|
|
136
|
+
* reading, and the obvious reading is wrong in a way that matters.
|
|
137
|
+
*
|
|
138
|
+
* On a LEGACY blob (no per-blob `_cek`) `forget()` still DELETES the chunks
|
|
139
|
+
* and the index row — it passes `reclaimLegacy: true`. What it cannot do is
|
|
140
|
+
* make them cryptographically unreadable, because there is no per-blob key to
|
|
141
|
+
* destroy; the bytes were removed rather than shredded. So:
|
|
142
|
+
*
|
|
143
|
+
* - the live store IS clean — do not expect these chunks to still be there;
|
|
144
|
+
* - but any pre-existing BACKUP, replica or snapshot taken before the erasure
|
|
145
|
+
* remains decryptable under the retained collection DEK, and that is the
|
|
146
|
+
* exposure this field is telling you about.
|
|
147
|
+
*
|
|
148
|
+
* ⚠️ THIS CANNOT BE RECONCILED AGAINST `compact({ reclaimLegacyBlobs })`.
|
|
149
|
+
* That sweep reclaims refCount-0 legacy index rows that still EXIST; these no
|
|
150
|
+
* longer do. An intersection of the two sets is empty by construction and
|
|
151
|
+
* means nothing — measured, not assumed (2026-09-14). The reclaim path
|
|
152
|
+
* belongs to ordinary `collection.delete()`, which passes
|
|
153
|
+
* `reclaimLegacy: false` and genuinely defers.
|
|
154
|
+
*
|
|
155
|
+
* ⭐ What to DO with a non-empty value: treat the subject's data as erased
|
|
156
|
+
* from the live vault but potentially present in backups, and handle it under
|
|
157
|
+
* whatever backup-retention policy you operate. Migrating the collection to
|
|
158
|
+
* per-record keys before the erasure (`blob(id).migrate()`) is what makes a
|
|
159
|
+
* future erasure a true crypto-shred.
|
|
160
|
+
*
|
|
161
|
+
* ⛔ DO NOT PERSIST THESE. An eTag is a CONTENT HASH, so a stored erasure
|
|
162
|
+
* receipt listing them lets anyone holding a candidate file confirm the vault
|
|
163
|
+
* once held it — a residual disclosure created by the very artefact meant to
|
|
164
|
+
* prove the data is gone. `ledgerEntry` records residue COUNTS, never values,
|
|
165
|
+
* for exactly this reason.
|
|
166
|
+
*
|
|
167
|
+
* ⚠️ Narrower than {@link blobResidueRecords}: this is the eTag half only. A
|
|
168
|
+
* record whose SLOT ROW was undecodable appears there and not here, because
|
|
169
|
+
* there is no content identity to name. {@link erasureCompleteness} counts
|
|
170
|
+
* both.
|
|
171
|
+
*/
|
|
172
|
+
readonly blobResidueETags: readonly string[];
|
|
108
173
|
/**
|
|
109
174
|
* Count of persisted `_idx/<field>/<recordId>` index side-cars hard-deleted
|
|
110
175
|
* across the shredded records. These live under the retained
|
|
@@ -26,6 +26,8 @@ export interface GuardContext<T> {
|
|
|
26
26
|
vault: ReadOnlyVaultFacade;
|
|
27
27
|
userId: string;
|
|
28
28
|
role: Role;
|
|
29
|
+
/** core#74 — `'sync-apply'` when the record is arriving by sync and this check runs as its admission gate; core#108 — `'push-recheck'` when it is this device's OWN dirty record being re-judged against current local state before it is pushed; absent on a local write. */
|
|
30
|
+
origin?: 'local-write' | 'sync-apply' | 'push-recheck';
|
|
29
31
|
}
|
|
30
32
|
/**
|
|
31
33
|
* One {before, after} pair handed to an `invariant` function. `before`
|
|
@@ -521,15 +521,6 @@ export interface ReadOnlyCollection<T> {
|
|
|
521
521
|
export declare function loadPeriods(adapter: NoydbStore, vault: string, decrypt: (id: string, envelope: EncryptedEnvelope) => Promise<PeriodRecord>): Promise<PeriodRecord[]>;
|
|
522
522
|
/** sha256(canonicalJson(record)) over the STORED shape of a period record. @internal */
|
|
523
523
|
export declare function hashStoredPeriod(period: PeriodRecord): Promise<string>;
|
|
524
|
-
/**
|
|
525
|
-
* #1454 — every record's `priorPeriodName` / `priorPeriodHash` must resolve to
|
|
526
|
-
* a stored predecessor in ITS timeline whose hash matches. Followed by name,
|
|
527
|
-
* not by sort position: two closes within one millisecond sort arbitrarily,
|
|
528
|
-
* and a deleted predecessor must read as a break, not as a new root.
|
|
529
|
-
*
|
|
530
|
-
* @internal
|
|
531
|
-
*/
|
|
532
|
-
export declare function verifyPeriodChain(records: readonly PeriodRecord[]): Promise<void>;
|
|
533
524
|
/**
|
|
534
525
|
* Given the current ordered period list, pick the last entry that
|
|
535
526
|
* belongs to the hash chain — used as the `priorPeriodHash` anchor
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `PERIODS_RESERVED_COLLECTIONS` — PUBLISHED API, reachable from @noy-db/hub/periods. Flagged as unused because
|
|
3
|
+
* nothing inside hub imports it from this module; a consumer does. Do not narrow
|
|
4
|
+
* or delete without a seam change (#55).
|
|
5
|
+
*
|
|
6
|
+
* @public
|
|
7
|
+
*/
|
|
1
8
|
export declare const PERIODS_RESERVED_COLLECTIONS: ReadonlySet<string>;
|
|
2
9
|
/** True when `name` belongs to the periods family (#1454). */
|
|
3
10
|
export declare function isPeriodsReservedCollection(name: string): boolean;
|
|
@@ -22,7 +22,6 @@
|
|
|
22
22
|
import type { Vault } from '../../kernel/vault.js';
|
|
23
23
|
import { NoydbError } from '../../kernel/errors.js';
|
|
24
24
|
import { type WithdrawResult } from './withdraw-accessible.js';
|
|
25
|
-
export declare const WITHDRAWAL_REQUESTS_COLLECTION = "_user_withdrawal_requests";
|
|
26
25
|
/** Raised when a request is missing, already decided, or expired. */
|
|
27
26
|
export declare class WithdrawalRequestError extends NoydbError {
|
|
28
27
|
constructor(message: string);
|
|
@@ -17,7 +17,6 @@
|
|
|
17
17
|
* (`request-withdrawal.ts`).
|
|
18
18
|
*/
|
|
19
19
|
import type { Vault } from '../../kernel/vault.js';
|
|
20
|
-
export declare const FROZEN_SNAPSHOTS_COLLECTION = "_frozen_snapshots";
|
|
21
20
|
/** 24-hex-char random id (used for withdrawal ids + request ids). */
|
|
22
21
|
export declare function randomId(): string;
|
|
23
22
|
export interface FrozenSnapshotRef {
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* Internal service — not exported as a `@noy-db/hub/*` subpath.
|
|
22
22
|
*/
|
|
23
23
|
export { withTiers } from './active.js';
|
|
24
|
-
export { NO_TIERS, type TiersStrategy } from './strategy.js';
|
|
24
|
+
export { NO_TIERS, type TiersStrategy, type DelegationReadContext } from './strategy.js';
|
|
25
25
|
export { TiersNotEnabledError } from '../../kernel/errors.js';
|
|
26
26
|
import { type RecordIdentity, type RecordCodec, type EnclaveKey, type SealedShredSlot } from '../../capsule/index.js';
|
|
27
27
|
import type { UnlockedKeyring } from '../../with-party/team/keyring.js';
|
|
@@ -335,16 +335,16 @@ export declare function assertTierComposition(collectionName: string, cfg: {
|
|
|
335
335
|
* structurally — no cast needed at the `tiersContext()` call site).
|
|
336
336
|
*/
|
|
337
337
|
export interface DerivedOutputsHost<T> {
|
|
338
|
-
|
|
338
|
+
_dispatchMaterializedViewsOnDelete(id: string): Promise<{
|
|
339
339
|
deleted: number;
|
|
340
340
|
residueUndecodable: string[];
|
|
341
341
|
residueDeclined: string[];
|
|
342
342
|
}>;
|
|
343
|
-
|
|
344
|
-
|
|
343
|
+
_dispatchArrayDerivationsOnDelete(id: string, eraseRecordShapeToo?: boolean): Promise<number>;
|
|
344
|
+
_dispatchRollupsOnDelete(id: string, deleted: T): Promise<unknown>;
|
|
345
345
|
/** Task 2 (#722) add-direction: the same local-write dispatchers an ordinary `put()` fires. */
|
|
346
|
-
|
|
347
|
-
|
|
346
|
+
_dispatchMaterializedViews(id: string, record: T): Promise<void>;
|
|
347
|
+
_dispatchDerivations(id: string, record: T, version: number): Promise<void>;
|
|
348
348
|
}
|
|
349
349
|
/**
|
|
350
350
|
* The {@link TiersContext.syncDerived} implementation collection.ts's
|
|
@@ -9,6 +9,9 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import type { GhostRecord } from '../../kernel/types.js';
|
|
11
11
|
import type { TiersContext, TierMoveResult } from './index.js';
|
|
12
|
+
import type { DelegationToken } from '../../with-party/team/delegation.js';
|
|
13
|
+
import type { UnlockedKeyring } from '../../with-party/team/keyring.js';
|
|
14
|
+
import type { NoydbStore } from '../../kernel/types.js';
|
|
12
15
|
export type { TierMoveResult };
|
|
13
16
|
export interface TiersStrategy {
|
|
14
17
|
putAtTier<T>(ctx: TiersContext<T>, id: string, record: T, tier: number, opts?: {
|
|
@@ -35,6 +38,22 @@ export interface TiersStrategy {
|
|
|
35
38
|
* A tier the writer cannot read is outside the guarantee.
|
|
36
39
|
*/
|
|
37
40
|
checkUnique<T>(ctx: TiersContext<T>, id: string, record: T): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* core#56 — the delegation READ half. VAULT-scoped, not collection-scoped,
|
|
43
|
+
* so it takes its own narrow context rather than a `TiersContext`.
|
|
44
|
+
*
|
|
45
|
+
* It lives on this strategy rather than in the kernel because delegation IS a
|
|
46
|
+
* tier feature (the tokens carry tier DEKs and the gate they satisfy is
|
|
47
|
+
* `assertTierAccess`), and because a consumer who never opts into tiers has no
|
|
48
|
+
* delegations to read — so this should tree-shake away for them.
|
|
49
|
+
*/
|
|
50
|
+
refreshDelegations(ctx: DelegationReadContext, now?: Date): Promise<DelegationToken[]>;
|
|
51
|
+
}
|
|
52
|
+
/** The vault-scoped slice the delegation read half needs (core#56). */
|
|
53
|
+
export interface DelegationReadContext {
|
|
54
|
+
readonly vault: string;
|
|
55
|
+
readonly adapter: NoydbStore;
|
|
56
|
+
readonly keyring: UnlockedKeyring;
|
|
38
57
|
}
|
|
39
58
|
/**
|
|
40
59
|
* No-op stub — the floor default. Every capability method throws
|
|
@@ -50,52 +50,6 @@ export interface ReKeyLedgerResult {
|
|
|
50
50
|
* `_ledger_deltas`/`_history` are deferred to slice 2.
|
|
51
51
|
*/
|
|
52
52
|
export declare function reKeyLedger(vault: Vault, closure: Map<string, Set<string>>, reKeyedCollections: Record<string, Record<string, EncryptedEnvelope>>, ledgerDek: EnclaveKey): Promise<ReKeyLedgerResult>;
|
|
53
|
-
/** Carried blob internals + the fresh transfer `_blob` DEK (present only when
|
|
54
|
-
* the closure references at least one chunk-based blob). */
|
|
55
|
-
export interface ReKeyBlobsResult {
|
|
56
|
-
/** `_blob_slots_<C>` / `_blob_versions_<C>` / `_blob_index` / `_blob_chunks`
|
|
57
|
-
* envelopes for the bundle's `_internal` map. */
|
|
58
|
-
readonly internal: Record<string, Record<string, EncryptedEnvelope>>;
|
|
59
|
-
/** Fresh transfer `_blob` DEK — seal it so owner-creation wraps it under the
|
|
60
|
-
* recipient KEK. Undefined when no blob travels (source keyring untouched). */
|
|
61
|
-
readonly blobDek?: EnclaveKey;
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Carry the FK-closed slice's blobs — HARDENED key handling (no master-key leak).
|
|
65
|
-
*
|
|
66
|
-
* The source vault's shared `_blob` DEK decrypts (or unwraps the content CEK of)
|
|
67
|
-
* EVERY blob in the source. Sealing it into the transfer would hand the recipient
|
|
68
|
-
* a key to blobs far outside their slice. Instead we mint a **fresh transfer
|
|
69
|
-
* `_blob` DEK** and arrange every carried blob into per-blob-CEK mode under it:
|
|
70
|
-
*
|
|
71
|
-
* - **erasable blob** (`_cek` present): unwrap the per-blob content CEK under the
|
|
72
|
-
* SOURCE `_blob` DEK, re-wrap it under the FRESH transfer DEK. Chunks travel
|
|
73
|
-
* **verbatim** (still ciphertext under that same content CEK — passthrough).
|
|
74
|
-
* - **legacy blob** (no `_cek`, chunks under the shared `_blob` DEK): promote it
|
|
75
|
-
* IN-BUNDLE — mint a fresh content CEK, decrypt each chunk under the source
|
|
76
|
-
* `_blob` DEK and re-encrypt under the content CEK (same AAD, so the eTag-bound
|
|
77
|
-
* integrity holds), then wrap the content CEK under the transfer DEK. The
|
|
78
|
-
* SOURCE is never mutated (non-destructive), and the bundle never holds
|
|
79
|
-
* plaintext blob bytes (zero-knowledge preserved).
|
|
80
|
-
*
|
|
81
|
-
* **eTag identity is preserved** (not re-HMAC'd). eTags are HMAC-keyed off the
|
|
82
|
-
* `_blob` DEK, but they are stored as OPAQUE keys (`_blob_index/<eTag>`,
|
|
83
|
-
* `_blob_chunks/<eTag>_<i>`) and never recomputed on read — only on a `put()`
|
|
84
|
-
* for dedup. Keeping them verbatim keeps every slot/version/index/chunk key and
|
|
85
|
-
* the chunk AAD coherent with zero chunk-key churn. The only consequence: a
|
|
86
|
-
* future `put()` of identical bytes in the adopted vault computes a different
|
|
87
|
-
* eTag (HMAC under the fresh DEK) and will NOT dedup against the carried blob —
|
|
88
|
-
* an accepted, documented trade for hardened key isolation.
|
|
89
|
-
*
|
|
90
|
-
* Slots/versions are re-keyed under their parent collection's destination DEK
|
|
91
|
-
* (honoring `fieldProjection` — projected-out blob fields' slots never travel);
|
|
92
|
-
* `BlobObject.refCount` is recomputed from carried references only.
|
|
93
|
-
*
|
|
94
|
-
* `external` slots reference an unencrypted shared-bucket object that is not in
|
|
95
|
-
* the bundle — their slot metadata travels (so the catalog entry survives) but
|
|
96
|
-
* the bytes do not (a documented v1 limitation; their eTag is `''`).
|
|
97
|
-
*/
|
|
98
|
-
export declare function reKeyBlobs(vault: Vault, closure: Map<string, Set<string>>, destDeks: Map<string, EnclaveKey>, fieldProjection?: Record<string, readonly string[]>): Promise<ReKeyBlobsResult>;
|
|
99
53
|
/** A minted transfer key (raw 32 bytes) + the seal carrying the DEK set. */
|
|
100
54
|
export interface SealResult {
|
|
101
55
|
readonly seal: TransferSealPayload;
|
|
@@ -26,6 +26,22 @@ import { type EnclaveKey } from '../../capsule/index.js';
|
|
|
26
26
|
* both at once, by construction.
|
|
27
27
|
*/
|
|
28
28
|
export declare function historyIdentity(collection: string, recordId: string, version: number): RecordIdentity;
|
|
29
|
+
/**
|
|
30
|
+
* core#76 — the inverse of `historyId`. Used by `restoreTo(T)` to discover
|
|
31
|
+
* collections that exist in history but not in the live store, which is
|
|
32
|
+
* exactly the case a point-in-time restore has to cover: a collection dropped
|
|
33
|
+
* since T would otherwise be invisible to a restore meant to bring T back.
|
|
34
|
+
*
|
|
35
|
+
* ⚠️ A collection name containing `:` would parse wrong here. That is not
|
|
36
|
+
* reachable today — `vault.collection()` rejects those names — and this
|
|
37
|
+
* function is deliberately not hardened against it, because the guard belongs
|
|
38
|
+
* at the naming boundary, not in every parser downstream of it.
|
|
39
|
+
*/
|
|
40
|
+
export declare function parseHistoryId(id: string): {
|
|
41
|
+
collection: string;
|
|
42
|
+
recordId: string;
|
|
43
|
+
version: number;
|
|
44
|
+
} | null;
|
|
29
45
|
/** Save a history entry (a complete encrypted envelope snapshot). */
|
|
30
46
|
export declare function saveHistory(adapter: NoydbStore, vault: string, collection: string, recordId: string, envelope: EncryptedEnvelope): Promise<void>;
|
|
31
47
|
/** Get history entries for a record, sorted newest-first. */
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* core#76 — point-in-time RESTORE, as forward writes.
|
|
3
|
+
*
|
|
4
|
+
* `vault.at(T)` reconstructs any record at T and is read-only by contract.
|
|
5
|
+
* `restoreTo(T)` takes that reconstruction and WRITES it: for every record
|
|
6
|
+
* whose state at T differs from its state now, put the T-state as a new
|
|
7
|
+
* version; for every record that exists now and did not exist at T, delete it.
|
|
8
|
+
*
|
|
9
|
+
* ## Why forward writes, and not a rewrite of history
|
|
10
|
+
*
|
|
11
|
+
* Every write goes through `Collection.put` / `.delete`, so guards, periods,
|
|
12
|
+
* history and the ledger all see it. The restore is therefore itself an
|
|
13
|
+
* audited, reversible event — `restoreTo(T)` can be undone by another
|
|
14
|
+
* `restoreTo`, the ledger's tamper-evidence is untouched, and the result
|
|
15
|
+
* replicates through ordinary sync because it IS ordinary versioned writes.
|
|
16
|
+
* ⭐ That is the whole argument for this over a pod: a pod restore is state
|
|
17
|
+
* REPLACEMENT and needs core#71/#72 to be safe under sync; this needs nothing,
|
|
18
|
+
* because the stack already knows how to gate, audit and replicate a write.
|
|
19
|
+
*
|
|
20
|
+
* ## What bounds it
|
|
21
|
+
*
|
|
22
|
+
* ⚠️ Accuracy is bounded by history retention. If `historyConfig.maxVersions`
|
|
23
|
+
* pruned the versions around T, the reconstruction at T is incomplete and so
|
|
24
|
+
* is the restore — `at(T)` returns null for a record whose earliest retained
|
|
25
|
+
* snapshot is after T, and this treats that as "did not exist at T". A vault
|
|
26
|
+
* that prunes history cannot honestly point-in-time restore past the prune
|
|
27
|
+
* horizon, and a pod is the answer there (core#77).
|
|
28
|
+
*
|
|
29
|
+
* ⛔ BLOBS ARE NOT RESTORED AND ARE NOT REPORTED. `_history` holds record
|
|
30
|
+
* envelopes, not chunks; a record's blob fields at T reference chunks that may
|
|
31
|
+
* since have been compacted away. The record comes back with its handles
|
|
32
|
+
* intact and the chunks may or may not still be there. Detecting that
|
|
33
|
+
* reliably means resolving every handle against `_blob_chunks`, which is a
|
|
34
|
+
* blob-subsystem concern this module deliberately does not reach into — a
|
|
35
|
+
* `blobsUnrecoverable: []` that is empty because nothing looked would be worse
|
|
36
|
+
* than the silence, because it would read as a guarantee.
|
|
37
|
+
*/
|
|
38
|
+
import type { RestoreToOptions, RestoreToResult } from '../../kernel/types.js';
|
|
39
|
+
import type { RestoreToHost } from '../../port/with/restore-host.js';
|
|
40
|
+
export declare function restoreTo(host: RestoreToHost, timestamp: string, options?: RestoreToOptions): Promise<RestoreToResult>;
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import type { NoydbStore } from '../../kernel/types.js';
|
|
2
2
|
import { type EnclaveKey } from '../../capsule/index.js';
|
|
3
3
|
import type { DeferredNumberingConfig } from './descriptor.js';
|
|
4
|
-
export declare const NUMBERING_HEAD_COLLECTION = "_numbering_head";
|
|
5
|
-
export declare const NUMBERING_PENDING_COLLECTION = "_numbering_pending";
|
|
6
4
|
export interface Assignment {
|
|
7
5
|
recordId: string;
|
|
8
6
|
serial: number;
|
|
@@ -57,8 +57,8 @@
|
|
|
57
57
|
* **Crash window.** On the OCC fallback, steps 2–3 are not a
|
|
58
58
|
* storage-layer transaction — if the process dies between two executed
|
|
59
59
|
* ops, the on-disk state is partial. The atomic path above closes that
|
|
60
|
-
* window for the write set itself (`
|
|
61
|
-
* `noy-db-to` implement `tx()`); a crash between the batch landing and
|
|
60
|
+
* window for the write set itself (`memoryStore({ full: true })` and the SQL
|
|
61
|
+
* stores in `noy-db-to` implement `tx()`); a crash between the batch landing and
|
|
62
62
|
* the finalize loop finishing still leaves per-op side effects (history,
|
|
63
63
|
* ledger, cache) incomplete. Stores that cannot commit a batch
|
|
64
64
|
* atomically (file, S3) omit `tx()` and keep the fallback.
|
|
@@ -209,27 +209,5 @@ export declare class TxCollection<T> {
|
|
|
209
209
|
* revert alongside the bulk-put source ops.
|
|
210
210
|
*/
|
|
211
211
|
export declare function runTransaction<T>(db: Noydb, fn: (tx: TxContext) => Promise<T> | T, options?: AmendmentTxOptions, txInvariants?: ReadonlyArray<TransactionInvariant>): Promise<T>;
|
|
212
|
-
/**
|
|
213
|
-
* Phase 3 helper — restore captured prior envelopes via the raw store
|
|
214
|
-
* to avoid re-firing Collection-level side effects (we don't want a
|
|
215
|
-
* cascade of change events undoing themselves). The ledger is left
|
|
216
|
-
* as-is: each committed op appended an entry; the revert is
|
|
217
|
-
* deliberately NOT recorded as a compensating entry because the
|
|
218
|
-
* caller-facing contract is "atomic or not at all," not "every write
|
|
219
|
-
* visible in the audit trail." Auditors who need the intermediate
|
|
220
|
-
* state can still reconstruct it by walking the ledger through the
|
|
221
|
-
* failed-tx timestamp.
|
|
222
|
-
*
|
|
223
|
-
* Delegates the reverse/best-effort/raw-revert shape to the shared
|
|
224
|
-
* `bestEffortRevert` helper (`kernel/best-effort-revert.ts`); the cache
|
|
225
|
-
* invalidation below rides along as that helper's per-leg `compensate`
|
|
226
|
-
* callback, gated on `db` exactly as before.
|
|
227
|
-
*
|
|
228
|
-
* @internal — shared between `runTransaction` and
|
|
229
|
-
* `Collection.putManyAtomic`. Both register source ops + nested
|
|
230
|
-
* derivation side-effect ops onto `_executed`; this helper unwinds the
|
|
231
|
-
* combined list in reverse on rollback.
|
|
232
|
-
*/
|
|
233
|
-
export declare function revertExecuted(executed: ReadonlyArray<ExecutedOp>, store: Noydb['_store'], db?: Noydb): Promise<void>;
|
|
234
212
|
/** @internal — shared (vault, collection, id) key shape; also used by `atomic-eligibility.ts`'s duplicate-key scan. */
|
|
235
213
|
export declare function keyOf(op: StagedOp): string;
|
|
@@ -124,4 +124,11 @@ export interface VaultHeadStrategy {
|
|
|
124
124
|
* would look exactly like a clean sweep.
|
|
125
125
|
*/
|
|
126
126
|
export declare const NO_VAULT_HEAD: VaultHeadStrategy;
|
|
127
|
+
/**
|
|
128
|
+
* `EncryptedEnvelope` — PUBLISHED API, reachable from @noy-db/hub, @noy-db/hub/debug, @noy-db/hub/tiers, @noy-db/hub/to, @noy-db/hub/vault-head. Flagged as unused because
|
|
129
|
+
* nothing inside hub imports it from this module; a consumer does. Do not narrow
|
|
130
|
+
* or delete without a seam change (#55).
|
|
131
|
+
*
|
|
132
|
+
* @public
|
|
133
|
+
*/
|
|
127
134
|
export type { EncryptedEnvelope };
|
|
@@ -61,4 +61,11 @@ export declare class NoydbSnapshots {
|
|
|
61
61
|
/** Stop the cadence scheduler (called from `Noydb.close()`). */
|
|
62
62
|
stop(): void;
|
|
63
63
|
}
|
|
64
|
+
/**
|
|
65
|
+
* `NO_SNAPSHOTS` — PUBLISHED API, reachable from @noy-db/hub/snapshots. Flagged as unused because
|
|
66
|
+
* nothing inside hub imports it from this module; a consumer does. Do not narrow
|
|
67
|
+
* or delete without a seam change (#55).
|
|
68
|
+
*
|
|
69
|
+
* @public
|
|
70
|
+
*/
|
|
64
71
|
export { NO_SNAPSHOTS };
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* @module
|
|
15
15
|
*/
|
|
16
16
|
/** One declared hop through an intermediate collection (#1277). */
|
|
17
|
-
|
|
17
|
+
interface MatchVia {
|
|
18
18
|
/** The intermediate collection to resolve through. */
|
|
19
19
|
readonly collection: string;
|
|
20
20
|
/** Field on the intermediate whose value equals `written[from]`. */
|
|
@@ -27,8 +27,6 @@ export interface MatchPair {
|
|
|
27
27
|
readonly to: string;
|
|
28
28
|
readonly via?: MatchVia;
|
|
29
29
|
}
|
|
30
|
-
/** True when any pair in this trigger resolves through an intermediate. */
|
|
31
|
-
export declare function hasHop(match: ReadonlyArray<MatchPair>): boolean;
|
|
32
30
|
/** Every intermediate collection named by a trigger's pairs, deduplicated. */
|
|
33
31
|
export declare function hopCollections(match: ReadonlyArray<MatchPair>): string[];
|
|
34
32
|
export interface NormalizedTrigger {
|
|
@@ -100,5 +98,10 @@ export declare function sameTuple(a: Array<{
|
|
|
100
98
|
}> | null): boolean;
|
|
101
99
|
/** Moved to the kernel (#1249) so `collection.ts` can import statically without
|
|
102
100
|
* dragging derivations code into the floor bundle; re-exported here for
|
|
103
|
-
* compatibility with existing consumers of this module.
|
|
104
|
-
|
|
101
|
+
* compatibility with existing consumers of this module.
|
|
102
|
+
*
|
|
103
|
+
* ⚠️ `findMatchingIdsByPairs` was re-exported here too and NOTHING took it
|
|
104
|
+
* from this module (#55) — consumers import it from the kernel directly.
|
|
105
|
+
* Dropped rather than kept as a compatibility shim for a consumer that does
|
|
106
|
+
* not exist; the kernel module remains its home. */
|
|
107
|
+
export { recordMatchesPairs } from '../../kernel/match-pairs.js';
|
|
@@ -17,8 +17,6 @@ export declare function emitMemoKey(vault: string, mvName: string, outputCollect
|
|
|
17
17
|
export declare function readEmitMemo(key: string, stamp: number | null): ReadonlyMap<string, string> | null;
|
|
18
18
|
/** Record what this refresh actually left on disk. A `null` stamp records nothing. */
|
|
19
19
|
export declare function writeEmitMemo(key: string, stamp: number | null, rows: Map<string, string>): void;
|
|
20
|
-
/** Forget one MV's output entirely. Used when a refresh could not complete cleanly. */
|
|
21
|
-
export declare function dropEmitMemo(key: string): void;
|
|
22
20
|
/**
|
|
23
21
|
* A canonical string for the row a refresh is about to write, or `null` when no
|
|
24
22
|
* safe one exists.
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
export { cosine } from './cosine.js';
|
|
2
1
|
export { embeddingSourceText, type EmbeddingDescriptor } from './descriptor.js';
|
|
3
|
-
export { VectorSet, type StoredVector
|
|
2
|
+
export { VectorSet, type StoredVector } from './vector-set.js';
|
|
4
3
|
export { withVectorIndex, DEFAULT_INDEX_MIN_VECTORS, type VectorIndexOptions } from './with-vector-index.js';
|
|
5
4
|
export type { VectorIndex, VectorIndexConfig, VectorIndexSearchOptions } from './vector-index.js';
|
|
6
5
|
export { encodeVecId } from './vec-id.js';
|
|
@@ -26,7 +26,7 @@ import type { NoydbEventEmitter } from '../../kernel/events.js';
|
|
|
26
26
|
import { type CollectionIndexes, type IndexDef } from './eager-indexes.js';
|
|
27
27
|
import type { UniqueConstraintSet } from './unique-constraints.js';
|
|
28
28
|
import { type PersistedCollectionIndex } from './persisted-indexes.js';
|
|
29
|
-
import { PersistedFieldIndexes
|
|
29
|
+
import { PersistedFieldIndexes } from './persisted-field-indexes.js';
|
|
30
30
|
export type { PersistedFieldIndexes } from './persisted-field-indexes.js';
|
|
31
31
|
/** Everything the moving index-maintenance methods touched on `this.*`. */
|
|
32
32
|
export interface IndexingContext<T> {
|
|
@@ -68,20 +68,6 @@ export interface IndexingContext<T> {
|
|
|
68
68
|
* `indexes.upsert()`/`.remove()` directly, so this only fires for full reloads.
|
|
69
69
|
*/
|
|
70
70
|
export declare function rebuildEagerIndexesFromCache<T>(ctx: IndexingContext<T>, skip?: ReadonlySet<string>): void;
|
|
71
|
-
/**
|
|
72
|
-
* Bridge the crypto-free {@link PersistedFieldIndexes} to this collection's
|
|
73
|
-
* codec + adapter — the exact division `buildPersistedIndexCallbacks` uses for
|
|
74
|
-
* the search index: crypto lives here, the store does not know it exists.
|
|
75
|
-
*
|
|
76
|
-
* One record per `(collection, index)`, at `_fieldidx / <collection>/<key>`.
|
|
77
|
-
* The freshness stamp rides INSIDE the encrypted body (`{fp, idx}`) rather
|
|
78
|
-
* than on the envelope, so the `EncryptedEnvelope` shape is never extended and
|
|
79
|
-
* the stamp is not readable at rest.
|
|
80
|
-
*
|
|
81
|
-
* Takes a context THUNK for the same reason the search bridge does: it is
|
|
82
|
-
* built from the `Collection` constructor, before `this.codec` is assigned.
|
|
83
|
-
*/
|
|
84
|
-
export declare function buildFieldIndexCallbacks<T>(provideCtx: () => IndexingContext<T>, debounceMs?: number): FieldIndexCallbacks;
|
|
85
71
|
/**
|
|
86
72
|
* Build this collection's sidecar coordinator, or `null` when no index asked
|
|
87
73
|
* to be persisted — so every other collection pays nothing. Kept here rather
|
|
@@ -81,7 +81,7 @@ export type IndexDef = string | {
|
|
|
81
81
|
* `orderBy(field).limit(n)`. A `'sorted'` declaration keeps the hash
|
|
82
82
|
* index too — `==`/`in` stay O(1).
|
|
83
83
|
*/
|
|
84
|
-
|
|
84
|
+
type IndexKind = 'hash' | 'sorted';
|
|
85
85
|
/**
|
|
86
86
|
* Normalize a declared `IndexDef[]` into a uniform `{ fields, unique? }`
|
|
87
87
|
* shape: `string` → `{fields:[s]}`, `string[]` → `{fields}`, object →
|
|
@@ -299,3 +299,4 @@ export declare class CollectionIndexes {
|
|
|
299
299
|
*/
|
|
300
300
|
bucketRepresentatives(field: string): readonly string[] | null;
|
|
301
301
|
}
|
|
302
|
+
export {};
|
|
@@ -31,7 +31,6 @@ import { type VectorSet, type EmbeddingDescriptor } from '../embeddings/index.js
|
|
|
31
31
|
import { type SearchOptions, type SearchResult } from './index.js';
|
|
32
32
|
import type { IndexStore } from './index-store.js';
|
|
33
33
|
import type { PersistedIndexCallbacks } from './persisted-index-store.js';
|
|
34
|
-
import type { IndexDoc, IndexBuildOptions } from './inverted-index.js';
|
|
35
34
|
import type { RetrieveOptions, RetrieveHit, SimilarToOptions } from './retrieve-types.js';
|
|
36
35
|
/** Everything the moving search/retrieval methods touched on `this.*`. */
|
|
37
36
|
export interface SearchContext<T> {
|
|
@@ -78,17 +77,6 @@ export interface SearchContext<T> {
|
|
|
78
77
|
* nothing searchable is written to the store.
|
|
79
78
|
*/
|
|
80
79
|
export declare function search<T>(ctx: SearchContext<T>, field: string, query: string, opts?: SearchOptions): Promise<SearchResult<T>[]>;
|
|
81
|
-
/** L1 — build IndexDoc[] for the configured text fields over the live cache. */
|
|
82
|
-
export declare function buildRetrievalDocs<T>(ctx: SearchContext<T>, labelMaps: Map<string, Map<string, Record<string, string>>>, blobFilenames: Map<string, Map<string, string[]>>, only?: readonly string[]): IndexDoc[];
|
|
83
|
-
/**
|
|
84
|
-
* L1 — the positional-postings opt-in for this collection (#1354), or
|
|
85
|
-
* `undefined` when nothing opted in. Returning `undefined` rather than
|
|
86
|
-
* `{ positions: [] }` keeps the no-opt-in path byte-identical to a caller that
|
|
87
|
-
* never heard of positions.
|
|
88
|
-
*/
|
|
89
|
-
export declare function positionBuildOptions<T>(ctx: SearchContext<T>): IndexBuildOptions | undefined;
|
|
90
|
-
/** L1 — true iff any configured text index is also a blob field (gates ALL slot I/O). */
|
|
91
|
-
export declare function hasIndexedBlobFields<T>(ctx: SearchContext<T>, only?: readonly string[]): boolean;
|
|
92
80
|
/** L1.5 — force-persist the lexical index now (e.g. on save/idle). Persists only when textIndexPersist is enabled; a no-op otherwise. */
|
|
93
81
|
export declare function flushIndex<T>(ctx: SearchContext<T>): Promise<void>;
|
|
94
82
|
/**
|
|
@@ -15,7 +15,7 @@ export { withBroker } from './active.js';
|
|
|
15
15
|
export { NO_BROKER, type BrokerStrategy, type BrokerCtx, type BrokerConfig, type CredentialBrokerHandle, } from '../../port/with/broker-strategy.js';
|
|
16
16
|
export { BrokerNotEnabledError, BrokerEnrolmentError, BrokerProofError } from '../../kernel/errors.js';
|
|
17
17
|
import { verifyBrokerProof } from '../../capsule/index.js';
|
|
18
|
-
import type { IssuedChallenge, VerifyBrokerProofArgs } from '../../capsule/index.js';
|
|
18
|
+
import type { IssuedChallenge, VerifyBrokerProofArgs, BrokerMemberIdentity } from '../../capsule/index.js';
|
|
19
19
|
/**
|
|
20
20
|
* {@link issueChallengeRaw} (the enclave's mechanical primitive) with a
|
|
21
21
|
* `[10s, 60s]` TTL clamp applied, so a reference host built on this barrel
|
|
@@ -25,5 +25,5 @@ export declare function issueChallenge(opts?: {
|
|
|
25
25
|
ttlMs?: number;
|
|
26
26
|
}): IssuedChallenge;
|
|
27
27
|
export { verifyBrokerProof };
|
|
28
|
-
export type { VerifyBrokerProofArgs };
|
|
28
|
+
export type { VerifyBrokerProofArgs, BrokerMemberIdentity };
|
|
29
29
|
export type { IssuedChallenge } from '../../capsule/index.js';
|
|
@@ -36,17 +36,8 @@
|
|
|
36
36
|
* @module
|
|
37
37
|
*/
|
|
38
38
|
import type { StoreCredentials } from '../../kernel/types.js';
|
|
39
|
+
import type { EnclaveKey } from '../../capsule/index.js';
|
|
39
40
|
import type { BrokerSeedCtx } from '../../port/with/broker-strategy.js';
|
|
40
|
-
/** The `_broker/<brokerId>` record payload (spec §3). */
|
|
41
|
-
export interface BrokerSeedRecord {
|
|
42
|
-
readonly brokerId: string;
|
|
43
|
-
/** base64(32 random bytes). */
|
|
44
|
-
readonly seed: string;
|
|
45
|
-
readonly endpoint: string;
|
|
46
|
-
readonly createdAt: string;
|
|
47
|
-
/** `true` only once `/enroll` has returned a 2xx for this seed (I9). */
|
|
48
|
-
readonly registered: boolean;
|
|
49
|
-
}
|
|
50
41
|
/**
|
|
51
42
|
* Enrol (idempotent, two-phase commit — I9): create-if-absent the `_broker`
|
|
52
43
|
* seed (I4), derive+register its proof key with the broker host, and only
|
|
@@ -65,6 +56,34 @@ export declare function enrollSeed(ctx: BrokerSeedCtx): Promise<void>;
|
|
|
65
56
|
* cache lives in that closure, not here.
|
|
66
57
|
*/
|
|
67
58
|
export declare function rotateSeed(ctx: BrokerSeedCtx): Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* core#73 — enrol a freshly granted MEMBER with the host under its own key.
|
|
61
|
+
* Called by the kernel right after `grant()`, while the grantor still holds
|
|
62
|
+
* the grantee's secret: that secret opens the grantee's keyring, whose
|
|
63
|
+
* `_broker_member` DEK (minted by `grant()` for this grantee alone) is the
|
|
64
|
+
* only key that can seal the member record. Register-first, then persist,
|
|
65
|
+
* so a record on disk always means a registered member (the same order as
|
|
66
|
+
* `rotateSeed`). Owner/admin grantees use the shared seed and are skipped.
|
|
67
|
+
*
|
|
68
|
+
* A re-grant (role change) lands here again with a NEW DEK and mints a NEW
|
|
69
|
+
* seed, so the host's record for this userId is REPLACED — key and role — and
|
|
70
|
+
* a device still holding the previous enrolment is refused from then on.
|
|
71
|
+
*/
|
|
72
|
+
export declare function enrolMemberSeed(ctx: BrokerSeedCtx, member: {
|
|
73
|
+
readonly userId: string;
|
|
74
|
+
readonly secret: string;
|
|
75
|
+
} | {
|
|
76
|
+
readonly userId: string;
|
|
77
|
+
readonly dek: EnclaveKey;
|
|
78
|
+
}): Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* core#73 — de-register a member with the host and drop its record. Called
|
|
81
|
+
* by the kernel right after `revoke()`; the local record goes first (cheap,
|
|
82
|
+
* always succeeds), then the host — a host failure surfaces as
|
|
83
|
+
* {@link BrokerEnrolmentError} AFTER the keyring revocation has completed,
|
|
84
|
+
* so the caller retries the host half, never the revocation.
|
|
85
|
+
*/
|
|
86
|
+
export declare function revokeMemberSeed(ctx: BrokerSeedCtx, userId: string): Promise<void>;
|
|
68
87
|
/**
|
|
69
88
|
* The challenge/response round trip: `POST /challenge`, derive+sign the
|
|
70
89
|
* proof from the decrypted seed, `POST /credentials`. One network round
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
*/
|
|
21
21
|
import type { GrantOptions, RevokeOptions, FactorProofBundle, NoydbStore } from '../../kernel/types.js';
|
|
22
22
|
import type { Vault } from '../../kernel/vault.js';
|
|
23
|
-
import type { UnlockedKeyring } from '../team/keyring.js';
|
|
23
|
+
import type { UnlockedKeyring, RevokeResult } from '../team/keyring.js';
|
|
24
24
|
import type { GrantCustodianOptions } from './index.js';
|
|
25
25
|
import type { LiberateOptions, LiberateResult } from './liberate.js';
|
|
26
26
|
/**
|
|
@@ -33,7 +33,7 @@ import type { LiberateOptions, LiberateResult } from './liberate.js';
|
|
|
33
33
|
*/
|
|
34
34
|
export interface CustodyHost {
|
|
35
35
|
_grantCustodianImpl(engine: (adapter: NoydbStore, vault: string, callerKeyring: UnlockedKeyring, options: GrantOptions) => Promise<void>, vault: string, options: GrantCustodianOptions, factors?: FactorProofBundle): Promise<void>;
|
|
36
|
-
_revokeCustodianImpl(engine: (adapter: NoydbStore, vault: string, callerKeyring: UnlockedKeyring, options: RevokeOptions) => Promise<
|
|
36
|
+
_revokeCustodianImpl(engine: (adapter: NoydbStore, vault: string, callerKeyring: UnlockedKeyring, options: RevokeOptions) => Promise<RevokeResult>, vault: string, options: RevokeOptions, factors?: FactorProofBundle): Promise<void>;
|
|
37
37
|
}
|
|
38
38
|
export interface CustodyStrategy {
|
|
39
39
|
grantCustodian(host: CustodyHost, vault: string, options: GrantCustodianOptions, factors?: FactorProofBundle): Promise<void>;
|