@noy-db/hub 0.3.0-pre.9 → 0.4.0-pre.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/aggregate/index.js +5 -5
- package/dist/api-3A3S4SHH.js +20 -0
- package/dist/as/index.js +11 -11
- package/dist/attestation/index.js +18 -18
- package/dist/backup-YPUEKIJC.js +242 -0
- package/dist/backup-YPUEKIJC.js.map +1 -0
- package/dist/blobs/index.js +13 -11
- package/dist/blobs/index.js.map +1 -1
- package/dist/broker/index.js +92 -0
- package/dist/broker/index.js.map +1 -0
- package/dist/bundle/index.js +25 -22
- package/dist/bundle/index.js.map +1 -1
- package/dist/by/index.js +2 -2
- package/dist/cargo/index.js +31 -32
- package/dist/chunk-2PCAVW2I.js +50 -0
- package/dist/chunk-3ELCWU56.js +344 -0
- package/dist/chunk-3ELCWU56.js.map +1 -0
- package/dist/chunk-4GPE63GU.js +111 -0
- package/dist/chunk-4GPE63GU.js.map +1 -0
- package/dist/chunk-554KLAAN.js +778 -0
- package/dist/chunk-5PFOMHTB.js +135 -0
- package/dist/chunk-5WZXVULX.js +209 -0
- package/dist/chunk-6HPG2YNX.js +38 -0
- package/dist/chunk-6HY2X62D.js +69 -0
- package/dist/chunk-6NQMXTYC.js +123 -0
- package/dist/chunk-6XE5TMPR.js +367 -0
- package/dist/chunk-A4FXFAKF.js +45 -0
- package/dist/chunk-A5BDDEXK.js +1537 -0
- package/dist/chunk-A5BDDEXK.js.map +1 -0
- package/dist/chunk-ANATMTOA.js +205 -0
- package/dist/chunk-BOKIKJJB.js +94 -0
- package/dist/chunk-CJ5KKU6X.js +49 -0
- package/dist/chunk-CZTLE22N.js +381 -0
- package/dist/chunk-CZTLE22N.js.map +1 -0
- package/dist/chunk-DDHM2TLX.js +164 -0
- package/dist/chunk-DDHM2TLX.js.map +1 -0
- package/dist/chunk-DRWBEDYO.js +37 -0
- package/dist/chunk-DRWBEDYO.js.map +1 -0
- package/dist/chunk-DSBQODMZ.js +202 -0
- package/dist/chunk-EO43ANYJ.js +382 -0
- package/dist/chunk-EWPOHMN2.js +255 -0
- package/dist/chunk-FH52K7EG.js +50 -0
- package/dist/chunk-FH52K7EG.js.map +1 -0
- package/dist/chunk-FXZDAV62.js +826 -0
- package/dist/chunk-FXZDAV62.js.map +1 -0
- package/dist/chunk-GDG5VVYG.js +167 -0
- package/dist/chunk-GDG5VVYG.js.map +1 -0
- package/dist/chunk-GULTLPFB.js +621 -0
- package/dist/chunk-GULTLPFB.js.map +1 -0
- package/dist/chunk-GWKAVKHI.js +71 -0
- package/dist/chunk-H2KSZMIX.js +164 -0
- package/dist/chunk-HOONYZY2.js +404 -0
- package/dist/chunk-HQBM64EE.js +957 -0
- package/dist/chunk-HQBM64EE.js.map +1 -0
- package/dist/chunk-IAO54J4R.js +333 -0
- package/dist/chunk-IAO54J4R.js.map +1 -0
- package/dist/chunk-IFJTPAQQ.js +150 -0
- package/dist/chunk-IFJTPAQQ.js.map +1 -0
- package/dist/chunk-IGJCYUT5.js +99 -0
- package/dist/chunk-IGJCYUT5.js.map +1 -0
- package/dist/chunk-IK43HLDQ.js +739 -0
- package/dist/chunk-IK43HLDQ.js.map +1 -0
- package/dist/chunk-ISMV2QVG.js +54 -0
- package/dist/chunk-IY23KFNZ.js +95 -0
- package/dist/chunk-JBBSYJHP.js +129 -0
- package/dist/chunk-JFCV5QIK.js +117 -0
- package/dist/chunk-JK733I5V.js +23 -0
- package/dist/chunk-JK733I5V.js.map +1 -0
- package/dist/chunk-JRBNCUNT.js +371 -0
- package/dist/chunk-JRBNCUNT.js.map +1 -0
- package/dist/chunk-JVBO4SZL.js +29 -0
- package/dist/chunk-JVBO4SZL.js.map +1 -0
- package/dist/chunk-KPZS5QAQ.js +151 -0
- package/dist/chunk-KPZS5QAQ.js.map +1 -0
- package/dist/chunk-KS6SAVCZ.js +247 -0
- package/dist/chunk-KS6SAVCZ.js.map +1 -0
- package/dist/chunk-LVGTA624.js +480 -0
- package/dist/chunk-LVGTA624.js.map +1 -0
- package/dist/chunk-M75ZZHSR.js +30 -0
- package/dist/chunk-MT62YSPZ.js +392 -0
- package/dist/chunk-MT62YSPZ.js.map +1 -0
- package/dist/chunk-N6WF5PKC.js +29 -0
- package/dist/chunk-NCCBLYEB.js +150 -0
- package/dist/chunk-OCVM6KDH.js +99 -0
- package/dist/chunk-ONTBCHCP.js +80 -0
- package/dist/chunk-PK6JIDQ4.js +14425 -0
- package/dist/chunk-PK6JIDQ4.js.map +1 -0
- package/dist/chunk-QDPZWTN2.js +74 -0
- package/dist/chunk-QDPZWTN2.js.map +1 -0
- package/dist/chunk-R3BLCFD2.js +130 -0
- package/dist/chunk-RA5VTXXG.js +173 -0
- package/dist/chunk-RA5VTXXG.js.map +1 -0
- package/dist/chunk-RDXW3OBQ.js +21 -0
- package/dist/chunk-RFI7GGFO.js +230 -0
- package/dist/chunk-RJ6K6K5M.js +36 -0
- package/dist/chunk-RJ6K6K5M.js.map +1 -0
- package/dist/chunk-RNG4VRP4.js +75 -0
- package/dist/chunk-RTEK4C4I.js +41 -0
- package/dist/chunk-S3BFKGET.js +369 -0
- package/dist/chunk-S3BFKGET.js.map +1 -0
- package/dist/chunk-S6Q37VGE.js +30 -0
- package/dist/chunk-SMIRGMS7.js +30 -0
- package/dist/chunk-SMIRGMS7.js.map +1 -0
- package/dist/chunk-SV6EAJEP.js +86 -0
- package/dist/chunk-T36RFODW.js +180 -0
- package/dist/chunk-T36RFODW.js.map +1 -0
- package/dist/chunk-T3GY65MA.js +367 -0
- package/dist/chunk-TAGR72IR.js +515 -0
- package/dist/chunk-TAGR72IR.js.map +1 -0
- package/dist/chunk-THVIPWRF.js +495 -0
- package/dist/chunk-THVIPWRF.js.map +1 -0
- package/dist/chunk-TIGPQDYP.js +14 -0
- package/dist/chunk-U6JMEH2P.js +261 -0
- package/dist/chunk-UC2ETWF3.js +34 -0
- package/dist/chunk-UDSR4X4L.js +235 -0
- package/dist/chunk-UHNGNKLV.js +2782 -0
- package/dist/chunk-UHNGNKLV.js.map +1 -0
- package/dist/chunk-VAIS3SOM.js +74 -0
- package/dist/chunk-VCBHAE4R.js +124 -0
- package/dist/chunk-VCTXU4AT.js +32 -0
- package/dist/chunk-VCTXU4AT.js.map +1 -0
- package/dist/chunk-VEALDPHW.js +524 -0
- package/dist/chunk-VEALDPHW.js.map +1 -0
- package/dist/chunk-VKCADNMR.js +589 -0
- package/dist/chunk-VRBTNCM4.js +720 -0
- package/dist/chunk-VRBTNCM4.js.map +1 -0
- package/dist/chunk-VYYM3MEN.js +98 -0
- package/dist/chunk-VYYM3MEN.js.map +1 -0
- package/dist/chunk-W2OG6JOL.js +1554 -0
- package/dist/chunk-W2OG6JOL.js.map +1 -0
- package/dist/chunk-W4TCUGQR.js +1128 -0
- package/dist/chunk-W4TCUGQR.js.map +1 -0
- package/dist/chunk-WG4QBZDN.js +283 -0
- package/dist/chunk-WG4QBZDN.js.map +1 -0
- package/dist/chunk-WHXXI3W5.js +135 -0
- package/dist/chunk-WHXXI3W5.js.map +1 -0
- package/dist/chunk-WKGF2TJR.js +45 -0
- package/dist/chunk-WNGGJWF7.js +36 -0
- package/dist/chunk-WOM2HTML.js +59 -0
- package/dist/chunk-WQIYTNJV.js +70 -0
- package/dist/chunk-WZSHL6DQ.js +59 -0
- package/dist/chunk-XDIAFPUM.js +42 -0
- package/dist/chunk-XJMBYYQK.js +40 -0
- package/dist/chunk-XTHCN77N.js +91 -0
- package/dist/chunk-XUW3PXHU.js +248 -0
- package/dist/chunk-XUW3PXHU.js.map +1 -0
- package/dist/chunk-YCH5GBN6.js +99 -0
- package/dist/chunk-YTGDPCPW.js +155 -0
- package/dist/chunk-YZQOGE2L.js +23 -0
- package/dist/chunk-Z4PD65VQ.js +265 -0
- package/dist/chunk-Z4PD65VQ.js.map +1 -0
- package/dist/chunk-ZXEZCY6F.js +85 -0
- package/dist/classified/index.js +5 -5
- package/dist/classified-marker-QWMASIT7.js +28 -0
- package/dist/classified-marker-QWMASIT7.js.map +1 -0
- package/dist/collection-facade-KMBWNCYP.js +44 -0
- package/dist/computed-DSMPXG2Y.js +11 -0
- package/dist/consent/index.js +9 -9
- package/dist/cover-QJRXINN5.js +52 -0
- package/dist/crdt/index.js +1 -1
- package/dist/dead-filter-66VGI6JV.js +28 -0
- package/dist/delegation-SU6CV3W7.js +25 -0
- package/dist/derivations/index.js +12 -12
- package/dist/derive-6RWU4EOA.js +21 -0
- package/dist/enclave-TKPN2G2U.js +141 -0
- package/dist/executor-KGNLJD6M.js +9 -0
- package/dist/executor-UX4FASYZ.js +26 -0
- package/dist/executor-XGIS6CR7.js +9 -0
- package/dist/export-accessible-LKW3QV22.js +23 -0
- package/dist/extract-partition-UP2ARO75.js +38 -0
- package/dist/fanout-sidecar-B5LVUMQX.js +74 -0
- package/dist/find-YS6XWB46.js +11 -0
- package/dist/forget/index.js +10 -10
- package/dist/forget/index.js.map +1 -1
- package/dist/guards/index.js +6 -6
- package/dist/history/index.js +14 -11
- package/dist/history/index.js.map +1 -1
- package/dist/i18n/index.js +21 -19
- package/dist/i18n/index.js.map +1 -1
- package/dist/index.d.ts +310 -1493
- package/dist/index.js +331 -191
- package/dist/index.js.map +1 -1
- package/dist/indexing/index.js +7 -7
- package/dist/indexing/index.js.map +1 -1
- package/dist/issue-3ACYX7LO.js +19 -0
- package/dist/kernel/best-effort-revert.d.ts +52 -0
- package/dist/kernel/cache/index.d.ts +10 -0
- package/dist/kernel/cache/lru.d.ts +97 -0
- package/dist/kernel/cache/policy.d.ts +32 -0
- package/dist/kernel/collection-config.d.ts +809 -0
- package/dist/kernel/collection.d.ts +1522 -0
- package/dist/kernel/constants.d.ts +18 -0
- package/dist/kernel/debug.d.ts +25 -0
- package/dist/kernel/enclave/broker/proof.d.ts +154 -0
- package/dist/kernel/enclave/classify/bidx.d.ts +77 -0
- package/dist/kernel/enclave/classify/compare.d.ts +10 -0
- package/dist/kernel/enclave/classify/digest.d.ts +8 -0
- package/dist/kernel/enclave/classify/find.d.ts +36 -0
- package/dist/kernel/enclave/classify/kofn.d.ts +7 -0
- package/dist/kernel/enclave/classify/normalize.d.ts +7 -0
- package/dist/kernel/enclave/classify/reveal.d.ts +10 -0
- package/dist/kernel/enclave/classify/vdig.d.ts +39 -0
- package/dist/kernel/enclave/classify/verify.d.ts +36 -0
- package/dist/kernel/enclave/classify/write.d.ts +8 -0
- package/dist/kernel/enclave/crypto.d.ts +263 -0
- package/dist/kernel/enclave/index.d.ts +79 -0
- package/dist/kernel/enclave/record-keys/deterministic.d.ts +55 -0
- package/dist/kernel/enclave/record-keys/envelope-body.d.ts +79 -0
- package/dist/kernel/enclave/record-keys/lifecycle.d.ts +107 -0
- package/dist/kernel/enclave/record-keys/record-codec.d.ts +328 -0
- package/dist/kernel/enclave/record-keys/sealed-slot.d.ts +14 -0
- package/dist/kernel/enclave/record-keys/sealed-slots.d.ts +123 -0
- package/dist/kernel/enclave/record-keys/sealing.d.ts +70 -0
- package/dist/kernel/enclave/record-keys/tombstone.d.ts +57 -0
- package/dist/kernel/env-check.d.ts +1 -0
- package/dist/kernel/errors.d.ts +1927 -0
- package/dist/kernel/events.d.ts +11 -0
- package/dist/kernel/lazy-count.d.ts +13 -0
- package/dist/kernel/memory-store.d.ts +17 -0
- package/dist/kernel/mutation.d.ts +14 -0
- package/dist/kernel/noydb.d.ts +836 -0
- package/dist/kernel/paths.d.ts +25 -0
- package/dist/kernel/query/builder.d.ts +520 -0
- package/dist/kernel/query/index.d.ts +31 -0
- package/dist/kernel/query/join.d.ts +205 -0
- package/dist/kernel/query/live.d.ts +111 -0
- package/dist/kernel/query/predicate.d.ts +139 -0
- package/dist/kernel/query/scan-builder.d.ts +334 -0
- package/dist/kernel/refs.d.ts +205 -0
- package/dist/kernel/schema.d.ts +134 -0
- package/dist/kernel/sync-policy.d.ts +188 -0
- package/dist/kernel/tier-visibility.d.ts +54 -0
- package/dist/kernel/types.d.ts +3245 -0
- package/dist/kernel/util/discriminant.d.ts +58 -0
- package/dist/kernel/util/index.d.ts +14 -0
- package/dist/kernel/util/sanitize-filename.d.ts +75 -0
- package/dist/kernel/validation.d.ts +130 -0
- package/dist/kernel/vault.d.ts +1744 -0
- package/dist/kernel/via/compose.d.ts +144 -0
- package/dist/kernel/via/dispatch.d.ts +195 -0
- package/dist/kernel/via/graph-wiring.d.ts +145 -0
- package/dist/kernel/via/graph.d.ts +166 -0
- package/dist/kernel/via/index.d.ts +200 -0
- package/dist/kernel/via/pipeline.d.ts +266 -0
- package/dist/kernel/via/reconcile.d.ts +153 -0
- package/dist/kernel/via/taint-binding.d.ts +66 -0
- package/dist/kernel/write-queue.d.ts +46 -0
- package/dist/ledger-PTK7XZYT.js +42 -0
- package/dist/legacy/bundle.d.ts +30 -0
- package/dist/legacy/kernel.d.ts +33 -0
- package/dist/liberate-MQQXBUCY.js +24 -0
- package/dist/link-set-SLJHDNRB.js +31 -0
- package/dist/materialized-views/index.js +20 -17
- package/dist/noydb-ANIW5FLE.js +69 -0
- package/dist/on/index.js +9 -9
- package/dist/overlay-views/index.js +4 -4
- package/dist/periods/index.js +12 -12
- package/dist/pod/index.js +13 -11
- package/dist/policy-YDLCOX4P.js +41 -0
- package/dist/port/as/index.d.ts +26 -0
- package/dist/port/at/index.d.ts +18 -0
- package/dist/port/by/default-provider.d.ts +9 -0
- package/dist/port/by/index.d.ts +17 -0
- package/dist/port/by/types.d.ts +86 -0
- package/dist/port/in/index.d.ts +21 -0
- package/dist/port/on/index.d.ts +27 -0
- package/dist/port/to/index.d.ts +19 -0
- package/dist/port/ui/index.d.ts +21 -0
- package/dist/port/with/blob-strategy.d.ts +98 -0
- package/dist/port/with/broker-strategy.d.ts +84 -0
- package/dist/port/with/capabilities.d.ts +31 -0
- package/dist/port/with/classified-marker.d.ts +9 -0
- package/dist/port/with/classified-strategy.d.ts +62 -0
- package/dist/port/with/computed-strategy.d.ts +19 -0
- package/dist/port/with/i18n-strategy.d.ts +175 -0
- package/dist/port/with/index.d.ts +18 -0
- package/dist/port/with/lazy-strategy.d.ts +48 -0
- package/dist/port/with/lookup-strategy.d.ts +129 -0
- package/dist/port/with/service-bus.d.ts +156 -0
- package/dist/port/with/team-strategy.d.ts +36 -0
- package/dist/port/with/write-hooks.d.ts +34 -0
- package/dist/portability/index.js +8 -8
- package/dist/post-register-2YHSADFI.js +60 -0
- package/dist/post-register-2YHSADFI.js.map +1 -0
- package/dist/purge-scope-FGNNLWHD.js +24 -0
- package/dist/purge-scope-FGNNLWHD.js.map +1 -0
- package/dist/query/index.js +12 -10
- package/dist/read-only-facade-CHCKSEPD.js +8 -0
- package/dist/register-PAM3ASRZ.js +23 -0
- package/dist/registry-4S2U2TR4.js +19 -0
- package/dist/registry-NPOWJHC4.js +9 -0
- package/dist/registry-VZ3CCI2R.js +18 -0
- package/dist/request-withdrawal-DI3H5WUI.js +31 -0
- package/dist/reveal-HWO4YMTJ.js +38 -0
- package/dist/reveal-HWO4YMTJ.js.map +1 -0
- package/dist/revoke-R5CZSVUT.js +24 -0
- package/dist/satellites/index.js +1 -1
- package/dist/sealed-record/index.js +12 -12
- package/dist/seed-3ZMF5EQA.js +231 -0
- package/dist/seed-3ZMF5EQA.js.map +1 -0
- package/dist/session/index.js +9 -9
- package/dist/shadow/index.js +2 -2
- package/dist/signer-MBVHW4WE.js +25 -0
- package/dist/snapshots/index.js +10 -10
- package/dist/stale-VZL4OGUB.js +29 -0
- package/dist/storage-3MEJUENZ.js +23 -0
- package/dist/store-coordination-provider-FKX3F6TQ.js +142 -0
- package/dist/sync/index.js +9 -9
- package/dist/team/index.js +15 -15
- package/dist/tiers/index.js +14 -10
- package/dist/to/index.js +1 -2
- package/dist/tx/index.js +3 -3
- package/dist/util/index.js +1 -1
- package/dist/verify-26Y5GNMK.js +140 -0
- package/dist/verify-26Y5GNMK.js.map +1 -0
- package/dist/via/blob/active.d.ts +34 -0
- package/dist/via/blob/binding.d.ts +86 -0
- package/dist/via/blob/index.d.ts +34 -0
- package/dist/via/classified/active.d.ts +3 -0
- package/dist/via/classified/binding.d.ts +83 -0
- package/dist/via/classified/config-drift.d.ts +34 -0
- package/dist/via/classified/descriptor.d.ts +66 -0
- package/dist/via/classified/errors.d.ts +19 -0
- package/dist/via/classified/guards.d.ts +23 -0
- package/dist/via/classified/index.d.ts +11 -0
- package/dist/via/classified/presets.d.ts +65 -0
- package/dist/via/classified/resolve.d.ts +9 -0
- package/dist/via/classified/strategy.d.ts +11 -0
- package/dist/via/classified/validators.d.ts +3 -0
- package/dist/via/classified/write.d.ts +4 -0
- package/dist/via/computed/binding.d.ts +34 -0
- package/dist/via/computed/descriptor.d.ts +35 -0
- package/dist/via/i18n/active.d.ts +28 -0
- package/dist/via/i18n/binding.d.ts +36 -0
- package/dist/via/i18n/core.d.ts +267 -0
- package/dist/via/i18n/densify.d.ts +24 -0
- package/dist/via/i18n/dictionary.d.ts +200 -0
- package/dist/via/i18n/index.d.ts +21 -0
- package/dist/via/i18n/policy.d.ts +44 -0
- package/dist/via/i18n/script.d.ts +26 -0
- package/dist/via/i18n/strategy.d.ts +13 -0
- package/dist/via/lookup/active.d.ts +19 -0
- package/dist/via/lookup/binding.d.ts +99 -0
- package/dist/via/lookup/descriptor.d.ts +123 -0
- package/dist/via/lookup/handle.d.ts +220 -0
- package/dist/via/lookup/index.d.ts +17 -0
- package/dist/via/lookup/registry.d.ts +228 -0
- package/dist/via/lookup/snapshot.d.ts +67 -0
- package/dist/via/money/arith.d.ts +68 -0
- package/dist/via/money/binding.d.ts +21 -0
- package/dist/via/money/branded.d.ts +61 -0
- package/dist/via/money/descriptor.d.ts +73 -0
- package/dist/via/money/fixed-point.d.ts +51 -0
- package/dist/via/money/index.d.ts +15 -0
- package/dist/via/money/iso4217.d.ts +6 -0
- package/dist/via/money/money-reducer.d.ts +33 -0
- package/dist/via/money/normalize.d.ts +105 -0
- package/dist/via/money/paths.d.ts +61 -0
- package/dist/via/money/where.d.ts +127 -0
- package/dist/walk-IPLXE36W.js +241 -0
- package/dist/with/index.js +11 -11
- package/dist/with-audit/attestation/active.d.ts +10 -0
- package/dist/with-audit/attestation/index.d.ts +16 -0
- package/dist/with-audit/attestation/issue.d.ts +29 -0
- package/dist/with-audit/attestation/revoke.d.ts +15 -0
- package/dist/with-audit/attestation/signer.d.ts +33 -0
- package/dist/with-audit/attestation/strategy.d.ts +44 -0
- package/dist/with-audit/attestation/vault-facade.d.ts +62 -0
- package/dist/with-audit/consent/active.d.ts +14 -0
- package/dist/with-audit/consent/consent.d.ts +114 -0
- package/dist/with-audit/consent/index.d.ts +14 -0
- package/dist/with-audit/consent/strategy.d.ts +36 -0
- package/dist/with-audit/forget/active.d.ts +31 -0
- package/dist/with-audit/forget/index.d.ts +28 -0
- package/dist/with-audit/forget/purge-scope.d.ts +54 -0
- package/dist/with-audit/forget/strategy.d.ts +199 -0
- package/dist/with-audit/forget/subject-index.d.ts +83 -0
- package/dist/with-audit/guards/executor.d.ts +26 -0
- package/dist/with-audit/guards/immutable-guard.d.ts +63 -0
- package/dist/with-audit/guards/index.d.ts +10 -0
- package/dist/with-audit/guards/read-only-facade.d.ts +31 -0
- package/dist/with-audit/guards/registry.d.ts +83 -0
- package/dist/with-audit/guards/transition-guard.d.ts +82 -0
- package/dist/with-audit/guards/types.d.ts +134 -0
- package/dist/with-audit/guards/with-guard.d.ts +15 -0
- package/dist/with-audit/periods/active.d.ts +11 -0
- package/dist/with-audit/periods/index.d.ts +18 -0
- package/dist/with-audit/periods/periods.d.ts +417 -0
- package/dist/with-audit/periods/strategy.d.ts +32 -0
- package/dist/with-audit/periods/vault-facade.d.ts +95 -0
- package/dist/with-audit/portability/active.d.ts +11 -0
- package/dist/with-audit/portability/export-accessible.d.ts +46 -0
- package/dist/with-audit/portability/index.d.ts +18 -0
- package/dist/with-audit/portability/request-withdrawal.d.ts +85 -0
- package/dist/with-audit/portability/strategy.d.ts +31 -0
- package/dist/with-audit/portability/withdraw-accessible.d.ts +82 -0
- package/dist/with-audit/sealed-record/active.d.ts +9 -0
- package/dist/with-audit/sealed-record/index.d.ts +55 -0
- package/dist/with-audit/sealed-record/strategy.d.ts +34 -0
- package/dist/with-audit/sealed-record/types.d.ts +27 -0
- package/dist/with-audit/tiers/active.d.ts +9 -0
- package/dist/with-audit/tiers/index.d.ts +394 -0
- package/dist/with-audit/tiers/strategy.d.ts +36 -0
- package/dist/with-cargo/active.d.ts +11 -0
- package/dist/with-cargo/adopt-partition.d.ts +81 -0
- package/dist/with-cargo/decrypt-partition.d.ts +19 -0
- package/dist/with-cargo/describe-extraction.d.ts +41 -0
- package/dist/with-cargo/extract-partition.d.ts +155 -0
- package/dist/with-cargo/index.d.ts +33 -0
- package/dist/with-cargo/strategy.d.ts +30 -0
- package/dist/with-cargo/vault-diff.d.ts +144 -0
- package/dist/with-cargo/walk-closure.d.ts +67 -0
- package/dist/with-commit/crdt/active.d.ts +25 -0
- package/dist/with-commit/crdt/crdt.d.ts +42 -0
- package/dist/with-commit/crdt/index.d.ts +16 -0
- package/dist/with-commit/crdt/strategy.d.ts +25 -0
- package/dist/with-commit/history/active.d.ts +40 -0
- package/dist/with-commit/history/diff.d.ts +23 -0
- package/dist/with-commit/history/history.d.ts +73 -0
- package/dist/with-commit/history/index.d.ts +30 -0
- package/dist/with-commit/history/ledger/constants.d.ts +37 -0
- package/dist/with-commit/history/ledger/entry.d.ts +195 -0
- package/dist/with-commit/history/ledger/hash.d.ts +30 -0
- package/dist/with-commit/history/ledger/index.d.ts +19 -0
- package/dist/with-commit/history/ledger/patch.d.ts +99 -0
- package/dist/with-commit/history/ledger/store.d.ts +356 -0
- package/dist/with-commit/history/strategy.d.ts +136 -0
- package/dist/with-commit/history/time-machine.d.ts +202 -0
- package/dist/with-commit/numbering/descriptor.d.ts +27 -0
- package/dist/with-commit/numbering/index.d.ts +69 -0
- package/dist/with-commit/sequence/active.d.ts +10 -0
- package/dist/with-commit/sequence/index.d.ts +150 -0
- package/dist/with-commit/sequence/strategy.d.ts +26 -0
- package/dist/with-commit/tx/active.d.ts +27 -0
- package/dist/with-commit/tx/dry-run.d.ts +29 -0
- package/dist/with-commit/tx/elevated-handle.d.ts +59 -0
- package/dist/with-commit/tx/index.d.ts +13 -0
- package/dist/with-commit/tx/invariants.d.ts +68 -0
- package/dist/with-commit/tx/strategy.d.ts +23 -0
- package/dist/with-commit/tx/transaction.d.ts +212 -0
- package/dist/with-fork/archive/engine.d.ts +71 -0
- package/dist/with-fork/archive/index.d.ts +23 -0
- package/dist/with-fork/shadow/active.d.ts +6 -0
- package/dist/with-fork/shadow/index.d.ts +14 -0
- package/dist/with-fork/shadow/strategy.d.ts +28 -0
- package/dist/with-fork/shadow/vault-frame.d.ts +93 -0
- package/dist/with-fork/snapshots/active.d.ts +20 -0
- package/dist/with-fork/snapshots/engine.d.ts +36 -0
- package/dist/with-fork/snapshots/index.d.ts +5 -0
- package/dist/with-fork/snapshots/noydb-facade.d.ts +64 -0
- package/dist/with-fork/snapshots/policy.d.ts +23 -0
- package/dist/with-fork/snapshots/scheduler.d.ts +34 -0
- package/dist/with-fork/snapshots/strategy.d.ts +48 -0
- package/dist/with-formula/computed/index.d.ts +48 -0
- package/dist/with-formula/computed/lazy.d.ts +13 -0
- package/dist/with-formula/derivations/executor.d.ts +61 -0
- package/dist/with-formula/derivations/fanout-sidecar.d.ts +75 -0
- package/dist/with-formula/derivations/index.d.ts +6 -0
- package/dist/with-formula/derivations/registry.d.ts +67 -0
- package/dist/with-formula/derivations/stale.d.ts +39 -0
- package/dist/with-formula/derivations/strategy-hash.d.ts +1 -0
- package/dist/with-formula/derivations/types.d.ts +248 -0
- package/dist/with-formula/derivations/with-derivation.d.ts +10 -0
- package/dist/with-formula/derivations/with-rollup.d.ts +34 -0
- package/dist/with-formula/materialized-views/dependency-analyzer.d.ts +73 -0
- package/dist/with-formula/materialized-views/executor.d.ts +80 -0
- package/dist/with-formula/materialized-views/index.d.ts +11 -0
- package/dist/with-formula/materialized-views/query-hash.d.ts +23 -0
- package/dist/with-formula/materialized-views/registry.d.ts +128 -0
- package/dist/with-formula/materialized-views/stale.d.ts +113 -0
- package/dist/with-formula/materialized-views/types.d.ts +399 -0
- package/dist/with-formula/materialized-views/with-materialized-view.d.ts +28 -0
- package/dist/with-formula/overlay-views/index.d.ts +5 -0
- package/dist/with-formula/overlay-views/registry.d.ts +42 -0
- package/dist/with-formula/overlay-views/types.d.ts +97 -0
- package/dist/with-formula/overlay-views/virtual-collection.d.ts +90 -0
- package/dist/with-formula/overlay-views/with-overlayed-view.d.ts +9 -0
- package/dist/with-lookup/aggregate/active.d.ts +33 -0
- package/dist/with-lookup/aggregate/aggregation.d.ts +166 -0
- package/dist/with-lookup/aggregate/canonical-key.d.ts +16 -0
- package/dist/with-lookup/aggregate/groupby.d.ts +280 -0
- package/dist/with-lookup/aggregate/index.d.ts +23 -0
- package/dist/with-lookup/aggregate/reducers.d.ts +257 -0
- package/dist/with-lookup/aggregate/strategy.d.ts +59 -0
- package/dist/with-lookup/embeddings/cosine.d.ts +2 -0
- package/dist/with-lookup/embeddings/descriptor.d.ts +8 -0
- package/dist/with-lookup/embeddings/index.d.ts +4 -0
- package/dist/with-lookup/embeddings/vec-id.d.ts +47 -0
- package/dist/with-lookup/embeddings/vector-set.d.ts +19 -0
- package/dist/with-lookup/indexing/active.d.ts +30 -0
- package/dist/with-lookup/indexing/collection-facade.d.ts +157 -0
- package/dist/with-lookup/indexing/eager-indexes.d.ts +122 -0
- package/dist/with-lookup/indexing/index.d.ts +27 -0
- package/dist/with-lookup/indexing/lazy-builder.d.ts +102 -0
- package/dist/with-lookup/indexing/persisted-indexes.d.ts +229 -0
- package/dist/with-lookup/indexing/strategy.d.ts +56 -0
- package/dist/with-lookup/indexing/unique-constraints.d.ts +74 -0
- package/dist/with-lookup/search/active.d.ts +10 -0
- package/dist/with-lookup/search/build-docs.d.ts +15 -0
- package/dist/with-lookup/search/collection-facade.d.ts +163 -0
- package/dist/with-lookup/search/fuse.d.ts +22 -0
- package/dist/with-lookup/search/index-store.d.ts +19 -0
- package/dist/with-lookup/search/index.d.ts +19 -0
- package/dist/with-lookup/search/inverted-index.d.ts +47 -0
- package/dist/with-lookup/search/persisted-index-store.d.ts +121 -0
- package/dist/with-lookup/search/retrieve-types.d.ts +29 -0
- package/dist/with-lookup/search/scan.d.ts +28 -0
- package/dist/with-lookup/search/segment.d.ts +15 -0
- package/dist/with-lookup/search/serialize.d.ts +4 -0
- package/dist/with-lookup/search/snippet.d.ts +5 -0
- package/dist/with-lookup/search/strategy.d.ts +41 -0
- package/dist/with-lookup/search/tokenize.d.ts +12 -0
- package/dist/with-party/auth-introspection/index.d.ts +44 -0
- package/dist/with-party/broker/active.d.ts +23 -0
- package/dist/with-party/broker/index.d.ts +28 -0
- package/dist/with-party/broker/seed.d.ts +77 -0
- package/dist/with-party/custody/active.d.ts +10 -0
- package/dist/with-party/custody/index.d.ts +69 -0
- package/dist/with-party/custody/liberate.d.ts +64 -0
- package/dist/with-party/custody/strategy.d.ts +48 -0
- package/dist/with-party/directory/cover/custom.d.ts +34 -0
- package/dist/with-party/directory/cover/index.d.ts +19 -0
- package/dist/with-party/directory/cover/schema.d.ts +39 -0
- package/dist/with-party/directory/cover/storage.d.ts +71 -0
- package/dist/with-party/directory/cover/types.d.ts +149 -0
- package/dist/with-party/directory/index.d.ts +11 -0
- package/dist/with-party/directory/storage.d.ts +33 -0
- package/dist/with-party/directory/types.d.ts +43 -0
- package/dist/with-party/directory/user-envelope/api.d.ts +201 -0
- package/dist/with-party/directory/user-envelope/index.d.ts +12 -0
- package/dist/with-party/directory/user-envelope/storage.d.ts +54 -0
- package/dist/with-party/directory/visibility.d.ts +47 -0
- package/dist/with-party/policy/engine.d.ts +60 -0
- package/dist/with-party/policy/index.d.ts +15 -0
- package/dist/with-party/policy/noydb-facade.d.ts +39 -0
- package/dist/with-party/policy/presets.d.ts +38 -0
- package/dist/with-party/policy/storage.d.ts +31 -0
- package/dist/with-party/session/active.d.ts +34 -0
- package/dist/with-party/session/dev-unlock.d.ts +128 -0
- package/dist/with-party/session/index.d.ts +23 -0
- package/dist/with-party/session/session-policy.d.ts +92 -0
- package/dist/with-party/session/session.d.ts +131 -0
- package/dist/with-party/session/strategy.d.ts +42 -0
- package/dist/with-party/session/unlock-state.d.ts +47 -0
- package/dist/with-party/sync/index.d.ts +31 -0
- package/dist/with-party/tab-coordination.d.ts +73 -0
- package/dist/with-party/tab-write-relay.d.ts +39 -0
- package/dist/with-party/team/active.d.ts +13 -0
- package/dist/with-party/team/authenticators.d.ts +95 -0
- package/dist/with-party/team/deed.d.ts +97 -0
- package/dist/with-party/team/delegation.d.ts +88 -0
- package/dist/with-party/team/index.d.ts +38 -0
- package/dist/with-party/team/keyring.d.ts +318 -0
- package/dist/with-party/team/magic-link-grant.d.ts +152 -0
- package/dist/with-party/team/managed-passphrase.d.ts +280 -0
- package/dist/with-party/team/noydb-facade.d.ts +484 -0
- package/dist/with-party/team/peer-recover.d.ts +81 -0
- package/dist/with-party/team/presence.d.ts +81 -0
- package/dist/with-party/team/recovery.d.ts +191 -0
- package/dist/with-party/team/reserved-secret-collections.d.ts +41 -0
- package/dist/with-party/team/rotate-recover.d.ts +275 -0
- package/dist/with-party/team/shamir-recovery-provider.d.ts +15 -0
- package/dist/with-party/team/strategy.d.ts +9 -0
- package/dist/with-party/team/sync-active.d.ts +33 -0
- package/dist/with-party/team/sync-credentials.d.ts +113 -0
- package/dist/with-party/team/sync-strategy.d.ts +67 -0
- package/dist/with-party/team/sync-transaction.d.ts +39 -0
- package/dist/with-party/team/sync.d.ts +174 -0
- package/dist/with-party/team/tiers.d.ts +39 -0
- package/dist/with-party/team/wrapped-deks.d.ts +86 -0
- package/dist/with-pod/backup.d.ts +74 -0
- package/dist/with-pod/bundle.d.ts +416 -0
- package/dist/with-pod/format.d.ts +207 -0
- package/dist/with-pod/index.d.ts +21 -0
- package/dist/with-pod/pod-store.d.ts +54 -0
- package/dist/with-pod/ulid.d.ts +64 -0
- package/dist/with-shape/blobs/blob-compaction.d.ts +170 -0
- package/dist/with-shape/blobs/blob-intent.d.ts +153 -0
- package/dist/with-shape/blobs/blob-set.d.ts +1286 -0
- package/dist/with-shape/blobs/export-blobs.d.ts +110 -0
- package/dist/with-shape/blobs/import-external.d.ts +50 -0
- package/dist/with-shape/blobs/mime-magic.d.ts +48 -0
- package/dist/with-shape/blobs/object-projection.d.ts +70 -0
- package/dist/with-shape/introspection/describe.d.ts +237 -0
- package/dist/with-shape/introspection/field-meta.d.ts +61 -0
- package/dist/with-shape/introspection/fields.d.ts +14 -0
- package/dist/with-shape/introspection/index.d.ts +12 -0
- package/dist/with-shape/introspection/json-schema.d.ts +13 -0
- package/dist/with-shape/introspection/meta.d.ts +22 -0
- package/dist/with-shape/introspection/projection.d.ts +13 -0
- package/dist/with-shape/introspection/types.d.ts +154 -0
- package/dist/with-shape/introspection/walk.d.ts +50 -0
- package/dist/with-shape/links/lazy-handle.d.ts +36 -0
- package/dist/with-shape/links/link-set.d.ts +67 -0
- package/dist/with-shape/links/names.d.ts +65 -0
- package/dist/with-shape/links/vault-facade.d.ts +211 -0
- package/dist/with-shape/persisted-schemas/canonicalize.d.ts +11 -0
- package/dist/with-shape/persisted-schemas/derive.d.ts +29 -0
- package/dist/with-shape/persisted-schemas/index.d.ts +21 -0
- package/dist/with-shape/persisted-schemas/register.d.ts +66 -0
- package/dist/with-shape/persisted-schemas/storage.d.ts +61 -0
- package/dist/with-shape/persisted-schemas/types.d.ts +54 -0
- package/dist/with-shape/satellites/dead-filter.d.ts +21 -0
- package/dist/with-shape/satellites/declare.d.ts +60 -0
- package/dist/with-shape/satellites/existence.d.ts +5 -0
- package/dist/with-shape/satellites/fanout.d.ts +38 -0
- package/dist/with-shape/satellites/forget.d.ts +47 -0
- package/dist/with-shape/satellites/index.d.ts +3 -0
- package/dist/with-shape/satellites/joined.d.ts +19 -0
- package/dist/with-shape/satellites/marker.d.ts +10 -0
- package/dist/with-shape/satellites/migrate-cek.d.ts +26 -0
- package/dist/with-shape/satellites/post-register.d.ts +6 -0
- package/dist/with-shape/satellites/proxy.d.ts +37 -0
- package/dist/with-shape/satellites/raw-target.d.ts +14 -0
- package/dist/with-shape/satellites/registry.d.ts +19 -0
- package/dist/with-shape/satellites/types.d.ts +37 -0
- package/dist/with-shape/satellites/validate.d.ts +17 -0
- package/dist/with-shape/schema-update/client-registry.d.ts +35 -0
- package/dist/with-shape/schema-update/cutover.d.ts +5 -0
- package/dist/with-shape/schema-update/delta.d.ts +2 -0
- package/dist/with-shape/schema-update/dispatch.d.ts +3 -0
- package/dist/with-shape/schema-update/fence-controller.d.ts +62 -0
- package/dist/with-shape/schema-update/fence-watcher.d.ts +37 -0
- package/dist/with-shape/schema-update/fence.d.ts +15 -0
- package/dist/with-shape/schema-update/gate.d.ts +16 -0
- package/dist/with-shape/schema-update/index.d.ts +6 -0
- package/dist/with-shape/schema-update/store-coordination-provider.d.ts +29 -0
- package/dist/with-shape/schema-update/strategies.d.ts +12 -0
- package/dist/with-shape/schema-update/types.d.ts +53 -0
- package/dist/with-store/index.d.ts +15 -0
- package/dist/with-store/lazy/active.d.ts +12 -0
- package/dist/with-store/lazy/index.d.ts +14 -0
- package/dist/with-store/lazy/strategy.d.ts +9 -0
- package/dist/with-store/route-store.d.ts +259 -0
- package/dist/with-store/store-middleware.d.ts +189 -0
- package/dist/withdraw-accessible-TZDATQVR.js +28 -0
- package/package.json +47 -55
- package/dist/adapter/index.d.ts +0 -4
- package/dist/adapter/index.js +0 -15
- package/dist/aggregate/index.d.ts +0 -41
- package/dist/api-HV4PDUWF.js +0 -20
- package/dist/as/index.d.ts +0 -6
- package/dist/at/index.d.ts +0 -4
- package/dist/attestation/index.d.ts +0 -19
- package/dist/backup-ODXO7OGA.js +0 -225
- package/dist/backup-ODXO7OGA.js.map +0 -1
- package/dist/blobs/index.d.ts +0 -43
- package/dist/bundle/index.d.ts +0 -121
- package/dist/bundle-DlSxo31R.d.ts +0 -548
- package/dist/by/index.d.ts +0 -1
- package/dist/cargo/index.d.ts +0 -8
- package/dist/chunk-2644KEGW.js +0 -247
- package/dist/chunk-2644KEGW.js.map +0 -1
- package/dist/chunk-2HVUKRNE.js +0 -21
- package/dist/chunk-2KOSJTMU.js +0 -69
- package/dist/chunk-2UQ4RMHV.js +0 -167
- package/dist/chunk-2UQ4RMHV.js.map +0 -1
- package/dist/chunk-2XE6LIXT.js +0 -515
- package/dist/chunk-2XE6LIXT.js.map +0 -1
- package/dist/chunk-34RRRIC3.js +0 -71
- package/dist/chunk-3C5CKXFI.js +0 -621
- package/dist/chunk-3C5CKXFI.js.map +0 -1
- package/dist/chunk-3I4KYWNP.js +0 -30
- package/dist/chunk-42KVY3OC.js +0 -86
- package/dist/chunk-4C4WBS4V.js +0 -13822
- package/dist/chunk-4C4WBS4V.js.map +0 -1
- package/dist/chunk-4G3IT7J7.js +0 -280
- package/dist/chunk-4G3IT7J7.js.map +0 -1
- package/dist/chunk-4RQ62VSR.js +0 -53
- package/dist/chunk-4RQ62VSR.js.map +0 -1
- package/dist/chunk-4ZSGSRBI.js +0 -1221
- package/dist/chunk-4ZSGSRBI.js.map +0 -1
- package/dist/chunk-5GAX2QOH.js +0 -132
- package/dist/chunk-5GAX2QOH.js.map +0 -1
- package/dist/chunk-5SAZMBW7.js +0 -202
- package/dist/chunk-5TZZUL5X.js +0 -30
- package/dist/chunk-6CU3FN74.js +0 -777
- package/dist/chunk-6G2SCQYS.js +0 -29
- package/dist/chunk-6G2SCQYS.js.map +0 -1
- package/dist/chunk-6MWUANRF.js +0 -29
- package/dist/chunk-6S7T6WC4.js +0 -111
- package/dist/chunk-6S7T6WC4.js.map +0 -1
- package/dist/chunk-6ULCYCMU.js +0 -74
- package/dist/chunk-7HAPHVRJ.js +0 -1695
- package/dist/chunk-7HAPHVRJ.js.map +0 -1
- package/dist/chunk-7IZQTCTR.js +0 -382
- package/dist/chunk-7ZANJ6JZ.js +0 -265
- package/dist/chunk-7ZANJ6JZ.js.map +0 -1
- package/dist/chunk-A2APWS32.js +0 -150
- package/dist/chunk-A2APWS32.js.map +0 -1
- package/dist/chunk-A4MAD6PO.js +0 -99
- package/dist/chunk-ANDBBA2P.js +0 -36
- package/dist/chunk-ANDBBA2P.js.map +0 -1
- package/dist/chunk-AUR7MRHA.js +0 -404
- package/dist/chunk-AYGZMQP5.js +0 -75
- package/dist/chunk-BGIZAFY7.js +0 -1
- package/dist/chunk-CJEMA2Z6.js +0 -230
- package/dist/chunk-CTSFKDGA.js +0 -40
- package/dist/chunk-CU62BBRB.js +0 -1465
- package/dist/chunk-CU62BBRB.js.map +0 -1
- package/dist/chunk-CWCCYH34.js +0 -23
- package/dist/chunk-DEYAO3N6.js +0 -589
- package/dist/chunk-DFIBOSOQ.js +0 -85
- package/dist/chunk-E5AHO65E.js +0 -150
- package/dist/chunk-FC3XK5JT.js +0 -99
- package/dist/chunk-FGOGS7CE.js +0 -662
- package/dist/chunk-FGOGS7CE.js.map +0 -1
- package/dist/chunk-GX2BYNCT.js +0 -117
- package/dist/chunk-GZ2MOPVX.js +0 -291
- package/dist/chunk-GZ2MOPVX.js.map +0 -1
- package/dist/chunk-H57P2SJB.js +0 -126
- package/dist/chunk-H57P2SJB.js.map +0 -1
- package/dist/chunk-HBTT7YQX.js +0 -94
- package/dist/chunk-HOCEGVGQ.js +0 -36
- package/dist/chunk-ICV32FPK.js +0 -50
- package/dist/chunk-IIP5WFVT.js +0 -462
- package/dist/chunk-IIP5WFVT.js.map +0 -1
- package/dist/chunk-IUKGIB2Q.js +0 -91
- package/dist/chunk-IWTYFS3D.js +0 -129
- package/dist/chunk-JC5R7P44.js +0 -355
- package/dist/chunk-JC5R7P44.js.map +0 -1
- package/dist/chunk-K2WCO3NX.js +0 -1
- package/dist/chunk-KBBWY46Y.js +0 -14
- package/dist/chunk-KBF5GSGX.js +0 -367
- package/dist/chunk-KCG3BHFG.js +0 -99
- package/dist/chunk-KCG3BHFG.js.map +0 -1
- package/dist/chunk-KNXN47MO.js +0 -155
- package/dist/chunk-KNXN47MO.js.map +0 -1
- package/dist/chunk-KWLD2D75.js +0 -38
- package/dist/chunk-KXKLKJW4.js +0 -49
- package/dist/chunk-KYC4LIEU.js +0 -123
- package/dist/chunk-LEOXZY36.js +0 -130
- package/dist/chunk-M5I354EE.js +0 -235
- package/dist/chunk-MK2BSS44.js +0 -34
- package/dist/chunk-MSVY7ULZ.js +0 -70
- package/dist/chunk-NNWK3PSY.js +0 -135
- package/dist/chunk-NSZ6J5DF.js +0 -59
- package/dist/chunk-NUEFXLZU.js +0 -59
- package/dist/chunk-NYVQCZ54.js +0 -261
- package/dist/chunk-OQAODTYR.js +0 -45
- package/dist/chunk-OV4CMJGR.js +0 -164
- package/dist/chunk-PEDZFFKW.js +0 -41
- package/dist/chunk-PF3FQCCF.js +0 -164
- package/dist/chunk-PF3FQCCF.js.map +0 -1
- package/dist/chunk-Q2KVKTC2.js +0 -823
- package/dist/chunk-Q2KVKTC2.js.map +0 -1
- package/dist/chunk-QJR3W3MF.js +0 -23
- package/dist/chunk-QJR3W3MF.js.map +0 -1
- package/dist/chunk-QTXQ6RNZ.js +0 -255
- package/dist/chunk-RJ5522XX.js +0 -453
- package/dist/chunk-RJ5522XX.js.map +0 -1
- package/dist/chunk-RMUXPHIH.js +0 -930
- package/dist/chunk-RMUXPHIH.js.map +0 -1
- package/dist/chunk-S6AQXDN4.js +0 -155
- package/dist/chunk-SSFC3IYA.js +0 -275
- package/dist/chunk-SSFC3IYA.js.map +0 -1
- package/dist/chunk-SZCHEDML.js +0 -209
- package/dist/chunk-TDPEJINP.js +0 -188
- package/dist/chunk-TDPEJINP.js.map +0 -1
- package/dist/chunk-TQ3REHVF.js +0 -95
- package/dist/chunk-TQ3REHVF.js.map +0 -1
- package/dist/chunk-UNJU345Q.js +0 -32
- package/dist/chunk-UNJU345Q.js.map +0 -1
- package/dist/chunk-V7RNIND6.js +0 -265
- package/dist/chunk-V7RNIND6.js.map +0 -1
- package/dist/chunk-VJ3NQK4K.js +0 -205
- package/dist/chunk-WNA6T3MA.js +0 -686
- package/dist/chunk-WNA6T3MA.js.map +0 -1
- package/dist/chunk-WVCQ75OK.js +0 -124
- package/dist/chunk-WXSYDNBT.js +0 -39
- package/dist/chunk-WXSYDNBT.js.map +0 -1
- package/dist/chunk-X66MXMR5.js +0 -42
- package/dist/chunk-XHD3L3JO.js +0 -930
- package/dist/chunk-XHD3L3JO.js.map +0 -1
- package/dist/chunk-XJK2WIYN.js +0 -430
- package/dist/chunk-XJK2WIYN.js.map +0 -1
- package/dist/chunk-XQ7UYPVN.js +0 -95
- package/dist/chunk-Y2OCKFZ3.js +0 -80
- package/dist/chunk-YBFOBRTO.js +0 -367
- package/dist/chunk-YLN33ADH.js +0 -97
- package/dist/chunk-YLN33ADH.js.map +0 -1
- package/dist/chunk-Z5YFRMG5.js +0 -45
- package/dist/chunk-ZWQFOXBR.js +0 -54
- package/dist/classified/index.d.ts +0 -16
- package/dist/classified-marker-IO5EBW7Q.js +0 -24
- package/dist/classified-marker-IO5EBW7Q.js.map +0 -1
- package/dist/collection-facade-3RAXG2OU.js +0 -38
- package/dist/computed-R62HGCO4.js +0 -11
- package/dist/consent/index.d.ts +0 -22
- package/dist/crdt/index.d.ts +0 -33
- package/dist/dead-filter-VNA4M3GP.js +0 -28
- package/dist/decrypt-partition-IHtxEnTi.d.ts +0 -21
- package/dist/delegation-ZKII5UBI.js +0 -25
- package/dist/derivations/index.d.ts +0 -69
- package/dist/derive-5D2C3WG4.js +0 -21
- package/dist/describe/index.d.ts +0 -4
- package/dist/describe/index.js +0 -1
- package/dist/dev-unlock-DDTafVO6.d.ts +0 -263
- package/dist/discriminant-BN9REW3o.d.ts +0 -60
- package/dist/enclave-EUBEJGPG.js +0 -125
- package/dist/executor-IL7SRNUZ.js +0 -23
- package/dist/executor-OUA2Y6YC.js +0 -9
- package/dist/executor-WAEI6PDV.js +0 -9
- package/dist/export-accessible-O55RKAGC.js +0 -23
- package/dist/extract-partition-VBGCBA6Q.js +0 -36
- package/dist/fanout-sidecar-CI5BCMQM.js +0 -74
- package/dist/find-FISGUWSK.js +0 -11
- package/dist/forget/index.d.ts +0 -36
- package/dist/guards/index.d.ts +0 -34
- package/dist/hash-DBkZfIBW.d.ts +0 -72
- package/dist/history/index.d.ts +0 -60
- package/dist/i18n/index.d.ts +0 -56
- package/dist/in/index.d.ts +0 -4
- package/dist/index-B9QdHytu.d.ts +0 -123
- package/dist/index-CyclmyDr.d.ts +0 -122
- package/dist/index-DzhNI2vE.d.ts +0 -23260
- package/dist/indexing/index.d.ts +0 -38
- package/dist/issue-EQAWIYFQ.js +0 -19
- package/dist/kernel/index.d.ts +0 -31
- package/dist/kernel/index.js +0 -60
- package/dist/lazy/index.d.ts +0 -20
- package/dist/ledger-AJA2SR3C.js +0 -42
- package/dist/liberate-SEGR4JLY.js +0 -24
- package/dist/link-set-YBAC2DQT.js +0 -31
- package/dist/materialized-views/index.d.ts +0 -182
- package/dist/mime-magic-CbV1quyp.d.ts +0 -103
- package/dist/noydb-AMEOU456.js +0 -65
- package/dist/on/index.d.ts +0 -4
- package/dist/overlay-views/index.d.ts +0 -97
- package/dist/periods/index.d.ts +0 -19
- package/dist/pod/index.d.ts +0 -62
- package/dist/policy-SDGRWVIL.js +0 -41
- package/dist/portability/index.d.ts +0 -19
- package/dist/post-register-MROIUA5O.js +0 -55
- package/dist/post-register-MROIUA5O.js.map +0 -1
- package/dist/public-envelope-J5PLQOW2.js +0 -32
- package/dist/query/index.d.ts +0 -4
- package/dist/read-only-facade-UCYNRE56.js +0 -8
- package/dist/register-OVJKW7BS.js +0 -23
- package/dist/registry-5RJSK5AJ.js +0 -9
- package/dist/registry-DQRNTWRL.js +0 -18
- package/dist/registry-LTGLERS7.js +0 -19
- package/dist/request-withdrawal-27O77D2V.js +0 -31
- package/dist/reveal-LT3I2K4P.js +0 -38
- package/dist/reveal-LT3I2K4P.js.map +0 -1
- package/dist/revoke-4N45G7D2.js +0 -24
- package/dist/revoke-4N45G7D2.js.map +0 -1
- package/dist/satellites/index.d.ts +0 -4
- package/dist/sealed-record/index.d.ts +0 -68
- package/dist/session/index.d.ts +0 -43
- package/dist/shadow/index.d.ts +0 -14
- package/dist/signer-XJCOV7JD.js +0 -25
- package/dist/signer-XJCOV7JD.js.map +0 -1
- package/dist/snapshots/index.d.ts +0 -25
- package/dist/stale-IYYXEH3U.js +0 -14
- package/dist/stale-IYYXEH3U.js.map +0 -1
- package/dist/storage-Y44CAPE6.js +0 -23
- package/dist/storage-Y44CAPE6.js.map +0 -1
- package/dist/store-coordination-provider-WKGAE2WI.js +0 -142
- package/dist/subject-index-CyOgGMJL.d.ts +0 -380
- package/dist/sync/index.d.ts +0 -40
- package/dist/team/index.d.ts +0 -154
- package/dist/tiers/index.d.ts +0 -4
- package/dist/to/index.d.ts +0 -4
- package/dist/transition-guard-BOUkzQU4.d.ts +0 -165
- package/dist/tx/index.d.ts +0 -34
- package/dist/ui/index.d.ts +0 -4
- package/dist/ulid-DRH25k3y.d.ts +0 -66
- package/dist/util/index.d.ts +0 -79
- package/dist/validators-B3SalxlJ.d.ts +0 -101
- package/dist/vault-diff-Dt9NkLzw.d.ts +0 -147
- package/dist/verify-GH6CWVSW.js +0 -139
- package/dist/verify-GH6CWVSW.js.map +0 -1
- package/dist/walk-76UCFXYV.js +0 -241
- package/dist/with/index.d.ts +0 -37
- package/dist/with-materialized-view-BP33v1Z6.d.ts +0 -27
- package/dist/with-overlayed-view-DntFpOKN.d.ts +0 -12
- package/dist/with-rollup-ClCHO6-4.d.ts +0 -47
- package/dist/withdraw-accessible-6J2UH3IN.js +0 -28
- package/dist/withdraw-accessible-6J2UH3IN.js.map +0 -1
- /package/dist/{adapter/index.js.map → api-3A3S4SHH.js.map} +0 -0
- /package/dist/{chunk-ICV32FPK.js.map → chunk-2PCAVW2I.js.map} +0 -0
- /package/dist/{chunk-6CU3FN74.js.map → chunk-554KLAAN.js.map} +0 -0
- /package/dist/{chunk-NNWK3PSY.js.map → chunk-5PFOMHTB.js.map} +0 -0
- /package/dist/{chunk-SZCHEDML.js.map → chunk-5WZXVULX.js.map} +0 -0
- /package/dist/{chunk-KWLD2D75.js.map → chunk-6HPG2YNX.js.map} +0 -0
- /package/dist/{chunk-2KOSJTMU.js.map → chunk-6HY2X62D.js.map} +0 -0
- /package/dist/{chunk-KYC4LIEU.js.map → chunk-6NQMXTYC.js.map} +0 -0
- /package/dist/{chunk-KBF5GSGX.js.map → chunk-6XE5TMPR.js.map} +0 -0
- /package/dist/{chunk-Z5YFRMG5.js.map → chunk-A4FXFAKF.js.map} +0 -0
- /package/dist/{chunk-VJ3NQK4K.js.map → chunk-ANATMTOA.js.map} +0 -0
- /package/dist/{chunk-HBTT7YQX.js.map → chunk-BOKIKJJB.js.map} +0 -0
- /package/dist/{chunk-KXKLKJW4.js.map → chunk-CJ5KKU6X.js.map} +0 -0
- /package/dist/{chunk-5SAZMBW7.js.map → chunk-DSBQODMZ.js.map} +0 -0
- /package/dist/{chunk-7IZQTCTR.js.map → chunk-EO43ANYJ.js.map} +0 -0
- /package/dist/{chunk-QTXQ6RNZ.js.map → chunk-EWPOHMN2.js.map} +0 -0
- /package/dist/{chunk-34RRRIC3.js.map → chunk-GWKAVKHI.js.map} +0 -0
- /package/dist/{chunk-OV4CMJGR.js.map → chunk-H2KSZMIX.js.map} +0 -0
- /package/dist/{chunk-AUR7MRHA.js.map → chunk-HOONYZY2.js.map} +0 -0
- /package/dist/{chunk-ZWQFOXBR.js.map → chunk-ISMV2QVG.js.map} +0 -0
- /package/dist/{chunk-XQ7UYPVN.js.map → chunk-IY23KFNZ.js.map} +0 -0
- /package/dist/{chunk-IWTYFS3D.js.map → chunk-JBBSYJHP.js.map} +0 -0
- /package/dist/{chunk-GX2BYNCT.js.map → chunk-JFCV5QIK.js.map} +0 -0
- /package/dist/{chunk-5TZZUL5X.js.map → chunk-M75ZZHSR.js.map} +0 -0
- /package/dist/{chunk-6MWUANRF.js.map → chunk-N6WF5PKC.js.map} +0 -0
- /package/dist/{chunk-E5AHO65E.js.map → chunk-NCCBLYEB.js.map} +0 -0
- /package/dist/{chunk-A4MAD6PO.js.map → chunk-OCVM6KDH.js.map} +0 -0
- /package/dist/{chunk-Y2OCKFZ3.js.map → chunk-ONTBCHCP.js.map} +0 -0
- /package/dist/{chunk-LEOXZY36.js.map → chunk-R3BLCFD2.js.map} +0 -0
- /package/dist/{chunk-2HVUKRNE.js.map → chunk-RDXW3OBQ.js.map} +0 -0
- /package/dist/{chunk-CJEMA2Z6.js.map → chunk-RFI7GGFO.js.map} +0 -0
- /package/dist/{chunk-AYGZMQP5.js.map → chunk-RNG4VRP4.js.map} +0 -0
- /package/dist/{chunk-PEDZFFKW.js.map → chunk-RTEK4C4I.js.map} +0 -0
- /package/dist/{chunk-3I4KYWNP.js.map → chunk-S6Q37VGE.js.map} +0 -0
- /package/dist/{chunk-42KVY3OC.js.map → chunk-SV6EAJEP.js.map} +0 -0
- /package/dist/{chunk-YBFOBRTO.js.map → chunk-T3GY65MA.js.map} +0 -0
- /package/dist/{chunk-KBBWY46Y.js.map → chunk-TIGPQDYP.js.map} +0 -0
- /package/dist/{chunk-NYVQCZ54.js.map → chunk-U6JMEH2P.js.map} +0 -0
- /package/dist/{chunk-MK2BSS44.js.map → chunk-UC2ETWF3.js.map} +0 -0
- /package/dist/{chunk-M5I354EE.js.map → chunk-UDSR4X4L.js.map} +0 -0
- /package/dist/{chunk-6ULCYCMU.js.map → chunk-VAIS3SOM.js.map} +0 -0
- /package/dist/{chunk-WVCQ75OK.js.map → chunk-VCBHAE4R.js.map} +0 -0
- /package/dist/{chunk-DEYAO3N6.js.map → chunk-VKCADNMR.js.map} +0 -0
- /package/dist/{chunk-OQAODTYR.js.map → chunk-WKGF2TJR.js.map} +0 -0
- /package/dist/{chunk-HOCEGVGQ.js.map → chunk-WNGGJWF7.js.map} +0 -0
- /package/dist/{chunk-NSZ6J5DF.js.map → chunk-WOM2HTML.js.map} +0 -0
- /package/dist/{chunk-MSVY7ULZ.js.map → chunk-WQIYTNJV.js.map} +0 -0
- /package/dist/{chunk-NUEFXLZU.js.map → chunk-WZSHL6DQ.js.map} +0 -0
- /package/dist/{chunk-X66MXMR5.js.map → chunk-XDIAFPUM.js.map} +0 -0
- /package/dist/{chunk-CTSFKDGA.js.map → chunk-XJMBYYQK.js.map} +0 -0
- /package/dist/{chunk-IUKGIB2Q.js.map → chunk-XTHCN77N.js.map} +0 -0
- /package/dist/{chunk-FC3XK5JT.js.map → chunk-YCH5GBN6.js.map} +0 -0
- /package/dist/{chunk-S6AQXDN4.js.map → chunk-YTGDPCPW.js.map} +0 -0
- /package/dist/{chunk-CWCCYH34.js.map → chunk-YZQOGE2L.js.map} +0 -0
- /package/dist/{chunk-DFIBOSOQ.js.map → chunk-ZXEZCY6F.js.map} +0 -0
- /package/dist/{api-HV4PDUWF.js.map → collection-facade-KMBWNCYP.js.map} +0 -0
- /package/dist/{chunk-BGIZAFY7.js.map → computed-DSMPXG2Y.js.map} +0 -0
- /package/dist/{chunk-K2WCO3NX.js.map → cover-QJRXINN5.js.map} +0 -0
- /package/dist/{dead-filter-VNA4M3GP.js.map → dead-filter-66VGI6JV.js.map} +0 -0
- /package/dist/{collection-facade-3RAXG2OU.js.map → delegation-SU6CV3W7.js.map} +0 -0
- /package/dist/{computed-R62HGCO4.js.map → derive-6RWU4EOA.js.map} +0 -0
- /package/dist/{delegation-ZKII5UBI.js.map → enclave-TKPN2G2U.js.map} +0 -0
- /package/dist/{derive-5D2C3WG4.js.map → executor-KGNLJD6M.js.map} +0 -0
- /package/dist/{describe/index.js.map → executor-UX4FASYZ.js.map} +0 -0
- /package/dist/{enclave-EUBEJGPG.js.map → executor-XGIS6CR7.js.map} +0 -0
- /package/dist/{executor-IL7SRNUZ.js.map → export-accessible-LKW3QV22.js.map} +0 -0
- /package/dist/{executor-OUA2Y6YC.js.map → extract-partition-UP2ARO75.js.map} +0 -0
- /package/dist/{fanout-sidecar-CI5BCMQM.js.map → fanout-sidecar-B5LVUMQX.js.map} +0 -0
- /package/dist/{executor-WAEI6PDV.js.map → find-YS6XWB46.js.map} +0 -0
- /package/dist/{export-accessible-O55RKAGC.js.map → issue-3ACYX7LO.js.map} +0 -0
- /package/dist/{extract-partition-VBGCBA6Q.js.map → ledger-PTK7XZYT.js.map} +0 -0
- /package/dist/{find-FISGUWSK.js.map → liberate-MQQXBUCY.js.map} +0 -0
- /package/dist/{issue-EQAWIYFQ.js.map → link-set-SLJHDNRB.js.map} +0 -0
- /package/dist/{kernel/index.js.map → noydb-ANIW5FLE.js.map} +0 -0
- /package/dist/{ledger-AJA2SR3C.js.map → policy-YDLCOX4P.js.map} +0 -0
- /package/dist/{liberate-SEGR4JLY.js.map → read-only-facade-CHCKSEPD.js.map} +0 -0
- /package/dist/{link-set-YBAC2DQT.js.map → register-PAM3ASRZ.js.map} +0 -0
- /package/dist/{noydb-AMEOU456.js.map → registry-4S2U2TR4.js.map} +0 -0
- /package/dist/{policy-SDGRWVIL.js.map → registry-NPOWJHC4.js.map} +0 -0
- /package/dist/{public-envelope-J5PLQOW2.js.map → registry-VZ3CCI2R.js.map} +0 -0
- /package/dist/{read-only-facade-UCYNRE56.js.map → request-withdrawal-DI3H5WUI.js.map} +0 -0
- /package/dist/{register-OVJKW7BS.js.map → revoke-R5CZSVUT.js.map} +0 -0
- /package/dist/{registry-5RJSK5AJ.js.map → signer-MBVHW4WE.js.map} +0 -0
- /package/dist/{registry-DQRNTWRL.js.map → stale-VZL4OGUB.js.map} +0 -0
- /package/dist/{registry-LTGLERS7.js.map → storage-3MEJUENZ.js.map} +0 -0
- /package/dist/{store-coordination-provider-WKGAE2WI.js.map → store-coordination-provider-FKX3F6TQ.js.map} +0 -0
- /package/dist/{walk-76UCFXYV.js.map → walk-IPLXE36W.js.map} +0 -0
- /package/dist/{request-withdrawal-27O77D2V.js.map → withdraw-accessible-TZDATQVR.js.map} +0 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session tokens —
|
|
3
|
+
*
|
|
4
|
+
* After a vault is unlocked (via passphrase, WebAuthn, OIDC, or magic-
|
|
5
|
+
* link), the caller can call `createSession()` to get a session token that
|
|
6
|
+
* allows re-establishing the KEK for the session lifetime without re-running
|
|
7
|
+
* PBKDF2 or any interactive auth challenge.
|
|
8
|
+
*
|
|
9
|
+
* Security model
|
|
10
|
+
* ──────────────
|
|
11
|
+
* A session consists of two pieces that must both be present to recover the
|
|
12
|
+
* KEK:
|
|
13
|
+
*
|
|
14
|
+
* 1. The **session key** — a non-extractable AES-256-GCM CryptoKey that
|
|
15
|
+
* exists only in memory. "Non-extractable" is enforced by the WebCrypto
|
|
16
|
+
* API: the key object cannot be serialized, exported, or sent over
|
|
17
|
+
* postMessage. When the JS context is GC'd (tab close, navigation away,
|
|
18
|
+
* worker termination) the key becomes unrecoverable.
|
|
19
|
+
*
|
|
20
|
+
* 2. The **session token** — a JSON object that carries the KEK wrapped
|
|
21
|
+
* with the session key (AES-256-GCM, fresh IV per session), plus
|
|
22
|
+
* unencrypted session metadata (sessionId, userId, vault, role,
|
|
23
|
+
* expiresAt). The token can be serialized to JSON and stored in
|
|
24
|
+
* sessionStorage or passed across callsites within the same tab, but
|
|
25
|
+
* it is useless without the session key.
|
|
26
|
+
*
|
|
27
|
+
* The session key is kept in a module-level Map indexed by sessionId. Callers
|
|
28
|
+
* that need to re-use a session must hold on to the sessionId returned from
|
|
29
|
+
* `createSession()`; the key is looked up automatically by `resolveSession()`.
|
|
30
|
+
*
|
|
31
|
+
* Revocation: `revokeSession()` removes the entry from the Map. Because the
|
|
32
|
+
* key is non-extractable, removal is sufficient — no one holds a serializable
|
|
33
|
+
* copy of the key.
|
|
34
|
+
*
|
|
35
|
+
* Tab-scoped lifetime: the module-level Map lives only as long as the JS
|
|
36
|
+
* module. Tab close → module unloaded → Map GC'd → all session keys gone.
|
|
37
|
+
* This is the zero-effort logout: closing the tab is always a secure logout.
|
|
38
|
+
*
|
|
39
|
+
* Expiry: `createSession()` accepts a `ttlMs` option. `resolveSession()`
|
|
40
|
+
* checks `expiresAt` and throws `SessionExpiredError` if the token is stale,
|
|
41
|
+
* even if the session key is still in the Map.
|
|
42
|
+
*/
|
|
43
|
+
import type { Role } from '../../kernel/types.js';
|
|
44
|
+
import type { UnlockedKeyring } from '../team/keyring.js';
|
|
45
|
+
/** The serializable part of a session token. Safe to store in sessionStorage. */
|
|
46
|
+
export interface SessionToken {
|
|
47
|
+
readonly _noydb_session: 1;
|
|
48
|
+
/** Unique session identifier (ULID). Use this as the handle for resolve/revoke. */
|
|
49
|
+
readonly sessionId: string;
|
|
50
|
+
readonly userId: string;
|
|
51
|
+
readonly vault: string;
|
|
52
|
+
readonly role: Role;
|
|
53
|
+
/** ISO timestamp — resolveSession() rejects this token after this time. */
|
|
54
|
+
readonly expiresAt: string;
|
|
55
|
+
/** KEK wrapped with the session key (AES-256-GCM). Base64. */
|
|
56
|
+
readonly wrappedKek: string;
|
|
57
|
+
/** IV used for the wrapping operation. Base64. */
|
|
58
|
+
readonly kekIv: string;
|
|
59
|
+
}
|
|
60
|
+
/** Result returned from `createSession()`. */
|
|
61
|
+
export interface CreateSessionResult {
|
|
62
|
+
/** Serializable token — store in sessionStorage or pass to `resolveSession()`. */
|
|
63
|
+
token: SessionToken;
|
|
64
|
+
/** The sessionId — use this handle for `resolveSession()` and `revokeSession()`. */
|
|
65
|
+
sessionId: string;
|
|
66
|
+
}
|
|
67
|
+
/** Options for `createSession()`. */
|
|
68
|
+
export interface CreateSessionOptions {
|
|
69
|
+
/**
|
|
70
|
+
* Session lifetime in milliseconds. Defaults to 60 minutes.
|
|
71
|
+
* After this duration, `resolveSession()` throws `SessionExpiredError`.
|
|
72
|
+
*/
|
|
73
|
+
ttlMs?: number;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Create a session for an already-unlocked keyring.
|
|
77
|
+
*
|
|
78
|
+
* Call this after any successful unlock (passphrase, WebAuthn, OIDC,
|
|
79
|
+
* magic-link). The returned `sessionId` is the handle for later
|
|
80
|
+
* `resolveSession()` and `revokeSession()` calls.
|
|
81
|
+
*
|
|
82
|
+
* The session key is generated fresh (non-extractable) and stored in the
|
|
83
|
+
* module-level Map. The KEK from `keyring.kek` is exported (it must be
|
|
84
|
+
* extractable — it was derived by `deriveKey()` which sets extractable: false,
|
|
85
|
+
* but it's unwrapped from the keyring which sets extractable: true) and then
|
|
86
|
+
* re-wrapped with the session key.
|
|
87
|
+
*
|
|
88
|
+
* @param keyring - An already-unlocked keyring whose `kek` is available.
|
|
89
|
+
* @param vault - The vault name this session is scoped to.
|
|
90
|
+
* @param options - Optional session configuration.
|
|
91
|
+
*/
|
|
92
|
+
export declare function createSession(keyring: UnlockedKeyring, vault: string, options?: CreateSessionOptions): Promise<CreateSessionResult>;
|
|
93
|
+
/**
|
|
94
|
+
* Resolve a session token back into an UnlockedKeyring.
|
|
95
|
+
*
|
|
96
|
+
* Looks up the session key by `sessionId`, checks the token is not expired,
|
|
97
|
+
* then decrypts the payload to reconstruct the keyring's DEK set.
|
|
98
|
+
*
|
|
99
|
+
* Throws `SessionExpiredError` if the token's `expiresAt` is in the past.
|
|
100
|
+
* Throws `SessionNotFoundError` if the session key is not in the store
|
|
101
|
+
* (tab was reloaded, session was revoked, or the sessionId is wrong).
|
|
102
|
+
*
|
|
103
|
+
* @param token - The SessionToken from `createSession()`.
|
|
104
|
+
*/
|
|
105
|
+
export declare function resolveSession(token: SessionToken): Promise<UnlockedKeyring>;
|
|
106
|
+
/**
|
|
107
|
+
* Revoke a session by removing its key from the store.
|
|
108
|
+
*
|
|
109
|
+
* After revocation, `resolveSession()` will throw `SessionNotFoundError`
|
|
110
|
+
* for this sessionId. The session token (if held by the caller) becomes
|
|
111
|
+
* permanently useless. This is the explicit logout path.
|
|
112
|
+
*
|
|
113
|
+
* No-op if the session was already expired or does not exist.
|
|
114
|
+
*/
|
|
115
|
+
export declare function revokeSession(sessionId: string): void;
|
|
116
|
+
/**
|
|
117
|
+
* Check if a session is still alive (key in store + not expired).
|
|
118
|
+
* Does not decrypt anything — purely a metadata check.
|
|
119
|
+
*/
|
|
120
|
+
export declare function isSessionAlive(token: SessionToken): boolean;
|
|
121
|
+
/**
|
|
122
|
+
* Revoke all active sessions. Used by `Noydb.close()` to ensure that
|
|
123
|
+
* closing the instance destroys all session state, not just the keyring
|
|
124
|
+
* cache.
|
|
125
|
+
*/
|
|
126
|
+
export declare function revokeAllSessions(): void;
|
|
127
|
+
/**
|
|
128
|
+
* Return the number of active sessions currently in the store.
|
|
129
|
+
* Useful for diagnostics and tests.
|
|
130
|
+
*/
|
|
131
|
+
export declare function activeSessionCount(): number;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strategy seam for the optional session-policy service. Core
|
|
3
|
+
* imports `SessionStrategy` type-only + `NO_SESSION` stub; real
|
|
4
|
+
* `validateSessionPolicy`, `createEnforcer`, and `revokeAllSessions`
|
|
5
|
+
* are only reachable via `withSession()` in `./active.ts`.
|
|
6
|
+
*
|
|
7
|
+
* Solo apps that never set `sessionPolicy` and never issue a session
|
|
8
|
+
* token ship none of the ~495 LOC of policy + token machinery
|
|
9
|
+
* (session-policy.ts + session.ts). Dev-unlock (~299 LOC) is a
|
|
10
|
+
* separate import already tree-shake-friendly via direct named
|
|
11
|
+
* imports.
|
|
12
|
+
*
|
|
13
|
+
* Behavior under NO_SESSION:
|
|
14
|
+
*
|
|
15
|
+
* - **validateSessionPolicy** — throws when called. Only fires if
|
|
16
|
+
* `createNoydb({ sessionPolicy })` was passed; if you set a policy
|
|
17
|
+
* you must opt into the strategy.
|
|
18
|
+
* - **createEnforcer** — throws. Same gate.
|
|
19
|
+
* - **revokeAllSessions** — silent no-op. Called unconditionally on
|
|
20
|
+
* `db.close()`; without the strategy the global session registry
|
|
21
|
+
* never recorded anything, so the no-op is correct.
|
|
22
|
+
*
|
|
23
|
+
* @internal
|
|
24
|
+
*/
|
|
25
|
+
import type { SessionPolicy } from '../../kernel/types.js';
|
|
26
|
+
import type { PolicyEnforcer, PolicyEnforcerOptions } from './session-policy.js';
|
|
27
|
+
/**
|
|
28
|
+
* @internal
|
|
29
|
+
*/
|
|
30
|
+
export interface SessionStrategy {
|
|
31
|
+
validateSessionPolicy(policy: SessionPolicy): void;
|
|
32
|
+
createEnforcer(opts: PolicyEnforcerOptions): PolicyEnforcer;
|
|
33
|
+
revokeAllSessions(): void;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* No-session stub. Policy validation + enforcer construction throw
|
|
37
|
+
* with an actionable pointer; global session revocation is a silent
|
|
38
|
+
* no-op (the registry was never populated).
|
|
39
|
+
*
|
|
40
|
+
* @internal
|
|
41
|
+
*/
|
|
42
|
+
export declare const NO_SESSION: SessionStrategy;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-vault tier-3 (PIN / quick-resume) state.
|
|
3
|
+
*
|
|
4
|
+
* The hub holds a `PinResumeState`-shaped record in memory, keyed by
|
|
5
|
+
* vault. `enrollUnlock` populates it; `unlockViaPin` consumes it via
|
|
6
|
+
* `@noy-db/on-pin`'s `resumePin`. The cached state is wiped when the
|
|
7
|
+
* idle timer fires or `db.close()` is called.
|
|
8
|
+
*
|
|
9
|
+
* Importantly, this module does NOT depend on `@noy-db/on-pin` — the
|
|
10
|
+
* caller passes the already-built state in. That keeps the hub's
|
|
11
|
+
* `peerDependencies` empty for tier-3 and lets developers swap the
|
|
12
|
+
* primitive (e.g. an OS biometric in place of a PIN).
|
|
13
|
+
*
|
|
14
|
+
* @module
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Opaque `PinResumeState`-compatible record. Mirrored from
|
|
18
|
+
* `@noy-db/on-pin/PinResumeState`. The hub treats the contents as
|
|
19
|
+
* a black box.
|
|
20
|
+
*/
|
|
21
|
+
export interface QuickUnlockState {
|
|
22
|
+
readonly _noydb_on_pin: 1;
|
|
23
|
+
readonly salt: string;
|
|
24
|
+
readonly iv: string;
|
|
25
|
+
readonly wrappedKeyring: string;
|
|
26
|
+
readonly expiresAt: string;
|
|
27
|
+
readonly maxAttempts: number;
|
|
28
|
+
attempts: number;
|
|
29
|
+
}
|
|
30
|
+
/** In-memory store for tier-3 unlock state, keyed by vault. */
|
|
31
|
+
export declare class QuickUnlockStore {
|
|
32
|
+
private readonly states;
|
|
33
|
+
private readonly timers;
|
|
34
|
+
/**
|
|
35
|
+
* Register a quick-unlock state for a vault. Replaces any existing
|
|
36
|
+
* state. Schedules an automatic clear when the state's `expiresAt`
|
|
37
|
+
* elapses.
|
|
38
|
+
*/
|
|
39
|
+
set(vault: string, state: QuickUnlockState): void;
|
|
40
|
+
/** Read the state for a vault. Returns undefined when none is registered. */
|
|
41
|
+
get(vault: string): QuickUnlockState | undefined;
|
|
42
|
+
/** Drop the state for a vault. Cancels the auto-clear timer. */
|
|
43
|
+
delete(vault: string): void;
|
|
44
|
+
/** Drop every cached state. Called on `db.close()`. */
|
|
45
|
+
clear(): void;
|
|
46
|
+
private clearTimer;
|
|
47
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@noy-db/hub/sync` — subpath export for the optional sync engine +
|
|
3
|
+
* presence service (~856 LOC).
|
|
4
|
+
*
|
|
5
|
+
* Solo / single-device apps that never replicate to a remote peer
|
|
6
|
+
* and never call `collection.presence()` exclude this subpath
|
|
7
|
+
* entirely; the constructors are routed through the `SyncStrategy`
|
|
8
|
+
* seam in core, and the `NO_SYNC` stub keeps the whole module out
|
|
9
|
+
* of the bundle.
|
|
10
|
+
*
|
|
11
|
+
* Opt in via:
|
|
12
|
+
*
|
|
13
|
+
* ```ts
|
|
14
|
+
* import { createNoydb } from '@noy-db/hub'
|
|
15
|
+
* import { withSync } from '@noy-db/hub/sync'
|
|
16
|
+
*
|
|
17
|
+
* const db = await createNoydb({
|
|
18
|
+
* store: localStore,
|
|
19
|
+
* sync: remoteStore,
|
|
20
|
+
* user: ...,
|
|
21
|
+
* syncStrategy: withSync(),
|
|
22
|
+
* })
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* Note: the `SyncEngine`, `SyncTransaction`, and `PresenceHandle`
|
|
26
|
+
* classes themselves still live under `team/` and remain exposed
|
|
27
|
+
* via `@noy-db/hub/team` for advanced consumers that construct them
|
|
28
|
+
* directly. This subpath is the clean LTS factory entry point.
|
|
29
|
+
*/
|
|
30
|
+
export { withSync } from '../team/sync-active.js';
|
|
31
|
+
export type { SyncStrategy } from '../team/sync-strategy.js';
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-tab coordination: primary/secondary election (Web Locks)
|
|
3
|
+
* + presence heartbeat (BroadcastChannel). Browser-only; opt-in; no-op
|
|
4
|
+
* when the APIs are absent. The lock/channel interfaces are hub-local
|
|
5
|
+
* (structurally compatible with @noy-db/by-peer + @noy-db/by-tabs, but
|
|
6
|
+
* not imported — those packages depend on hub).
|
|
7
|
+
*/
|
|
8
|
+
export type TabRole = 'primary' | 'secondary' | 'unknown';
|
|
9
|
+
export interface TabPresence {
|
|
10
|
+
readonly tabId: string;
|
|
11
|
+
readonly lastSeen: number;
|
|
12
|
+
readonly role: TabRole;
|
|
13
|
+
}
|
|
14
|
+
export type Unsubscribe = () => void;
|
|
15
|
+
/** Structural subset of the Web Locks API / by-peer's MinimalLockManager. */
|
|
16
|
+
export interface TabLockManager {
|
|
17
|
+
request<T>(name: string, options: {
|
|
18
|
+
mode?: 'exclusive' | 'shared';
|
|
19
|
+
signal?: AbortSignal;
|
|
20
|
+
}, callback: (lock: unknown) => Promise<T>): Promise<T>;
|
|
21
|
+
}
|
|
22
|
+
/** Structural subset of by-peer's PeerChannel / a BroadcastChannel wrapper. */
|
|
23
|
+
export interface TabChannel {
|
|
24
|
+
send(payload: string): void;
|
|
25
|
+
on(event: 'message', listener: (payload: string) => void): Unsubscribe;
|
|
26
|
+
on(event: 'close', listener: () => void): Unsubscribe;
|
|
27
|
+
close(): void;
|
|
28
|
+
readonly isOpen: boolean;
|
|
29
|
+
}
|
|
30
|
+
export interface TabCoordinationOptions {
|
|
31
|
+
readonly lockManager?: TabLockManager;
|
|
32
|
+
readonly channel?: TabChannel;
|
|
33
|
+
readonly tabId?: string;
|
|
34
|
+
readonly lockName?: string;
|
|
35
|
+
readonly heartbeatMs?: number;
|
|
36
|
+
readonly staleMs?: number;
|
|
37
|
+
readonly now?: () => number;
|
|
38
|
+
/**
|
|
39
|
+
* Close the channel on `dispose()`. Set this only for a channel the
|
|
40
|
+
* coordinator owns (e.g. the one `defaultChannel()` created); leave it
|
|
41
|
+
* false for a caller-injected channel so the coordinator never closes a
|
|
42
|
+
* channel it didn't create. Default: false.
|
|
43
|
+
*/
|
|
44
|
+
readonly closeChannelOnDispose?: boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Also propagate committed writes to other tabs. Default true:
|
|
47
|
+
* when tab coordination is enabled and a channel is available, a write in
|
|
48
|
+
* one tab refreshes that document in every other tab. Set false to opt out.
|
|
49
|
+
*/
|
|
50
|
+
readonly propagateWrites?: boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Channel for write propagation — distinct from the presence
|
|
53
|
+
* channel. Default: an inline BroadcastChannel on `noydb:tab-writes`.
|
|
54
|
+
*/
|
|
55
|
+
readonly writeChannel?: TabChannel;
|
|
56
|
+
}
|
|
57
|
+
export declare class TabCoordinator {
|
|
58
|
+
#private;
|
|
59
|
+
readonly tabId: string;
|
|
60
|
+
role: TabRole;
|
|
61
|
+
constructor(opts?: TabCoordinationOptions);
|
|
62
|
+
start(): void;
|
|
63
|
+
activeTabs(): TabPresence[];
|
|
64
|
+
onTabRoleChange(fn: (r: TabRole) => void): Unsubscribe;
|
|
65
|
+
onActiveTabsChange(fn: (t: TabPresence[]) => void): Unsubscribe;
|
|
66
|
+
dispose(): void;
|
|
67
|
+
/** @internal test seam — broadcast one heartbeat now. */
|
|
68
|
+
_beat(): void;
|
|
69
|
+
}
|
|
70
|
+
/** Browser default lock manager (navigator.locks) or undefined. */
|
|
71
|
+
export declare function defaultLockManager(): TabLockManager | undefined;
|
|
72
|
+
/** Browser default channel: an inline BroadcastChannel wrapper, or undefined. */
|
|
73
|
+
export declare function defaultChannel(name?: string): TabChannel | undefined;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-tab write propagation. A role-agnostic relay: it broadcasts
|
|
3
|
+
* a ciphertext-blind signal ({vault, collection, docId, action}) for every
|
|
4
|
+
* locally-committed write (via onAfterWrite), and on receiving a peer
|
|
5
|
+
* tab's signal it asks the host to refresh that document's in-memory view by
|
|
6
|
+
* re-reading the shared encrypted store. Nothing decrypted crosses the wire.
|
|
7
|
+
*/
|
|
8
|
+
import type { TabChannel, Unsubscribe } from './tab-coordination.js';
|
|
9
|
+
import type { WriteEvent } from '../port/with/write-hooks.js';
|
|
10
|
+
export interface TabWriteMsg {
|
|
11
|
+
readonly kind: 'tab-write';
|
|
12
|
+
readonly writerId: string;
|
|
13
|
+
readonly vault: string;
|
|
14
|
+
readonly collection: string;
|
|
15
|
+
readonly docId: string;
|
|
16
|
+
readonly action: 'put' | 'delete';
|
|
17
|
+
readonly baseV: number;
|
|
18
|
+
readonly v: number;
|
|
19
|
+
}
|
|
20
|
+
export interface CrossTabWriteRelayOptions {
|
|
21
|
+
/** The broadcast channel (its own — distinct from the presence channel). */
|
|
22
|
+
readonly channel: TabChannel;
|
|
23
|
+
/** This tab's id — outgoing signals carry it; incoming self-signals are ignored. */
|
|
24
|
+
readonly writerId: string;
|
|
25
|
+
/** Subscribe to committed writes (the host's onAfterWrite). */
|
|
26
|
+
readonly subscribeAfterWrite: (handler: (e: WriteEvent) => void) => Unsubscribe;
|
|
27
|
+
/** Refresh a document's in-memory view from the shared store. */
|
|
28
|
+
readonly applyRemoteWrite: (vault: string, collection: string, docId: string, action: 'put' | 'delete') => void | Promise<void>;
|
|
29
|
+
/** Report a detected conflict (host captures + converges + emits). */
|
|
30
|
+
readonly reportConflict?: (vault: string, collection: string, docId: string, action: 'put' | 'delete', baseV: number, v: number, ownV: number) => void | Promise<void>;
|
|
31
|
+
/** Close the channel on dispose (only when the relay created it). Default false. */
|
|
32
|
+
readonly closeChannelOnDispose?: boolean;
|
|
33
|
+
}
|
|
34
|
+
export declare class CrossTabWriteRelay {
|
|
35
|
+
#private;
|
|
36
|
+
constructor(opts: CrossTabWriteRelayOptions);
|
|
37
|
+
start(): void;
|
|
38
|
+
dispose(): void;
|
|
39
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enable the multi-user team capability (#267 Track A tail).
|
|
3
|
+
*
|
|
4
|
+
* Pass to `createNoydb({ teamStrategy: withTeam() })` to make `db.grant` /
|
|
5
|
+
* `db.revoke` / `db.rotate` live. The keyring grant/revoke/rotate engines
|
|
6
|
+
* are statically imported HERE — this module is reachable only through the
|
|
7
|
+
* `@noy-db/hub/team` subpath (and the root barrel's tree-shakeable
|
|
8
|
+
* re-export), so a single-user floor bundle never carries them. The facade
|
|
9
|
+
* (`TeamFacade.runGrant` / `runRevoke` / `runRotate`) owns the policy-gate +
|
|
10
|
+
* keyring plumbing and receives the engine as an argument.
|
|
11
|
+
*/
|
|
12
|
+
import type { TeamStrategy } from './strategy.js';
|
|
13
|
+
export declare function withTeam(): TeamStrategy;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tier-2 authenticator slot management.
|
|
3
|
+
*
|
|
4
|
+
* Each slot independently wraps the SAME KEK under a method-specific
|
|
5
|
+
* derived key (LUKS pattern). Enrolling adds a slot; removing drops
|
|
6
|
+
* one. Both are constant-time keyring writes — no DEK re-keying.
|
|
7
|
+
*
|
|
8
|
+
* The crypto for each method lives in its `@noy-db/on-*` package
|
|
9
|
+
* (`on-webauthn`, `on-oidc`, `on-password`); this module accepts the
|
|
10
|
+
* package's `wrapped_kek` ciphertext + `meta` payload and persists it.
|
|
11
|
+
*
|
|
12
|
+
* @see https://github.com/vLannaAi/noy-db-docs/blob/main/content/docs/services/session-tiers.md → Tier 2 — Authenticate
|
|
13
|
+
*
|
|
14
|
+
* @module
|
|
15
|
+
*/
|
|
16
|
+
import type { NoydbStore, KeyringAuthenticator } from '../../kernel/types.js';
|
|
17
|
+
import type { UnlockedKeyring } from './keyring.js';
|
|
18
|
+
/** Fields shared across both wrap-KEK and wrap-DEKs enroll inputs. */
|
|
19
|
+
interface EnrollAuthenticatorBase {
|
|
20
|
+
readonly id: string;
|
|
21
|
+
readonly method: KeyringAuthenticator['method'];
|
|
22
|
+
/** Method-specific metadata (cred id, salt, …). */
|
|
23
|
+
readonly meta: Record<string, unknown>;
|
|
24
|
+
/** Tier the active session held when enrolling. Defaults to 1. */
|
|
25
|
+
readonly enrolled_via_tier?: 1 | 2;
|
|
26
|
+
}
|
|
27
|
+
/** Wrap-KEK enroll input (WebAuthn, OIDC). */
|
|
28
|
+
export interface EnrollAuthenticatorWrappingKEKOptions extends EnrollAuthenticatorBase {
|
|
29
|
+
/** Already-wrapped KEK ciphertext (base64) — produced by the on-* package. */
|
|
30
|
+
readonly wrapped_kek: string;
|
|
31
|
+
readonly wrapKind?: 'kek';
|
|
32
|
+
}
|
|
33
|
+
/** Wrap-DEKs enroll input (password, future on-* using the unified wrap-DEKs primitive). */
|
|
34
|
+
export interface EnrollAuthenticatorWrappingDEKsOptions extends EnrollAuthenticatorBase {
|
|
35
|
+
readonly wrapKind: 'deks';
|
|
36
|
+
/** Base64 AES-GCM ciphertext of `{ deks: { collection: base64rawDek } }`. */
|
|
37
|
+
readonly wrapped_deks: string;
|
|
38
|
+
/** Base64 AES-GCM IV used for the `wrapped_deks` ciphertext. */
|
|
39
|
+
readonly iv: string;
|
|
40
|
+
}
|
|
41
|
+
/** Discriminated union over the two enroll input shapes. */
|
|
42
|
+
export type EnrollAuthenticatorOptions = EnrollAuthenticatorWrappingKEKOptions | EnrollAuthenticatorWrappingDEKsOptions;
|
|
43
|
+
/**
|
|
44
|
+
* Append a new authenticator slot to the keyring file. Throws
|
|
45
|
+
* `ValidationError` if a slot with the same id already exists — the
|
|
46
|
+
* caller decides whether to remove + re-enroll.
|
|
47
|
+
*
|
|
48
|
+
* Accepts either wrap-KEK (WebAuthn, OIDC) or wrap-DEKs (password)
|
|
49
|
+
* input. The variant is preserved verbatim into `KeyringAuthenticator`.
|
|
50
|
+
*/
|
|
51
|
+
export declare function enrollAuthenticator(store: NoydbStore, vault: string, keyring: UnlockedKeyring, options: EnrollAuthenticatorOptions): Promise<UnlockedKeyring>;
|
|
52
|
+
/**
|
|
53
|
+
* Caller payload for {@link updateAuthenticator}. Mutates only
|
|
54
|
+
* `meta` — the slot's id, method, and wrap material are immutable
|
|
55
|
+
* through this primitive, preserving the anti-slot-swap guard.
|
|
56
|
+
*
|
|
57
|
+
* `meta` is **merged** at the top level: keys absent from the patch
|
|
58
|
+
* are preserved, keys present overwrite. To clear a meta key, pass
|
|
59
|
+
* `null` for that key explicitly. (Same top-level merge semantics as
|
|
60
|
+
* `UserApi.updateMe`, non-recursive — meta is a flat label bag.)
|
|
61
|
+
*/
|
|
62
|
+
export interface UpdateAuthenticatorOptions {
|
|
63
|
+
readonly meta?: Record<string, unknown>;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Mutate a tier-2 authenticator slot's `meta` blob (slot rename,
|
|
67
|
+
* label changes). The slot's `id`, `method`, and wrap material
|
|
68
|
+
* (`wrapped_kek` for wrap-KEK; `wrapped_deks` + `iv` for wrap-DEKs)
|
|
69
|
+
* are immutable through this entry point — the anti-slot-swap guard
|
|
70
|
+
* is structural, not gate-driven, so even if the policy gate is
|
|
71
|
+
* weakened a future caller cannot use this path to swap one slot's
|
|
72
|
+
* crypto for another's.
|
|
73
|
+
*
|
|
74
|
+
* `meta` patch semantics:
|
|
75
|
+
* - Top-level merge — absent keys preserved, present keys overwrite
|
|
76
|
+
* - `null` value — delete that meta key
|
|
77
|
+
* - Non-object values (string, number, boolean, array) — replace verbatim
|
|
78
|
+
*
|
|
79
|
+
* @throws `NoAccessError` when no slot with the given id exists.
|
|
80
|
+
* @throws `ValidationError` when no patch field is provided.
|
|
81
|
+
*
|
|
82
|
+
*/
|
|
83
|
+
export declare function updateAuthenticator(store: NoydbStore, vault: string, keyring: UnlockedKeyring, slotId: string, options: UpdateAuthenticatorOptions): Promise<UnlockedKeyring>;
|
|
84
|
+
/**
|
|
85
|
+
* Drop a slot by id. No-op if the slot doesn't exist (idempotent —
|
|
86
|
+
* removing a non-existent slot is a recoverable retry, not an error).
|
|
87
|
+
*/
|
|
88
|
+
export declare function removeAuthenticator(store: NoydbStore, vault: string, keyring: UnlockedKeyring, slotId: string): Promise<UnlockedKeyring>;
|
|
89
|
+
/**
|
|
90
|
+
* Look up a slot by id. Returns `undefined` when no slot matches.
|
|
91
|
+
* Used by tier-2 unlock dispatchers to fetch the wrapped KEK + meta
|
|
92
|
+
* before invoking the method-specific verifier.
|
|
93
|
+
*/
|
|
94
|
+
export declare function findAuthenticator(keyring: UnlockedKeyring, slotId: string): KeyringAuthenticator | undefined;
|
|
95
|
+
export {};
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FR-6 — Deed: sealed / hidden-owner provisioning.
|
|
3
|
+
*
|
|
4
|
+
* A **Deed** is a vault owned by a *latent* principal who never
|
|
5
|
+
* authenticates. The owner credential (the random passphrase that
|
|
6
|
+
* derives `KEK_owner`) is minted machine-side and sealed under a
|
|
7
|
+
* **non-firm** {@link SealingKeyProvider} — that sealing boundary is
|
|
8
|
+
* the cryptographic *inalienability anchor*: whoever holds the
|
|
9
|
+
* provider (the client / their KMS) is the only party that can ever
|
|
10
|
+
* re-derive `KEK_owner`. A firm-side custodian operates the vault
|
|
11
|
+
* fully but can never reach the owner key — there is deliberately NO
|
|
12
|
+
* firm-controlled fallback.
|
|
13
|
+
*
|
|
14
|
+
* Provisioning reuses the managed-mode seam:
|
|
15
|
+
* - {@link resolveManagedSecret} mints + seals + persists the random
|
|
16
|
+
* passphrase at `_meta/sealed-passphrase` (and unseals it on every
|
|
17
|
+
* subsequent open through the same provider).
|
|
18
|
+
* - {@link createOwnerKeyring} derives `KEK_owner` from that
|
|
19
|
+
* passphrase and writes the `_keyring/<ownerUserId>` file.
|
|
20
|
+
*
|
|
21
|
+
* On top of that, a Deed writes a `_meta/deed` **marker**. The marker
|
|
22
|
+
* is PLAINTEXT metadata — it records WHO the latent owner is and WHICH
|
|
23
|
+
* sealing boundary protects them, so it must be readable without
|
|
24
|
+
* unlocking the vault (a custodian or auditor inspecting the vault must
|
|
25
|
+
* be able to see "this is a Deed vault, owner = X, sealed under Y"
|
|
26
|
+
* without any key). The marker itself is therefore never sealed; only
|
|
27
|
+
* the owner *credential* is.
|
|
28
|
+
*
|
|
29
|
+
* @module
|
|
30
|
+
*/
|
|
31
|
+
import type { NoydbStore } from '../../kernel/types.js';
|
|
32
|
+
import type { UnlockedKeyring } from './keyring.js';
|
|
33
|
+
import type { SealingKeyProvider } from './managed-passphrase.js';
|
|
34
|
+
/** Reserved id for the Deed marker under `_meta`. */
|
|
35
|
+
export declare const DEED_RECORD_ID: "deed";
|
|
36
|
+
/**
|
|
37
|
+
* Plaintext metadata recording a vault's latent-owner Deed. Persisted
|
|
38
|
+
* at `_meta/deed`. Readable without unlocking the vault by design — it
|
|
39
|
+
* carries no secret material, only the identity of the latent owner
|
|
40
|
+
* and the sealing boundary that anchors inalienability.
|
|
41
|
+
*/
|
|
42
|
+
export interface DeedMarker {
|
|
43
|
+
/** The latent owner principal — the user id of the `_keyring/<id>` owner file. */
|
|
44
|
+
readonly ownerUserId: string;
|
|
45
|
+
/**
|
|
46
|
+
* The `SealingKeyProvider.id` the owner credential is sealed under.
|
|
47
|
+
* The inalienability anchor: only the holder of this (non-firm)
|
|
48
|
+
* provider can re-derive `KEK_owner`. Audit metadata — never secret.
|
|
49
|
+
*/
|
|
50
|
+
readonly sealedUnder: string;
|
|
51
|
+
/** Always `true` for a Deed — the owner never authenticates interactively. */
|
|
52
|
+
readonly latent: true;
|
|
53
|
+
/** ISO-8601 timestamp the Deed was issued. */
|
|
54
|
+
readonly issuedAt: string;
|
|
55
|
+
/**
|
|
56
|
+
* ISO-8601 timestamp the vault was liberated (a new owner claimed it
|
|
57
|
+
* via the audited Liberate ceremony), if any. Absent until liberation.
|
|
58
|
+
*/
|
|
59
|
+
readonly liberatedAt?: string;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Provision a Deed: a latent owner whose credential is sealed under
|
|
63
|
+
* `sealing` (a NON-firm provider). Mints + seals the owner passphrase
|
|
64
|
+
* via {@link resolveManagedSecret}, derives the owner keyring via
|
|
65
|
+
* {@link createOwnerKeyring}, then writes the plaintext `_meta/deed`
|
|
66
|
+
* marker. Returns the unlocked owner keyring.
|
|
67
|
+
*
|
|
68
|
+
* The returned keyring is the only in-memory window onto `KEK_owner`
|
|
69
|
+
* for this call; the persistent re-entry point is the sealing provider
|
|
70
|
+
* (re-run {@link resolveManagedSecret} with the same provider to
|
|
71
|
+
* re-resolve the passphrase, then {@link createOwnerKeyring}/load to
|
|
72
|
+
* unlock — no interactive passphrase is ever required).
|
|
73
|
+
*
|
|
74
|
+
* There is deliberately no firm-controlled fallback: the marker's
|
|
75
|
+
* `sealedUnder` is the single cryptographic anchor of ownership.
|
|
76
|
+
*/
|
|
77
|
+
export declare function createDeedOwner(store: NoydbStore, vault: string, ownerUserId: string, sealing: SealingKeyProvider): Promise<UnlockedKeyring>;
|
|
78
|
+
/**
|
|
79
|
+
* Read the {@link DeedMarker} from `_meta/deed`, or `null` if the vault
|
|
80
|
+
* has no Deed marker (i.e. it is not a Deed vault). Plaintext read — no
|
|
81
|
+
* unlocking required.
|
|
82
|
+
*/
|
|
83
|
+
export declare function loadDeedMarker(store: NoydbStore, vault: string): Promise<DeedMarker | null>;
|
|
84
|
+
/** Whether `vault` carries a Deed marker (a sealed/latent owner). */
|
|
85
|
+
export declare function isDeedVault(store: NoydbStore, vault: string): Promise<boolean>;
|
|
86
|
+
/**
|
|
87
|
+
* Persist a {@link DeedMarker} at `_meta/deed`. Mirrors
|
|
88
|
+
* `saveSealedPassphrase`'s envelope shape: a standard
|
|
89
|
+
* {@link EncryptedEnvelope} with AES-GCM bypassed (`_iv: ''`), the
|
|
90
|
+
* payload stored as plaintext JSON in `_data`. The marker is metadata,
|
|
91
|
+
* not a secret — sealing it would defeat its purpose (auditors /
|
|
92
|
+
* custodians must read it without a key).
|
|
93
|
+
*
|
|
94
|
+
* @internal — used by `createDeedOwner` and (later) the Liberate
|
|
95
|
+
* ceremony to stamp `liberatedAt`.
|
|
96
|
+
*/
|
|
97
|
+
export declare function saveDeedMarker(store: NoydbStore, vault: string, marker: DeedMarker): Promise<void>;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Time-boxed cross-tier delegation tokens.
|
|
3
|
+
*
|
|
4
|
+
* A higher-tier user can issue a delegation that grants another user
|
|
5
|
+
* temporary access to records at a specified tier. The delegation is
|
|
6
|
+
* persisted as an encrypted envelope in the reserved `_delegations`
|
|
7
|
+
* collection. The target user's runtime scans this collection on every
|
|
8
|
+
* open and, while `until` is still in the future, merges the
|
|
9
|
+
* unwrapped tier DEKs into their in-memory DEK map.
|
|
10
|
+
*
|
|
11
|
+
* ## Token shape
|
|
12
|
+
*
|
|
13
|
+
* ```
|
|
14
|
+
* {
|
|
15
|
+
* id, // ULID, also the _delegations record id
|
|
16
|
+
* toUser, // grantee user id
|
|
17
|
+
* fromUser, // grantor user id (owner/admin/higher-tier principal)
|
|
18
|
+
* tier, // tier being delegated
|
|
19
|
+
* collection, // collection name OR null for "every collection"
|
|
20
|
+
* record, // optional specific record id
|
|
21
|
+
* until, // ISO timestamp — token expires at this instant
|
|
22
|
+
* wrappedDek, // base64 AES-KW-wrapped tier DEK, wrapped under target KEK
|
|
23
|
+
* createdAt, // ISO timestamp
|
|
24
|
+
* }
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* The ciphertext is stored as a normal noy-db envelope — the
|
|
28
|
+
* `_delegations` collection has its own DEK shared across all vault
|
|
29
|
+
* users, so an operator can enumerate active delegations for audit
|
|
30
|
+
* without being able to *use* them (the `wrappedDek` inside is still
|
|
31
|
+
* keyed to the target user's KEK).
|
|
32
|
+
*
|
|
33
|
+
* ## Revocation
|
|
34
|
+
*
|
|
35
|
+
* Delete the `_delegations/<id>` envelope. The target user's runtime
|
|
36
|
+
* reloads the delegation list at each open and at periodic intervals
|
|
37
|
+
* (tracked by the caller — this module is pure logic).
|
|
38
|
+
*
|
|
39
|
+
* @module
|
|
40
|
+
*/
|
|
41
|
+
import type { NoydbStore } from '../../kernel/types.js';
|
|
42
|
+
import type { UnlockedKeyring } from './keyring.js';
|
|
43
|
+
import { type EnclaveKey } from '../../kernel/enclave/index.js';
|
|
44
|
+
export declare const DELEGATIONS_COLLECTION = "_delegations";
|
|
45
|
+
/**
|
|
46
|
+
* Durable payload of a delegation token. Encrypted under the vault's
|
|
47
|
+
* `_delegations` DEK; the `wrappedDek` inside is additionally wrapped
|
|
48
|
+
* under the target user's KEK.
|
|
49
|
+
*/
|
|
50
|
+
export interface DelegationToken {
|
|
51
|
+
readonly id: string;
|
|
52
|
+
readonly toUser: string;
|
|
53
|
+
readonly fromUser: string;
|
|
54
|
+
readonly tier: number;
|
|
55
|
+
/** Collection name or `null` for all collections. */
|
|
56
|
+
readonly collection: string | null;
|
|
57
|
+
/** Optional specific record id scope. */
|
|
58
|
+
readonly record?: string;
|
|
59
|
+
readonly until: string;
|
|
60
|
+
readonly wrappedDek: string;
|
|
61
|
+
readonly createdAt: string;
|
|
62
|
+
}
|
|
63
|
+
export interface IssueDelegationOptions {
|
|
64
|
+
readonly toUser: string;
|
|
65
|
+
readonly tier: number;
|
|
66
|
+
readonly collection?: string;
|
|
67
|
+
readonly record?: string;
|
|
68
|
+
readonly until: Date | string;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Build and persist a delegation token. The caller must hold a tier-N
|
|
72
|
+
* DEK and must have already located the target user's keyring file
|
|
73
|
+
* (so the `wrappedDek` can be re-wrapped against their KEK).
|
|
74
|
+
*/
|
|
75
|
+
export declare function issueDelegation(store: NoydbStore, vault: string, grantor: UnlockedKeyring, targetKek: EnclaveKey | null, delegationsDek: EnclaveKey, opts: IssueDelegationOptions): Promise<DelegationToken>;
|
|
76
|
+
/**
|
|
77
|
+
* Enumerate every live (non-expired) delegation addressed to `toUser`
|
|
78
|
+
* and merge the unwrapped tier DEKs into their keyring. Returns the
|
|
79
|
+
* list of merged delegations so the caller can register per-access
|
|
80
|
+
* audit context.
|
|
81
|
+
*/
|
|
82
|
+
export declare function loadActiveDelegations(store: NoydbStore, vault: string, user: UnlockedKeyring, delegationsDek: EnclaveKey, now?: Date): Promise<DelegationToken[]>;
|
|
83
|
+
/**
|
|
84
|
+
* Revoke a delegation by id — the caller resolves the envelope and
|
|
85
|
+
* issues a `delete`. Provided as a stable helper so the naming is
|
|
86
|
+
* symmetric to `issueDelegation`.
|
|
87
|
+
*/
|
|
88
|
+
export declare function revokeDelegation(store: NoydbStore, vault: string, id: string): Promise<void>;
|