@noy-db/hub 0.3.0-pre.9 → 0.3.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-ZGS6LCOF.js +20 -0
- package/dist/as/index.js +11 -11
- package/dist/attestation/index.js +18 -18
- package/dist/backup-BJ57IKAO.js +242 -0
- package/dist/backup-BJ57IKAO.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-2NVOWNI3.js +167 -0
- package/dist/chunk-2NVOWNI3.js.map +1 -0
- package/dist/chunk-3B5VVCNY.js +71 -0
- package/dist/chunk-3LQ2YKO4.js +230 -0
- package/dist/chunk-3QCRBHCY.js +54 -0
- package/dist/chunk-454JXE57.js +1697 -0
- package/dist/chunk-454JXE57.js.map +1 -0
- package/dist/chunk-4CTHCN4J.js +480 -0
- package/dist/chunk-4CTHCN4J.js.map +1 -0
- package/dist/chunk-4GPE63GU.js +111 -0
- package/dist/chunk-4GPE63GU.js.map +1 -0
- package/dist/chunk-4JBYV75E.js +150 -0
- package/dist/chunk-4NXKCLLQ.js +97 -0
- package/dist/chunk-4VNQOLML.js +29 -0
- package/dist/chunk-4VNQOLML.js.map +1 -0
- package/dist/chunk-5M5DVGV7.js +69 -0
- package/dist/chunk-5O3XF4DV.js +150 -0
- package/dist/chunk-5O3XF4DV.js.map +1 -0
- package/dist/chunk-5YOLBEQ6.js +30 -0
- package/dist/chunk-6CRIV7DE.js +129 -0
- package/dist/chunk-6JTIAGHD.js +621 -0
- package/dist/chunk-6JTIAGHD.js.map +1 -0
- package/dist/chunk-6QTNZJBS.js +255 -0
- package/dist/chunk-6T2SCQRU.js +86 -0
- package/dist/chunk-7DSTRQIJ.js +45 -0
- package/dist/chunk-AUSTCW2X.js +589 -0
- package/dist/chunk-B3HJYUOF.js +209 -0
- package/dist/chunk-BDVFPG6Y.js +164 -0
- package/dist/chunk-BIOUI4HL.js +1554 -0
- package/dist/chunk-BIOUI4HL.js.map +1 -0
- package/dist/chunk-CAF6WOK7.js +36 -0
- package/dist/chunk-CDUQTA3Z.js +381 -0
- package/dist/chunk-CDUQTA3Z.js.map +1 -0
- package/dist/chunk-CIE2BASH.js +404 -0
- package/dist/chunk-CRI4OUV4.js +42 -0
- package/dist/chunk-DLG74CNB.js +91 -0
- package/dist/chunk-E5ZQT5KX.js +30 -0
- package/dist/chunk-E5ZQT5KX.js.map +1 -0
- package/dist/chunk-EQO2UVP4.js +247 -0
- package/dist/chunk-EQO2UVP4.js.map +1 -0
- package/dist/chunk-ERJ7FU55.js +367 -0
- package/dist/chunk-EVVGJDRQ.js +205 -0
- package/dist/chunk-EVX47VBM.js +74 -0
- package/dist/chunk-EVX47VBM.js.map +1 -0
- package/dist/chunk-EXK7QRWF.js +59 -0
- package/dist/chunk-EYZ6IQ6X.js +202 -0
- package/dist/chunk-F64IRYG3.js +45 -0
- package/dist/chunk-FHS2HQSH.js +823 -0
- package/dist/chunk-FM3G3NOY.js +206 -0
- package/dist/chunk-FM3G3NOY.js.map +1 -0
- package/dist/chunk-FUG4SFN3.js +36 -0
- package/dist/chunk-FUG4SFN3.js.map +1 -0
- package/dist/chunk-GKEWXIV5.js +80 -0
- package/dist/chunk-GTGPO5KW.js +59 -0
- package/dist/chunk-HB3RFQSC.js +95 -0
- package/dist/chunk-HDMEGAQE.js +957 -0
- package/dist/chunk-HDMEGAQE.js.map +1 -0
- package/dist/chunk-HDQIIUPH.js +135 -0
- package/dist/chunk-HDQIIUPH.js.map +1 -0
- package/dist/chunk-HTJQYHZP.js +344 -0
- package/dist/chunk-HTJQYHZP.js.map +1 -0
- package/dist/chunk-I6GALP6E.js +99 -0
- package/dist/chunk-IGJCYUT5.js +99 -0
- package/dist/chunk-IGJCYUT5.js.map +1 -0
- package/dist/chunk-IL6POWCW.js +130 -0
- package/dist/chunk-IU6SNYX6.js +117 -0
- package/dist/chunk-J2ZX2XUV.js +778 -0
- package/dist/chunk-JIF24JPM.js +495 -0
- package/dist/chunk-JIF24JPM.js.map +1 -0
- package/dist/chunk-JK733I5V.js +23 -0
- package/dist/chunk-JK733I5V.js.map +1 -0
- package/dist/chunk-JKJOGPZN.js +29 -0
- package/dist/chunk-JNAI2HN2.js +32 -0
- package/dist/chunk-JNAI2HN2.js.map +1 -0
- package/dist/chunk-JZUV47FZ.js +41 -0
- package/dist/chunk-K5IMOGHB.js +30 -0
- package/dist/chunk-KPZS5QAQ.js +151 -0
- package/dist/chunk-KPZS5QAQ.js.map +1 -0
- package/dist/chunk-KSKBRKGJ.js +291 -0
- package/dist/chunk-KSKBRKGJ.js.map +1 -0
- package/dist/chunk-LASZKVMO.js +382 -0
- package/dist/chunk-LXEXBTKL.js +515 -0
- package/dist/chunk-LXEXBTKL.js.map +1 -0
- package/dist/chunk-M4CV6BRT.js +524 -0
- package/dist/chunk-M4CV6BRT.js.map +1 -0
- package/dist/chunk-MEFJPTZ4.js +371 -0
- package/dist/chunk-MEFJPTZ4.js.map +1 -0
- package/dist/chunk-MV43JSJF.js +265 -0
- package/dist/chunk-MV43JSJF.js.map +1 -0
- package/dist/chunk-NJ4EOKMB.js +392 -0
- package/dist/chunk-NJ4EOKMB.js.map +1 -0
- package/dist/chunk-NR5LT5RY.js +135 -0
- package/dist/chunk-NWSGI5C7.js +261 -0
- package/dist/chunk-OSDB5WW3.js +739 -0
- package/dist/chunk-OSDB5WW3.js.map +1 -0
- package/dist/chunk-PN2XMATY.js +37 -0
- package/dist/chunk-PN2XMATY.js.map +1 -0
- package/dist/chunk-Q5VNKNE5.js +70 -0
- package/dist/chunk-QLWMEXCT.js +21 -0
- package/dist/chunk-QRB7NAOJ.js +123 -0
- package/dist/chunk-R4ROFEYC.js +74 -0
- package/dist/chunk-RCVJZMFE.js +164 -0
- package/dist/chunk-RCVJZMFE.js.map +1 -0
- package/dist/chunk-RIX4V2TB.js +367 -0
- package/dist/chunk-RYCTDFUX.js +40 -0
- package/dist/chunk-RZ5SVOYR.js +155 -0
- package/dist/chunk-SLFHQTTW.js +99 -0
- package/dist/chunk-SNZ6URZZ.js +2782 -0
- package/dist/chunk-SNZ6URZZ.js.map +1 -0
- package/dist/chunk-T2FFWNPK.js +75 -0
- package/dist/chunk-UNFPPVNI.js +23 -0
- package/dist/chunk-VFUPHI2Z.js +333 -0
- package/dist/chunk-VFUPHI2Z.js.map +1 -0
- package/dist/chunk-VLFCJYTL.js +235 -0
- package/dist/chunk-VN3DBQAU.js +124 -0
- package/dist/chunk-VYYM3MEN.js +98 -0
- package/dist/chunk-VYYM3MEN.js.map +1 -0
- package/dist/chunk-VZRODIM3.js +49 -0
- package/dist/chunk-W22IKJE2.js +94 -0
- package/dist/chunk-X3YYQWOQ.js +155 -0
- package/dist/chunk-X7QBD67R.js +14405 -0
- package/dist/chunk-X7QBD67R.js.map +1 -0
- package/dist/chunk-XDYREZWE.js +1128 -0
- package/dist/chunk-XDYREZWE.js.map +1 -0
- package/dist/chunk-XWZVFISC.js +720 -0
- package/dist/chunk-XWZVFISC.js.map +1 -0
- package/dist/chunk-YFXZEAYK.js +85 -0
- package/dist/chunk-ZAJAVEXY.js +50 -0
- package/dist/chunk-ZICD77GM.js +34 -0
- package/dist/chunk-ZJ2AK4V7.js +38 -0
- package/dist/chunk-ZUODRVHY.js +14 -0
- package/dist/classified/index.js +5 -5
- package/dist/classified-marker-CZKA6ITE.js +28 -0
- package/dist/classified-marker-CZKA6ITE.js.map +1 -0
- package/dist/collection-facade-TLWIPI76.js +44 -0
- package/dist/computed-ZIQTYTDI.js +11 -0
- package/dist/consent/index.js +9 -9
- package/dist/crdt/index.js +1 -1
- package/dist/dead-filter-ESOBZZP5.js +28 -0
- package/dist/delegation-W7ZV2322.js +25 -0
- package/dist/derivations/index.js +12 -12
- package/dist/derive-H2BJTLUI.js +21 -0
- package/dist/enclave-AP3I5W7O.js +141 -0
- package/dist/executor-KGWTNEQD.js +9 -0
- package/dist/executor-OVEXR6RT.js +9 -0
- package/dist/executor-UNEH5ZYH.js +25 -0
- package/dist/export-accessible-PCMXSUZS.js +23 -0
- package/dist/extract-partition-SWHFSYJO.js +38 -0
- package/dist/fanout-sidecar-A765THMX.js +74 -0
- package/dist/find-N6345CNT.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 +307 -1493
- package/dist/index.js +309 -190
- 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-5OKB6I2R.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 +1922 -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 +826 -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 +3239 -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 +1740 -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-GFBKVPV4.js +42 -0
- package/dist/legacy/bundle.d.ts +30 -0
- package/dist/legacy/kernel.d.ts +33 -0
- package/dist/liberate-3VDOT4KO.js +24 -0
- package/dist/link-set-Z7Q2ASFX.js +31 -0
- package/dist/materialized-views/index.js +19 -17
- package/dist/noydb-ZCJOYBDI.js +68 -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 +11 -11
- package/dist/policy-Z3RUAIY2.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-JTH76BLY.js +60 -0
- package/dist/post-register-JTH76BLY.js.map +1 -0
- package/dist/public-envelope-B4KNWVUA.js +32 -0
- package/dist/purge-scope-FGNNLWHD.js +24 -0
- package/dist/purge-scope-FGNNLWHD.js.map +1 -0
- package/dist/query/index.js +7 -7
- package/dist/read-only-facade-CHCKSEPD.js +8 -0
- package/dist/register-VAHONCID.js +23 -0
- package/dist/registry-7MLVD3VO.js +19 -0
- package/dist/registry-EPKPD5SM.js +18 -0
- package/dist/registry-P5T7PS2U.js +9 -0
- package/dist/request-withdrawal-TI3A5WPS.js +31 -0
- package/dist/reveal-DIBHLUZX.js +38 -0
- package/dist/reveal-DIBHLUZX.js.map +1 -0
- package/dist/revoke-FDRD6GRW.js +24 -0
- package/dist/satellites/index.js +1 -1
- package/dist/sealed-record/index.js +12 -12
- package/dist/seed-Q6M2IZFL.js +231 -0
- package/dist/seed-Q6M2IZFL.js.map +1 -0
- package/dist/session/index.js +9 -9
- package/dist/shadow/index.js +2 -2
- package/dist/signer-MUWEIUI6.js +25 -0
- package/dist/snapshots/index.js +10 -10
- package/dist/stale-OSQ7J3AA.js +29 -0
- package/dist/storage-MVFCGEQE.js +23 -0
- package/dist/store-coordination-provider-64OEZFGS.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-ZASTRNPR.js +140 -0
- package/dist/verify-ZASTRNPR.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-SVNDIZ62.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 +58 -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 +99 -0
- package/dist/with-formula/materialized-views/stale.d.ts +113 -0
- package/dist/with-formula/materialized-views/types.d.ts +318 -0
- package/dist/with-formula/materialized-views/with-materialized-view.d.ts +24 -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/index.d.ts +11 -0
- package/dist/with-party/directory/public-envelope/index.d.ts +12 -0
- package/dist/with-party/directory/public-envelope/schema.d.ts +24 -0
- package/dist/with-party/directory/public-envelope/storage.d.ts +59 -0
- package/dist/with-party/directory/public-envelope/types.d.ts +80 -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 +414 -0
- package/dist/with-pod/format.d.ts +203 -0
- package/dist/with-pod/index.d.ts +20 -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-WZIEVWSR.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-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-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-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-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-ZGS6LCOF.js.map} +0 -0
- /package/dist/{chunk-34RRRIC3.js.map → chunk-3B5VVCNY.js.map} +0 -0
- /package/dist/{chunk-CJEMA2Z6.js.map → chunk-3LQ2YKO4.js.map} +0 -0
- /package/dist/{chunk-ZWQFOXBR.js.map → chunk-3QCRBHCY.js.map} +0 -0
- /package/dist/{chunk-E5AHO65E.js.map → chunk-4JBYV75E.js.map} +0 -0
- /package/dist/{chunk-YLN33ADH.js.map → chunk-4NXKCLLQ.js.map} +0 -0
- /package/dist/{chunk-2KOSJTMU.js.map → chunk-5M5DVGV7.js.map} +0 -0
- /package/dist/{chunk-3I4KYWNP.js.map → chunk-5YOLBEQ6.js.map} +0 -0
- /package/dist/{chunk-IWTYFS3D.js.map → chunk-6CRIV7DE.js.map} +0 -0
- /package/dist/{chunk-QTXQ6RNZ.js.map → chunk-6QTNZJBS.js.map} +0 -0
- /package/dist/{chunk-42KVY3OC.js.map → chunk-6T2SCQRU.js.map} +0 -0
- /package/dist/{chunk-Z5YFRMG5.js.map → chunk-7DSTRQIJ.js.map} +0 -0
- /package/dist/{chunk-DEYAO3N6.js.map → chunk-AUSTCW2X.js.map} +0 -0
- /package/dist/{chunk-SZCHEDML.js.map → chunk-B3HJYUOF.js.map} +0 -0
- /package/dist/{chunk-OV4CMJGR.js.map → chunk-BDVFPG6Y.js.map} +0 -0
- /package/dist/{chunk-HOCEGVGQ.js.map → chunk-CAF6WOK7.js.map} +0 -0
- /package/dist/{chunk-AUR7MRHA.js.map → chunk-CIE2BASH.js.map} +0 -0
- /package/dist/{chunk-X66MXMR5.js.map → chunk-CRI4OUV4.js.map} +0 -0
- /package/dist/{chunk-IUKGIB2Q.js.map → chunk-DLG74CNB.js.map} +0 -0
- /package/dist/{chunk-YBFOBRTO.js.map → chunk-ERJ7FU55.js.map} +0 -0
- /package/dist/{chunk-VJ3NQK4K.js.map → chunk-EVVGJDRQ.js.map} +0 -0
- /package/dist/{chunk-NSZ6J5DF.js.map → chunk-EXK7QRWF.js.map} +0 -0
- /package/dist/{chunk-5SAZMBW7.js.map → chunk-EYZ6IQ6X.js.map} +0 -0
- /package/dist/{chunk-OQAODTYR.js.map → chunk-F64IRYG3.js.map} +0 -0
- /package/dist/{chunk-Q2KVKTC2.js.map → chunk-FHS2HQSH.js.map} +0 -0
- /package/dist/{chunk-Y2OCKFZ3.js.map → chunk-GKEWXIV5.js.map} +0 -0
- /package/dist/{chunk-NUEFXLZU.js.map → chunk-GTGPO5KW.js.map} +0 -0
- /package/dist/{chunk-XQ7UYPVN.js.map → chunk-HB3RFQSC.js.map} +0 -0
- /package/dist/{chunk-FC3XK5JT.js.map → chunk-I6GALP6E.js.map} +0 -0
- /package/dist/{chunk-LEOXZY36.js.map → chunk-IL6POWCW.js.map} +0 -0
- /package/dist/{chunk-GX2BYNCT.js.map → chunk-IU6SNYX6.js.map} +0 -0
- /package/dist/{chunk-6CU3FN74.js.map → chunk-J2ZX2XUV.js.map} +0 -0
- /package/dist/{chunk-6MWUANRF.js.map → chunk-JKJOGPZN.js.map} +0 -0
- /package/dist/{chunk-PEDZFFKW.js.map → chunk-JZUV47FZ.js.map} +0 -0
- /package/dist/{chunk-5TZZUL5X.js.map → chunk-K5IMOGHB.js.map} +0 -0
- /package/dist/{chunk-7IZQTCTR.js.map → chunk-LASZKVMO.js.map} +0 -0
- /package/dist/{chunk-NNWK3PSY.js.map → chunk-NR5LT5RY.js.map} +0 -0
- /package/dist/{chunk-NYVQCZ54.js.map → chunk-NWSGI5C7.js.map} +0 -0
- /package/dist/{chunk-MSVY7ULZ.js.map → chunk-Q5VNKNE5.js.map} +0 -0
- /package/dist/{chunk-2HVUKRNE.js.map → chunk-QLWMEXCT.js.map} +0 -0
- /package/dist/{chunk-KYC4LIEU.js.map → chunk-QRB7NAOJ.js.map} +0 -0
- /package/dist/{chunk-6ULCYCMU.js.map → chunk-R4ROFEYC.js.map} +0 -0
- /package/dist/{chunk-KBF5GSGX.js.map → chunk-RIX4V2TB.js.map} +0 -0
- /package/dist/{chunk-CTSFKDGA.js.map → chunk-RYCTDFUX.js.map} +0 -0
- /package/dist/{chunk-S6AQXDN4.js.map → chunk-RZ5SVOYR.js.map} +0 -0
- /package/dist/{chunk-A4MAD6PO.js.map → chunk-SLFHQTTW.js.map} +0 -0
- /package/dist/{chunk-AYGZMQP5.js.map → chunk-T2FFWNPK.js.map} +0 -0
- /package/dist/{chunk-CWCCYH34.js.map → chunk-UNFPPVNI.js.map} +0 -0
- /package/dist/{chunk-M5I354EE.js.map → chunk-VLFCJYTL.js.map} +0 -0
- /package/dist/{chunk-WVCQ75OK.js.map → chunk-VN3DBQAU.js.map} +0 -0
- /package/dist/{chunk-KXKLKJW4.js.map → chunk-VZRODIM3.js.map} +0 -0
- /package/dist/{chunk-HBTT7YQX.js.map → chunk-W22IKJE2.js.map} +0 -0
- /package/dist/{chunk-KNXN47MO.js.map → chunk-X3YYQWOQ.js.map} +0 -0
- /package/dist/{chunk-DFIBOSOQ.js.map → chunk-YFXZEAYK.js.map} +0 -0
- /package/dist/{chunk-ICV32FPK.js.map → chunk-ZAJAVEXY.js.map} +0 -0
- /package/dist/{chunk-MK2BSS44.js.map → chunk-ZICD77GM.js.map} +0 -0
- /package/dist/{chunk-KWLD2D75.js.map → chunk-ZJ2AK4V7.js.map} +0 -0
- /package/dist/{chunk-KBBWY46Y.js.map → chunk-ZUODRVHY.js.map} +0 -0
- /package/dist/{api-HV4PDUWF.js.map → collection-facade-TLWIPI76.js.map} +0 -0
- /package/dist/{chunk-BGIZAFY7.js.map → computed-ZIQTYTDI.js.map} +0 -0
- /package/dist/{dead-filter-VNA4M3GP.js.map → dead-filter-ESOBZZP5.js.map} +0 -0
- /package/dist/{chunk-K2WCO3NX.js.map → delegation-W7ZV2322.js.map} +0 -0
- /package/dist/{collection-facade-3RAXG2OU.js.map → derive-H2BJTLUI.js.map} +0 -0
- /package/dist/{computed-R62HGCO4.js.map → enclave-AP3I5W7O.js.map} +0 -0
- /package/dist/{delegation-ZKII5UBI.js.map → executor-KGWTNEQD.js.map} +0 -0
- /package/dist/{derive-5D2C3WG4.js.map → executor-OVEXR6RT.js.map} +0 -0
- /package/dist/{describe/index.js.map → executor-UNEH5ZYH.js.map} +0 -0
- /package/dist/{enclave-EUBEJGPG.js.map → export-accessible-PCMXSUZS.js.map} +0 -0
- /package/dist/{executor-IL7SRNUZ.js.map → extract-partition-SWHFSYJO.js.map} +0 -0
- /package/dist/{fanout-sidecar-CI5BCMQM.js.map → fanout-sidecar-A765THMX.js.map} +0 -0
- /package/dist/{executor-OUA2Y6YC.js.map → find-N6345CNT.js.map} +0 -0
- /package/dist/{executor-WAEI6PDV.js.map → issue-5OKB6I2R.js.map} +0 -0
- /package/dist/{export-accessible-O55RKAGC.js.map → ledger-GFBKVPV4.js.map} +0 -0
- /package/dist/{extract-partition-VBGCBA6Q.js.map → liberate-3VDOT4KO.js.map} +0 -0
- /package/dist/{find-FISGUWSK.js.map → link-set-Z7Q2ASFX.js.map} +0 -0
- /package/dist/{issue-EQAWIYFQ.js.map → noydb-ZCJOYBDI.js.map} +0 -0
- /package/dist/{kernel/index.js.map → policy-Z3RUAIY2.js.map} +0 -0
- /package/dist/{ledger-AJA2SR3C.js.map → public-envelope-B4KNWVUA.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-VAHONCID.js.map} +0 -0
- /package/dist/{noydb-AMEOU456.js.map → registry-7MLVD3VO.js.map} +0 -0
- /package/dist/{policy-SDGRWVIL.js.map → registry-EPKPD5SM.js.map} +0 -0
- /package/dist/{public-envelope-J5PLQOW2.js.map → registry-P5T7PS2U.js.map} +0 -0
- /package/dist/{read-only-facade-UCYNRE56.js.map → request-withdrawal-TI3A5WPS.js.map} +0 -0
- /package/dist/{register-OVJKW7BS.js.map → revoke-FDRD6GRW.js.map} +0 -0
- /package/dist/{registry-5RJSK5AJ.js.map → signer-MUWEIUI6.js.map} +0 -0
- /package/dist/{registry-DQRNTWRL.js.map → stale-OSQ7J3AA.js.map} +0 -0
- /package/dist/{registry-LTGLERS7.js.map → storage-MVFCGEQE.js.map} +0 -0
- /package/dist/{store-coordination-provider-WKGAE2WI.js.map → store-coordination-provider-64OEZFGS.js.map} +0 -0
- /package/dist/{walk-76UCFXYV.js.map → walk-SVNDIZ62.js.map} +0 -0
- /package/dist/{request-withdrawal-27O77D2V.js.map → withdraw-accessible-WZIEVWSR.js.map} +0 -0
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RecordCodec — the per-record envelope build + encrypt/decrypt + per-record-CEK
|
|
3
|
+
* + sealed-field crypto.
|
|
4
|
+
*
|
|
5
|
+
* `Collection` holds one `RecordCodec` instance and delegates the crypto write
|
|
6
|
+
* path (`encryptRecord` / `encryptJsonString` / `buildDebugEnvelope`), the read
|
|
7
|
+
* path (`decryptRecord` / `decryptJsonString` / `resolveEnvelopeCek`), and the
|
|
8
|
+
* sealed-field helpers (`unsealField` / `makeSealedHandle` / `toCacheRecord` /
|
|
9
|
+
* `classifySealedShred`) to it. The codec receives every `this.*` dependency
|
|
10
|
+
* it needs via {@link RecordCodecContext}.
|
|
11
|
+
*
|
|
12
|
+
* The crux is `cekCache`: it is the SAME `Lru` reference `Collection` owns (not
|
|
13
|
+
* a copy). `resolveEnvelopeCek` reads/writes it, and tier methods +
|
|
14
|
+
* `vault.invalidateRecordCaches` keep mutating that same object — a copy would
|
|
15
|
+
* silently break the "single CEK delete kills the version chain" invariant.
|
|
16
|
+
*
|
|
17
|
+
* Internal service — not exported as a `@noy-db/hub/*` subpath.
|
|
18
|
+
*/
|
|
19
|
+
import { type EnclaveKey } from '../crypto.js';
|
|
20
|
+
import { type EncryptedEnvelope, type CrdtMode, type CrdtStrategy, type VdigFieldPolicy, type SealedHandle } from '../../types.js';
|
|
21
|
+
import { type StandardSchemaV1 } from '../../schema.js';
|
|
22
|
+
import type { Lru } from '../../cache/index.js';
|
|
23
|
+
import type { ViaCryptoCtx } from '../../via/index.js';
|
|
24
|
+
import type { ViaPipeline } from '../../via/pipeline.js';
|
|
25
|
+
/**
|
|
26
|
+
* One classified per-slot verdict from {@link RecordCodec.classifySealedShred}.
|
|
27
|
+
* `shreddable` — CEK-only, tombstone makes it undecryptable. `dekResidue` —
|
|
28
|
+
* collection-DEK-keyed, survives in synced/backup copies. The third class is
|
|
29
|
+
* BOTH: a `_bidx` blind-index tag is live-dropped by the tombstone yet retained
|
|
30
|
+
* under the surviving DEK in any pre-forget backup (honest dual accounting).
|
|
31
|
+
*/
|
|
32
|
+
export type SealedShredSlot = {
|
|
33
|
+
readonly field: string;
|
|
34
|
+
readonly class: 'shreddable' | 'dekResidue' | 'live-shreddable+dekResidue-in-backups';
|
|
35
|
+
};
|
|
36
|
+
/** Everything the moving crypto methods touched on `this.*`, as a flat context. */
|
|
37
|
+
export interface RecordCodecContext<T> {
|
|
38
|
+
/** Collection name — the crypto AAD scope and schema-error context. */
|
|
39
|
+
readonly name: string;
|
|
40
|
+
/** Actor id stamped on `_by` (the collection's keyring.userId). */
|
|
41
|
+
readonly actor: string;
|
|
42
|
+
/** False on plaintext collections — selects the no-ciphertext envelope branch. */
|
|
43
|
+
readonly storeCiphertext: boolean;
|
|
44
|
+
/** keyring.debugPlaintext — debug-inline envelope on user collections. */
|
|
45
|
+
readonly debugPlaintext: boolean;
|
|
46
|
+
/** Emit `_source`/`_sourceTs` provenance fields when a source is supplied. */
|
|
47
|
+
readonly provenance: boolean;
|
|
48
|
+
/** Declared `sensitive` fields → sealed into `_sealed[field]`. */
|
|
49
|
+
readonly sensitiveFields: ReadonlySet<string>;
|
|
50
|
+
/** Declared deterministic-index fields, or null. */
|
|
51
|
+
readonly deterministicFields: ReadonlySet<string> | null;
|
|
52
|
+
/** Digest-only classified fields → verify policy (stage 2). Null when none. */
|
|
53
|
+
readonly vdigFields: ReadonlyMap<string, VdigFieldPolicy> | null;
|
|
54
|
+
/**
|
|
55
|
+
* C-A / R10 config-drift signal: the persisted `x-classified` marker's
|
|
56
|
+
* declared digest-only field set (empty when the collection carries no
|
|
57
|
+
* marker). Lazy, memoized (O(1) per handle after the first call). The R10
|
|
58
|
+
* superset guard refuses whenever a field in this set is absent from
|
|
59
|
+
* `vdigFields`. Consulted once per handle on any encrypted write path — the
|
|
60
|
+
* cross-session, prev-free signal a fully-naive create has no `prev` for.
|
|
61
|
+
* Undefined on codecs with no store access (direct-construction tests).
|
|
62
|
+
*/
|
|
63
|
+
classifiedMarkerDigestOnly?(): Promise<readonly string[]>;
|
|
64
|
+
/** CRDT mode (decrypt resolves CrdtState→snapshot when set). */
|
|
65
|
+
readonly crdtMode: CrdtMode | undefined;
|
|
66
|
+
/** CRDT strategy seam (resolveCrdtSnapshot). */
|
|
67
|
+
readonly crdtStrategy: CrdtStrategy;
|
|
68
|
+
/** Output-schema validator, or undefined. */
|
|
69
|
+
readonly schema: StandardSchemaV1<unknown, T> | undefined;
|
|
70
|
+
/**
|
|
71
|
+
* Resolve a collection's DEK. Called with no argument for `this.name`'s
|
|
72
|
+
* own DEK (every ordinary codec use); `viaCryptoCtx`'s `reservedEnvelopes`
|
|
73
|
+
* door passes an explicit OTHER collection name (e.g. a reserved
|
|
74
|
+
* `_dict_status` collection) so a binding's at-rest hook can address a
|
|
75
|
+
* different collection's DEK without ever holding the resolver itself.
|
|
76
|
+
*/
|
|
77
|
+
getDEK(collection?: string): Promise<EnclaveKey>;
|
|
78
|
+
/**
|
|
79
|
+
* The collection's per-record CEK cache (SHARED reference, not a copy).
|
|
80
|
+
* Ownership/lifetime stays on Collection; codec reads+writes it in
|
|
81
|
+
* resolveEnvelopeCek exactly as the inline code did. `null` → no caching.
|
|
82
|
+
*/
|
|
83
|
+
readonly cekCache: Lru<string, EnclaveKey> | null;
|
|
84
|
+
/**
|
|
85
|
+
* Compiled Via pipeline (money, i18n, …), or undefined for a collection
|
|
86
|
+
* with none declared. `encryptRecord`/`decryptRecord` consult
|
|
87
|
+
* `via?.hasAtRestHooks` at the sealed-slot sub-step to choose between a
|
|
88
|
+
* binding's `encodeAtRest`/`decodeAtRest` hooks and today's inline path.
|
|
89
|
+
* The zero-via fast path (`via` undefined, or no binding declares an
|
|
90
|
+
* at-rest hook) stays byte/behavior-identical (#629 Task 3).
|
|
91
|
+
*
|
|
92
|
+
* Mutable (not `readonly`, #638 Task 3): `Collection.via` can be
|
|
93
|
+
* reassigned post-construction (the taint overlay, `via/graph-wiring.ts#
|
|
94
|
+
* applyTaintOverlay`) — `RecordCodec.setVia` below keeps this in sync so
|
|
95
|
+
* at-rest hooks read the LIVE pipeline, not a stale construction-time
|
|
96
|
+
* snapshot.
|
|
97
|
+
*/
|
|
98
|
+
via: ViaPipeline | undefined;
|
|
99
|
+
}
|
|
100
|
+
export declare class RecordCodec<T> {
|
|
101
|
+
private readonly ctx;
|
|
102
|
+
constructor(ctx: RecordCodecContext<T>);
|
|
103
|
+
/**
|
|
104
|
+
* @internal Update the live Via pipeline this codec's at-rest hooks read
|
|
105
|
+
* (#638 Task 3) — called by `via/graph-wiring.ts#applyTaintOverlay` right
|
|
106
|
+
* after it reassigns `Collection.via`, so `hasAtRestHooks`/`encodeAtRest`/
|
|
107
|
+
* `decodeAtRest` see the newly-added `taint` binding instead of the
|
|
108
|
+
* pipeline snapshot captured when this codec was constructed.
|
|
109
|
+
*/
|
|
110
|
+
setVia(via: ViaPipeline | undefined): void;
|
|
111
|
+
/** Sealed-slot key material for this codec's collection, for a given per-record CEK (or none). */
|
|
112
|
+
private sealKeyMaterial;
|
|
113
|
+
/**
|
|
114
|
+
* Build the `ViaCryptoCtx` handed to a binding's `encodeAtRest`/
|
|
115
|
+
* `decodeAtRest` hook: `sealedSlots` pre-bound to `(this.ctx.name,
|
|
116
|
+
* recordId)` — always threading `cek` when the caller has one, so the
|
|
117
|
+
* capability's record-binding stays cryptographic rather than degrading
|
|
118
|
+
* to collection-scope. `reservedEnvelopes`'s DEK resolver forwards its
|
|
119
|
+
* `collection` argument straight to `this.ctx.getDEK` (#629 Task 4) — it
|
|
120
|
+
* resolves the RESERVED collection's own DEK (e.g. `_dict_status`), never
|
|
121
|
+
* `this.ctx.name`'s, matching `Vault.getDEK`'s per-collection-name
|
|
122
|
+
* resolution (the same resolver `DictionaryHandle` used pre-cutover).
|
|
123
|
+
*/
|
|
124
|
+
private viaCryptoCtx;
|
|
125
|
+
/**
|
|
126
|
+
* Assemble a canonical ciphertext body envelope literal from already-computed
|
|
127
|
+
* parts. Pure, no crypto. Each call stamps its own `_ts` — provenance carries
|
|
128
|
+
* a SEPARATE timestamp (computed by the caller), so the two never share one.
|
|
129
|
+
*/
|
|
130
|
+
static buildEnvelope(p: {
|
|
131
|
+
version: number;
|
|
132
|
+
iv: string;
|
|
133
|
+
data: string;
|
|
134
|
+
by?: string;
|
|
135
|
+
cek?: string;
|
|
136
|
+
provenance?: {
|
|
137
|
+
source: string;
|
|
138
|
+
sourceTs: string;
|
|
139
|
+
} | undefined;
|
|
140
|
+
extra?: Partial<Pick<EncryptedEnvelope, '_tier' | '_det' | '_sealed'>>;
|
|
141
|
+
}): EncryptedEnvelope;
|
|
142
|
+
/** Plaintext (`_iv:''`) body envelope — the `!storeCiphertext` shape. */
|
|
143
|
+
static buildPlaintextEnvelope(p: {
|
|
144
|
+
version: number;
|
|
145
|
+
data: string;
|
|
146
|
+
by?: string;
|
|
147
|
+
provenance?: {
|
|
148
|
+
source: string;
|
|
149
|
+
sourceTs: string;
|
|
150
|
+
} | undefined;
|
|
151
|
+
}): EncryptedEnvelope;
|
|
152
|
+
/**
|
|
153
|
+
* Build a debug-plaintext envelope: the record's own fields inlined as
|
|
154
|
+
* top-level keys beside the reserved `_`-metadata, with `_debug: 1` and an
|
|
155
|
+
* empty `_data`. Lets native store tooling read the record without
|
|
156
|
+
* unwrapping. Only reached for user collections under `debugPlaintext`
|
|
157
|
+
* (see {@link encryptRecord}). Rejects `_`-prefixed record fields, which
|
|
158
|
+
* would collide with the reserved metadata namespace.
|
|
159
|
+
*/
|
|
160
|
+
buildDebugEnvelope(record: T, version: number, source?: string, sourceTs?: string): EncryptedEnvelope;
|
|
161
|
+
/**
|
|
162
|
+
* Encrypt a JSON body into an envelope.
|
|
163
|
+
*
|
|
164
|
+
* When `cek` is supplied (per-record CEK collections), the body is
|
|
165
|
+
* encrypted under the CEK and the CEK is AES-KW-wrapped under the
|
|
166
|
+
* collection DEK and stamped on `_cek`. When `cek` is omitted, the legacy
|
|
167
|
+
* path encrypts the body directly under the collection DEK — byte-identical
|
|
168
|
+
* to pre-CEK behaviour, so non-adopting collections pay nothing.
|
|
169
|
+
*/
|
|
170
|
+
encryptJsonString(json: string, version: number, cek?: EnclaveKey, source?: string, sourceTs?: string): Promise<EncryptedEnvelope>;
|
|
171
|
+
encryptRecord(record: T, version: number, cek?: EnclaveKey, source?: string, sourceTs?: string, vdig?: {
|
|
172
|
+
readonly id: string;
|
|
173
|
+
readonly prev: EncryptedEnvelope | null;
|
|
174
|
+
}, id?: string): Promise<EncryptedEnvelope>;
|
|
175
|
+
/**
|
|
176
|
+
* Resolve the per-record CEK for a stored envelope, or `undefined` for a
|
|
177
|
+
* legacy (`_cek`-absent) envelope. Unwraps `_cek` under the collection DEK and
|
|
178
|
+
* memoises it in the CEK cache under `id` (when supplied) so repeated reads of
|
|
179
|
+
* the same record skip the unwrap. Shared by the body-decrypt path
|
|
180
|
+
* ({@link decryptJsonString}) and the sealed-field path ({@link decryptRecord}
|
|
181
|
+
* / {@link toCacheRecord}) so both agree on the record's key.
|
|
182
|
+
*/
|
|
183
|
+
resolveEnvelopeCek(envelope: EncryptedEnvelope, id?: string): Promise<EnclaveKey | undefined>;
|
|
184
|
+
/**
|
|
185
|
+
* Low-level: decrypt an envelope and return the raw JSON string.
|
|
186
|
+
*
|
|
187
|
+
* `_cek` presence is the format discriminant (NOT `this.perRecordCek`),
|
|
188
|
+
* so a mixed vault — and a recipient that never opted into
|
|
189
|
+
* `perRecordKeys` — decrypts both legacy and CEK records:
|
|
190
|
+
* - `_cek` present → unwrap the CEK under the collection DEK, decrypt the
|
|
191
|
+
* body under the CEK (cache the unwrapped CEK so repeated reads skip it).
|
|
192
|
+
* - `_cek` absent → legacy path, body decrypts directly under the
|
|
193
|
+
* collection DEK.
|
|
194
|
+
*
|
|
195
|
+
* The optional `id` lets reads populate the CEK cache; it is omitted by
|
|
196
|
+
* callers (history, conflict merge) that have only the envelope.
|
|
197
|
+
*/
|
|
198
|
+
decryptJsonString(envelope: EncryptedEnvelope, id?: string): Promise<string | null>;
|
|
199
|
+
/**
|
|
200
|
+
* Unseal a single `_sealed[field]` slot to its plaintext value: derive the
|
|
201
|
+
* per-field key off the collection DEK, AES-GCM-decrypt the `iv:data` blob,
|
|
202
|
+
* and JSON-parse the result. Shared by both the inline-decrypt path and a
|
|
203
|
+
* {@link Sealed} handle's `reveal()` — so the on-demand reveal and the eager
|
|
204
|
+
* materialisation always agree byte-for-byte.
|
|
205
|
+
*/
|
|
206
|
+
unsealField(field: string, blob: string, cek?: EnclaveKey): Promise<unknown>;
|
|
207
|
+
/**
|
|
208
|
+
* Build the `ViaCryptoCtx` for forget()'s per-ref via-erase fold (#629
|
|
209
|
+
* Task 10) — resolves the live envelope's CEK exactly like
|
|
210
|
+
* `decryptRecord` does, then delegates to the same capability factory
|
|
211
|
+
* `encodeAtRest`/`decodeAtRest` use.
|
|
212
|
+
*/
|
|
213
|
+
eraseCryptoCtx(id: string, live: EncryptedEnvelope): Promise<ViaCryptoCtx>;
|
|
214
|
+
/**
|
|
215
|
+
* Classify a live envelope's `_sealed` slots for crypto-shred completeness.
|
|
216
|
+
* `forget()` drops `_cek`/`_sealed` but
|
|
217
|
+
* RETAINS the collection DEK, so only a slot keyed off the per-record CEK is
|
|
218
|
+
* genuinely shredded by the tombstone; a legacy slot keyed off the
|
|
219
|
+
* collection DEK survives in any synced/backup copy.
|
|
220
|
+
*
|
|
221
|
+
* Mirrors {@link unsealField}'s dual-read split: try the CEK-derived key per
|
|
222
|
+
* slot — success → `shreddable`, AES-GCM auth failure → `dekResidue`. With no
|
|
223
|
+
* `_cek` (pure legacy collection-DEK sealing) ALL slots are residue.
|
|
224
|
+
*/
|
|
225
|
+
classifySealedShred(live: EncryptedEnvelope): Promise<{
|
|
226
|
+
readonly slots: readonly SealedShredSlot[];
|
|
227
|
+
}>;
|
|
228
|
+
/**
|
|
229
|
+
* Build a non-leaking {@link Sealed} handle over a sealed field's ciphertext.
|
|
230
|
+
* The handle captures only the ciphertext `blob` and a closure to
|
|
231
|
+
* {@link unsealField}; the plaintext is never stored on it — so the handle
|
|
232
|
+
* may sit in the working-set cache (or be logged/serialised) without
|
|
233
|
+
* exposing the value, which decrypts only on `reveal()`.
|
|
234
|
+
*/
|
|
235
|
+
makeSealedHandle(field: string, blob: string, cek?: EnclaveKey): SealedHandle<unknown>;
|
|
236
|
+
/**
|
|
237
|
+
* Replace every field the just-written envelope actually sealed with a
|
|
238
|
+
* {@link Sealed} handle, leaving every other field as its plaintext value.
|
|
239
|
+
* Used to populate the cache on the write path without ever materialising
|
|
240
|
+
* sealed plaintext into it. Returns `record` untouched when nothing was
|
|
241
|
+
* sealed. Keys off `envelope._sealed` itself (#642 fix) — NOT
|
|
242
|
+
* `this.ctx.sensitiveFields`, which only names the inline `sensitive:[...]`/
|
|
243
|
+
* classified-recoverable field set: a collection whose sealing comes
|
|
244
|
+
* entirely from the `taint` via-binding (a derivation/MV output or rollup
|
|
245
|
+
* target folded sealed from a classified SOURCE collection, #642) declares
|
|
246
|
+
* no local `sensitiveFields` at all, so that stale gate skipped this
|
|
247
|
+
* conversion and left a just-written taint-sealed field as cached
|
|
248
|
+
* plaintext — read back correctly ONLY after a cold cache miss (`get()`'s
|
|
249
|
+
* own `decodeAtRest` call, unaffected by this gate) forced a fresh decrypt.
|
|
250
|
+
*/
|
|
251
|
+
toCacheRecord(record: T, envelope: EncryptedEnvelope, id?: string): Promise<T>;
|
|
252
|
+
/**
|
|
253
|
+
* Apply `_sealed`-slot post-processing to an ALREADY-DECRYPTED `record`:
|
|
254
|
+
* restore each `_sealed[field]` blob inline (`sealedAsHandles` falsy) or
|
|
255
|
+
* as an opaque {@link Sealed} handle (`sealedAsHandles: true`), routing
|
|
256
|
+
* through a via pipeline's `decodeAtRest` hook when one is declared.
|
|
257
|
+
* Extracted byte-parity from `decryptRecord`'s inline block (#635) so a
|
|
258
|
+
* caller that resolves its OWN per-record CEK under a DIFFERENT DEK than
|
|
259
|
+
* this codec's `this.ctx.getDEK()` — namely the tier>0 `getAtTier` leg in
|
|
260
|
+
* `with-audit/tiers/index.ts`, whose `_cek` is wrapped under the TIER DEK,
|
|
261
|
+
* not the collection DEK `decryptRecord`/`resolveEnvelopeCek` always
|
|
262
|
+
* unwrap under — can still get correct sealed-slot handling without
|
|
263
|
+
* routing its whole read through `decryptRecord` (which would resolve the
|
|
264
|
+
* wrong DEK for it).
|
|
265
|
+
*
|
|
266
|
+
* Zero-knowledge: takes only the already-resolved per-record `cek` (or
|
|
267
|
+
* `undefined` for a legacy/no-CEK record) — the same shape `makeSealedHandle`
|
|
268
|
+
* already takes above. Never the keyring, never a raw DEK: the legacy
|
|
269
|
+
* fallback key stays fully internal to `sealKeyMaterial`/`viaCryptoCtx`,
|
|
270
|
+
* which close over THIS codec's own `getDEK` (permanently bound to
|
|
271
|
+
* `this.ctx.name`'s tier-0 DEK at construction) — so even when called from
|
|
272
|
+
* a tier>0 context, the legacy-fallback key resolution is correct: sealed
|
|
273
|
+
* fields are always sealed under the CEK or the collection's tier-0 DEK,
|
|
274
|
+
* never a tier DEK (tier writes don't seal fields; `_sealed` reaches a
|
|
275
|
+
* tiered envelope only via a tier-0 write later elevated).
|
|
276
|
+
*/
|
|
277
|
+
applySealedSlots(record: T, sealed: Record<string, string>, cek: EnclaveKey | undefined, opts?: {
|
|
278
|
+
id?: string;
|
|
279
|
+
sealedAsHandles?: boolean;
|
|
280
|
+
}): Promise<T>;
|
|
281
|
+
/**
|
|
282
|
+
* Decrypt an envelope under an EXPLICIT `dek` instead of this codec's own
|
|
283
|
+
* `ctx.getDEK()` / cekCache resolution — for a from-tier>0 pre-move decode
|
|
284
|
+
* (`with-audit/tiers/index.ts`'s `putAtTier`/`elevate`/`demote` sites,
|
|
285
|
+
* #722 whole-branch review). Mirrors the manual unwrap-then-decrypt
|
|
286
|
+
* `getAtTier`'s own tier>0 leg performs there (same primitives, same
|
|
287
|
+
* `applySealedSlots` extraction point #635 built for exactly this caller).
|
|
288
|
+
*
|
|
289
|
+
* `decryptRecord` is tier-UNAWARE: `resolveEnvelopeCek` reads the cekCache
|
|
290
|
+
* or falls back to `ctx.getDEK()` — this codec's DEFAULT (tier-0/
|
|
291
|
+
* collection) DEK — never the envelope's OWN tier. That only happens to
|
|
292
|
+
* decrypt a from-tier>0 envelope correctly when some other call in the
|
|
293
|
+
* SAME op already primed the cekCache with this record's CEK (true for an
|
|
294
|
+
* ordinary put()-then-elevate(0→1); NOT true for a `putAtTier`-origin
|
|
295
|
+
* envelope, whose body is encrypted directly under its tier DEK with no
|
|
296
|
+
* `_cek` ever minted, or a non-`perRecordKeys` collection, which has no
|
|
297
|
+
* `_cek` at all) — those throw `TamperedError`. Decrypting under the
|
|
298
|
+
* caller-resolved `dek` is correct regardless of cache state or
|
|
299
|
+
* `perRecordKeys`.
|
|
300
|
+
*
|
|
301
|
+
* No CRDT resolution, no schema validation — same scope as `getAtTier`'s
|
|
302
|
+
* tier>0 branch (the established precedent for a tier-aware read), which
|
|
303
|
+
* skips both for the same reason: a tier>0 read is an internal/derived-
|
|
304
|
+
* output-recompute path, not the public per-record read surface schema
|
|
305
|
+
* validation guards.
|
|
306
|
+
*/
|
|
307
|
+
decryptRecordAtDek(envelope: EncryptedEnvelope, dek: EnclaveKey, id?: string): Promise<T | null>;
|
|
308
|
+
/**
|
|
309
|
+
* Decrypt an envelope into a record of type `T`.
|
|
310
|
+
*
|
|
311
|
+
* When a schema is attached, the decrypted value is validated before
|
|
312
|
+
* being returned. A divergence between the stored bytes and the
|
|
313
|
+
* current schema throws `SchemaValidationError` with
|
|
314
|
+
* `direction: 'output'` — silently returning drifted data would
|
|
315
|
+
* propagate garbage into the UI and break the whole point of having
|
|
316
|
+
* a schema.
|
|
317
|
+
*
|
|
318
|
+
* `skipValidation` exists for history reads: when calling
|
|
319
|
+
* `getVersion()` the caller is explicitly asking for an old snapshot
|
|
320
|
+
* that may predate a schema change, so validating it would be a
|
|
321
|
+
* false positive. Every non-history read leaves this flag `false`.
|
|
322
|
+
*/
|
|
323
|
+
decryptRecord(envelope: EncryptedEnvelope, opts?: {
|
|
324
|
+
skipValidation?: boolean;
|
|
325
|
+
id?: string;
|
|
326
|
+
sealedAsHandles?: boolean;
|
|
327
|
+
}): Promise<T | null>;
|
|
328
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** Parse an `iv:data` sealed slot (split on the FIRST `:`). */
|
|
2
|
+
export declare function parseSealedSlot(blob: string): {
|
|
3
|
+
iv: string;
|
|
4
|
+
data: string;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* Dual-read: decrypt a sealed slot trying the CEK-derived field key first,
|
|
8
|
+
* falling back to the collection-DEK field key. Legacy records
|
|
9
|
+
* (even ones whose body is CEK-encrypted) are sealed under the collection-DEK
|
|
10
|
+
* key; current writes seal under the per-record CEK. Try the CEK key first; on
|
|
11
|
+
* its AES-GCM auth failure, fall back to the DEK key. Throws only if BOTH fail.
|
|
12
|
+
* Returns the plaintext string (callers `JSON.parse` as needed).
|
|
13
|
+
*/
|
|
14
|
+
export declare function dualReadSealedSlot(blob: string, field: string, collection: string, cek: CryptoKey | undefined, dek: CryptoKey): Promise<string>;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sealed-slot sub-step — the "seal these declared fields into their own
|
|
3
|
+
* `iv:data` slots" mechanism, extracted byte-parity from `RecordCodec`
|
|
4
|
+
* (#629 Task 1; see `.superpowers/sdd/seam-map-classified-blobs.md` §2).
|
|
5
|
+
*
|
|
6
|
+
* This is the ONE genuinely separable sub-step `RecordCodec.encryptRecord`/
|
|
7
|
+
* `decryptRecord` perform (the digest-only `_vdig`/`_bidx` mechanism is NOT
|
|
8
|
+
* separable the same way — it needs write-history `prev` context, see the
|
|
9
|
+
* seam map's separability verdict). `sealFields`/`unsealFields` are the
|
|
10
|
+
* natural shape of a `via` `encodeAtRest`/`decodeAtRest` hook for a "seal
|
|
11
|
+
* this field" via-feature, and `makeSealedSlotCapability`/
|
|
12
|
+
* `makeReservedEnvelopes` (below) are the `ViaCryptoCtx` capability
|
|
13
|
+
* factories built on top of them.
|
|
14
|
+
*
|
|
15
|
+
* The capability factories live here (rather than a sibling
|
|
16
|
+
* `kernel/via-crypto.ts`) so they can call `deriveSealedFieldKey`/
|
|
17
|
+
* `deriveSealedFieldKeyFromCek`/`encrypt`/`decrypt` directly — this file IS
|
|
18
|
+
* kernel enclave code (C3), so it is exempt from `enclave-barrel-only` the
|
|
19
|
+
* same way `record-codec.ts`/`sealing.ts` are. A file outside
|
|
20
|
+
* `kernel/enclave/**` would have had to go through the enclave barrel
|
|
21
|
+
* (`kernel/enclave/index.ts`), which does not (yet) export these symbols.
|
|
22
|
+
*/
|
|
23
|
+
import { type EnclaveKey } from '../crypto.js';
|
|
24
|
+
import { SealedHandle } from '../../types.js';
|
|
25
|
+
import type { ViaCryptoCtx } from '../../via/index.js';
|
|
26
|
+
/**
|
|
27
|
+
* Key material for one collection's sealed-field derivation. `cek`, when
|
|
28
|
+
* supplied, is preferred (record-scoped); `getDEK` is the fallback (and,
|
|
29
|
+
* for legacy/no-CEK collections, the only key) — mirrors the dual-read
|
|
30
|
+
* `RecordCodec` has always done.
|
|
31
|
+
*/
|
|
32
|
+
export interface SealKeyMaterial {
|
|
33
|
+
readonly collection: string;
|
|
34
|
+
readonly cek?: EnclaveKey;
|
|
35
|
+
getDEK(): Promise<EnclaveKey>;
|
|
36
|
+
}
|
|
37
|
+
export interface SealFieldsResult {
|
|
38
|
+
readonly openRecord: Record<string, unknown>;
|
|
39
|
+
readonly sealed: Record<string, string> | undefined;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Peel declared `sensitiveFields` out of `record` BEFORE building `_data`,
|
|
43
|
+
* sealing each into its own `iv:data` slot. Extracted byte-parity from
|
|
44
|
+
* `RecordCodec.encryptRecord` step 2 (pre-#629 `record-codec.ts:261-288`).
|
|
45
|
+
* Returns `record` untouched (and `sealed: undefined`) when no declared
|
|
46
|
+
* field is present with a defined value — the envelope stays byte-identical
|
|
47
|
+
* to legacy output, exactly as before.
|
|
48
|
+
*/
|
|
49
|
+
export declare function sealFields(record: Record<string, unknown>, sensitiveFields: ReadonlySet<string>, keyMaterial: SealKeyMaterial): Promise<SealFieldsResult>;
|
|
50
|
+
/**
|
|
51
|
+
* Unseal one `_sealed[field]` slot to its plaintext value: dual-read (try
|
|
52
|
+
* the CEK-derived key, fall back to the DEK-derived key for legacy
|
|
53
|
+
* records), AES-GCM-decrypt the `iv:data` blob, and JSON-parse the result.
|
|
54
|
+
* Extracted byte-parity from `RecordCodec.unsealField`
|
|
55
|
+
* (pre-#629 `record-codec.ts:485-493`).
|
|
56
|
+
*/
|
|
57
|
+
export declare function unsealOneField(field: string, blob: string, keyMaterial: SealKeyMaterial): Promise<unknown>;
|
|
58
|
+
/**
|
|
59
|
+
* Build a non-leaking {@link SealedHandle} producer over sealed key
|
|
60
|
+
* material: each call captures only the ciphertext `blob` and a closure to
|
|
61
|
+
* {@link unsealOneField} — the plaintext is never stored on the handle, and
|
|
62
|
+
* (crucially) the DEK is fetched lazily on `reveal()`, never at handle-
|
|
63
|
+
* construction time. Extracted byte-parity from
|
|
64
|
+
* `RecordCodec.makeSealedHandle` (pre-#629 `record-codec.ts:552-554`).
|
|
65
|
+
*/
|
|
66
|
+
export declare function makeHandleProducer(keyMaterial: SealKeyMaterial): (field: string, blob: string) => SealedHandle<unknown>;
|
|
67
|
+
/**
|
|
68
|
+
* Restore every `[field]: blob` entry in `sealed` onto `record` (mutated in
|
|
69
|
+
* place, matching the original's mutate-then-return shape): eagerly unseal
|
|
70
|
+
* to plaintext (`opts.asHandles` falsy) or wrap each in a
|
|
71
|
+
* {@link SealedHandle} (`opts.asHandles: true`) so the plaintext is never
|
|
72
|
+
* materialised. Extracted byte-parity from `RecordCodec.decryptRecord`'s
|
|
73
|
+
* sealed-handle block (pre-#629 `record-codec.ts:615-623`).
|
|
74
|
+
*/
|
|
75
|
+
export declare function unsealFields(record: Record<string, unknown>, sealed: Record<string, string>, keyMaterial: SealKeyMaterial, opts?: {
|
|
76
|
+
asHandles?: boolean;
|
|
77
|
+
}): Promise<Record<string, unknown>>;
|
|
78
|
+
/** What {@link makeSealedSlotCapability} needs — a subset of `RecordCodecContext`. */
|
|
79
|
+
export interface SealedSlotCapabilityCtx {
|
|
80
|
+
readonly name: string;
|
|
81
|
+
getDEK(): Promise<EnclaveKey>;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Build a `ViaCryptoCtx.sealedSlots` capability pre-bound to one
|
|
85
|
+
* `(collection, recordId)`. The key material (`cek`/DEK resolver) is closed
|
|
86
|
+
* over and never placed on the returned object — `Object.keys`/
|
|
87
|
+
* `Object.values` of the capability expose only the three methods, never a
|
|
88
|
+
* key (zero-knowledge: capabilities never expose keys).
|
|
89
|
+
*
|
|
90
|
+
* `delete(field)` is **advisory and capability-instance-local, not real
|
|
91
|
+
* erasure** — it has no store to reach and never will by itself: it just
|
|
92
|
+
* adds `field` to a `Set` closed over by THIS ONE capability object, so a
|
|
93
|
+
* later `unseal` call on that SAME object refuses. No I/O happens. A fresh
|
|
94
|
+
* capability for the same record (e.g. `seal()`'d again, or a new
|
|
95
|
+
* `makeSealedSlotCapability(...)` call) has an empty set and sees no
|
|
96
|
+
* deletion at all — `seal()` on a given field also clears any prior mark
|
|
97
|
+
* for it. Do not build production logic on `delete()` persisting anything.
|
|
98
|
+
* The real erasure guarantee for a forgotten record is `vault.forget()`'s
|
|
99
|
+
* unconditional `_writeTombstone` call, which replaces the whole live
|
|
100
|
+
* envelope with a fresh, `_sealed`-free tombstone — `_sealed` disappears
|
|
101
|
+
* from the store regardless of what any capability's `delete()` marked.
|
|
102
|
+
* (#629 Task 10 traced this end-to-end; see task-10-report.md "sealedSlots
|
|
103
|
+
* .delete()" section. Removing/changing this method's shape is a phase-E
|
|
104
|
+
* decision, not implied by this comment.)
|
|
105
|
+
*/
|
|
106
|
+
export declare function makeSealedSlotCapability(ctx: SealedSlotCapabilityCtx, recordId: string, cek?: EnclaveKey): ViaCryptoCtx['sealedSlots'];
|
|
107
|
+
/** Resolve the DEK for an arbitrary (possibly synthetic, e.g. `_dict_en`) collection name. */
|
|
108
|
+
export type ReservedEnvelopeDekResolver = (collection: string) => Promise<EnclaveKey>;
|
|
109
|
+
/**
|
|
110
|
+
* Build a `ViaCryptoCtx.reservedEnvelopes` capability: a whole-envelope
|
|
111
|
+
* encrypt/decrypt door scoped to collection names under a declared prefix
|
|
112
|
+
* (e.g. `_dict_`) — the shape `via/i18n/dictionary.ts`'s
|
|
113
|
+
* `DictionaryHandle` needs (seam map Part 3): build JSON → encrypt under a
|
|
114
|
+
* DEK → wrap in an `EncryptedEnvelope`; decrypt → JSON text. No per-record
|
|
115
|
+
* CEK — reserved envelopes are whole-DEK-encrypted, same as the dictionary
|
|
116
|
+
* grandfather.
|
|
117
|
+
*
|
|
118
|
+
* `reservedEnvelopes(prefix)` throws `ValidationError` immediately when
|
|
119
|
+
* `prefix` is not in `declaredPrefixes`; each `encrypt`/`decrypt` call
|
|
120
|
+
* throws `ValidationError` when its `collection` argument does not start
|
|
121
|
+
* with `prefix`.
|
|
122
|
+
*/
|
|
123
|
+
export declare function makeReservedEnvelopes(dekResolver: ReservedEnvelopeDekResolver, declaredPrefixes: readonly string[]): ViaCryptoCtx['reservedEnvelopes'];
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Record-scoped CEK sealing — grantor side.
|
|
3
|
+
*
|
|
4
|
+
* The **grantor** holds the collection DEK and seals ONE record's CEK to an
|
|
5
|
+
* `at-*` host so that host — and only that host — can decrypt exactly that
|
|
6
|
+
* record, with no access to the vault DEK and no ability to read any other
|
|
7
|
+
* record. This is the counterpart to the host-side `openSealedRecord`
|
|
8
|
+
* (`@noy-db/hub/sealed-record`), which holds no DEK.
|
|
9
|
+
*
|
|
10
|
+
* These functions are the orchestration behind `vault.sealRecordToHost` /
|
|
11
|
+
* `vault.revokeSealedRecord` / `vault.rotateRecordCek`, lifted off `Vault`
|
|
12
|
+
* behind a narrow {@link SealingContext} so the kernel file delegates. They
|
|
13
|
+
* live in `record-keys/` (the vault-side CEK policy layer), NOT in
|
|
14
|
+
* `sealed-record/`, so the host-side subpath stays DEK-free — the wire
|
|
15
|
+
* *types* they share are spine-owned (`kernel/types.ts`), not imported from
|
|
16
|
+
* `sealed-record/` directly.
|
|
17
|
+
*/
|
|
18
|
+
import { type EnclaveKey } from '../crypto.js';
|
|
19
|
+
import { type NoydbStore, type RecipientSealer } from '../../types.js';
|
|
20
|
+
/** The `_sealed_cek` delivery namespace (one envelope per `collection/id/pid`). */
|
|
21
|
+
export declare const SEALED_CEK_NS = "_sealed_cek";
|
|
22
|
+
/** What the grantor functions need from their `Vault`. */
|
|
23
|
+
export interface SealingContext {
|
|
24
|
+
readonly adapter: NoydbStore;
|
|
25
|
+
/** Vault id (the adapter's first coordinate). */
|
|
26
|
+
readonly vault: string;
|
|
27
|
+
/** Resolve the DEK a record's CEK is wrapped under. */
|
|
28
|
+
getDEK(collection: string): Promise<EnclaveKey>;
|
|
29
|
+
/** Actor id stamped on `_by` (empty string → omit). */
|
|
30
|
+
readonly actor: string;
|
|
31
|
+
/** Evict the per-record CEK cache + decrypted-record cache after a rotation. */
|
|
32
|
+
invalidateRecordCaches(collection: string, id: string): Promise<void>;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Seal a record's CEK to a host. See `vault.sealRecordToHost` for the contract.
|
|
36
|
+
* Returns `{ pid, envelopeKey }`.
|
|
37
|
+
*/
|
|
38
|
+
export declare function sealRecordToHost(ctx: SealingContext, collection: string, id: string, hostSealer: RecipientSealer, opts: {
|
|
39
|
+
expiresAt: string;
|
|
40
|
+
}): Promise<{
|
|
41
|
+
pid: string;
|
|
42
|
+
envelopeKey: string;
|
|
43
|
+
}>;
|
|
44
|
+
/**
|
|
45
|
+
* Revoke one sealed-CEK grant.
|
|
46
|
+
*
|
|
47
|
+
* **Default (`{ hard: false }`) is SOFT** — it only deletes the delivery
|
|
48
|
+
* envelope from the store. A host that already fetched (or cached the unsealed
|
|
49
|
+
* CEK from) that envelope KEEPS decrypt capability for the record; soft revoke
|
|
50
|
+
* is a "stop new fetches" control, not a cryptographic cutoff.
|
|
51
|
+
*
|
|
52
|
+
* **`{ hard: true }`** additionally rotates the record's CEK (via
|
|
53
|
+
* {@link rotateRecordCek}): the live body is re-encrypted under a fresh CEK and
|
|
54
|
+
* EVERY sealed-CEK delivery envelope for the record (all pids) is deleted, so
|
|
55
|
+
* any previously-sealed CEK fails the AES-GCM auth tag on the rotated body —
|
|
56
|
+
* future opens are cryptographically denied. (PRE-rotation history versions,
|
|
57
|
+
* which keep their old `_cek`, remain openable — same semantics as
|
|
58
|
+
* `rotateRecordCek`.)
|
|
59
|
+
*/
|
|
60
|
+
export declare function revokeSealedRecord(ctx: SealingContext, collection: string, id: string, pid: string, opts?: {
|
|
61
|
+
hard?: boolean;
|
|
62
|
+
}): Promise<void>;
|
|
63
|
+
/**
|
|
64
|
+
* HARD-rotate a record's CEK: re-encrypt the live body under a fresh CEK, evict
|
|
65
|
+
* caches, and delete EVERY sealed-CEK delivery envelope for the record. See
|
|
66
|
+
* `vault.rotateRecordCek` for why this bypasses `Collection.put` (no guards, no
|
|
67
|
+
* history bump — a key rotation must not re-encrypt prior history under the new
|
|
68
|
+
* CEK).
|
|
69
|
+
*/
|
|
70
|
+
export declare function rotateRecordCek(ctx: SealingContext, collection: string, id: string): Promise<void>;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tombstone shape + predicate for the per-record-key (CEK) layer.
|
|
3
|
+
*
|
|
4
|
+
* A *tombstone* is the residue a GDPR crypto-shred (`vault.forget()`)
|
|
5
|
+
* leaves on disk: the live envelope rewritten to `{ _noydb, _v, _ts, _by,
|
|
6
|
+
* _iv:'', _data:'' }`, dropping `_iv`/`_data`/`_cek`/`_det`. With the wrapped
|
|
7
|
+
* per-record CEK gone, the body — and every history version under the same
|
|
8
|
+
* CEK — is permanently undecryptable, while the record KEY survives so the
|
|
9
|
+
* version counter and "record existed and was erased" persist for the audit
|
|
10
|
+
* ledger.
|
|
11
|
+
*
|
|
12
|
+
* These two helpers are the pure, collection-independent core of that
|
|
13
|
+
* contract: {@link buildTombstone} mints the shape, {@link isTombstone}
|
|
14
|
+
* recognises it on the read path. The orchestration that *writes* a tombstone
|
|
15
|
+
* (`_writeTombstone`) and drives `vault.forget()` lives with the collection /
|
|
16
|
+
* vault; it calls into these.
|
|
17
|
+
*/
|
|
18
|
+
import { type EncryptedEnvelope } from '../../types.js';
|
|
19
|
+
/**
|
|
20
|
+
* Shape-only tombstone recognition for layers that have no per-collection
|
|
21
|
+
* context (the sync engine, #590): a tombstone carries an empty `_data` and
|
|
22
|
+
* no wrapped CEK. No live envelope can match — record bodies never serialize
|
|
23
|
+
* to the empty string (the `_sync` meta envelope carries non-empty `_data`,
|
|
24
|
+
* and legacy migration envelopes carry non-empty `_iv`/`_data`).
|
|
25
|
+
*/
|
|
26
|
+
export declare function isTombstoneShape(envelope: EncryptedEnvelope): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Is this envelope a crypto-shred tombstone?
|
|
29
|
+
*
|
|
30
|
+
* A tombstone carries no body (`_data` empty) and no wrapped CEK (`_cek`
|
|
31
|
+
* absent) — decrypting it would call `decrypt('', '', dek)` → an AES-GCM
|
|
32
|
+
* throw, so every read choke point must short-circuit to `null` instead.
|
|
33
|
+
*
|
|
34
|
+
* `encrypted` is the collection's encryption flag: on an unencrypted
|
|
35
|
+
* collection there are no envelopes to shred, so nothing is ever a tombstone.
|
|
36
|
+
* (Legacy migration envelopes carry non-empty `_iv`/`_data`, so they are not
|
|
37
|
+
* tombstones and stay readable.)
|
|
38
|
+
*/
|
|
39
|
+
export declare function isTombstone(envelope: EncryptedEnvelope, encrypted: boolean): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Mint a tombstone envelope from a record's live version + actor.
|
|
42
|
+
*
|
|
43
|
+
* Keeps `_v` (the displaced version) so the counter is monotonic across the
|
|
44
|
+
* shred, stamps a fresh `_ts`, and records `_by` when an actor is supplied.
|
|
45
|
+
* Deliberately omits `_iv`/`_data`/`_cek`/`_det` — that omission *is* the
|
|
46
|
+
* erasure.
|
|
47
|
+
*/
|
|
48
|
+
export declare function buildTombstone(version: number, actor: string): EncryptedEnvelope;
|
|
49
|
+
/** #589: is this envelope an ordinary-delete marker (version-ordered, reads as absent)? */
|
|
50
|
+
export declare function isDeleteMarker(envelope: EncryptedEnvelope): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Mint a delete marker from the deleted record's next version + actor (#589).
|
|
53
|
+
* Minted at the NEXT version (`existing._v + 1`) — unlike `buildTombstone`, which
|
|
54
|
+
* keeps the displaced `_v` — so it wins convergence over the pre-delete copy and a
|
|
55
|
+
* re-create can still win over it at a higher version.
|
|
56
|
+
*/
|
|
57
|
+
export declare function buildDeleteMarker(version: number, actor: string): EncryptedEnvelope;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
declare function checkEnvironment(): void;
|