@noy-db/hub 0.4.0-pre.0 → 0.4.0-pre.2
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/dist/aggregate/index.js +4 -4
- package/dist/api-UPAT2O3M.js +20 -0
- package/dist/as/index.js +12 -12
- package/dist/attestation/index.js +18 -18
- package/dist/{backup-YPUEKIJC.js → backup-JL2GOTYQ.js} +11 -11
- package/dist/blobs/index.js +27 -15
- package/dist/blobs/index.js.map +1 -1
- package/dist/broker/index.js +12 -12
- package/dist/by/index.js +2 -2
- package/dist/cargo/index.js +51 -22
- package/dist/{chunk-QDPZWTN2.js → chunk-25G7U6RD.js} +2 -2
- package/dist/{chunk-WKGF2TJR.js → chunk-25ZDB25Z.js} +2 -2
- package/dist/{chunk-5WZXVULX.js → chunk-2ITLQZV5.js} +2 -2
- package/dist/{chunk-WNGGJWF7.js → chunk-2JZ763FV.js} +2 -2
- package/dist/{chunk-U6JMEH2P.js → chunk-2KL6NDD4.js} +90 -3
- package/dist/chunk-2KL6NDD4.js.map +1 -0
- package/dist/{chunk-RJ6K6K5M.js → chunk-2RMDVWGB.js} +2 -2
- package/dist/{chunk-VAIS3SOM.js → chunk-2U7Y7BNJ.js} +2 -2
- package/dist/{chunk-WZSHL6DQ.js → chunk-2VUISNGP.js} +5 -5
- package/dist/chunk-2YELV6TV.js +1 -0
- package/dist/{chunk-ANATMTOA.js → chunk-3O62PVDW.js} +3 -3
- package/dist/{chunk-VKCADNMR.js → chunk-4JYYIFHW.js} +12 -12
- package/dist/{chunk-6HY2X62D.js → chunk-5BB3N4KU.js} +2 -2
- package/dist/{chunk-VCTXU4AT.js → chunk-5BHNQNBI.js} +1 -1
- package/dist/chunk-5BHNQNBI.js.map +1 -0
- package/dist/{chunk-6NQMXTYC.js → chunk-5OZCCLNC.js} +2 -2
- package/dist/{chunk-HOONYZY2.js → chunk-5P5AAXYA.js} +2 -2
- package/dist/{chunk-KS6SAVCZ.js → chunk-5SZ24DL5.js} +6 -6
- package/dist/{chunk-NCCBLYEB.js → chunk-7B4GPCX7.js} +5 -5
- package/dist/{chunk-SV6EAJEP.js → chunk-A64XXIIB.js} +4 -4
- package/dist/{chunk-WOM2HTML.js → chunk-AFBJHD55.js} +5 -5
- package/dist/{chunk-RFI7GGFO.js → chunk-BCOKZC4B.js} +2 -2
- package/dist/{chunk-XUW3PXHU.js → chunk-BVZGNMVM.js} +4 -16
- package/dist/{chunk-XUW3PXHU.js.map → chunk-BVZGNMVM.js.map} +1 -1
- package/dist/{chunk-MT62YSPZ.js → chunk-BZEPJJOK.js} +4 -4
- package/dist/{chunk-OCVM6KDH.js → chunk-BZK6JEX4.js} +5 -5
- package/dist/{chunk-H2KSZMIX.js → chunk-CCT4WZI6.js} +5 -5
- package/dist/{chunk-VEALDPHW.js → chunk-CGPO3ZYB.js} +2 -2
- package/dist/{chunk-S3BFKGET.js → chunk-DEQ2JTBR.js} +3 -3
- package/dist/{chunk-3ELCWU56.js → chunk-E2R5NRZD.js} +2 -2
- package/dist/{chunk-BOKIKJJB.js → chunk-EDC6MLXV.js} +2 -2
- package/dist/chunk-F4COUZLL.js +24 -0
- package/dist/chunk-F4COUZLL.js.map +1 -0
- package/dist/{chunk-JRBNCUNT.js → chunk-FLHOTGOO.js} +3 -3
- package/dist/{chunk-6XE5TMPR.js → chunk-GBEXTC6Z.js} +3 -3
- package/dist/{chunk-YZQOGE2L.js → chunk-GS3Q2KOZ.js} +2 -2
- package/dist/{chunk-M75ZZHSR.js → chunk-GYB2QK5H.js} +2 -2
- package/dist/{chunk-EO43ANYJ.js → chunk-GZ2GKOF6.js} +3 -3
- package/dist/{chunk-VCBHAE4R.js → chunk-H4SMS4O2.js} +2 -2
- package/dist/{chunk-LVGTA624.js → chunk-HGVFJL63.js} +4 -4
- package/dist/{chunk-554KLAAN.js → chunk-HVZT5T22.js} +5 -5
- package/dist/{chunk-CJ5KKU6X.js → chunk-IGAIOGCN.js} +4 -4
- package/dist/{chunk-W2OG6JOL.js → chunk-IGM563N5.js} +18 -1
- package/dist/chunk-IGM563N5.js.map +1 -0
- package/dist/{chunk-GWKAVKHI.js → chunk-ITI3SJRB.js} +2 -2
- package/dist/{chunk-CZTLE22N.js → chunk-IU22SQGU.js} +7 -7
- package/dist/{chunk-RTEK4C4I.js → chunk-IUIVDVXM.js} +2 -2
- package/dist/{chunk-Z4PD65VQ.js → chunk-IZX3WZBF.js} +4 -4
- package/dist/{chunk-RDXW3OBQ.js → chunk-J3VW4J4E.js} +2 -2
- package/dist/{chunk-IK43HLDQ.js → chunk-J6U4BOKP.js} +11 -11
- package/dist/{chunk-XJMBYYQK.js → chunk-JA5B3SLH.js} +2 -2
- package/dist/{chunk-IAO54J4R.js → chunk-JA5O7UEZ.js} +6 -6
- package/dist/{chunk-6HPG2YNX.js → chunk-JKWNG3TM.js} +2 -2
- package/dist/{chunk-WQIYTNJV.js → chunk-JLHKBAFY.js} +3 -3
- package/dist/{chunk-ISMV2QVG.js → chunk-KMONEHDJ.js} +2 -2
- package/dist/{chunk-XTHCN77N.js → chunk-KR5EGWI4.js} +7 -19
- package/dist/chunk-KR5EGWI4.js.map +1 -0
- package/dist/{chunk-JBBSYJHP.js → chunk-KVHWEPT2.js} +2 -2
- package/dist/{chunk-2PCAVW2I.js → chunk-L4OA7G5T.js} +2 -2
- package/dist/{chunk-IY23KFNZ.js → chunk-LLVW4V7R.js} +3 -3
- package/dist/{chunk-N6WF5PKC.js → chunk-M25ZIEB2.js} +2 -2
- package/dist/{chunk-FXZDAV62.js → chunk-MEKAMERX.js} +5 -7
- package/dist/{chunk-FXZDAV62.js.map → chunk-MEKAMERX.js.map} +1 -1
- package/dist/{chunk-UC2ETWF3.js → chunk-MSO2C3KG.js} +2 -2
- package/dist/{chunk-ONTBCHCP.js → chunk-N4FZ6ITM.js} +2 -2
- package/dist/{chunk-DRWBEDYO.js → chunk-NM4LVUXH.js} +2 -2
- package/dist/{chunk-DSBQODMZ.js → chunk-NOT7XA7Q.js} +5 -5
- package/dist/{chunk-RA5VTXXG.js → chunk-OGFPMCSP.js} +2 -2
- package/dist/{chunk-WHXXI3W5.js → chunk-OGY4ELVE.js} +3 -3
- package/dist/{chunk-T36RFODW.js → chunk-OOTTXUNV.js} +2 -2
- package/dist/{chunk-A5BDDEXK.js → chunk-OTU5ZI3U.js} +4 -4
- package/dist/{chunk-THVIPWRF.js → chunk-OVFCAS7U.js} +9 -9
- package/dist/{chunk-IFJTPAQQ.js → chunk-OWE4BNTM.js} +4 -4
- package/dist/{chunk-W4TCUGQR.js → chunk-PEY6ZTCF.js} +12 -8
- package/dist/{chunk-W4TCUGQR.js.map → chunk-PEY6ZTCF.js.map} +1 -1
- package/dist/{chunk-UDSR4X4L.js → chunk-PWZKD4HW.js} +74 -10
- package/dist/chunk-PWZKD4HW.js.map +1 -0
- package/dist/{chunk-HQBM64EE.js → chunk-QAFWRGVD.js} +127 -8
- package/dist/chunk-QAFWRGVD.js.map +1 -0
- package/dist/{chunk-ZXEZCY6F.js → chunk-QCUH2G77.js} +6 -6
- package/dist/{chunk-XDIAFPUM.js → chunk-QDNVHA2F.js} +2 -2
- package/dist/{chunk-FH52K7EG.js → chunk-QRHEAZ2Q.js} +2 -6
- package/dist/{chunk-FH52K7EG.js.map → chunk-QRHEAZ2Q.js.map} +1 -1
- package/dist/{chunk-A4FXFAKF.js → chunk-QXPOEAKR.js} +2 -2
- package/dist/{chunk-EWPOHMN2.js → chunk-RGL53NXZ.js} +3 -3
- package/dist/{chunk-TAGR72IR.js → chunk-RI3OKC3Y.js} +4 -4
- package/dist/{chunk-5PFOMHTB.js → chunk-S3OYXPSE.js} +9 -9
- package/dist/{chunk-JVBO4SZL.js → chunk-STR7WBOB.js} +2 -2
- package/dist/{chunk-DDHM2TLX.js → chunk-T7S4V52L.js} +4 -4
- package/dist/{chunk-WG4QBZDN.js → chunk-TYBXP6WE.js} +7 -7
- package/dist/{chunk-T3GY65MA.js → chunk-UEO5CHOP.js} +3 -3
- package/dist/{chunk-RNG4VRP4.js → chunk-V3YB7RGR.js} +3 -3
- package/dist/{chunk-R3BLCFD2.js → chunk-V7RGFJ3Z.js} +6 -6
- package/dist/{chunk-SMIRGMS7.js → chunk-VEX6G3YL.js} +2 -2
- package/dist/{chunk-PK6JIDQ4.js → chunk-VZELV7ZJ.js} +116 -119
- package/dist/chunk-VZELV7ZJ.js.map +1 -0
- package/dist/{chunk-GULTLPFB.js → chunk-XGVDLQJE.js} +3 -3
- package/dist/{chunk-JFCV5QIK.js → chunk-XULHFSHO.js} +5 -5
- package/dist/{chunk-S6Q37VGE.js → chunk-XW7NWO4A.js} +2 -2
- package/dist/{chunk-YCH5GBN6.js → chunk-Y5E6CH6S.js} +6 -6
- package/dist/{chunk-GDG5VVYG.js → chunk-YG2EG6CB.js} +4 -4
- package/dist/{chunk-UHNGNKLV.js → chunk-YGBIBOCR.js} +307 -17
- package/dist/chunk-YGBIBOCR.js.map +1 -0
- package/dist/{chunk-YTGDPCPW.js → chunk-YHPUDB7Q.js} +2 -2
- package/dist/{chunk-VRBTNCM4.js → chunk-ZJGZDOQO.js} +6 -6
- package/dist/classified/index.js +5 -5
- package/dist/{classified-marker-QWMASIT7.js → classified-marker-7S5IEP6Q.js} +3 -3
- package/dist/collection-facade-ENLTJZBT.js +44 -0
- package/dist/{computed-DSMPXG2Y.js → computed-WZNKRLCY.js} +3 -3
- package/dist/consent/index.js +9 -9
- package/dist/cover-B5MY43CK.js +36 -0
- package/dist/{dead-filter-66VGI6JV.js → dead-filter-KRRD57MR.js} +2 -2
- package/dist/delegation-UT76AQIG.js +25 -0
- package/dist/derivations/index.js +12 -12
- package/dist/derive-SGRCCKVP.js +21 -0
- package/dist/{enclave-TKPN2G2U.js → enclave-YFKA3GJT.js} +11 -9
- package/dist/executor-TEZYRDN3.js +9 -0
- package/dist/executor-UF7LTX6O.js +26 -0
- package/dist/executor-WQQRU6DO.js +9 -0
- package/dist/export-accessible-HXMKW5LJ.js +23 -0
- package/dist/extract-partition-QGQ2R42J.js +38 -0
- package/dist/{fanout-sidecar-B5LVUMQX.js → fanout-sidecar-HJV3A7PM.js} +9 -9
- package/dist/find-VV6PBIHK.js +11 -0
- package/dist/forget/index.js +9 -9
- package/dist/guards/index.js +3 -3
- package/dist/history/index.js +12 -12
- package/dist/i18n/index.js +14 -14
- package/dist/index.d.ts +1 -4
- package/dist/index.js +151 -168
- package/dist/index.js.map +1 -1
- package/dist/indexing/index.js +2 -2
- package/dist/issue-7JJ4Z7E2.js +19 -0
- package/dist/kernel/enclave/index.d.ts +1 -1
- package/dist/kernel/enclave/record-keys/envelope-body.d.ts +8 -0
- package/dist/kernel/errors.d.ts +19 -0
- package/dist/kernel/noydb.d.ts +0 -6
- package/dist/kernel/types.d.ts +61 -17
- package/dist/kernel/vault.d.ts +0 -4
- package/dist/{ledger-PTK7XZYT.js → ledger-SW6QQOAV.js} +11 -11
- package/dist/liberate-W5MDWYOV.js +24 -0
- package/dist/{link-set-SLJHDNRB.js → link-set-GNGGCFI4.js} +11 -11
- package/dist/materialized-views/index.js +19 -19
- package/dist/noydb-U63S3Z7F.js +70 -0
- package/dist/on/index.js +9 -9
- package/dist/overlay-views/index.js +4 -4
- package/dist/periods/index.js +19 -17
- package/dist/pod/index.js +27 -12
- package/dist/{policy-YDLCOX4P.js → policy-EAXSJNOT.js} +5 -5
- package/dist/portability/index.js +8 -8
- package/dist/{post-register-2YHSADFI.js → post-register-A7HCFBP5.js} +6 -6
- package/dist/query/index.js +6 -6
- package/dist/register-YBMRLZLO.js +23 -0
- package/dist/registry-3LXKNXWI.js +9 -0
- package/dist/registry-4V4YQCXJ.js +19 -0
- package/dist/registry-ZULMLCJK.js +18 -0
- package/dist/request-withdrawal-SEVUEUDG.js +31 -0
- package/dist/{reveal-HWO4YMTJ.js → reveal-PB3YG544.js} +6 -6
- package/dist/revoke-5QULL5GT.js +24 -0
- package/dist/satellites/index.js +1 -1
- package/dist/sealed-record/index.js +12 -12
- package/dist/{seed-3ZMF5EQA.js → seed-6GTDHL4E.js} +11 -11
- package/dist/session/index.js +9 -9
- package/dist/shadow/index.js +2 -2
- package/dist/share-link/index.d.ts +19 -0
- package/dist/share-link/index.js +201 -0
- package/dist/share-link/index.js.map +1 -0
- package/dist/share-link/share-link.d.ts +123 -0
- package/dist/signer-ZMH35FT4.js +25 -0
- package/dist/snapshots/index.js +10 -10
- package/dist/{stale-VZL4OGUB.js → stale-NB5BGRVU.js} +10 -10
- package/dist/storage-QOZKQMID.js +23 -0
- package/dist/{store-coordination-provider-FKX3F6TQ.js → store-coordination-provider-3AELCZ4Y.js} +3 -3
- package/dist/sync/index.js +10 -9
- package/dist/sync/index.js.map +1 -1
- package/dist/team/index.js +29 -28
- package/dist/tiers/index.js +10 -10
- package/dist/to/index.js +1 -1
- package/dist/tx/index.js +3 -3
- package/dist/util/index.js +1 -1
- package/dist/{verify-26Y5GNMK.js → verify-MXN66IIH.js} +5 -5
- package/dist/via/blob/active.d.ts +27 -1
- package/dist/via/blob/index.d.ts +4 -0
- package/dist/{walk-IPLXE36W.js → walk-H4YE52S2.js} +11 -11
- package/dist/with/index.js +11 -11
- package/dist/with-audit/periods/periods.d.ts +1 -16
- package/dist/with-audit/periods/vault-facade.d.ts +6 -0
- package/dist/with-audit/periods/window.d.ts +16 -0
- package/dist/{legacy/kernel.d.ts → with-cargo/floor.d.ts} +1 -1
- package/dist/with-cargo/index.d.ts +12 -1
- package/dist/with-party/directory/cover/index.d.ts +0 -5
- package/dist/with-party/directory/cover/schema.d.ts +0 -6
- package/dist/with-party/directory/cover/storage.d.ts +0 -8
- package/dist/with-party/directory/cover/types.d.ts +0 -21
- package/dist/with-party/team/sync-period-scope.d.ts +78 -0
- package/dist/with-party/team/sync.d.ts +13 -0
- package/dist/with-pod/bundle.d.ts +0 -2
- package/dist/with-pod/index.d.ts +2 -1
- package/dist/with-shape/blobs/blob-compaction.d.ts +43 -3
- package/dist/with-shape/blobs/blob-pinning.d.ts +112 -0
- package/dist/with-shape/blobs/blob-set.d.ts +85 -1
- package/dist/withdraw-accessible-HPOVNG2G.js +28 -0
- package/package.json +7 -7
- package/dist/api-3A3S4SHH.js +0 -20
- package/dist/bundle/index.js +0 -153
- package/dist/bundle/index.js.map +0 -1
- package/dist/chunk-CHFZDSE4.js +0 -1
- package/dist/chunk-HQBM64EE.js.map +0 -1
- package/dist/chunk-PK6JIDQ4.js.map +0 -1
- package/dist/chunk-TIGPQDYP.js +0 -14
- package/dist/chunk-TIGPQDYP.js.map +0 -1
- package/dist/chunk-U6JMEH2P.js.map +0 -1
- package/dist/chunk-UDSR4X4L.js.map +0 -1
- package/dist/chunk-UHNGNKLV.js.map +0 -1
- package/dist/chunk-VCTXU4AT.js.map +0 -1
- package/dist/chunk-W2OG6JOL.js.map +0 -1
- package/dist/chunk-XTHCN77N.js.map +0 -1
- package/dist/collection-facade-KMBWNCYP.js +0 -44
- package/dist/cover-QJRXINN5.js +0 -52
- package/dist/delegation-SU6CV3W7.js +0 -25
- package/dist/derive-6RWU4EOA.js +0 -21
- package/dist/executor-KGNLJD6M.js +0 -9
- package/dist/executor-UX4FASYZ.js +0 -26
- package/dist/executor-XGIS6CR7.js +0 -9
- package/dist/export-accessible-LKW3QV22.js +0 -23
- package/dist/extract-partition-UP2ARO75.js +0 -38
- package/dist/find-YS6XWB46.js +0 -11
- package/dist/issue-3ACYX7LO.js +0 -19
- package/dist/legacy/bundle.d.ts +0 -30
- package/dist/liberate-MQQXBUCY.js +0 -24
- package/dist/noydb-ANIW5FLE.js +0 -69
- package/dist/register-PAM3ASRZ.js +0 -23
- package/dist/registry-4S2U2TR4.js +0 -19
- package/dist/registry-NPOWJHC4.js +0 -9
- package/dist/registry-VZ3CCI2R.js +0 -18
- package/dist/request-withdrawal-DI3H5WUI.js +0 -31
- package/dist/revoke-R5CZSVUT.js +0 -24
- package/dist/signer-MBVHW4WE.js +0 -25
- package/dist/storage-3MEJUENZ.js +0 -23
- package/dist/withdraw-accessible-TZDATQVR.js +0 -28
- /package/dist/{api-3A3S4SHH.js.map → api-UPAT2O3M.js.map} +0 -0
- /package/dist/{backup-YPUEKIJC.js.map → backup-JL2GOTYQ.js.map} +0 -0
- /package/dist/{chunk-QDPZWTN2.js.map → chunk-25G7U6RD.js.map} +0 -0
- /package/dist/{chunk-WKGF2TJR.js.map → chunk-25ZDB25Z.js.map} +0 -0
- /package/dist/{chunk-5WZXVULX.js.map → chunk-2ITLQZV5.js.map} +0 -0
- /package/dist/{chunk-WNGGJWF7.js.map → chunk-2JZ763FV.js.map} +0 -0
- /package/dist/{chunk-RJ6K6K5M.js.map → chunk-2RMDVWGB.js.map} +0 -0
- /package/dist/{chunk-VAIS3SOM.js.map → chunk-2U7Y7BNJ.js.map} +0 -0
- /package/dist/{chunk-WZSHL6DQ.js.map → chunk-2VUISNGP.js.map} +0 -0
- /package/dist/{chunk-CHFZDSE4.js.map → chunk-2YELV6TV.js.map} +0 -0
- /package/dist/{chunk-ANATMTOA.js.map → chunk-3O62PVDW.js.map} +0 -0
- /package/dist/{chunk-VKCADNMR.js.map → chunk-4JYYIFHW.js.map} +0 -0
- /package/dist/{chunk-6HY2X62D.js.map → chunk-5BB3N4KU.js.map} +0 -0
- /package/dist/{chunk-6NQMXTYC.js.map → chunk-5OZCCLNC.js.map} +0 -0
- /package/dist/{chunk-HOONYZY2.js.map → chunk-5P5AAXYA.js.map} +0 -0
- /package/dist/{chunk-KS6SAVCZ.js.map → chunk-5SZ24DL5.js.map} +0 -0
- /package/dist/{chunk-NCCBLYEB.js.map → chunk-7B4GPCX7.js.map} +0 -0
- /package/dist/{chunk-SV6EAJEP.js.map → chunk-A64XXIIB.js.map} +0 -0
- /package/dist/{chunk-WOM2HTML.js.map → chunk-AFBJHD55.js.map} +0 -0
- /package/dist/{chunk-RFI7GGFO.js.map → chunk-BCOKZC4B.js.map} +0 -0
- /package/dist/{chunk-MT62YSPZ.js.map → chunk-BZEPJJOK.js.map} +0 -0
- /package/dist/{chunk-OCVM6KDH.js.map → chunk-BZK6JEX4.js.map} +0 -0
- /package/dist/{chunk-H2KSZMIX.js.map → chunk-CCT4WZI6.js.map} +0 -0
- /package/dist/{chunk-VEALDPHW.js.map → chunk-CGPO3ZYB.js.map} +0 -0
- /package/dist/{chunk-S3BFKGET.js.map → chunk-DEQ2JTBR.js.map} +0 -0
- /package/dist/{chunk-3ELCWU56.js.map → chunk-E2R5NRZD.js.map} +0 -0
- /package/dist/{chunk-BOKIKJJB.js.map → chunk-EDC6MLXV.js.map} +0 -0
- /package/dist/{chunk-JRBNCUNT.js.map → chunk-FLHOTGOO.js.map} +0 -0
- /package/dist/{chunk-6XE5TMPR.js.map → chunk-GBEXTC6Z.js.map} +0 -0
- /package/dist/{chunk-YZQOGE2L.js.map → chunk-GS3Q2KOZ.js.map} +0 -0
- /package/dist/{chunk-M75ZZHSR.js.map → chunk-GYB2QK5H.js.map} +0 -0
- /package/dist/{chunk-EO43ANYJ.js.map → chunk-GZ2GKOF6.js.map} +0 -0
- /package/dist/{chunk-VCBHAE4R.js.map → chunk-H4SMS4O2.js.map} +0 -0
- /package/dist/{chunk-LVGTA624.js.map → chunk-HGVFJL63.js.map} +0 -0
- /package/dist/{chunk-554KLAAN.js.map → chunk-HVZT5T22.js.map} +0 -0
- /package/dist/{chunk-CJ5KKU6X.js.map → chunk-IGAIOGCN.js.map} +0 -0
- /package/dist/{chunk-GWKAVKHI.js.map → chunk-ITI3SJRB.js.map} +0 -0
- /package/dist/{chunk-CZTLE22N.js.map → chunk-IU22SQGU.js.map} +0 -0
- /package/dist/{chunk-RTEK4C4I.js.map → chunk-IUIVDVXM.js.map} +0 -0
- /package/dist/{chunk-Z4PD65VQ.js.map → chunk-IZX3WZBF.js.map} +0 -0
- /package/dist/{chunk-RDXW3OBQ.js.map → chunk-J3VW4J4E.js.map} +0 -0
- /package/dist/{chunk-IK43HLDQ.js.map → chunk-J6U4BOKP.js.map} +0 -0
- /package/dist/{chunk-XJMBYYQK.js.map → chunk-JA5B3SLH.js.map} +0 -0
- /package/dist/{chunk-IAO54J4R.js.map → chunk-JA5O7UEZ.js.map} +0 -0
- /package/dist/{chunk-6HPG2YNX.js.map → chunk-JKWNG3TM.js.map} +0 -0
- /package/dist/{chunk-WQIYTNJV.js.map → chunk-JLHKBAFY.js.map} +0 -0
- /package/dist/{chunk-ISMV2QVG.js.map → chunk-KMONEHDJ.js.map} +0 -0
- /package/dist/{chunk-JBBSYJHP.js.map → chunk-KVHWEPT2.js.map} +0 -0
- /package/dist/{chunk-2PCAVW2I.js.map → chunk-L4OA7G5T.js.map} +0 -0
- /package/dist/{chunk-IY23KFNZ.js.map → chunk-LLVW4V7R.js.map} +0 -0
- /package/dist/{chunk-N6WF5PKC.js.map → chunk-M25ZIEB2.js.map} +0 -0
- /package/dist/{chunk-UC2ETWF3.js.map → chunk-MSO2C3KG.js.map} +0 -0
- /package/dist/{chunk-ONTBCHCP.js.map → chunk-N4FZ6ITM.js.map} +0 -0
- /package/dist/{chunk-DRWBEDYO.js.map → chunk-NM4LVUXH.js.map} +0 -0
- /package/dist/{chunk-DSBQODMZ.js.map → chunk-NOT7XA7Q.js.map} +0 -0
- /package/dist/{chunk-RA5VTXXG.js.map → chunk-OGFPMCSP.js.map} +0 -0
- /package/dist/{chunk-WHXXI3W5.js.map → chunk-OGY4ELVE.js.map} +0 -0
- /package/dist/{chunk-T36RFODW.js.map → chunk-OOTTXUNV.js.map} +0 -0
- /package/dist/{chunk-A5BDDEXK.js.map → chunk-OTU5ZI3U.js.map} +0 -0
- /package/dist/{chunk-THVIPWRF.js.map → chunk-OVFCAS7U.js.map} +0 -0
- /package/dist/{chunk-IFJTPAQQ.js.map → chunk-OWE4BNTM.js.map} +0 -0
- /package/dist/{chunk-ZXEZCY6F.js.map → chunk-QCUH2G77.js.map} +0 -0
- /package/dist/{chunk-XDIAFPUM.js.map → chunk-QDNVHA2F.js.map} +0 -0
- /package/dist/{chunk-A4FXFAKF.js.map → chunk-QXPOEAKR.js.map} +0 -0
- /package/dist/{chunk-EWPOHMN2.js.map → chunk-RGL53NXZ.js.map} +0 -0
- /package/dist/{chunk-TAGR72IR.js.map → chunk-RI3OKC3Y.js.map} +0 -0
- /package/dist/{chunk-5PFOMHTB.js.map → chunk-S3OYXPSE.js.map} +0 -0
- /package/dist/{chunk-JVBO4SZL.js.map → chunk-STR7WBOB.js.map} +0 -0
- /package/dist/{chunk-DDHM2TLX.js.map → chunk-T7S4V52L.js.map} +0 -0
- /package/dist/{chunk-WG4QBZDN.js.map → chunk-TYBXP6WE.js.map} +0 -0
- /package/dist/{chunk-T3GY65MA.js.map → chunk-UEO5CHOP.js.map} +0 -0
- /package/dist/{chunk-RNG4VRP4.js.map → chunk-V3YB7RGR.js.map} +0 -0
- /package/dist/{chunk-R3BLCFD2.js.map → chunk-V7RGFJ3Z.js.map} +0 -0
- /package/dist/{chunk-SMIRGMS7.js.map → chunk-VEX6G3YL.js.map} +0 -0
- /package/dist/{chunk-GULTLPFB.js.map → chunk-XGVDLQJE.js.map} +0 -0
- /package/dist/{chunk-JFCV5QIK.js.map → chunk-XULHFSHO.js.map} +0 -0
- /package/dist/{chunk-S6Q37VGE.js.map → chunk-XW7NWO4A.js.map} +0 -0
- /package/dist/{chunk-YCH5GBN6.js.map → chunk-Y5E6CH6S.js.map} +0 -0
- /package/dist/{chunk-GDG5VVYG.js.map → chunk-YG2EG6CB.js.map} +0 -0
- /package/dist/{chunk-YTGDPCPW.js.map → chunk-YHPUDB7Q.js.map} +0 -0
- /package/dist/{chunk-VRBTNCM4.js.map → chunk-ZJGZDOQO.js.map} +0 -0
- /package/dist/{classified-marker-QWMASIT7.js.map → classified-marker-7S5IEP6Q.js.map} +0 -0
- /package/dist/{collection-facade-KMBWNCYP.js.map → collection-facade-ENLTJZBT.js.map} +0 -0
- /package/dist/{computed-DSMPXG2Y.js.map → computed-WZNKRLCY.js.map} +0 -0
- /package/dist/{cover-QJRXINN5.js.map → cover-B5MY43CK.js.map} +0 -0
- /package/dist/{dead-filter-66VGI6JV.js.map → dead-filter-KRRD57MR.js.map} +0 -0
- /package/dist/{delegation-SU6CV3W7.js.map → delegation-UT76AQIG.js.map} +0 -0
- /package/dist/{derive-6RWU4EOA.js.map → derive-SGRCCKVP.js.map} +0 -0
- /package/dist/{enclave-TKPN2G2U.js.map → enclave-YFKA3GJT.js.map} +0 -0
- /package/dist/{executor-KGNLJD6M.js.map → executor-TEZYRDN3.js.map} +0 -0
- /package/dist/{executor-UX4FASYZ.js.map → executor-UF7LTX6O.js.map} +0 -0
- /package/dist/{executor-XGIS6CR7.js.map → executor-WQQRU6DO.js.map} +0 -0
- /package/dist/{export-accessible-LKW3QV22.js.map → export-accessible-HXMKW5LJ.js.map} +0 -0
- /package/dist/{extract-partition-UP2ARO75.js.map → extract-partition-QGQ2R42J.js.map} +0 -0
- /package/dist/{fanout-sidecar-B5LVUMQX.js.map → fanout-sidecar-HJV3A7PM.js.map} +0 -0
- /package/dist/{find-YS6XWB46.js.map → find-VV6PBIHK.js.map} +0 -0
- /package/dist/{issue-3ACYX7LO.js.map → issue-7JJ4Z7E2.js.map} +0 -0
- /package/dist/{ledger-PTK7XZYT.js.map → ledger-SW6QQOAV.js.map} +0 -0
- /package/dist/{liberate-MQQXBUCY.js.map → liberate-W5MDWYOV.js.map} +0 -0
- /package/dist/{link-set-SLJHDNRB.js.map → link-set-GNGGCFI4.js.map} +0 -0
- /package/dist/{noydb-ANIW5FLE.js.map → noydb-U63S3Z7F.js.map} +0 -0
- /package/dist/{policy-YDLCOX4P.js.map → policy-EAXSJNOT.js.map} +0 -0
- /package/dist/{post-register-2YHSADFI.js.map → post-register-A7HCFBP5.js.map} +0 -0
- /package/dist/{register-PAM3ASRZ.js.map → register-YBMRLZLO.js.map} +0 -0
- /package/dist/{registry-4S2U2TR4.js.map → registry-3LXKNXWI.js.map} +0 -0
- /package/dist/{registry-NPOWJHC4.js.map → registry-4V4YQCXJ.js.map} +0 -0
- /package/dist/{registry-VZ3CCI2R.js.map → registry-ZULMLCJK.js.map} +0 -0
- /package/dist/{request-withdrawal-DI3H5WUI.js.map → request-withdrawal-SEVUEUDG.js.map} +0 -0
- /package/dist/{reveal-HWO4YMTJ.js.map → reveal-PB3YG544.js.map} +0 -0
- /package/dist/{revoke-R5CZSVUT.js.map → revoke-5QULL5GT.js.map} +0 -0
- /package/dist/{seed-3ZMF5EQA.js.map → seed-6GTDHL4E.js.map} +0 -0
- /package/dist/{signer-MBVHW4WE.js.map → signer-ZMH35FT4.js.map} +0 -0
- /package/dist/{stale-VZL4OGUB.js.map → stale-NB5BGRVU.js.map} +0 -0
- /package/dist/{storage-3MEJUENZ.js.map → storage-QOZKQMID.js.map} +0 -0
- /package/dist/{store-coordination-provider-FKX3F6TQ.js.map → store-coordination-provider-3AELCZ4Y.js.map} +0 -0
- /package/dist/{verify-26Y5GNMK.js.map → verify-MXN66IIH.js.map} +0 -0
- /package/dist/{walk-IPLXE36W.js.map → walk-H4YE52S2.js.map} +0 -0
- /package/dist/{withdraw-accessible-TZDATQVR.js.map → withdraw-accessible-HPOVNG2G.js.map} +0 -0
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #808 — device-local blob pin registry + external side-cache + KPI counters.
|
|
3
|
+
*
|
|
4
|
+
* Pinning marks a blob slot "keep this available offline" **for this device
|
|
5
|
+
* only**. Pin state is intentionally NEVER written to the vault's
|
|
6
|
+
* `NoydbStore` — the vault store is the synced/shared substrate, and each
|
|
7
|
+
* device pins for itself. Instead, `withBlobs()` owns one {@link BlobPinCache}
|
|
8
|
+
* per strategy instance and threads it into every `BlobSet` it opens; the
|
|
9
|
+
* registry rows live in a pluggable {@link BlobPinStore}.
|
|
10
|
+
*
|
|
11
|
+
* The default backend is in-memory ({@link memoryBlobPinStore}) — the hub has
|
|
12
|
+
* NO device-persistence idiom of its own (it never touches IndexedDB or any
|
|
13
|
+
* Node fs API; persistence backends are the `to-*` package family), so a
|
|
14
|
+
* durable registry is supplied by the consumer:
|
|
15
|
+
* `withBlobs({ pinStore: myIdbBackedStore })`. The interface is four async
|
|
16
|
+
* methods, deliberately trivial to implement over IndexedDB / SQLite / a file.
|
|
17
|
+
*
|
|
18
|
+
* ## What a registry row holds
|
|
19
|
+
*
|
|
20
|
+
* One row per `{vault, collection, record, slot}` ({@link blobPinKey}):
|
|
21
|
+
* - the pin flag + timestamps (LRU input for the cache-budget pass), and
|
|
22
|
+
* - for `external: true` slots, the **local encrypted copy** of the object's
|
|
23
|
+
* bytes ({@link BlobPinEntry.cipher}). The object-store copy of an external
|
|
24
|
+
* blob lives OUTSIDE the zero-knowledge envelope by design; the local copy
|
|
25
|
+
* does NOT — it is AES-256-GCM-encrypted under the vault's `_blob` DEK
|
|
26
|
+
* through the same enclave path that encrypts blob chunks
|
|
27
|
+
* (`encryptBytesWithAAD`, AAD-bound to the row's pin key), so a stolen
|
|
28
|
+
* device store leaks nothing the vault store wouldn't.
|
|
29
|
+
*
|
|
30
|
+
* Internal (chunked) blobs never store bytes here — their ciphertext already
|
|
31
|
+
* lives in `_blob_chunks`; the registry only carries their pin flag and
|
|
32
|
+
* access times.
|
|
33
|
+
*
|
|
34
|
+
* @module
|
|
35
|
+
*/
|
|
36
|
+
/** One device-local registry row — see the module doc for the field posture. */
|
|
37
|
+
export interface BlobPinEntry {
|
|
38
|
+
/** Slot is pinned for offline on THIS device. */
|
|
39
|
+
readonly pinned: boolean;
|
|
40
|
+
/** ISO timestamp of the pin (absent when not pinned). */
|
|
41
|
+
readonly pinnedAt?: string;
|
|
42
|
+
/** ISO timestamp of the last local read — LRU input for the budget pass. */
|
|
43
|
+
readonly lastAccessAt?: string;
|
|
44
|
+
/** Plaintext byte length of the cached external copy (external slots only). */
|
|
45
|
+
readonly cachedBytes?: number;
|
|
46
|
+
/**
|
|
47
|
+
* Encrypted local copy of an external slot's bytes: base64 IV + base64
|
|
48
|
+
* AES-256-GCM ciphertext under the vault's `_blob` DEK, AAD-bound to the
|
|
49
|
+
* row's {@link blobPinKey}. On an UNENCRYPTED vault (`encrypt: false`) the
|
|
50
|
+
* fallback mirrors the envelope convention: `iv === ''`, `data` = base64
|
|
51
|
+
* plaintext.
|
|
52
|
+
*/
|
|
53
|
+
readonly cipher?: {
|
|
54
|
+
readonly iv: string;
|
|
55
|
+
readonly data: string;
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Pluggable device-local backend for the pin registry (#808). Implementations
|
|
60
|
+
* MUST be device-local (never synced) — an IndexedDB- or file-backed store is
|
|
61
|
+
* the expected production shape; {@link memoryBlobPinStore} is the default.
|
|
62
|
+
*/
|
|
63
|
+
export interface BlobPinStore {
|
|
64
|
+
get(key: string): Promise<BlobPinEntry | null>;
|
|
65
|
+
set(key: string, entry: BlobPinEntry): Promise<void>;
|
|
66
|
+
delete(key: string): Promise<void>;
|
|
67
|
+
/** All rows whose key starts with `prefix` (`''` = every row). */
|
|
68
|
+
entries(prefix: string): Promise<Array<{
|
|
69
|
+
key: string;
|
|
70
|
+
entry: BlobPinEntry;
|
|
71
|
+
}>>;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* In-memory {@link BlobPinStore} — the default. Pin state then lasts for the
|
|
75
|
+
* strategy instance's lifetime (one app session); pass a durable store to
|
|
76
|
+
* `withBlobs({ pinStore })` to keep pins across restarts.
|
|
77
|
+
*/
|
|
78
|
+
export declare function memoryBlobPinStore(): BlobPinStore;
|
|
79
|
+
/**
|
|
80
|
+
* Device-local blob-cache KPI counters (#808) — read via
|
|
81
|
+
* `withBlobs().cacheStats()`. "Local" reads (internal chunks, cached external
|
|
82
|
+
* copies) count as hits; network fetches from the object store count as
|
|
83
|
+
* misses and add to `bytesDownloaded` (the 4G-budget number).
|
|
84
|
+
*/
|
|
85
|
+
export interface BlobCacheStats {
|
|
86
|
+
readonly hits: number;
|
|
87
|
+
readonly misses: number;
|
|
88
|
+
readonly bytesDownloaded: number;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* The per-strategy bundle `withBlobs()` threads into every `BlobSet`: the
|
|
92
|
+
* registry backend plus the shared mutable KPI counters.
|
|
93
|
+
*
|
|
94
|
+
* @internal
|
|
95
|
+
*/
|
|
96
|
+
export interface BlobPinCache {
|
|
97
|
+
readonly store: BlobPinStore;
|
|
98
|
+
readonly stats: {
|
|
99
|
+
hits: number;
|
|
100
|
+
misses: number;
|
|
101
|
+
bytesDownloaded: number;
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/** @internal */
|
|
105
|
+
export declare function createBlobPinCache(store?: BlobPinStore): BlobPinCache;
|
|
106
|
+
/**
|
|
107
|
+
* Registry key for one slot's row: `{vault}::{collection}::{record}::{slot}`
|
|
108
|
+
* (the blobs' established `::` separator — record ids and slot names are
|
|
109
|
+
* already `::`-refused at the write surface, see `assertKeyPartSafe`).
|
|
110
|
+
* Omitting `slotName` yields the record's row PREFIX (for per-record scans).
|
|
111
|
+
*/
|
|
112
|
+
export declare function blobPinKey(vault: string, collection: string, recordId: string, slotName?: string): string;
|
|
@@ -2,6 +2,7 @@ import type { NoydbStore, BlobObject, SlotInfo, VersionRecord, BlobPutOptions, B
|
|
|
2
2
|
import type { ObjectProjection } from './object-projection.js';
|
|
3
3
|
import type { BlobFieldsConfig } from './blob-compaction.js';
|
|
4
4
|
import { type EnclaveKey } from '../../kernel/enclave/index.js';
|
|
5
|
+
import { type BlobPinCache } from './blob-pinning.js';
|
|
5
6
|
import type { UnlockedKeyring } from '../../with-party/team/keyring.js';
|
|
6
7
|
/**
|
|
7
8
|
* DEK slot name for vault-shared blob data. Calling `getDEK('_blob')`
|
|
@@ -69,6 +70,12 @@ export declare class BlobSet {
|
|
|
69
70
|
private readonly objectStore;
|
|
70
71
|
private readonly blobFields;
|
|
71
72
|
private readonly keyring;
|
|
73
|
+
/**
|
|
74
|
+
* Device-local pin registry + external side-cache + KPI counters (#808).
|
|
75
|
+
* Injected by `withBlobs()` (one shared instance per strategy — per
|
|
76
|
+
* "device"); absent on a direct construction that never threads one.
|
|
77
|
+
*/
|
|
78
|
+
private readonly pinCache;
|
|
72
79
|
/**
|
|
73
80
|
* Set only on the cleared clone `atTier()` returns (#749) — never by
|
|
74
81
|
* `openSlot`/`Collection.blob()`. Its presence is what makes a `BlobSet`
|
|
@@ -91,6 +98,7 @@ export declare class BlobSet {
|
|
|
91
98
|
blobFields?: BlobFieldsConfig;
|
|
92
99
|
keyring?: UnlockedKeyring;
|
|
93
100
|
clearedTier?: number;
|
|
101
|
+
pinCache?: BlobPinCache;
|
|
94
102
|
});
|
|
95
103
|
/**
|
|
96
104
|
* #724 I1 completion: a legacy (non-`perRecordKeys`) blob has no per-blob
|
|
@@ -1136,7 +1144,11 @@ export declare class BlobSet {
|
|
|
1136
1144
|
/**
|
|
1137
1145
|
* Fetch all bytes for the named slot.
|
|
1138
1146
|
* Returns `null` if the slot does not exist.
|
|
1139
|
-
* Throws `
|
|
1147
|
+
* Throws `BlobOfflineError` if the content is not available locally (#808):
|
|
1148
|
+
* an internal blob whose chunk envelopes are absent from the local store, or
|
|
1149
|
+
* an external slot with no local cached copy while the object store is
|
|
1150
|
+
* unreachable. External reads populate the device-local encrypted
|
|
1151
|
+
* side-cache, so a repeat read is served locally (see `pin()`).
|
|
1140
1152
|
*/
|
|
1141
1153
|
get(slotName: string): Promise<Uint8Array | null>;
|
|
1142
1154
|
/**
|
|
@@ -1182,6 +1194,12 @@ export declare class BlobSet {
|
|
|
1182
1194
|
/**
|
|
1183
1195
|
* List all slot entries for this record.
|
|
1184
1196
|
* Returns metadata only — no chunk data is loaded.
|
|
1197
|
+
*
|
|
1198
|
+
* #808: when a pin registry is present (`withBlobs()`), each entry is
|
|
1199
|
+
* annotated with this DEVICE's view — `pinned` / `lastAccessAt` /
|
|
1200
|
+
* `cachedBytes` (see their `SlotInfo` doc comments). The annotations come
|
|
1201
|
+
* from the device-local registry, never the vault store, and are what
|
|
1202
|
+
* `vault.compact()`'s pin exemption + cache-budget LRU pass key off.
|
|
1185
1203
|
*/
|
|
1186
1204
|
list(): Promise<SlotInfo[]>;
|
|
1187
1205
|
/**
|
|
@@ -1189,6 +1207,72 @@ export declare class BlobSet {
|
|
|
1189
1207
|
* Decrements refCount on the blob. Chunks are GC'd by `vault.blobGC()`.
|
|
1190
1208
|
*/
|
|
1191
1209
|
delete(slotName: string): Promise<void>;
|
|
1210
|
+
/**
|
|
1211
|
+
* Pin the named slot for offline availability ON THIS DEVICE.
|
|
1212
|
+
*
|
|
1213
|
+
* - Downloads eagerly (call while online): an internal blob's chunks are
|
|
1214
|
+
* fetched once to prove they are locally readable; an `external` slot's
|
|
1215
|
+
* bytes are fetched from the object store and kept in the device-local
|
|
1216
|
+
* side-cache, **encrypted** under the vault's `_blob` DEK via the same
|
|
1217
|
+
* enclave path as chunk encryption (the object-store copy sits outside
|
|
1218
|
+
* the ZK envelope by design; the local copy does not).
|
|
1219
|
+
* - A pinned slot is EXEMPT from `vault.compact()` eviction — both the
|
|
1220
|
+
* `blobFields` policy pass and the `cacheBudget` LRU pass.
|
|
1221
|
+
* - Pin state is device-local (never synced): it lives in the `withBlobs()`
|
|
1222
|
+
* pin registry, not in the vault store. Each device pins for itself.
|
|
1223
|
+
*
|
|
1224
|
+
* Throws `NotFoundError` for a missing slot and `BlobOfflineError` when the
|
|
1225
|
+
* eager download cannot complete (offline).
|
|
1226
|
+
*/
|
|
1227
|
+
pin(slotName: string): Promise<void>;
|
|
1228
|
+
/**
|
|
1229
|
+
* Unpin the named slot on this device — it returns to the normal lifecycle:
|
|
1230
|
+
* `blobFields` policy eviction applies again, and any local cached copy
|
|
1231
|
+
* (external slots) stays but becomes budget-managed (`cacheBudget` LRU).
|
|
1232
|
+
* A no-op when the slot is not pinned here.
|
|
1233
|
+
*/
|
|
1234
|
+
unpin(slotName: string): Promise<void>;
|
|
1235
|
+
/** Whether the named slot is pinned for offline ON THIS DEVICE (#808). */
|
|
1236
|
+
isPinned(slotName: string): Promise<boolean>;
|
|
1237
|
+
/**
|
|
1238
|
+
* Drop this slot's device-local cached copy (the encrypted external
|
|
1239
|
+
* side-cache) WITHOUT touching the slot, the vault store, or the object
|
|
1240
|
+
* store. Returns the plaintext bytes freed (0 when nothing was cached, the
|
|
1241
|
+
* slot is pinned — pinned copies are exempt — or no registry is present).
|
|
1242
|
+
* The cache-budget pass inside `vault.compact()` is the expected caller;
|
|
1243
|
+
* the LRU access row itself is kept.
|
|
1244
|
+
*/
|
|
1245
|
+
dropLocalCache(slotName: string): Promise<number>;
|
|
1246
|
+
/** This slot's registry key — see {@link blobPinKey}. */
|
|
1247
|
+
private pinKeyFor;
|
|
1248
|
+
/** AAD binding for a cached external copy: the row's own registry key. */
|
|
1249
|
+
private pinCopyAAD;
|
|
1250
|
+
private requirePinCache;
|
|
1251
|
+
/** KPI hit + LRU access stamp for a successful LOCAL read. No-op without a registry. */
|
|
1252
|
+
private recordLocalHit;
|
|
1253
|
+
/**
|
|
1254
|
+
* Read an `external` slot (#808 taxonomy): local encrypted side-cache first
|
|
1255
|
+
* (hit); else the object store (miss + `bytesDownloaded`), auto-caching the
|
|
1256
|
+
* fetched bytes so the NEXT read — and any later offline read — is local.
|
|
1257
|
+
* A network failure with no local copy is the typed `BlobOfflineError`;
|
|
1258
|
+
* a genuinely absent object (fetch succeeded, nothing there) stays `null`.
|
|
1259
|
+
*/
|
|
1260
|
+
private readExternal;
|
|
1261
|
+
/**
|
|
1262
|
+
* Decrypt a cached external copy. `null` (treated as a cache miss → network
|
|
1263
|
+
* refresh) when the vault keys can no longer open it — e.g. the copy was
|
|
1264
|
+
* cached before the owning record moved tiers, so it is sealed under a DEK
|
|
1265
|
+
* this handle no longer resolves. Genuine non-crypto failures propagate.
|
|
1266
|
+
*/
|
|
1267
|
+
private decryptCachedCopy;
|
|
1268
|
+
/**
|
|
1269
|
+
* Write an external slot's bytes into the device-local side-cache —
|
|
1270
|
+
* ENCRYPTED under the vault's `_blob` DEK (owner tier) via the enclave's
|
|
1271
|
+
* AAD-bound path, mirroring chunk encryption; base64 plaintext with
|
|
1272
|
+
* `iv: ''` only on an unencrypted vault (the envelope convention). A
|
|
1273
|
+
* pre-existing pin flag survives the rewrite.
|
|
1274
|
+
*/
|
|
1275
|
+
private cacheExternalCopy;
|
|
1192
1276
|
/**
|
|
1193
1277
|
* Return a native `Response` whose body streams the decrypted,
|
|
1194
1278
|
* decompressed blob bytes with full HTTP metadata headers.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import {
|
|
2
|
+
FROZEN_SNAPSHOTS_COLLECTION,
|
|
3
|
+
freezeAndDeleteClosure,
|
|
4
|
+
freezeSnapshotOnly,
|
|
5
|
+
randomId,
|
|
6
|
+
withdrawAccessibleData
|
|
7
|
+
} from "./chunk-XULHFSHO.js";
|
|
8
|
+
import "./chunk-25ZDB25Z.js";
|
|
9
|
+
import "./chunk-MEKAMERX.js";
|
|
10
|
+
import "./chunk-BVZGNMVM.js";
|
|
11
|
+
import "./chunk-PEY6ZTCF.js";
|
|
12
|
+
import "./chunk-QXPOEAKR.js";
|
|
13
|
+
import "./chunk-LLVW4V7R.js";
|
|
14
|
+
import "./chunk-M25ZIEB2.js";
|
|
15
|
+
import "./chunk-5BB3N4KU.js";
|
|
16
|
+
import "./chunk-LP7BEXCT.js";
|
|
17
|
+
import "./chunk-5P5AAXYA.js";
|
|
18
|
+
import "./chunk-5BHNQNBI.js";
|
|
19
|
+
import "./chunk-IGM563N5.js";
|
|
20
|
+
import "./chunk-PZ5AY32C.js";
|
|
21
|
+
export {
|
|
22
|
+
FROZEN_SNAPSHOTS_COLLECTION,
|
|
23
|
+
freezeAndDeleteClosure,
|
|
24
|
+
freezeSnapshotOnly,
|
|
25
|
+
randomId,
|
|
26
|
+
withdrawAccessibleData
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=withdraw-accessible-HPOVNG2G.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@noy-db/hub",
|
|
3
|
-
"version": "0.4.0-pre.
|
|
3
|
+
"version": "0.4.0-pre.2",
|
|
4
4
|
"description": "Zero-knowledge, offline-first, encrypted document store — core library with AES-256-GCM, PBKDF2, multi-user keyring, and sync engine",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "vLannaAi <vicio@lanna.ai>",
|
|
@@ -72,10 +72,6 @@
|
|
|
72
72
|
"types": "./dist/with-commit/crdt/index.d.ts",
|
|
73
73
|
"default": "./dist/crdt/index.js"
|
|
74
74
|
},
|
|
75
|
-
"./bundle": {
|
|
76
|
-
"types": "./dist/legacy/bundle.d.ts",
|
|
77
|
-
"default": "./dist/bundle/index.js"
|
|
78
|
-
},
|
|
79
75
|
"./consent": {
|
|
80
76
|
"types": "./dist/with-audit/consent/index.d.ts",
|
|
81
77
|
"default": "./dist/consent/index.js"
|
|
@@ -120,6 +116,10 @@
|
|
|
120
116
|
"types": "./dist/kernel/util/index.d.ts",
|
|
121
117
|
"default": "./dist/util/index.js"
|
|
122
118
|
},
|
|
119
|
+
"./share-link": {
|
|
120
|
+
"types": "./dist/share-link/index.d.ts",
|
|
121
|
+
"default": "./dist/share-link/index.js"
|
|
122
|
+
},
|
|
123
123
|
"./attestation": {
|
|
124
124
|
"types": "./dist/with-audit/attestation/index.d.ts",
|
|
125
125
|
"default": "./dist/attestation/index.js"
|
|
@@ -192,14 +192,14 @@
|
|
|
192
192
|
"node": ">=22.0.0"
|
|
193
193
|
},
|
|
194
194
|
"dependencies": {
|
|
195
|
-
"@noy-db/attestation": "0.4.0-pre.
|
|
195
|
+
"@noy-db/attestation": "0.4.0-pre.2"
|
|
196
196
|
},
|
|
197
197
|
"devDependencies": {
|
|
198
198
|
"@types/node": "^22.0.0",
|
|
199
199
|
"esbuild": "^0.25.0",
|
|
200
200
|
"zod": "^4.0.0",
|
|
201
201
|
"zod-to-json-schema": "^3.25.2",
|
|
202
|
-
"@noy-db/on-shamir": "0.4.0-pre.
|
|
202
|
+
"@noy-db/on-shamir": "0.4.0-pre.2"
|
|
203
203
|
},
|
|
204
204
|
"peerDependencies": {
|
|
205
205
|
"zod-to-json-schema": "^3.25.0"
|
package/dist/api-3A3S4SHH.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
UserApi,
|
|
3
|
-
createUserApi
|
|
4
|
-
} from "./chunk-EO43ANYJ.js";
|
|
5
|
-
import "./chunk-NCCBLYEB.js";
|
|
6
|
-
import "./chunk-W4TCUGQR.js";
|
|
7
|
-
import "./chunk-A4FXFAKF.js";
|
|
8
|
-
import "./chunk-IY23KFNZ.js";
|
|
9
|
-
import "./chunk-N6WF5PKC.js";
|
|
10
|
-
import "./chunk-6HY2X62D.js";
|
|
11
|
-
import "./chunk-LP7BEXCT.js";
|
|
12
|
-
import "./chunk-HOONYZY2.js";
|
|
13
|
-
import "./chunk-VCTXU4AT.js";
|
|
14
|
-
import "./chunk-W2OG6JOL.js";
|
|
15
|
-
import "./chunk-PZ5AY32C.js";
|
|
16
|
-
export {
|
|
17
|
-
UserApi,
|
|
18
|
-
createUserApi
|
|
19
|
-
};
|
|
20
|
-
//# sourceMappingURL=api-3A3S4SHH.js.map
|
package/dist/bundle/index.js
DELETED
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
extractPartition,
|
|
3
|
-
walkClosure
|
|
4
|
-
} from "../chunk-THVIPWRF.js";
|
|
5
|
-
import "../chunk-CHFZDSE4.js";
|
|
6
|
-
import {
|
|
7
|
-
adoptPartition,
|
|
8
|
-
createOwnerOnAdoptedPartition,
|
|
9
|
-
decryptExtractedPartition,
|
|
10
|
-
unsealDeks
|
|
11
|
-
} from "../chunk-UDSR4X4L.js";
|
|
12
|
-
import "../chunk-CJ5KKU6X.js";
|
|
13
|
-
import "../chunk-RFI7GGFO.js";
|
|
14
|
-
import "../chunk-UHNGNKLV.js";
|
|
15
|
-
import "../chunk-YTGDPCPW.js";
|
|
16
|
-
import {
|
|
17
|
-
COMPRESSION_BROTLI,
|
|
18
|
-
COMPRESSION_GZIP,
|
|
19
|
-
COMPRESSION_NONE,
|
|
20
|
-
FLAG_COMPRESSED,
|
|
21
|
-
FLAG_HAS_INTEGRITY_HASH,
|
|
22
|
-
NOYDB_BUNDLE_FORMAT_VERSION,
|
|
23
|
-
NOYDB_BUNDLE_MAGIC,
|
|
24
|
-
NOYDB_BUNDLE_PREFIX_BYTES,
|
|
25
|
-
encodeBundleHeader,
|
|
26
|
-
readNoydbBundle,
|
|
27
|
-
readNoydbBundleHeader,
|
|
28
|
-
readPod,
|
|
29
|
-
readPodHeader,
|
|
30
|
-
resetBrotliSupportCache,
|
|
31
|
-
validateBundleHeader,
|
|
32
|
-
writeNoydbBundle,
|
|
33
|
-
writePod
|
|
34
|
-
} from "../chunk-FXZDAV62.js";
|
|
35
|
-
import "../chunk-XUW3PXHU.js";
|
|
36
|
-
import "../chunk-554KLAAN.js";
|
|
37
|
-
import "../chunk-NCCBLYEB.js";
|
|
38
|
-
import "../chunk-UC2ETWF3.js";
|
|
39
|
-
import {
|
|
40
|
-
generateULID,
|
|
41
|
-
isULID
|
|
42
|
-
} from "../chunk-ZJADGNYF.js";
|
|
43
|
-
import "../chunk-VRBTNCM4.js";
|
|
44
|
-
import "../chunk-I7FD46FF.js";
|
|
45
|
-
import "../chunk-DRWBEDYO.js";
|
|
46
|
-
import "../chunk-WQIYTNJV.js";
|
|
47
|
-
import "../chunk-W4TCUGQR.js";
|
|
48
|
-
import "../chunk-A4FXFAKF.js";
|
|
49
|
-
import "../chunk-IY23KFNZ.js";
|
|
50
|
-
import "../chunk-N6WF5PKC.js";
|
|
51
|
-
import "../chunk-6HY2X62D.js";
|
|
52
|
-
import "../chunk-LP7BEXCT.js";
|
|
53
|
-
import "../chunk-HOONYZY2.js";
|
|
54
|
-
import "../chunk-VCTXU4AT.js";
|
|
55
|
-
import {
|
|
56
|
-
AdoptionStateError,
|
|
57
|
-
BackupCorruptedError,
|
|
58
|
-
BackupLedgerError,
|
|
59
|
-
BundleIntegrityError,
|
|
60
|
-
BundleSealMismatchError,
|
|
61
|
-
BundleVersionConflictError,
|
|
62
|
-
PartitionExtractionError,
|
|
63
|
-
PodVersionConflictError,
|
|
64
|
-
TransferSealError
|
|
65
|
-
} from "../chunk-W2OG6JOL.js";
|
|
66
|
-
import "../chunk-PZ5AY32C.js";
|
|
67
|
-
|
|
68
|
-
// src/with-cargo/describe-extraction.ts
|
|
69
|
-
async function describeExtraction(vault, opts) {
|
|
70
|
-
const { closure, graph, danglingRefs } = await walkClosure(vault, opts);
|
|
71
|
-
const { name: vaultName, adapter } = vault._introspectState();
|
|
72
|
-
const encoder = new TextEncoder();
|
|
73
|
-
const byCollection = [];
|
|
74
|
-
const inaccessible = [];
|
|
75
|
-
let totalBytes = 0;
|
|
76
|
-
let totalRecords = 0;
|
|
77
|
-
for (const [collectionName, ids] of closure) {
|
|
78
|
-
let bytes = 0;
|
|
79
|
-
let oldestTs;
|
|
80
|
-
let newestTs;
|
|
81
|
-
let recordCount = 0;
|
|
82
|
-
for (const id of ids) {
|
|
83
|
-
const env = await adapter.get(vaultName, collectionName, id);
|
|
84
|
-
if (!env) {
|
|
85
|
-
inaccessible.push({ collection: collectionName, id });
|
|
86
|
-
continue;
|
|
87
|
-
}
|
|
88
|
-
recordCount++;
|
|
89
|
-
bytes += encoder.encode(JSON.stringify(env)).length;
|
|
90
|
-
const ts = env._ts;
|
|
91
|
-
if (oldestTs === void 0 || ts < oldestTs) oldestTs = ts;
|
|
92
|
-
if (newestTs === void 0 || ts > newestTs) newestTs = ts;
|
|
93
|
-
}
|
|
94
|
-
byCollection.push({
|
|
95
|
-
name: collectionName,
|
|
96
|
-
recordCount,
|
|
97
|
-
bytes,
|
|
98
|
-
// Spread conditionally — exactOptionalPropertyTypes forbids an
|
|
99
|
-
// explicit `undefined` on an optional property.
|
|
100
|
-
...oldestTs !== void 0 ? { oldestTs } : {},
|
|
101
|
-
...newestTs !== void 0 ? { newestTs } : {}
|
|
102
|
-
});
|
|
103
|
-
totalBytes += bytes;
|
|
104
|
-
totalRecords += recordCount;
|
|
105
|
-
}
|
|
106
|
-
byCollection.sort((a, b) => a.name.localeCompare(b.name));
|
|
107
|
-
return Object.freeze({
|
|
108
|
-
totalRecords,
|
|
109
|
-
totalBytes,
|
|
110
|
-
byCollection,
|
|
111
|
-
graph,
|
|
112
|
-
inaccessible,
|
|
113
|
-
danglingRefs
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
export {
|
|
117
|
-
AdoptionStateError,
|
|
118
|
-
BackupCorruptedError,
|
|
119
|
-
BackupLedgerError,
|
|
120
|
-
BundleIntegrityError,
|
|
121
|
-
BundleSealMismatchError,
|
|
122
|
-
BundleVersionConflictError,
|
|
123
|
-
COMPRESSION_BROTLI,
|
|
124
|
-
COMPRESSION_GZIP,
|
|
125
|
-
COMPRESSION_NONE,
|
|
126
|
-
FLAG_COMPRESSED,
|
|
127
|
-
FLAG_HAS_INTEGRITY_HASH,
|
|
128
|
-
NOYDB_BUNDLE_FORMAT_VERSION,
|
|
129
|
-
NOYDB_BUNDLE_MAGIC,
|
|
130
|
-
NOYDB_BUNDLE_PREFIX_BYTES,
|
|
131
|
-
PartitionExtractionError,
|
|
132
|
-
PodVersionConflictError,
|
|
133
|
-
TransferSealError,
|
|
134
|
-
adoptPartition,
|
|
135
|
-
createOwnerOnAdoptedPartition,
|
|
136
|
-
decryptExtractedPartition,
|
|
137
|
-
describeExtraction,
|
|
138
|
-
encodeBundleHeader,
|
|
139
|
-
extractPartition,
|
|
140
|
-
generateULID,
|
|
141
|
-
isULID,
|
|
142
|
-
readNoydbBundle,
|
|
143
|
-
readNoydbBundleHeader,
|
|
144
|
-
readPod,
|
|
145
|
-
readPodHeader,
|
|
146
|
-
resetBrotliSupportCache,
|
|
147
|
-
unsealDeks,
|
|
148
|
-
validateBundleHeader,
|
|
149
|
-
walkClosure,
|
|
150
|
-
writeNoydbBundle,
|
|
151
|
-
writePod
|
|
152
|
-
};
|
|
153
|
-
//# sourceMappingURL=index.js.map
|
package/dist/bundle/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/with-cargo/describe-extraction.ts"],"sourcesContent":["/**\n * Partition-extraction dry-run. Read-only preview of what an\n * `extractPartition` would move: record counts, byte totals, and the\n * timestamp span per collection — computed from raw encrypted\n * envelopes WITHOUT decrypting them. Writes nothing, mutates nothing.\n *\n * @module\n */\nimport type { Vault } from '../kernel/vault.js'\nimport { walkClosure, type WalkClosureOptions, type DanglingRefNotice } from './walk-closure.js'\n\nexport interface ExtractionPreview {\n readonly totalRecords: number\n /** Sum of serialized encrypted-envelope sizes (bytes). */\n readonly totalBytes: number\n readonly byCollection: ReadonlyArray<{\n readonly name: string\n readonly recordCount: number\n readonly bytes: number\n /** Earliest envelope `_ts` in this collection (lexicographic). */\n readonly oldestTs?: string\n readonly newestTs?: string\n }>\n readonly graph: { readonly depth: number; readonly cyclesDetected: boolean }\n /** Records the walk reached but whose envelope couldn't be read. */\n readonly inaccessible: ReadonlyArray<{ readonly collection: string; readonly id: string }>\n /**\n * #772: outbound FK edges whose referenced parent was excluded from the\n * closure (missing, or tier-elevated and therefore invisible) — mirrors\n * `ExtractPartitionResult.danglingRefs` (#759) so a preview/extract pair\n * gives the SAME signal. A parent excluded this way never appears in\n * `byCollection` at all; this is the only preview-time indicator.\n */\n readonly danglingRefs: ReadonlyArray<DanglingRefNotice>\n}\n\nexport async function describeExtraction(\n vault: Vault,\n opts: WalkClosureOptions,\n): Promise<ExtractionPreview> {\n const { closure, graph, danglingRefs } = await walkClosure(vault, opts)\n\n const { name: vaultName, adapter } = vault._introspectState()\n const encoder = new TextEncoder()\n\n const byCollection: Array<{\n name: string; recordCount: number; bytes: number; oldestTs?: string; newestTs?: string\n }> = []\n const inaccessible: Array<{ collection: string; id: string }> = []\n let totalBytes = 0\n let totalRecords = 0\n\n for (const [collectionName, ids] of closure) {\n let bytes = 0\n let oldestTs: string | undefined\n let newestTs: string | undefined\n let recordCount = 0\n\n for (const id of ids) {\n const env = await adapter.get(vaultName, collectionName, id)\n if (!env) {\n // Walk reached it (via decrypted list) but the raw store read\n // returned nothing — surface rather than miscount.\n inaccessible.push({ collection: collectionName, id })\n continue\n }\n recordCount++\n bytes += encoder.encode(JSON.stringify(env)).length\n const ts = env._ts\n if (oldestTs === undefined || ts < oldestTs) oldestTs = ts\n if (newestTs === undefined || ts > newestTs) newestTs = ts\n }\n\n byCollection.push({\n name: collectionName,\n recordCount,\n bytes,\n // Spread conditionally — exactOptionalPropertyTypes forbids an\n // explicit `undefined` on an optional property.\n ...(oldestTs !== undefined ? { oldestTs } : {}),\n ...(newestTs !== undefined ? { newestTs } : {}),\n })\n totalBytes += bytes\n totalRecords += recordCount\n }\n\n byCollection.sort((a, b) => a.name.localeCompare(b.name))\n\n return Object.freeze({\n totalRecords,\n totalBytes,\n byCollection,\n graph,\n inaccessible,\n danglingRefs,\n })\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCA,eAAsB,mBACpB,OACA,MAC4B;AAC5B,QAAM,EAAE,SAAS,OAAO,aAAa,IAAI,MAAM,YAAY,OAAO,IAAI;AAEtE,QAAM,EAAE,MAAM,WAAW,QAAQ,IAAI,MAAM,iBAAiB;AAC5D,QAAM,UAAU,IAAI,YAAY;AAEhC,QAAM,eAED,CAAC;AACN,QAAM,eAA0D,CAAC;AACjE,MAAI,aAAa;AACjB,MAAI,eAAe;AAEnB,aAAW,CAAC,gBAAgB,GAAG,KAAK,SAAS;AAC3C,QAAI,QAAQ;AACZ,QAAI;AACJ,QAAI;AACJ,QAAI,cAAc;AAElB,eAAW,MAAM,KAAK;AACpB,YAAM,MAAM,MAAM,QAAQ,IAAI,WAAW,gBAAgB,EAAE;AAC3D,UAAI,CAAC,KAAK;AAGR,qBAAa,KAAK,EAAE,YAAY,gBAAgB,GAAG,CAAC;AACpD;AAAA,MACF;AACA;AACA,eAAS,QAAQ,OAAO,KAAK,UAAU,GAAG,CAAC,EAAE;AAC7C,YAAM,KAAK,IAAI;AACf,UAAI,aAAa,UAAa,KAAK,SAAU,YAAW;AACxD,UAAI,aAAa,UAAa,KAAK,SAAU,YAAW;AAAA,IAC1D;AAEA,iBAAa,KAAK;AAAA,MAChB,MAAM;AAAA,MACN;AAAA,MACA;AAAA;AAAA;AAAA,MAGA,GAAI,aAAa,SAAY,EAAE,SAAS,IAAI,CAAC;AAAA,MAC7C,GAAI,aAAa,SAAY,EAAE,SAAS,IAAI,CAAC;AAAA,IAC/C,CAAC;AACD,kBAAc;AACd,oBAAgB;AAAA,EAClB;AAEA,eAAa,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;AAExD,SAAO,OAAO,OAAO;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;","names":[]}
|
package/dist/chunk-CHFZDSE4.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=chunk-CHFZDSE4.js.map
|