@noy-db/hub 0.3.0-pre.8 → 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 +9 -8
- package/dist/aggregate/index.js.map +1 -1
- 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 -31
- 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-NWSGI5C7.js.map +1 -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-T2FFWNPK.js.map +1 -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-ZJ2AK4V7.js.map +1 -0
- package/dist/chunk-ZUODRVHY.js +14 -0
- package/dist/classified/index.js +5 -3
- 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 -11
- 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 +50 -37
- package/dist/i18n/index.js.map +1 -1
- package/dist/index.d.ts +307 -1459
- package/dist/index.js +595 -198
- 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 -15
- 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 +9 -6
- 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 -5
- package/dist/adapter/index.js +0 -15
- package/dist/aggregate/index.d.ts +0 -42
- package/dist/api-JDWL67WL.js +0 -20
- package/dist/as/index.d.ts +0 -7
- package/dist/at/index.d.ts +0 -5
- package/dist/attestation/index.d.ts +0 -20
- package/dist/backup-WRGNTGJF.js +0 -225
- package/dist/backup-WRGNTGJF.js.map +0 -1
- package/dist/blobs/index.d.ts +0 -44
- package/dist/bundle/index.d.ts +0 -122
- package/dist/bundle-DzWtVw7w.d.ts +0 -548
- package/dist/by/index.d.ts +0 -1
- package/dist/cargo/index.d.ts +0 -9
- package/dist/chunk-25G7PUTA.js +0 -235
- package/dist/chunk-26FSVNBL.js +0 -34
- package/dist/chunk-2PJB6H3H.js +0 -167
- package/dist/chunk-2PJB6H3H.js.map +0 -1
- package/dist/chunk-37JZR7CY.js +0 -91
- package/dist/chunk-3KBK5LU4.js +0 -117
- package/dist/chunk-3YKBGS3I.js +0 -686
- package/dist/chunk-3YKBGS3I.js.map +0 -1
- package/dist/chunk-44DV37ZV.js +0 -75
- package/dist/chunk-44DV37ZV.js.map +0 -1
- package/dist/chunk-47C4CI7R.js +0 -108
- package/dist/chunk-47C4CI7R.js.map +0 -1
- package/dist/chunk-4VDFUBTS.js +0 -275
- package/dist/chunk-4VDFUBTS.js.map +0 -1
- package/dist/chunk-55LSDABW.js +0 -94
- package/dist/chunk-56JB2BGI.js +0 -13003
- package/dist/chunk-56JB2BGI.js.map +0 -1
- package/dist/chunk-5GQE5IDB.js +0 -513
- package/dist/chunk-5GQE5IDB.js.map +0 -1
- package/dist/chunk-5HRJQSKN.js +0 -202
- package/dist/chunk-5HZULLHE.js +0 -404
- package/dist/chunk-5JQMX2EH.js +0 -50
- package/dist/chunk-5UOPIPZC.js +0 -95
- package/dist/chunk-5YBUFCFF.js +0 -135
- package/dist/chunk-62APEMF3.js +0 -280
- package/dist/chunk-62APEMF3.js.map +0 -1
- package/dist/chunk-6P5AJ2ZS.js +0 -120
- package/dist/chunk-6P5AJ2ZS.js.map +0 -1
- package/dist/chunk-6PALJTC2.js +0 -430
- package/dist/chunk-6PALJTC2.js.map +0 -1
- package/dist/chunk-6S7T6WC4.js +0 -111
- package/dist/chunk-6S7T6WC4.js.map +0 -1
- package/dist/chunk-6Z435B6N.js +0 -1656
- package/dist/chunk-6Z435B6N.js.map +0 -1
- package/dist/chunk-723XB5NX.js +0 -86
- package/dist/chunk-7CZ6YXMO.js +0 -124
- package/dist/chunk-7KTL4RHZ.js +0 -120
- package/dist/chunk-7KTL4RHZ.js.map +0 -1
- package/dist/chunk-7TAV3BFQ.js +0 -766
- package/dist/chunk-7TAV3BFQ.js.map +0 -1
- package/dist/chunk-BASCPHNM.js +0 -380
- package/dist/chunk-BASCPHNM.js.map +0 -1
- package/dist/chunk-BGIZAFY7.js +0 -1
- package/dist/chunk-BJ2XF2RC.js +0 -823
- package/dist/chunk-BM6E4MUT.js +0 -881
- package/dist/chunk-BM6E4MUT.js.map +0 -1
- package/dist/chunk-BTFTHF6Q.js +0 -42
- package/dist/chunk-C4NOLA5X.js +0 -132
- package/dist/chunk-C4NOLA5X.js.map +0 -1
- package/dist/chunk-CHK5VVMI.js +0 -155
- package/dist/chunk-DCVVCJVB.js +0 -45
- package/dist/chunk-EU7HDMT3.js +0 -54
- package/dist/chunk-F3EKFGUS.js +0 -99
- package/dist/chunk-FCOZ7DEC.js +0 -355
- package/dist/chunk-FCOZ7DEC.js.map +0 -1
- package/dist/chunk-FWART3VA.js +0 -205
- package/dist/chunk-FZK3JJJK.js +0 -150
- package/dist/chunk-GDOOG5YQ.js +0 -382
- package/dist/chunk-GLVXQU3E.js +0 -155
- package/dist/chunk-HU55NPHZ.js +0 -80
- package/dist/chunk-I6JJ6VJS.js +0 -97
- package/dist/chunk-I6URUNTD.js +0 -59
- package/dist/chunk-IARAK3PK.js +0 -14
- package/dist/chunk-II6DLDZM.js +0 -30
- package/dist/chunk-J5YUA6JB.js +0 -23
- package/dist/chunk-J7OH6R4K.js +0 -49
- package/dist/chunk-K2WCO3NX.js +0 -1
- package/dist/chunk-L6Q5NA22.js +0 -40
- package/dist/chunk-LFGJG4XZ.js +0 -30
- package/dist/chunk-M3OYTM5Z.js +0 -85
- package/dist/chunk-MOQ5M46U.js +0 -209
- package/dist/chunk-NTPWQH4S.js +0 -589
- package/dist/chunk-OJ64XMPJ.js +0 -1434
- package/dist/chunk-OJ64XMPJ.js.map +0 -1
- package/dist/chunk-OWGAXPRE.js +0 -129
- package/dist/chunk-P2PEPSPK.js +0 -230
- package/dist/chunk-P6TZ3IVN.js +0 -453
- package/dist/chunk-P6TZ3IVN.js.map +0 -1
- package/dist/chunk-PAJCRV7O.js +0 -123
- package/dist/chunk-PMMV5SQC.js +0 -416
- package/dist/chunk-PMMV5SQC.js.map +0 -1
- package/dist/chunk-PPPZIBKY.js +0 -261
- package/dist/chunk-PPPZIBKY.js.map +0 -1
- package/dist/chunk-PVC2FBCQ.js +0 -45
- package/dist/chunk-PYIUDUGS.js +0 -36
- package/dist/chunk-QABECTNN.js +0 -255
- package/dist/chunk-QYMMMKOO.js +0 -164
- package/dist/chunk-R4IVPJHN.js +0 -130
- package/dist/chunk-REWTMYSF.js +0 -32
- package/dist/chunk-REWTMYSF.js.map +0 -1
- package/dist/chunk-RNYDHIQL.js +0 -367
- package/dist/chunk-RUIMKQTA.js +0 -23
- package/dist/chunk-RUIMKQTA.js.map +0 -1
- package/dist/chunk-TCGVRKOS.js +0 -367
- package/dist/chunk-TIAYXOEI.js +0 -99
- package/dist/chunk-TQ3REHVF.js +0 -95
- package/dist/chunk-TQ3REHVF.js.map +0 -1
- package/dist/chunk-TUL5YQWF.js +0 -777
- package/dist/chunk-U7LV2DUN.js +0 -74
- package/dist/chunk-UB3XHGFG.js +0 -181
- package/dist/chunk-UB3XHGFG.js.map +0 -1
- package/dist/chunk-UMH35AQV.js +0 -70
- package/dist/chunk-UWZ7O4NR.js +0 -29
- package/dist/chunk-V76PHWLE.js +0 -41
- package/dist/chunk-VFQOE76I.js +0 -69
- package/dist/chunk-VIWOGJ2O.js +0 -71
- package/dist/chunk-VK6OC22R.js +0 -37
- package/dist/chunk-VK6OC22R.js.map +0 -1
- package/dist/chunk-VVLOWY74.js +0 -150
- package/dist/chunk-VVLOWY74.js.map +0 -1
- package/dist/chunk-W3JABOVB.js +0 -53
- package/dist/chunk-W3JABOVB.js.map +0 -1
- package/dist/chunk-WPNP3NF5.js +0 -1221
- package/dist/chunk-WPNP3NF5.js.map +0 -1
- package/dist/chunk-X5QZAJDB.js +0 -59
- package/dist/chunk-X6VNIRHS.js +0 -239
- package/dist/chunk-X6VNIRHS.js.map +0 -1
- package/dist/chunk-XBPUVQDO.js +0 -664
- package/dist/chunk-XBPUVQDO.js.map +0 -1
- package/dist/chunk-XW5LZYV4.js +0 -21
- package/dist/chunk-YTCCC6NG.js +0 -320
- package/dist/chunk-YTCCC6NG.js.map +0 -1
- package/dist/classified/index.d.ts +0 -17
- package/dist/collection-facade-EJVIN2BY.js +0 -39
- package/dist/computed-6FOFXQPE.js +0 -11
- package/dist/config-drift-RFEVGBKR.js +0 -24
- package/dist/config-drift-RFEVGBKR.js.map +0 -1
- package/dist/consent/index.d.ts +0 -23
- package/dist/crdt/index.d.ts +0 -34
- package/dist/dead-filter-RHMNYOXP.js +0 -28
- package/dist/decrypt-partition-IHtxEnTi.d.ts +0 -21
- package/dist/delegation-IHXOASHV.js +0 -25
- package/dist/derivations/index.d.ts +0 -70
- package/dist/derive-CD3ZVIXK.js +0 -21
- package/dist/describe/index.d.ts +0 -1
- package/dist/describe/index.js +0 -1
- package/dist/describe-C6iHNlqJ.d.ts +0 -162
- package/dist/dev-unlock-wgQ7Ci5I.d.ts +0 -263
- package/dist/discriminant-BN9REW3o.d.ts +0 -60
- package/dist/enclave-KGEUW2GL.js +0 -123
- package/dist/executor-EUPYHCLU.js +0 -9
- package/dist/executor-KZ4B3PRT.js +0 -9
- package/dist/executor-MHUM2VZK.js +0 -21
- package/dist/export-accessible-Z3NSZZHN.js +0 -23
- package/dist/extract-partition-VSKT35JG.js +0 -36
- package/dist/fanout-sidecar-NBDKKCHT.js +0 -74
- package/dist/find-OH4BEULF.js +0 -11
- package/dist/forget/index.d.ts +0 -36
- package/dist/guards/index.d.ts +0 -35
- package/dist/hash-CwHnoKyW.d.ts +0 -72
- package/dist/history/index.d.ts +0 -61
- package/dist/i18n/index.d.ts +0 -37
- package/dist/in/index.d.ts +0 -5
- package/dist/index-B9QdHytu.d.ts +0 -123
- package/dist/index-CTvUp94-.d.ts +0 -123
- package/dist/index-Dn5GzPg_.d.ts +0 -22138
- package/dist/indexing/index.d.ts +0 -39
- package/dist/issue-AEOL6RXA.js +0 -19
- package/dist/kernel/index.d.ts +0 -32
- package/dist/kernel/index.js +0 -59
- package/dist/lazy/index.d.ts +0 -21
- package/dist/ledger-3LR3YO2W.js +0 -42
- package/dist/liberate-XSEPRWEA.js +0 -24
- package/dist/link-set-NSUIX6BR.js +0 -31
- package/dist/materialized-views/index.d.ts +0 -173
- package/dist/mime-magic-CYbFNQ4h.d.ts +0 -103
- package/dist/noydb-POVTIVQ6.js +0 -62
- package/dist/on/index.d.ts +0 -5
- package/dist/overlay-views/index.d.ts +0 -98
- package/dist/periods/index.d.ts +0 -20
- package/dist/pod/index.d.ts +0 -63
- package/dist/policy-Y7HL2KGA.js +0 -41
- package/dist/portability/index.d.ts +0 -20
- package/dist/post-register-KOFRTCDD.js +0 -55
- package/dist/post-register-KOFRTCDD.js.map +0 -1
- package/dist/public-envelope-NC7SPNMV.js +0 -32
- package/dist/query/index.d.ts +0 -5
- package/dist/read-only-facade-5ADRJVTM.js +0 -8
- package/dist/register-3D6R2MKN.js +0 -23
- package/dist/registry-AI4E46PD.js +0 -19
- package/dist/registry-HSNQ4NBP.js +0 -9
- package/dist/registry-WIX6QCV5.js +0 -17
- package/dist/request-withdrawal-GU4XS2R5.js +0 -31
- package/dist/reveal-5Y777N5Q.js +0 -38
- package/dist/reveal-5Y777N5Q.js.map +0 -1
- package/dist/revoke-ZFETCLYV.js +0 -24
- package/dist/revoke-ZFETCLYV.js.map +0 -1
- package/dist/satellites/index.d.ts +0 -5
- package/dist/sealed-record/index.d.ts +0 -69
- package/dist/session/index.d.ts +0 -44
- package/dist/shadow/index.d.ts +0 -15
- package/dist/signer-GAIMQQ2J.js +0 -25
- package/dist/signer-GAIMQQ2J.js.map +0 -1
- package/dist/snapshots/index.d.ts +0 -26
- package/dist/stale-77LP2EEF.js +0 -14
- package/dist/stale-77LP2EEF.js.map +0 -1
- package/dist/storage-KEXIXLGM.js +0 -23
- package/dist/storage-KEXIXLGM.js.map +0 -1
- package/dist/store-coordination-provider-NJDDZ264.js +0 -142
- package/dist/subject-index-O75wKshW.d.ts +0 -362
- package/dist/sync/index.d.ts +0 -41
- package/dist/team/index.d.ts +0 -155
- package/dist/tiers/index.d.ts +0 -5
- package/dist/to/index.d.ts +0 -5
- package/dist/transition-guard-D5RLJv8S.d.ts +0 -165
- package/dist/tx/index.d.ts +0 -35
- package/dist/ui/index.d.ts +0 -1
- package/dist/ulid-DRH25k3y.d.ts +0 -66
- package/dist/util/index.d.ts +0 -79
- package/dist/validators-C3lrVF-c.d.ts +0 -101
- package/dist/vault-diff-_LSIcOMv.d.ts +0 -147
- package/dist/verify-CAYGXYNO.js +0 -139
- package/dist/verify-CAYGXYNO.js.map +0 -1
- package/dist/walk-SMAE4IEI.js +0 -241
- package/dist/with/index.d.ts +0 -38
- package/dist/with-materialized-view-Xv1-9Bh0.d.ts +0 -27
- package/dist/with-overlayed-view-CuWhq_-C.d.ts +0 -12
- package/dist/with-rollup-K_iwal4b.d.ts +0 -47
- package/dist/withdraw-accessible-Q7BULAN5.js +0 -28
- package/dist/withdraw-accessible-Q7BULAN5.js.map +0 -1
- /package/dist/{adapter/index.js.map → api-ZGS6LCOF.js.map} +0 -0
- /package/dist/{chunk-VIWOGJ2O.js.map → chunk-3B5VVCNY.js.map} +0 -0
- /package/dist/{chunk-P2PEPSPK.js.map → chunk-3LQ2YKO4.js.map} +0 -0
- /package/dist/{chunk-EU7HDMT3.js.map → chunk-3QCRBHCY.js.map} +0 -0
- /package/dist/{chunk-FZK3JJJK.js.map → chunk-4JBYV75E.js.map} +0 -0
- /package/dist/{chunk-I6JJ6VJS.js.map → chunk-4NXKCLLQ.js.map} +0 -0
- /package/dist/{chunk-VFQOE76I.js.map → chunk-5M5DVGV7.js.map} +0 -0
- /package/dist/{chunk-LFGJG4XZ.js.map → chunk-5YOLBEQ6.js.map} +0 -0
- /package/dist/{chunk-OWGAXPRE.js.map → chunk-6CRIV7DE.js.map} +0 -0
- /package/dist/{chunk-QABECTNN.js.map → chunk-6QTNZJBS.js.map} +0 -0
- /package/dist/{chunk-723XB5NX.js.map → chunk-6T2SCQRU.js.map} +0 -0
- /package/dist/{chunk-PVC2FBCQ.js.map → chunk-7DSTRQIJ.js.map} +0 -0
- /package/dist/{chunk-NTPWQH4S.js.map → chunk-AUSTCW2X.js.map} +0 -0
- /package/dist/{chunk-MOQ5M46U.js.map → chunk-B3HJYUOF.js.map} +0 -0
- /package/dist/{chunk-QYMMMKOO.js.map → chunk-BDVFPG6Y.js.map} +0 -0
- /package/dist/{chunk-PYIUDUGS.js.map → chunk-CAF6WOK7.js.map} +0 -0
- /package/dist/{chunk-5HZULLHE.js.map → chunk-CIE2BASH.js.map} +0 -0
- /package/dist/{chunk-BTFTHF6Q.js.map → chunk-CRI4OUV4.js.map} +0 -0
- /package/dist/{chunk-37JZR7CY.js.map → chunk-DLG74CNB.js.map} +0 -0
- /package/dist/{chunk-TCGVRKOS.js.map → chunk-ERJ7FU55.js.map} +0 -0
- /package/dist/{chunk-FWART3VA.js.map → chunk-EVVGJDRQ.js.map} +0 -0
- /package/dist/{chunk-X5QZAJDB.js.map → chunk-EXK7QRWF.js.map} +0 -0
- /package/dist/{chunk-5HRJQSKN.js.map → chunk-EYZ6IQ6X.js.map} +0 -0
- /package/dist/{chunk-DCVVCJVB.js.map → chunk-F64IRYG3.js.map} +0 -0
- /package/dist/{chunk-BJ2XF2RC.js.map → chunk-FHS2HQSH.js.map} +0 -0
- /package/dist/{chunk-HU55NPHZ.js.map → chunk-GKEWXIV5.js.map} +0 -0
- /package/dist/{chunk-I6URUNTD.js.map → chunk-GTGPO5KW.js.map} +0 -0
- /package/dist/{chunk-5UOPIPZC.js.map → chunk-HB3RFQSC.js.map} +0 -0
- /package/dist/{chunk-F3EKFGUS.js.map → chunk-I6GALP6E.js.map} +0 -0
- /package/dist/{chunk-R4IVPJHN.js.map → chunk-IL6POWCW.js.map} +0 -0
- /package/dist/{chunk-3KBK5LU4.js.map → chunk-IU6SNYX6.js.map} +0 -0
- /package/dist/{chunk-TUL5YQWF.js.map → chunk-J2ZX2XUV.js.map} +0 -0
- /package/dist/{chunk-UWZ7O4NR.js.map → chunk-JKJOGPZN.js.map} +0 -0
- /package/dist/{chunk-V76PHWLE.js.map → chunk-JZUV47FZ.js.map} +0 -0
- /package/dist/{chunk-II6DLDZM.js.map → chunk-K5IMOGHB.js.map} +0 -0
- /package/dist/{chunk-GDOOG5YQ.js.map → chunk-LASZKVMO.js.map} +0 -0
- /package/dist/{chunk-5YBUFCFF.js.map → chunk-NR5LT5RY.js.map} +0 -0
- /package/dist/{chunk-UMH35AQV.js.map → chunk-Q5VNKNE5.js.map} +0 -0
- /package/dist/{chunk-XW5LZYV4.js.map → chunk-QLWMEXCT.js.map} +0 -0
- /package/dist/{chunk-PAJCRV7O.js.map → chunk-QRB7NAOJ.js.map} +0 -0
- /package/dist/{chunk-U7LV2DUN.js.map → chunk-R4ROFEYC.js.map} +0 -0
- /package/dist/{chunk-RNYDHIQL.js.map → chunk-RIX4V2TB.js.map} +0 -0
- /package/dist/{chunk-L6Q5NA22.js.map → chunk-RYCTDFUX.js.map} +0 -0
- /package/dist/{chunk-CHK5VVMI.js.map → chunk-RZ5SVOYR.js.map} +0 -0
- /package/dist/{chunk-TIAYXOEI.js.map → chunk-SLFHQTTW.js.map} +0 -0
- /package/dist/{chunk-J5YUA6JB.js.map → chunk-UNFPPVNI.js.map} +0 -0
- /package/dist/{chunk-25G7PUTA.js.map → chunk-VLFCJYTL.js.map} +0 -0
- /package/dist/{chunk-7CZ6YXMO.js.map → chunk-VN3DBQAU.js.map} +0 -0
- /package/dist/{chunk-J7OH6R4K.js.map → chunk-VZRODIM3.js.map} +0 -0
- /package/dist/{chunk-55LSDABW.js.map → chunk-W22IKJE2.js.map} +0 -0
- /package/dist/{chunk-GLVXQU3E.js.map → chunk-X3YYQWOQ.js.map} +0 -0
- /package/dist/{chunk-M3OYTM5Z.js.map → chunk-YFXZEAYK.js.map} +0 -0
- /package/dist/{chunk-5JQMX2EH.js.map → chunk-ZAJAVEXY.js.map} +0 -0
- /package/dist/{chunk-26FSVNBL.js.map → chunk-ZICD77GM.js.map} +0 -0
- /package/dist/{chunk-IARAK3PK.js.map → chunk-ZUODRVHY.js.map} +0 -0
- /package/dist/{api-JDWL67WL.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-RHMNYOXP.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-EJVIN2BY.js.map → derive-H2BJTLUI.js.map} +0 -0
- /package/dist/{computed-6FOFXQPE.js.map → enclave-AP3I5W7O.js.map} +0 -0
- /package/dist/{delegation-IHXOASHV.js.map → executor-KGWTNEQD.js.map} +0 -0
- /package/dist/{derive-CD3ZVIXK.js.map → executor-OVEXR6RT.js.map} +0 -0
- /package/dist/{describe/index.js.map → executor-UNEH5ZYH.js.map} +0 -0
- /package/dist/{enclave-KGEUW2GL.js.map → export-accessible-PCMXSUZS.js.map} +0 -0
- /package/dist/{executor-EUPYHCLU.js.map → extract-partition-SWHFSYJO.js.map} +0 -0
- /package/dist/{fanout-sidecar-NBDKKCHT.js.map → fanout-sidecar-A765THMX.js.map} +0 -0
- /package/dist/{executor-KZ4B3PRT.js.map → find-N6345CNT.js.map} +0 -0
- /package/dist/{executor-MHUM2VZK.js.map → issue-5OKB6I2R.js.map} +0 -0
- /package/dist/{export-accessible-Z3NSZZHN.js.map → ledger-GFBKVPV4.js.map} +0 -0
- /package/dist/{extract-partition-VSKT35JG.js.map → liberate-3VDOT4KO.js.map} +0 -0
- /package/dist/{find-OH4BEULF.js.map → link-set-Z7Q2ASFX.js.map} +0 -0
- /package/dist/{issue-AEOL6RXA.js.map → noydb-ZCJOYBDI.js.map} +0 -0
- /package/dist/{kernel/index.js.map → policy-Z3RUAIY2.js.map} +0 -0
- /package/dist/{ledger-3LR3YO2W.js.map → public-envelope-B4KNWVUA.js.map} +0 -0
- /package/dist/{liberate-XSEPRWEA.js.map → read-only-facade-CHCKSEPD.js.map} +0 -0
- /package/dist/{link-set-NSUIX6BR.js.map → register-VAHONCID.js.map} +0 -0
- /package/dist/{noydb-POVTIVQ6.js.map → registry-7MLVD3VO.js.map} +0 -0
- /package/dist/{policy-Y7HL2KGA.js.map → registry-EPKPD5SM.js.map} +0 -0
- /package/dist/{public-envelope-NC7SPNMV.js.map → registry-P5T7PS2U.js.map} +0 -0
- /package/dist/{read-only-facade-5ADRJVTM.js.map → request-withdrawal-TI3A5WPS.js.map} +0 -0
- /package/dist/{register-3D6R2MKN.js.map → revoke-FDRD6GRW.js.map} +0 -0
- /package/dist/{registry-AI4E46PD.js.map → signer-MUWEIUI6.js.map} +0 -0
- /package/dist/{registry-HSNQ4NBP.js.map → stale-OSQ7J3AA.js.map} +0 -0
- /package/dist/{registry-WIX6QCV5.js.map → storage-MVFCGEQE.js.map} +0 -0
- /package/dist/{store-coordination-provider-NJDDZ264.js.map → store-coordination-provider-64OEZFGS.js.map} +0 -0
- /package/dist/{walk-SMAE4IEI.js.map → walk-SVNDIZ62.js.map} +0 -0
- /package/dist/{request-withdrawal-GU4XS2R5.js.map → withdraw-accessible-WZIEVWSR.js.map} +0 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `transitionGuard` — declarative state-machine sugar over the guard
|
|
3
|
+
* service.
|
|
4
|
+
*
|
|
5
|
+
* Any record with a lifecycle field (invoice `status`, order state,
|
|
6
|
+
* ticket workflow, subscription phase) needs transition validation: a
|
|
7
|
+
* write may only move the field along a declared arc. That is expressible
|
|
8
|
+
* with a hand-rolled `withGuard({ check })`, but every consumer
|
|
9
|
+
* re-implements the same graph lookup + error. `transitionGuard`
|
|
10
|
+
* generates exactly that guard from a state graph, reusing the guard
|
|
11
|
+
* machinery wholesale — `check` rejection, the ledgered `amendment`
|
|
12
|
+
* override, and composition with `periods`/`history`.
|
|
13
|
+
*
|
|
14
|
+
* It generalizes {@link immutableGuard}: WORM is the special case "every
|
|
15
|
+
* state has no outgoing arcs", i.e. `transitions` mapping each state to `[]`.
|
|
16
|
+
*
|
|
17
|
+
* ```ts
|
|
18
|
+
* createNoydb({ guardStrategies: [
|
|
19
|
+
* transitionGuard<Sale>({
|
|
20
|
+
* collection: 'sales', field: 'status',
|
|
21
|
+
* transitions: { // absence of an arc = forbidden
|
|
22
|
+
* draft: ['to_verify', 'cancelled'],
|
|
23
|
+
* to_verify: ['proforma', 'draft', 'cancelled'],
|
|
24
|
+
* proforma: ['invoiced', 'cancelled'],
|
|
25
|
+
* invoiced: ['paid'], paid: [], cancelled: [],
|
|
26
|
+
* },
|
|
27
|
+
* initial: ['draft', 'to_verify'], // allowed status on insert
|
|
28
|
+
* }),
|
|
29
|
+
* ] })
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* Semantics:
|
|
33
|
+
* - **Insert** (`ctx.existing === null`): `incoming[field]` must be in
|
|
34
|
+
* `initial`. When `initial` is omitted, any value is allowed on insert.
|
|
35
|
+
* - **Update**: the arc `(existing[field] → incoming[field])` must be
|
|
36
|
+
* listed in `transitions[from]`, else `IllegalTransitionError`. A
|
|
37
|
+
* same-value write (`from === to`) is allowed when `allowIdempotent`
|
|
38
|
+
* (default `true`) — so writes that touch other fields without moving
|
|
39
|
+
* state pass.
|
|
40
|
+
* - **Override**: inside an `amendment` transaction by an authorized role
|
|
41
|
+
* the check is skipped and the change is ledgered (mirrors every guard).
|
|
42
|
+
*
|
|
43
|
+
* The status graph is caller-supplied data — no UI, no domain logic.
|
|
44
|
+
*/
|
|
45
|
+
import type { GuardStrategyHandle, GuardContext, GuardChange } from './types.js';
|
|
46
|
+
export interface TransitionGuardConfig<T extends Record<string, unknown>> {
|
|
47
|
+
/** The collection whose state field is governed. */
|
|
48
|
+
collection: string;
|
|
49
|
+
/** The state field on the record (e.g. `'status'`). */
|
|
50
|
+
field: keyof T & string;
|
|
51
|
+
/**
|
|
52
|
+
* The transition graph: each state maps to the states it may move to.
|
|
53
|
+
* A state absent from the map (or mapped to `[]`) is terminal — no
|
|
54
|
+
* outgoing arc, so any non-idempotent write from it is rejected.
|
|
55
|
+
*/
|
|
56
|
+
transitions: Readonly<Record<string, readonly string[]>>;
|
|
57
|
+
/**
|
|
58
|
+
* States allowed as the initial value on insert (`existing === null`).
|
|
59
|
+
* Omit to allow any value on insert.
|
|
60
|
+
*/
|
|
61
|
+
initial?: readonly string[];
|
|
62
|
+
/**
|
|
63
|
+
* Allow a same-value write (`from === to`) on update. Default `true` —
|
|
64
|
+
* lets a put that changes other fields, but not the state, through.
|
|
65
|
+
*/
|
|
66
|
+
allowIdempotent?: boolean;
|
|
67
|
+
/** Roles permitted to override via an amendment transaction. Default `['admin', 'owner']`. */
|
|
68
|
+
amendmentRoles?: ReadonlyArray<'admin' | 'owner'>;
|
|
69
|
+
/**
|
|
70
|
+
* Optional set-level invariant run over the amendment change-set after
|
|
71
|
+
* the writes execute. Signature matches `GuardStrategy.amendment.invariant`
|
|
72
|
+
* exactly. When omitted the amendment is unconditionally allowed (the
|
|
73
|
+
* amendment itself is the sanctioned, ledgered override) — the
|
|
74
|
+
* backward-compatible default. Mirrors {@link immutableGuard}.
|
|
75
|
+
*/
|
|
76
|
+
amendmentInvariant?: (changes: ReadonlyArray<GuardChange<T>>, ctx: GuardContext<T>) => Promise<void> | void;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Build a state-machine transition guard. Pass the returned handle to
|
|
80
|
+
* `createNoydb({ guardStrategies: [...] })`.
|
|
81
|
+
*/
|
|
82
|
+
export declare function transitionGuard<T extends Record<string, unknown>>(config: TransitionGuardConfig<T>): GuardStrategyHandle<T>;
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import type { Role } from '../../kernel/types.js';
|
|
2
|
+
import type { Query } from '../../kernel/query/builder.js';
|
|
3
|
+
/**
|
|
4
|
+
* Minimum read surface exposed to guard `check` functions. Intentionally
|
|
5
|
+
* narrow — guards can read other collections but never write.
|
|
6
|
+
*
|
|
7
|
+
* `query()` returns the same chainable builder used elsewhere. `Query<T>`
|
|
8
|
+
* has no write terminals (no `.update()` / `.delete()`) so exposing it
|
|
9
|
+
* here preserves the read-only contract while letting guards aggregate
|
|
10
|
+
* with `.where().aggregate()` / `.groupBy()` / `.join()` instead of
|
|
11
|
+
* decrypting every sibling row via `.list()`.
|
|
12
|
+
*/
|
|
13
|
+
export interface ReadOnlyVaultFacade {
|
|
14
|
+
collection<T = unknown>(name: string): {
|
|
15
|
+
get(id: string): Promise<T | null>;
|
|
16
|
+
list(): Promise<T[]>;
|
|
17
|
+
query(): Query<T>;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Runtime context passed to `check` and `invariant` callbacks.
|
|
22
|
+
* `existing` is the currently-persisted record (null for inserts).
|
|
23
|
+
*/
|
|
24
|
+
export interface GuardContext<T> {
|
|
25
|
+
existing: T | null;
|
|
26
|
+
vault: ReadOnlyVaultFacade;
|
|
27
|
+
userId: string;
|
|
28
|
+
role: Role;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* One {before, after} pair handed to an `invariant` function. `before`
|
|
32
|
+
* is null for inserts; `after` reflects the proposed post-commit record.
|
|
33
|
+
*/
|
|
34
|
+
export interface GuardChange<T> {
|
|
35
|
+
before: T | null;
|
|
36
|
+
after: T;
|
|
37
|
+
}
|
|
38
|
+
/** @internal — output of {@link withGuard}. */
|
|
39
|
+
export interface GuardStrategyHandle<T extends Record<string, unknown>> {
|
|
40
|
+
readonly __noydb_strategy: 'guard';
|
|
41
|
+
readonly spec: GuardStrategy<T>;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Existential erasure of `GuardStrategyHandle<T>` — used as the
|
|
45
|
+
* element type of `ReadonlyArray<>` fields where the per-handle T
|
|
46
|
+
* differs (e.g. `guardStrategies: [invoiceGuard, disbursementGuard]`).
|
|
47
|
+
*
|
|
48
|
+
* Background: `GuardStrategyHandle<T>` is INVARIANT in T because T
|
|
49
|
+
* appears in callback positions on the spec (`check(incoming: T, ctx)`,
|
|
50
|
+
* `invariant(changes: ReadonlyArray<GuardChange<T>>, ctx)`). So
|
|
51
|
+
* `Handle<Invoice>` is not assignable to `Handle<Record<string, unknown>>`.
|
|
52
|
+
* A bounded existential ("there exists some T satisfying the constraint
|
|
53
|
+
* such that this is a Handle<T>") is the right shape; TypeScript has
|
|
54
|
+
* no first-class existentials, so we fake it with a structurally narrow
|
|
55
|
+
* interface that ERASES T from both the discriminant and the spec.
|
|
56
|
+
*
|
|
57
|
+
* Consumers continue to construct typed handles via `withGuard<T>(...)`
|
|
58
|
+
* which returns `GuardStrategyHandle<T>`. Both `Handle<Invoice>` and
|
|
59
|
+
* `Handle<Disbursement>` structurally assign to `GuardStrategyHandleAny`,
|
|
60
|
+
* so an array of them is `GuardStrategyHandleAny[]`.
|
|
61
|
+
*
|
|
62
|
+
* Internal code that needs T re-narrows via the runtime discriminant
|
|
63
|
+
* (`__noydb_strategy === 'guard'`) plus per-handle type information
|
|
64
|
+
* carried by the registry.
|
|
65
|
+
*
|
|
66
|
+
* NOT exported from the public barrel — keeping this internal
|
|
67
|
+
* discourages consumers from constructing it directly. Used only as
|
|
68
|
+
* the array-element type on `Vault` / `NoydbOptions.guardStrategies`.
|
|
69
|
+
*
|
|
70
|
+
* @internal
|
|
71
|
+
*/
|
|
72
|
+
export interface GuardStrategyHandleAny {
|
|
73
|
+
readonly __noydb_strategy: 'guard';
|
|
74
|
+
readonly spec: GuardStrategy<any>;
|
|
75
|
+
}
|
|
76
|
+
/** Public registration shape. See `withGuard()`. */
|
|
77
|
+
export interface GuardStrategy<T extends Record<string, unknown>> {
|
|
78
|
+
collection: string;
|
|
79
|
+
/**
|
|
80
|
+
* Fires on `Collection.put` (insert + update). The `incoming` argument
|
|
81
|
+
* is the record being written. Throw to cancel the put.
|
|
82
|
+
*
|
|
83
|
+
* Does NOT fire on `Collection.delete` — use {@link onDelete} for
|
|
84
|
+
* delete-time validation. Skipped during an amendment transaction
|
|
85
|
+
* (`db.transaction({ amendment: true })`) — admin/owner override.
|
|
86
|
+
*/
|
|
87
|
+
check?: (incoming: T, ctx: GuardContext<T>) => Promise<void> | void;
|
|
88
|
+
/**
|
|
89
|
+
* Fires on user-initiated `Collection.delete` before the adapter
|
|
90
|
+
* delete and before the ledger append. The `existing` argument is
|
|
91
|
+
* the currently-persisted record. Throw to cancel the delete — no
|
|
92
|
+
* partial state, no tombstone ledger entry.
|
|
93
|
+
*
|
|
94
|
+
* Skipped during an amendment transaction (admin/owner override) —
|
|
95
|
+
* amendments are the unlock primitive. To make a delete TRULY
|
|
96
|
+
* unconditional (e.g. legal-document immutability rules), pair
|
|
97
|
+
* `onDelete` with an `amendment.invariant` that re-throws on any
|
|
98
|
+
* `before !== null && after === null` change:
|
|
99
|
+
*
|
|
100
|
+
* ```ts
|
|
101
|
+
* withGuard<Receipt>({
|
|
102
|
+
* collection: 'receipts',
|
|
103
|
+
* onDelete: () => { throw new RecordLockedError(...) },
|
|
104
|
+
* amendment: {
|
|
105
|
+
* roles: ['admin', 'owner'],
|
|
106
|
+
* invariant: (changes) => {
|
|
107
|
+
* for (const c of changes) {
|
|
108
|
+
* if (c.before !== null && c.after === null) {
|
|
109
|
+
* throw new RecordLockedError(...) // wrapped as InvariantError
|
|
110
|
+
* }
|
|
111
|
+
* }
|
|
112
|
+
* },
|
|
113
|
+
* },
|
|
114
|
+
* })
|
|
115
|
+
* ```
|
|
116
|
+
*
|
|
117
|
+
* Also skipped on system-internal deletes (derivation tombstones,
|
|
118
|
+
* MV refresh from Dim 14 v2) — those use `_internalDelete`
|
|
119
|
+
* which bypasses every user-facing delete hook. Housekeeping ops are
|
|
120
|
+
* NOT user-initiated and should not trip user invariants.
|
|
121
|
+
*
|
|
122
|
+
* Delete of an absent record is a no-op and does not consult any
|
|
123
|
+
* guard, matching the idempotent-delete contract.
|
|
124
|
+
*/
|
|
125
|
+
onDelete?: (existing: T, ctx: GuardContext<T>) => Promise<void> | void;
|
|
126
|
+
frozenFields?: {
|
|
127
|
+
when: (existing: T) => boolean;
|
|
128
|
+
fields: ReadonlyArray<keyof T>;
|
|
129
|
+
};
|
|
130
|
+
amendment?: {
|
|
131
|
+
roles: ReadonlyArray<'admin' | 'owner'>;
|
|
132
|
+
invariant: (changes: ReadonlyArray<GuardChange<T>>, ctx: GuardContext<T>) => Promise<void> | void;
|
|
133
|
+
};
|
|
134
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { GuardStrategy, GuardStrategyHandle } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Register a guard for a collection. Guards run on every `put()` /
|
|
4
|
+
* `delete()` for the named collection (after permissions, before
|
|
5
|
+
* encryption) and may:
|
|
6
|
+
*
|
|
7
|
+
* - `check` — block writes by throwing (typically `RecordLockedError`)
|
|
8
|
+
* - `frozenFields` — freeze specific fields once a condition is true
|
|
9
|
+
* - `amendment` — declare an authorized-override path with invariant
|
|
10
|
+
*
|
|
11
|
+
* Pass the returned handle to `createNoydb({ strategies: [...] })`.
|
|
12
|
+
*
|
|
13
|
+
* @see docs/superpowers/specs/2026-05-18-guards-design.md
|
|
14
|
+
*/
|
|
15
|
+
export declare function withGuard<T extends Record<string, unknown>>(strategy: GuardStrategy<T>): GuardStrategyHandle<T>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Active periods strategy factory. Only reachable through the
|
|
3
|
+
* `@noy-db/hub/periods` subpath.
|
|
4
|
+
*/
|
|
5
|
+
import type { PeriodsStrategy } from './strategy.js';
|
|
6
|
+
/**
|
|
7
|
+
* Build the default periods strategy. Pass into
|
|
8
|
+
* `createNoydb({ periodsStrategy: withPeriods() })` to enable
|
|
9
|
+
* `vault.closePeriod()` / `vault.openPeriod()` / write-guards.
|
|
10
|
+
*/
|
|
11
|
+
export declare function withPeriods(): PeriodsStrategy;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Accounting-period subpath barrel.
|
|
3
|
+
*
|
|
4
|
+
* Public entry points live on `Vault`:
|
|
5
|
+
*
|
|
6
|
+
* - `vault.closePeriod({ name, endDate })`
|
|
7
|
+
* - `vault.openPeriod({ name, startDate, fromPeriod, carryForward })`
|
|
8
|
+
* - `vault.listPeriods()`
|
|
9
|
+
* - `vault.getPeriod(name)`
|
|
10
|
+
*
|
|
11
|
+
* These types support user-defined wrappers and tests; the internal
|
|
12
|
+
* helpers (`loadPeriods`, `assertTsWritable`, …) are exported so the
|
|
13
|
+
* Vault can call them without TypeScript barrel gymnastics.
|
|
14
|
+
*/
|
|
15
|
+
export { withPeriods } from './active.js';
|
|
16
|
+
export type { PeriodsStrategy } from './strategy.js';
|
|
17
|
+
export { PERIODS_COLLECTION, PERIOD_FREEZES_COLLECTION, PERIOD_ARCHIVES_COLLECTION, PERIOD_TARGET_PURGES_COLLECTION, periodExclusiveUpperBound, loadPeriods, chainAnchor, assertTsWritable, validatePeriodName, appendPeriodLedgerEntry, } from './periods.js';
|
|
18
|
+
export type { PeriodRecord, PeriodFreezeRecord, PeriodArchiveRecord, PeriodTargetPurgeRecord, TargetPurgeCount, ClosePeriodOptions, OpenPeriodOptions, CarryForwardContext, ReadOnlyCollection, } from './periods.js';
|
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Accounting-period closure + opening.
|
|
3
|
+
*
|
|
4
|
+
* A closed period seals every record whose envelope `_ts` is at or
|
|
5
|
+
* before the period's `endDate`: further writes (`put` / `delete`)
|
|
6
|
+
* against such records throw {@link PeriodClosedError}. The period
|
|
7
|
+
* itself is stored as a record in the reserved `_periods` collection
|
|
8
|
+
* and written through the normal ledger-instrumented path, so every
|
|
9
|
+
* closure appends a tamper-evident entry to the vault's hash chain.
|
|
10
|
+
*
|
|
11
|
+
* ## Closure model
|
|
12
|
+
*
|
|
13
|
+
* ```
|
|
14
|
+
* vault.closePeriod({ name: 'FY2026-Q1', endDate: '2026-03-31' })
|
|
15
|
+
* └─► PeriodRecord written to _periods/<name>
|
|
16
|
+
* ├─ priorPeriodName / priorPeriodHash — chain to last close
|
|
17
|
+
* ├─ closedAt / closedBy — provenance
|
|
18
|
+
* └─ normal ledger append fires (LedgerStore.append)
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* Enforcement (`assertTsWritable`) is vault-local: the Vault caches
|
|
22
|
+
* the list of closed periods on first read and consults that cache in
|
|
23
|
+
* the `Collection.put` / `.delete` path via the `periodGuard` hook.
|
|
24
|
+
*
|
|
25
|
+
* ## Opening model
|
|
26
|
+
*
|
|
27
|
+
* ```
|
|
28
|
+
* vault.openPeriod({
|
|
29
|
+
* name: 'FY2026-Q2',
|
|
30
|
+
* startDate: '2026-04-01',
|
|
31
|
+
* fromPeriod: 'FY2026-Q1',
|
|
32
|
+
* carryForward: async (priorView) => Record<string, Record<string, unknown>>,
|
|
33
|
+
* })
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* `carryForward` receives a read-only `VaultInstant` anchored at the
|
|
37
|
+
* prior period's `endDate` (built via `vault.at(endDate)`) so the
|
|
38
|
+
* callback can compute closing aggregates from the sealed state. The
|
|
39
|
+
* returned `{ [collectionName]: { [id]: record } }` map is written
|
|
40
|
+
* before the new `PeriodRecord` lands — opening balances materialise
|
|
41
|
+
* as normal records with fresh timestamps that fall outside every
|
|
42
|
+
* closed period.
|
|
43
|
+
*
|
|
44
|
+
* ## Freeze
|
|
45
|
+
*
|
|
46
|
+
* ```
|
|
47
|
+
* vault.freezePeriod('FY2026-Q1')
|
|
48
|
+
* └─► physically purges delete markers whose write-time falls inside
|
|
49
|
+
* the closed period's window (via the #589 `_purgeDeleteMarkers`
|
|
50
|
+
* seam), then records the fact:
|
|
51
|
+
* ├─ PeriodFreezeRecord written to _period_freezes/<name>
|
|
52
|
+
* └─ normal ledger append fires (LedgerStore.append)
|
|
53
|
+
* ```
|
|
54
|
+
*
|
|
55
|
+
* The chained `_periods/<name>` record is never mutated — `frozenAt` /
|
|
56
|
+
* `frozenBy` / `purgedMarkerCount` are merged onto the returned
|
|
57
|
+
* `PeriodRecord` at read time from the companion, so a tamper with the
|
|
58
|
+
* freeze can never break the inter-period hash chain. Freezing is
|
|
59
|
+
* terminal (a closed period, once frozen, stays frozen) and idempotent
|
|
60
|
+
* (a second call is a no-op that returns the same merged record without
|
|
61
|
+
* re-purging or re-appending a ledger entry). Freeze does NOT purge
|
|
62
|
+
* forget-tombstones (GDPR crypto-shred erasure evidence), `_history`
|
|
63
|
+
* versions, or live records — the delete-markers-only seam leaves all
|
|
64
|
+
* three untouched by construction.
|
|
65
|
+
*
|
|
66
|
+
* Freeze purges the LOCAL adapter only. On a synced vault, markers already
|
|
67
|
+
* pushed to sync targets survive there, and a later pull re-imports them
|
|
68
|
+
* (benign — they still read deleted, but the space isn't reclaimed). A
|
|
69
|
+
* re-imported marker keeps its original `_ts` (inside the already-frozen
|
|
70
|
+
* period's window), so — like any late-booked delete — it is reclaimed by
|
|
71
|
+
* the NEXT period's freeze, whose window covers it; freeze stays terminal
|
|
72
|
+
* and does NOT re-purge an already-frozen period (#611). Sweeping the sync
|
|
73
|
+
* targets themselves is a cross-target-purge concern deferred to the
|
|
74
|
+
* cold-archival spec. Purging re-opens the #589 resurrection window for a
|
|
75
|
+
* peer offline since before the cutoff, which is why the closed period is
|
|
76
|
+
* the operator-asserted safe-point that gates the call.
|
|
77
|
+
*
|
|
78
|
+
* A period whose purge window has not fully elapsed cannot be frozen —
|
|
79
|
+
* `freezePeriod` throws rather than purge markers for deletes that may not
|
|
80
|
+
* have converged yet (#610).
|
|
81
|
+
*
|
|
82
|
+
* ## Archive
|
|
83
|
+
*
|
|
84
|
+
* ```
|
|
85
|
+
* vault.archivePeriod('FY2026-Q1')
|
|
86
|
+
* └─► relocates the closed period's in-window records (those with
|
|
87
|
+
* `_ts < periodExclusiveUpperBound(endDate)`) from the hot store to
|
|
88
|
+
* the configured cold tier (routeStore's `cold` route), then records:
|
|
89
|
+
* ├─ PeriodArchiveRecord written to _period_archives/<name>
|
|
90
|
+
* └─ a ledger entry attributed to _period_archives
|
|
91
|
+
* ```
|
|
92
|
+
*
|
|
93
|
+
* Archival is NON-DESTRUCTIVE: routeStore reads fall through to the cold
|
|
94
|
+
* tier on a hot miss, so an archived record still reads normally. It is
|
|
95
|
+
* therefore gated only on `closed` (not `frozen`) — it does not re-open the
|
|
96
|
+
* #589 resurrection window and needs no convergence safe-point. Freeze
|
|
97
|
+
* (purge markers) and archive (relocate records) are independent and compose
|
|
98
|
+
* in either order. Like freeze, archival keeps the chained `_periods/<name>`
|
|
99
|
+
* record byte-immutable (state lives in the companion) and is idempotent.
|
|
100
|
+
*
|
|
101
|
+
* Bounds by write-time `_ts`, NOT business date: the store tier sees only
|
|
102
|
+
* encrypted envelopes. A record with an in-period business date but a later
|
|
103
|
+
* `_ts` (late-booked) archives at the NEXT period's archive — the same rule
|
|
104
|
+
* freeze uses for late-booked delete markers. Requires a `routeStore` with a
|
|
105
|
+
* cold route (`age: { cold }`); throws otherwise.
|
|
106
|
+
*
|
|
107
|
+
* Read cost: with `withLazy()` (per-id reads) archived records are truly
|
|
108
|
+
* cold — fetched from cold only on access. In the default hydrated mode,
|
|
109
|
+
* `loadAll` merges the cold store, so archived records still load into RAM
|
|
110
|
+
* on vault open (hot-tier STORAGE is reclaimed; RAM is not). Summaries
|
|
111
|
+
* (`_`-prefixed) always stay hot.
|
|
112
|
+
*
|
|
113
|
+
* ## Target-purge
|
|
114
|
+
*
|
|
115
|
+
* ```
|
|
116
|
+
* vault.purgePeriodTargets('FY2026-Q1')
|
|
117
|
+
* └─► sweeps delete markers (`_ts < periodExclusiveUpperBound(endDate)`) off
|
|
118
|
+
* the vault's PUSH-ONLY sync targets (backup/archive roles), then records:
|
|
119
|
+
* ├─ PeriodTargetPurgeRecord written to _period_target_purges/<name>
|
|
120
|
+
* └─ a ledger entry attributed to _period_target_purges
|
|
121
|
+
* ```
|
|
122
|
+
*
|
|
123
|
+
* Extends freeze's local marker purge to the vault's own remote sinks.
|
|
124
|
+
* `sync-peer` (bidirectional) targets are SKIPPED: purging a marker there
|
|
125
|
+
* re-opens the #589 resurrection window for a client offline before the
|
|
126
|
+
* cutoff, an assertion no single vault can verify. Backup/archive targets are
|
|
127
|
+
* push-only — never pulled from into convergence — so sweeping their markers
|
|
128
|
+
* is safe. Requires the period be frozen first (closed → frozen →
|
|
129
|
+
* target-purged) so the local safe-point is already established. Idempotent
|
|
130
|
+
* once run; a vault with no push-only targets writes no companion and is
|
|
131
|
+
* re-runnable (so a target added later is still swept). Single-vault only —
|
|
132
|
+
* fleet-wide purge across sovereign vaults is klum's concern over
|
|
133
|
+
* `@noy-db/hub/cargo`.
|
|
134
|
+
*
|
|
135
|
+
* ## Not covered
|
|
136
|
+
*
|
|
137
|
+
* - Partial re-opening of a closed period. If an auditor needs to
|
|
138
|
+
* make a correction inside a sealed period, the sanctioned path is
|
|
139
|
+
* a compensating entry in the NEW period, not an unlock of the
|
|
140
|
+
* old one.
|
|
141
|
+
* - Automatic period rollover. `closePeriod` / `openPeriod` are
|
|
142
|
+
* deliberately explicit operator calls so the caller decides when
|
|
143
|
+
* the boundary lands.
|
|
144
|
+
*
|
|
145
|
+
* @module
|
|
146
|
+
*/
|
|
147
|
+
import type { NoydbStore, EncryptedEnvelope } from '../../kernel/types.js';
|
|
148
|
+
import type { LedgerStore } from '../../with-commit/history/ledger/index.js';
|
|
149
|
+
/** The reserved collection name holding closed-period metadata. */
|
|
150
|
+
export declare const PERIODS_COLLECTION = "_periods";
|
|
151
|
+
/** Sibling of {@link PERIODS_COLLECTION} holding freeze companions (#604). */
|
|
152
|
+
export declare const PERIOD_FREEZES_COLLECTION = "_period_freezes";
|
|
153
|
+
/** Sibling of {@link PERIODS_COLLECTION} holding archive companions (#613). */
|
|
154
|
+
export declare const PERIOD_ARCHIVES_COLLECTION = "_period_archives";
|
|
155
|
+
/** Sibling of {@link PERIODS_COLLECTION} holding target-purge companions (#615). */
|
|
156
|
+
export declare const PERIOD_TARGET_PURGES_COLLECTION = "_period_target_purges";
|
|
157
|
+
/**
|
|
158
|
+
* Companion record recording that a closed period was frozen (its delete
|
|
159
|
+
* markers physically purged). Stored in {@link PERIOD_FREEZES_COLLECTION},
|
|
160
|
+
* keyed by period name — kept OFF the hash-chained `_periods/<name>` record so
|
|
161
|
+
* freeze never alters the inter-period chain.
|
|
162
|
+
*/
|
|
163
|
+
export interface PeriodFreezeRecord {
|
|
164
|
+
readonly period: string;
|
|
165
|
+
readonly frozenAt: string;
|
|
166
|
+
readonly frozenBy: string;
|
|
167
|
+
readonly purgedMarkerCount: number;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Companion record noting that a closed period was cold-archived (its
|
|
171
|
+
* in-window records physically relocated hot → cold). Stored in
|
|
172
|
+
* {@link PERIOD_ARCHIVES_COLLECTION}, keyed by period name — kept OFF the
|
|
173
|
+
* hash-chained `_periods/<name>` record so archive never alters the chain.
|
|
174
|
+
*/
|
|
175
|
+
export interface PeriodArchiveRecord {
|
|
176
|
+
readonly period: string;
|
|
177
|
+
readonly archivedAt: string;
|
|
178
|
+
readonly archivedBy: string;
|
|
179
|
+
readonly archivedRecordCount: number;
|
|
180
|
+
}
|
|
181
|
+
/** Per-target count of delete markers purged off one push-only sync target (#615). */
|
|
182
|
+
export interface TargetPurgeCount {
|
|
183
|
+
readonly label?: string;
|
|
184
|
+
readonly role: 'backup' | 'archive';
|
|
185
|
+
readonly purgedCount: number;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Companion record noting that a closed+frozen period's delete markers were
|
|
189
|
+
* swept off the vault's push-only sync targets (#615). Stored in
|
|
190
|
+
* {@link PERIOD_TARGET_PURGES_COLLECTION}, keyed by period name — kept OFF the
|
|
191
|
+
* hash-chained `_periods/<name>` record so target-purge never alters the chain.
|
|
192
|
+
*/
|
|
193
|
+
export interface PeriodTargetPurgeRecord {
|
|
194
|
+
readonly period: string;
|
|
195
|
+
readonly purgedAt: string;
|
|
196
|
+
readonly purgedBy: string;
|
|
197
|
+
readonly targets: readonly TargetPurgeCount[];
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Exclusive upper bound for a period's delete-marker purge window (#604).
|
|
201
|
+
* Markers carry no business date (empty body), only write-time `_ts`, so freeze
|
|
202
|
+
* purges markers with `_ts < bound`, `bound` being the instant just after the
|
|
203
|
+
* period's inclusive `endDate`: a date-only `endDate` seals through end-of-day
|
|
204
|
+
* → next midnight; a full-timestamp `endDate` seals through that instant → +1ms.
|
|
205
|
+
*/
|
|
206
|
+
export declare function periodExclusiveUpperBound(endDate: string): string;
|
|
207
|
+
/**
|
|
208
|
+
* Stored record for one closed or opened accounting period. One entry
|
|
209
|
+
* per period, keyed by `name` in the reserved `_periods` collection.
|
|
210
|
+
*
|
|
211
|
+
* The hash chain between periods is computed at read time by
|
|
212
|
+
* `loadPeriods()` — each record carries the name + hash of its
|
|
213
|
+
* predecessor so a tamper with any period's record breaks the chain
|
|
214
|
+
* into the next one, the same way the ledger's `prevHash` works.
|
|
215
|
+
*/
|
|
216
|
+
export interface PeriodRecord {
|
|
217
|
+
/** Human-readable name (e.g., `'FY2026-Q1'`). Unique per vault. */
|
|
218
|
+
readonly name: string;
|
|
219
|
+
/**
|
|
220
|
+
* Role discriminator. A period is `'closed'` from the moment its
|
|
221
|
+
* `closedAt` is recorded; `'opened'` marks a period whose opening
|
|
222
|
+
* entries have been carried forward via {@link openPeriod}. Many
|
|
223
|
+
* workflows will produce one opened period per closed period (the
|
|
224
|
+
* opened one is the SUCCESSOR — its `startDate` equals the prior
|
|
225
|
+
* `endDate + 1 day`).
|
|
226
|
+
*/
|
|
227
|
+
readonly kind: 'closed' | 'opened';
|
|
228
|
+
/** ISO date — inclusive upper bound for records belonging to this period. */
|
|
229
|
+
readonly endDate: string;
|
|
230
|
+
/** ISO date — lower bound (present on opened periods only). */
|
|
231
|
+
readonly startDate?: string;
|
|
232
|
+
/**
|
|
233
|
+
* Record field carrying the business date (e.g. `'date'` on an
|
|
234
|
+
* invoice, `'paidAt'` on a payment). The guard compares
|
|
235
|
+
* `record[dateField]` against `endDate` — NOT the envelope `_ts`.
|
|
236
|
+
* Accounting entries booked late (business date `2026-01-15`,
|
|
237
|
+
* write-time `2026-04-22`) still get sealed when Q1 closes at
|
|
238
|
+
* `2026-03-31` because the comparison uses the business date.
|
|
239
|
+
*
|
|
240
|
+
* Optional for backwards compat. When absent, the guard falls back
|
|
241
|
+
* to envelope `_ts` — that's a write-time seal, appropriate for
|
|
242
|
+
* content that doesn't carry a logical business date (e.g. system
|
|
243
|
+
* settings) but almost never right for accounting ledgers.
|
|
244
|
+
*/
|
|
245
|
+
readonly dateField?: string;
|
|
246
|
+
/** ISO timestamp recorded at `closePeriod()` / `openPeriod()` call time. */
|
|
247
|
+
readonly closedAt: string;
|
|
248
|
+
/** userId of the keyring that invoked the close/open. */
|
|
249
|
+
readonly closedBy: string;
|
|
250
|
+
/** Name of the prior period this one chains to, if any. */
|
|
251
|
+
readonly priorPeriodName?: string;
|
|
252
|
+
/** sha256(canonicalJson(priorPeriod)) — empty for the first period. */
|
|
253
|
+
readonly priorPeriodHash: string;
|
|
254
|
+
/**
|
|
255
|
+
* Opened periods only — the names of the collections whose
|
|
256
|
+
* carry-forward aggregates were written by {@link openPeriod}.
|
|
257
|
+
* Recorded for auditability so a future `verifyPeriodChain()` can
|
|
258
|
+
* cross-check the opening balances against the closing snapshot.
|
|
259
|
+
*/
|
|
260
|
+
readonly openingCollections?: readonly string[];
|
|
261
|
+
/** #604 return-only — merged from the `_period_freezes/<name>` companion on
|
|
262
|
+
* read; NEVER written into the stored `_periods/<name>` record (would break
|
|
263
|
+
* the hash chain). Absent = not yet frozen. */
|
|
264
|
+
readonly frozenAt?: string;
|
|
265
|
+
readonly frozenBy?: string;
|
|
266
|
+
readonly purgedMarkerCount?: number;
|
|
267
|
+
/** #613 return-only — merged from the `_period_archives/<name>` companion on
|
|
268
|
+
* read; NEVER written into the stored `_periods/<name>` record. Absent = not
|
|
269
|
+
* yet archived. */
|
|
270
|
+
readonly archivedAt?: string;
|
|
271
|
+
readonly archivedBy?: string;
|
|
272
|
+
readonly archivedRecordCount?: number;
|
|
273
|
+
/** #615 return-only — merged from the `_period_target_purges/<name>` companion
|
|
274
|
+
* on read; NEVER written into the stored `_periods/<name>` record. Absent =
|
|
275
|
+
* target-purge not yet run (or the vault has no push-only targets). */
|
|
276
|
+
readonly targetsPurgedAt?: string;
|
|
277
|
+
readonly targetsPurgedBy?: string;
|
|
278
|
+
readonly targetsPurged?: readonly TargetPurgeCount[];
|
|
279
|
+
}
|
|
280
|
+
/** Options for `vault.closePeriod()`. */
|
|
281
|
+
export interface ClosePeriodOptions {
|
|
282
|
+
/** Human-readable name. Must not collide with an existing period. */
|
|
283
|
+
readonly name: string;
|
|
284
|
+
/**
|
|
285
|
+
* Inclusive upper cutoff. A record is sealed when its
|
|
286
|
+
* `record[dateField]` (or, if absent, the envelope `_ts`) is at or
|
|
287
|
+
* before this ISO timestamp.
|
|
288
|
+
*/
|
|
289
|
+
readonly endDate: string;
|
|
290
|
+
/**
|
|
291
|
+
* Record field carrying the business date used for period
|
|
292
|
+
* membership. Recommended for accounting workflows — e.g. an
|
|
293
|
+
* invoice booked late (write-time after close) is still sealed
|
|
294
|
+
* when its `invoice.date` falls inside the closed period.
|
|
295
|
+
*
|
|
296
|
+
* Omit to use envelope `_ts` (write-time seal). This fallback
|
|
297
|
+
* rarely matches real-world accounting semantics; prefer passing
|
|
298
|
+
* an explicit `dateField`.
|
|
299
|
+
*/
|
|
300
|
+
readonly dateField?: string;
|
|
301
|
+
}
|
|
302
|
+
/** Options for `vault.openPeriod()`. */
|
|
303
|
+
export interface OpenPeriodOptions<TCollections = Record<string, Record<string, unknown>>> {
|
|
304
|
+
/** Human-readable name for the new period. Must be unique. */
|
|
305
|
+
readonly name: string;
|
|
306
|
+
/** ISO lower bound of the new period (usually prior `endDate + 1 day`). */
|
|
307
|
+
readonly startDate: string;
|
|
308
|
+
/**
|
|
309
|
+
* Name of the prior CLOSED period this one chains from. The prior
|
|
310
|
+
* period's record is verified to exist and to be `kind: 'closed'`;
|
|
311
|
+
* its `endDate` is made available to the `carryForward` callback.
|
|
312
|
+
*/
|
|
313
|
+
readonly fromPeriod: string;
|
|
314
|
+
/**
|
|
315
|
+
* Receives a read-only facade over the vault's CURRENT state,
|
|
316
|
+
* plus the prior period's `endDate`. Accounting semantics: after
|
|
317
|
+
* a period closes, records with `record[dateField] <= endDate`
|
|
318
|
+
* are frozen — current state equals closing state, so a caller
|
|
319
|
+
* can compute closing balances by querying the live collection
|
|
320
|
+
* with a `where('date', '<=', priorEndDate)` filter.
|
|
321
|
+
*
|
|
322
|
+
* Returns opening-balance records keyed by collection name.
|
|
323
|
+
* Example:
|
|
324
|
+
*
|
|
325
|
+
* ```ts
|
|
326
|
+
* carryForward: async (ctx) => {
|
|
327
|
+
* const closing = await ctx.collection<Journal>('journal')
|
|
328
|
+
* .query().where('date', '<=', ctx.priorEndDate).toArray()
|
|
329
|
+
* const opening: Record<string, Journal> = {}
|
|
330
|
+
* for (const entry of closing) {
|
|
331
|
+
* opening[`OB-${entry.id}`] = { ...entry, date: '2026-04-01' }
|
|
332
|
+
* }
|
|
333
|
+
* return { journal: opening }
|
|
334
|
+
* }
|
|
335
|
+
* ```
|
|
336
|
+
*/
|
|
337
|
+
readonly carryForward: (ctx: CarryForwardContext) => Promise<TCollections> | TCollections;
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Context passed to `OpenPeriodOptions.carryForward`. Exposes a
|
|
341
|
+
* read-only subset of the live vault (`collection(name).get/list`)
|
|
342
|
+
* plus the prior period's `endDate` so business-date filters can
|
|
343
|
+
* be built by the caller.
|
|
344
|
+
*
|
|
345
|
+
* Writes go via the return value, not via the facade — the
|
|
346
|
+
* `collection()` here is deliberately restricted to reads.
|
|
347
|
+
*/
|
|
348
|
+
export interface CarryForwardContext {
|
|
349
|
+
/** The prior period's `endDate` — the boundary of the closing snapshot. */
|
|
350
|
+
readonly priorEndDate: string;
|
|
351
|
+
/** Read-only collection facade over current vault state. */
|
|
352
|
+
collection<T = unknown>(name: string): ReadOnlyCollection<T>;
|
|
353
|
+
}
|
|
354
|
+
/** Minimum read surface exposed to `carryForward`. */
|
|
355
|
+
export interface ReadOnlyCollection<T> {
|
|
356
|
+
get(id: string): Promise<T | null>;
|
|
357
|
+
list(): Promise<T[]>;
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Load every period record currently stored on the adapter.
|
|
361
|
+
* Decrypting is the caller's responsibility (we return plain records
|
|
362
|
+
* so the vault can use its own `_periods` DEK).
|
|
363
|
+
*
|
|
364
|
+
* @internal — called by Vault methods that need the closed-period
|
|
365
|
+
* cache. Not part of the public API surface.
|
|
366
|
+
*/
|
|
367
|
+
export declare function loadPeriods(adapter: NoydbStore, vault: string, decrypt: (envelope: EncryptedEnvelope) => Promise<PeriodRecord>): Promise<PeriodRecord[]>;
|
|
368
|
+
/**
|
|
369
|
+
* Given the current ordered period list, pick the last entry that
|
|
370
|
+
* belongs to the hash chain — used as the `priorPeriodHash` anchor
|
|
371
|
+
* for the next closure/opening.
|
|
372
|
+
*
|
|
373
|
+
* @internal
|
|
374
|
+
*/
|
|
375
|
+
export declare function chainAnchor(records: readonly PeriodRecord[]): Promise<{
|
|
376
|
+
priorPeriodName?: string;
|
|
377
|
+
priorPeriodHash: string;
|
|
378
|
+
}>;
|
|
379
|
+
/**
|
|
380
|
+
* Throw `PeriodClosedError` if the record being touched falls within
|
|
381
|
+
* any closed period.
|
|
382
|
+
*
|
|
383
|
+
* Three signals, evaluated per period:
|
|
384
|
+
*
|
|
385
|
+
* 1. If the period declares a `dateField`, the guard reads
|
|
386
|
+
* `record[dateField]` on BOTH the existing (prior) record AND the
|
|
387
|
+
* incoming (new) record. Either comparing `<= endDate` triggers
|
|
388
|
+
* the error — callers cannot slide a record into a closed period
|
|
389
|
+
* by editing its date field.
|
|
390
|
+
* 2. If the period has no `dateField`, the guard falls back to the
|
|
391
|
+
* envelope `_ts` of the existing record. Fresh inserts (no
|
|
392
|
+
* existing envelope) pass.
|
|
393
|
+
* 3. For a delete, only the existing side is checked.
|
|
394
|
+
*
|
|
395
|
+
* @internal
|
|
396
|
+
*/
|
|
397
|
+
export declare function assertTsWritable(existing: {
|
|
398
|
+
ts: string | null;
|
|
399
|
+
record: Record<string, unknown> | null;
|
|
400
|
+
} | null, incomingRecord: Record<string, unknown> | null, closedPeriods: readonly PeriodRecord[]): void;
|
|
401
|
+
/**
|
|
402
|
+
* Sanity-check a proposed period name + endDate against existing
|
|
403
|
+
* records. Shared by closePeriod / openPeriod so the two pathways
|
|
404
|
+
* produce identical diagnostics.
|
|
405
|
+
*
|
|
406
|
+
* @internal
|
|
407
|
+
*/
|
|
408
|
+
export declare function validatePeriodName(name: string, existing: readonly PeriodRecord[]): void;
|
|
409
|
+
/**
|
|
410
|
+
* Wire a reserved-collection ledger append for a period record. The
|
|
411
|
+
* period itself is stored via the adapter as an encrypted envelope;
|
|
412
|
+
* the ledger entry is a normal `put` with the period's payloadHash,
|
|
413
|
+
* so period closures inherit the chain's tamper-evidence.
|
|
414
|
+
*
|
|
415
|
+
* @internal
|
|
416
|
+
*/
|
|
417
|
+
export declare function appendPeriodLedgerEntry(ledger: LedgerStore | null, actor: string, envelope: EncryptedEnvelope, name: string, collection?: string): Promise<void>;
|