keri-ts 2.0.1 → 2.2.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/README.md +30 -2
- package/esm/keri/npm/src/acdc/authoring.js +195 -0
- package/esm/keri/npm/src/acdc/chaining.js +223 -89
- package/esm/keri/npm/src/acdc/custody.js +164 -0
- package/esm/keri/npm/src/acdc/dhking.js +244 -32
- package/esm/keri/npm/src/acdc/observing.js +2 -2
- package/esm/keri/npm/src/acdc/regbasing.js +30 -29
- package/esm/keri/npm/src/acdc/regengine.js +4 -6
- package/esm/keri/npm/src/acdc/registering.js +13 -10
- package/esm/keri/npm/src/acdc/registraring.js +4 -9
- package/esm/keri/npm/src/acdc/salting.js +143 -26
- package/esm/keri/npm/src/acdc/scheming.js +93 -54
- package/esm/keri/npm/src/acdc/unblinding.js +120 -99
- package/esm/keri/npm/src/app/bootstrap/authenticating.js +4 -6
- package/esm/keri/npm/src/app/bootstrap/oobi-resolving.js +41 -0
- package/esm/keri/npm/src/app/bootstrap/oobiery.js +5 -7
- package/esm/keri/npm/src/app/credentials/credential-revoking.js +1 -0
- package/esm/keri/npm/src/app/credentials/credential-workflows.js +2 -0
- package/esm/keri/npm/src/app/credentials/registry-settling.js +44 -0
- package/esm/keri/npm/src/app/credentials/root-replicating.js +131 -0
- package/esm/keri/npm/src/app/credentials/root-replicator.js +198 -0
- package/esm/keri/npm/src/app/credentials/tel-completion.js +36 -0
- package/esm/keri/npm/src/app/credentials/verifying.js +12 -3
- package/esm/keri/npm/src/app/delivery/forwarding.js +64 -9
- package/esm/keri/npm/src/app/exchanges/exchanging.js +24 -15
- package/esm/keri/npm/src/app/identity/challenging.js +50 -0
- package/esm/keri/npm/src/app/identity/configing.js +17 -43
- package/esm/keri/npm/src/app/identity/delegating.js +77 -77
- package/esm/keri/npm/src/app/identity/delegation-approval.js +333 -0
- package/esm/keri/npm/src/app/identity/event-completion.js +154 -0
- package/esm/keri/npm/src/app/identity/habbing.js +183 -41
- package/esm/keri/npm/src/app/identity/keeping.js +78 -5
- package/esm/keri/npm/src/app/identity/lmdb-habery.js +12 -0
- package/esm/keri/npm/src/app/ipex/group-ipex.js +327 -0
- package/esm/keri/npm/src/app/ipex/group-issuance.js +902 -0
- package/esm/keri/npm/src/app/ipex/ipex-admitting.js +120 -0
- package/esm/keri/npm/src/app/ipex/ipex-conversation.js +197 -0
- package/esm/keri/npm/src/app/ipex/ipex-discloser.js +591 -0
- package/esm/keri/npm/src/app/ipex/ipex-granting.js +93 -0
- package/esm/keri/npm/src/app/ipex/ipex-graph.js +7 -70
- package/esm/keri/npm/src/app/ipex/ipex-grouping.js +42 -16
- package/esm/keri/npm/src/app/ipex/ipex-v2.js +21 -5
- package/esm/keri/npm/src/app/ipex/ipexing.js +1 -1
- package/esm/keri/npm/src/app/ipex/issuance.js +888 -0
- package/esm/keri/npm/src/app/ipex/pending-presentations.js +46 -0
- package/esm/keri/npm/src/app/ipex/presentation-files.js +200 -0
- package/esm/keri/npm/src/app/ipex/presenting.js +401 -0
- package/esm/keri/npm/src/app/ipex/receive-issuance.js +86 -0
- package/esm/keri/npm/src/app/ipex/unblinding-workflow.js +660 -0
- package/esm/keri/npm/src/app/mailbox/ipex-arrival.js +103 -0
- package/esm/keri/npm/src/app/mailbox/kel-publisher.js +322 -0
- package/esm/keri/npm/src/app/mailbox/kel-publishing.js +65 -0
- package/esm/keri/npm/src/app/mailbox/kel-submission.js +24 -0
- package/esm/keri/npm/src/app/mailbox/mailbox-admin.js +208 -0
- package/esm/keri/npm/src/app/mailbox/mailbox-poller.js +212 -47
- package/esm/keri/npm/src/app/mailbox/mailboxing.js +15 -14
- package/esm/keri/npm/src/app/multisig/counseling.js +482 -0
- package/esm/keri/npm/src/app/multisig/group-members.js +32 -0
- package/esm/keri/npm/src/app/multisig/grouping.js +4 -3
- package/esm/keri/npm/src/app/multisig/multisig-workflows.js +101 -141
- package/esm/keri/npm/src/app/multisig/proposals.js +281 -0
- package/esm/keri/npm/src/app/multisig/proposing.js +122 -0
- package/esm/keri/npm/src/app/notifications/notifying.js +5 -9
- package/esm/keri/npm/src/app/notifications/signaling.js +5 -5
- package/esm/keri/npm/src/app/protocol/parsering.js +26 -1
- package/esm/keri/npm/src/app/protocol/protocol-processing.js +44 -6
- package/esm/keri/npm/src/app/queries/query-workflows.js +98 -0
- package/esm/keri/npm/src/app/queries/witness-inquisitor.js +2 -2
- package/esm/keri/npm/src/app/runtime/agent-runtime.js +113 -65
- package/esm/keri/npm/src/app/runtime/cue-runtime.js +3 -6
- package/esm/keri/npm/src/app/runtime/delivery-outbox.js +87 -0
- package/esm/keri/npm/src/app/runtime/doing.js +17 -0
- package/esm/keri/npm/src/app/runtime/ipex-auxiliaries.js +207 -0
- package/esm/keri/npm/src/app/runtime/operation-owners.js +151 -0
- package/esm/keri/npm/src/app/runtime/retry-backoff.js +93 -0
- package/esm/keri/npm/src/app/runtime/workflow-contract.js +80 -0
- package/esm/keri/npm/src/app/transport/byte-source.js +6 -42
- package/esm/keri/npm/src/app/transport/cesr-egress.js +77 -13
- package/esm/keri/npm/src/app/transport/file-bytes.js +41 -0
- package/esm/keri/npm/src/app/transport/http-client.js +25 -6
- package/esm/keri/npm/src/app/transport/http-messenger.js +14 -9
- package/esm/keri/npm/src/app/transport/message-source.js +1 -1
- package/esm/keri/npm/src/app/transport/messengering.js +3 -4
- package/esm/keri/npm/src/app/transport/node-http-client.js +21 -0
- package/esm/keri/npm/src/app/transport/tcp-dialer.js +14 -0
- package/esm/keri/npm/src/app/witness/http-endpoints.js +4 -4
- package/esm/keri/npm/src/app/witness/receipt-client.js +2 -2
- package/esm/keri/npm/src/cli/common/context.js +2 -2
- package/esm/keri/npm/src/cli/common/event-completion.js +49 -0
- package/esm/keri/npm/src/cli/common/existing.js +3 -5
- package/esm/keri/npm/src/cli/common/runtime-workers.js +23 -0
- package/esm/keri/npm/src/cli/credentials/ipex.js +159 -191
- package/esm/keri/npm/src/cli/credentials/vc.js +53 -72
- package/esm/keri/npm/src/cli/endpoints/did.js +12 -3
- package/esm/keri/npm/src/cli/endpoints/oobi-clean.js +4 -3
- package/esm/keri/npm/src/cli/endpoints/oobi.js +12 -15
- package/esm/keri/npm/src/cli/identity/challenge.js +9 -35
- package/esm/keri/npm/src/cli/identity/delegate.js +81 -258
- package/esm/keri/npm/src/cli/identity/incept.js +17 -34
- package/esm/keri/npm/src/cli/identity/init.js +4 -3
- package/esm/keri/npm/src/cli/identity/interact.js +7 -19
- package/esm/keri/npm/src/cli/identity/rotate.js +10 -38
- package/esm/keri/npm/src/cli/index.js +3 -1
- package/esm/keri/npm/src/cli/messaging/exchange.js +2 -2
- package/esm/keri/npm/src/cli/messaging/group-join.js +79 -0
- package/esm/keri/npm/src/cli/messaging/group-wait.js +88 -0
- package/esm/keri/npm/src/cli/messaging/multisig.js +187 -250
- package/esm/keri/npm/src/cli/messaging/root-copy-lines.js +31 -0
- package/esm/keri/npm/src/cli/tools/annotate.js +2 -1
- package/esm/keri/npm/src/cli/tools/benchmark.js +2 -1
- package/esm/keri/npm/src/cli/tools/db-dump.js +1 -4
- package/esm/keri/npm/src/core/bytes.js +9 -0
- package/esm/keri/npm/src/core/kel/delegation-ancestry.js +92 -0
- package/esm/keri/npm/src/core/kel/eventing.js +67 -12
- package/esm/keri/npm/src/core/kel/kever.js +11 -9
- package/esm/keri/npm/src/core/mailbox/kram-policy.js +41 -9
- package/esm/keri/npm/src/core/mailbox/kram-pruning.js +15 -22
- package/esm/keri/npm/src/core/mailbox/kram-staging.js +2 -2
- package/esm/keri/npm/src/core/mailbox/kraming.js +2 -0
- package/esm/keri/npm/src/core/records.js +23 -0
- package/esm/keri/npm/src/core/routing.js +15 -2
- package/esm/keri/npm/src/db/basing.js +183 -205
- package/esm/keri/npm/src/db/core/dber.js +1062 -0
- package/esm/keri/npm/src/db/core/index.js +4 -2
- package/esm/keri/npm/src/db/core/indexeddb-persistence.js +221 -0
- package/esm/keri/npm/src/db/core/lmdb-opener.js +30 -0
- package/esm/keri/npm/src/db/core/lmdber.js +199 -1067
- package/esm/keri/npm/src/db/core/memstore.js +532 -0
- package/esm/keri/npm/src/db/core/path-manager.js +109 -223
- package/esm/keri/npm/src/db/core/store-owner.js +104 -0
- package/esm/keri/npm/src/db/core/webdber.js +252 -0
- package/esm/keri/npm/src/db/escrowing.js +2 -2
- package/esm/keri/npm/src/db/exchange/exchange-nests.js +3 -2
- package/esm/keri/npm/src/db/indexeddb.js +98 -0
- package/esm/keri/npm/src/db/keeping.js +38 -123
- package/esm/keri/npm/src/db/koming.js +1 -1
- package/esm/keri/npm/src/db/lmdb-stores.js +68 -0
- package/esm/keri/npm/src/db/lmdb.js +6 -0
- package/esm/keri/npm/src/db/mailbox/mailboxing.js +12 -65
- package/esm/keri/npm/src/db/noting.js +11 -55
- package/esm/keri/npm/src/db/reger.js +43 -105
- package/esm/keri/npm/src/db/replay/witness-replay.js +2 -20
- package/esm/keri/npm/src/db/store-lock.js +150 -0
- package/esm/keri/npm/src/db/subing.js +1 -1
- package/esm/keri/npm/src/npm/db-indexeddb.browser.js +2 -0
- package/esm/keri/npm/src/npm/db-indexeddb.js +3 -0
- package/esm/keri/npm/src/npm/db-lmdb.js +3 -0
- package/esm/keri/npm/src/npm/db.browser.js +2 -0
- package/esm/keri/npm/src/npm/index.browser.js +9 -0
- package/esm/keri/npm/src/npm/runtime-node.js +3 -0
- package/esm/keri/npm/src/npm/runtime-web.browser.js +2 -0
- package/esm/keri/npm/src/npm/runtime-web.js +3 -0
- package/esm/keri/npm/src/npm/runtime.browser.js +2 -0
- package/esm/keri/npm/src/runtime/index.js +58 -12
- package/esm/keri/npm/src/runtime/node.js +14 -0
- package/esm/keri/npm/src/runtime/web/output-barrier.js +47 -0
- package/esm/keri/npm/src/runtime/web/persistent-storage.js +37 -0
- package/esm/keri/npm/src/runtime/web.js +10 -0
- package/esm/keri/npm/src/vdr/eventing.js +1 -1
- package/esm/keri/npm/src/vdr/tel-publication.js +19 -3
- package/esm/keri/npm/src/version.js +2 -2
- package/package.json +24 -4
- package/types/acdc/authoring.d.ts +54 -0
- package/types/acdc/authoring.d.ts.map +1 -0
- package/types/acdc/chaining.d.ts +56 -6
- package/types/acdc/chaining.d.ts.map +1 -1
- package/types/acdc/custody.d.ts +77 -0
- package/types/acdc/custody.d.ts.map +1 -0
- package/types/acdc/dhking.d.ts +94 -3
- package/types/acdc/dhking.d.ts.map +1 -1
- package/types/acdc/regbasing.d.ts +11 -6
- package/types/acdc/regbasing.d.ts.map +1 -1
- package/types/acdc/regengine.d.ts.map +1 -1
- package/types/acdc/registering.d.ts +8 -4
- package/types/acdc/registering.d.ts.map +1 -1
- package/types/acdc/registraring.d.ts.map +1 -1
- package/types/acdc/salting.d.ts +59 -7
- package/types/acdc/salting.d.ts.map +1 -1
- package/types/acdc/scheming.d.ts +2 -0
- package/types/acdc/scheming.d.ts.map +1 -1
- package/types/acdc/unblinding.d.ts +58 -19
- package/types/acdc/unblinding.d.ts.map +1 -1
- package/types/app/bootstrap/authenticating.d.ts +3 -1
- package/types/app/bootstrap/authenticating.d.ts.map +1 -1
- package/types/app/bootstrap/oobi-resolving.d.ts +92 -0
- package/types/app/bootstrap/oobi-resolving.d.ts.map +1 -0
- package/types/app/bootstrap/oobiery.d.ts +3 -1
- package/types/app/bootstrap/oobiery.d.ts.map +1 -1
- package/types/app/credentials/credential-revoking.d.ts +3 -0
- package/types/app/credentials/credential-revoking.d.ts.map +1 -1
- package/types/app/credentials/credential-workflows.d.ts +5 -0
- package/types/app/credentials/credential-workflows.d.ts.map +1 -1
- package/types/app/credentials/registry-settling.d.ts +85 -0
- package/types/app/credentials/registry-settling.d.ts.map +1 -0
- package/types/app/credentials/root-replicating.d.ts +97 -0
- package/types/app/credentials/root-replicating.d.ts.map +1 -0
- package/types/app/credentials/root-replicator.d.ts +105 -0
- package/types/app/credentials/root-replicator.d.ts.map +1 -0
- package/types/app/credentials/tel-completion.d.ts +55 -0
- package/types/app/credentials/tel-completion.d.ts.map +1 -0
- package/types/app/credentials/verifying.d.ts +2 -1
- package/types/app/credentials/verifying.d.ts.map +1 -1
- package/types/app/delivery/forwarding.d.ts +16 -0
- package/types/app/delivery/forwarding.d.ts.map +1 -1
- package/types/app/exchanges/exchanging.d.ts +2 -0
- package/types/app/exchanges/exchanging.d.ts.map +1 -1
- package/types/app/identity/challenging.d.ts +54 -0
- package/types/app/identity/challenging.d.ts.map +1 -1
- package/types/app/identity/configing.d.ts +7 -5
- package/types/app/identity/configing.d.ts.map +1 -1
- package/types/app/identity/delegating.d.ts +21 -4
- package/types/app/identity/delegating.d.ts.map +1 -1
- package/types/app/identity/delegation-approval.d.ts +228 -0
- package/types/app/identity/delegation-approval.d.ts.map +1 -0
- package/types/app/identity/event-completion.d.ts +151 -0
- package/types/app/identity/event-completion.d.ts.map +1 -0
- package/types/app/identity/habbing.d.ts +90 -7
- package/types/app/identity/habbing.d.ts.map +1 -1
- package/types/app/identity/keeping.d.ts +50 -4
- package/types/app/identity/keeping.d.ts.map +1 -1
- package/types/app/identity/lmdb-habery.d.ts +6 -0
- package/types/app/identity/lmdb-habery.d.ts.map +1 -0
- package/types/app/ipex/group-ipex.d.ts +247 -0
- package/types/app/ipex/group-ipex.d.ts.map +1 -0
- package/types/app/ipex/group-issuance.d.ts +281 -0
- package/types/app/ipex/group-issuance.d.ts.map +1 -0
- package/types/app/ipex/ipex-admitting.d.ts +47 -0
- package/types/app/ipex/ipex-admitting.d.ts.map +1 -0
- package/types/app/ipex/ipex-conversation.d.ts +195 -0
- package/types/app/ipex/ipex-conversation.d.ts.map +1 -0
- package/types/app/ipex/ipex-discloser.d.ts +156 -0
- package/types/app/ipex/ipex-discloser.d.ts.map +1 -0
- package/types/app/ipex/ipex-granting.d.ts +145 -0
- package/types/app/ipex/ipex-granting.d.ts.map +1 -0
- package/types/app/ipex/ipex-graph.d.ts +4 -4
- package/types/app/ipex/ipex-graph.d.ts.map +1 -1
- package/types/app/ipex/ipex-grouping.d.ts +18 -0
- package/types/app/ipex/ipex-grouping.d.ts.map +1 -1
- package/types/app/ipex/ipex-v2.d.ts +11 -2
- package/types/app/ipex/ipex-v2.d.ts.map +1 -1
- package/types/app/ipex/ipexing.d.ts +3 -0
- package/types/app/ipex/ipexing.d.ts.map +1 -1
- package/types/app/ipex/issuance.d.ts +443 -0
- package/types/app/ipex/issuance.d.ts.map +1 -0
- package/types/app/ipex/pending-presentations.d.ts +25 -0
- package/types/app/ipex/pending-presentations.d.ts.map +1 -0
- package/types/app/ipex/presentation-files.d.ts +47 -0
- package/types/app/ipex/presentation-files.d.ts.map +1 -0
- package/types/app/ipex/presenting.d.ts +298 -0
- package/types/app/ipex/presenting.d.ts.map +1 -0
- package/types/app/ipex/receive-issuance.d.ts +99 -0
- package/types/app/ipex/receive-issuance.d.ts.map +1 -0
- package/types/app/ipex/unblinding-workflow.d.ts +255 -0
- package/types/app/ipex/unblinding-workflow.d.ts.map +1 -0
- package/types/app/mailbox/ipex-arrival.d.ts +104 -0
- package/types/app/mailbox/ipex-arrival.d.ts.map +1 -0
- package/types/app/mailbox/kel-publisher.d.ts +141 -0
- package/types/app/mailbox/kel-publisher.d.ts.map +1 -0
- package/types/app/mailbox/kel-publishing.d.ts +70 -0
- package/types/app/mailbox/kel-publishing.d.ts.map +1 -0
- package/types/app/mailbox/kel-submission.d.ts +18 -0
- package/types/app/mailbox/kel-submission.d.ts.map +1 -0
- package/types/app/mailbox/mailbox-admin.d.ts +113 -0
- package/types/app/mailbox/mailbox-admin.d.ts.map +1 -0
- package/types/app/mailbox/mailbox-poller.d.ts +92 -3
- package/types/app/mailbox/mailbox-poller.d.ts.map +1 -1
- package/types/app/mailbox/mailboxing.d.ts +4 -1
- package/types/app/mailbox/mailboxing.d.ts.map +1 -1
- package/types/app/multisig/counseling.d.ts +196 -0
- package/types/app/multisig/counseling.d.ts.map +1 -0
- package/types/app/multisig/group-members.d.ts +20 -0
- package/types/app/multisig/group-members.d.ts.map +1 -1
- package/types/app/multisig/grouping.d.ts +39 -20
- package/types/app/multisig/grouping.d.ts.map +1 -1
- package/types/app/multisig/multisig-workflows.d.ts +93 -23
- package/types/app/multisig/multisig-workflows.d.ts.map +1 -1
- package/types/app/multisig/proposals.d.ts +129 -0
- package/types/app/multisig/proposals.d.ts.map +1 -0
- package/types/app/multisig/proposing.d.ts +125 -0
- package/types/app/multisig/proposing.d.ts.map +1 -0
- package/types/app/notifications/notifying.d.ts +1 -1
- package/types/app/notifications/notifying.d.ts.map +1 -1
- package/types/app/notifications/signaling.d.ts +3 -1
- package/types/app/notifications/signaling.d.ts.map +1 -1
- package/types/app/protocol/parsering.d.ts +16 -1
- package/types/app/protocol/parsering.d.ts.map +1 -1
- package/types/app/protocol/protocol-processing.d.ts +9 -1
- package/types/app/protocol/protocol-processing.d.ts.map +1 -1
- package/types/app/queries/query-workflows.d.ts +98 -0
- package/types/app/queries/query-workflows.d.ts.map +1 -0
- package/types/app/runtime/agent-runtime.d.ts +79 -25
- package/types/app/runtime/agent-runtime.d.ts.map +1 -1
- package/types/app/runtime/cue-runtime.d.ts +2 -1
- package/types/app/runtime/cue-runtime.d.ts.map +1 -1
- package/types/app/runtime/delivery-outbox.d.ts +68 -0
- package/types/app/runtime/delivery-outbox.d.ts.map +1 -0
- package/types/app/runtime/doing.d.ts +27 -0
- package/types/app/runtime/doing.d.ts.map +1 -0
- package/types/app/runtime/ipex-auxiliaries.d.ts +74 -0
- package/types/app/runtime/ipex-auxiliaries.d.ts.map +1 -0
- package/types/app/runtime/operation-owners.d.ts +137 -0
- package/types/app/runtime/operation-owners.d.ts.map +1 -0
- package/types/app/runtime/retry-backoff.d.ts +49 -0
- package/types/app/runtime/retry-backoff.d.ts.map +1 -0
- package/types/app/runtime/workflow-contract.d.ts +79 -0
- package/types/app/runtime/workflow-contract.d.ts.map +1 -0
- package/types/app/transport/byte-source.d.ts +13 -10
- package/types/app/transport/byte-source.d.ts.map +1 -1
- package/types/app/transport/cesr-egress.d.ts +21 -7
- package/types/app/transport/cesr-egress.d.ts.map +1 -1
- package/types/app/transport/file-bytes.d.ts +11 -0
- package/types/app/transport/file-bytes.d.ts.map +1 -0
- package/types/app/transport/http-client.d.ts +3 -0
- package/types/app/transport/http-client.d.ts.map +1 -1
- package/types/app/transport/http-messenger.d.ts +15 -10
- package/types/app/transport/http-messenger.d.ts.map +1 -1
- package/types/app/transport/message-source.d.ts +1 -1
- package/types/app/transport/messengering.d.ts +2 -2
- package/types/app/transport/messengering.d.ts.map +1 -1
- package/types/app/transport/node-http-client.d.ts +10 -0
- package/types/app/transport/node-http-client.d.ts.map +1 -0
- package/types/app/transport/tcp-dialer.d.ts +21 -0
- package/types/app/transport/tcp-dialer.d.ts.map +1 -0
- package/types/cli/common/event-completion.d.ts +26 -0
- package/types/cli/common/event-completion.d.ts.map +1 -0
- package/types/cli/common/existing.d.ts.map +1 -1
- package/types/cli/common/runtime-workers.d.ts +23 -0
- package/types/cli/common/runtime-workers.d.ts.map +1 -0
- package/types/cli/credentials/ipex.d.ts.map +1 -1
- package/types/cli/credentials/vc.d.ts +1 -1
- package/types/cli/credentials/vc.d.ts.map +1 -1
- package/types/cli/endpoints/did.d.ts.map +1 -1
- package/types/cli/endpoints/oobi-clean.d.ts.map +1 -1
- package/types/cli/endpoints/oobi.d.ts +3 -1
- package/types/cli/endpoints/oobi.d.ts.map +1 -1
- package/types/cli/identity/challenge.d.ts +1 -1
- package/types/cli/identity/challenge.d.ts.map +1 -1
- package/types/cli/identity/delegate.d.ts +14 -1
- package/types/cli/identity/delegate.d.ts.map +1 -1
- package/types/cli/identity/incept.d.ts.map +1 -1
- package/types/cli/identity/init.d.ts.map +1 -1
- package/types/cli/identity/interact.d.ts.map +1 -1
- package/types/cli/identity/rotate.d.ts.map +1 -1
- package/types/cli/index.d.ts +4 -2
- package/types/cli/index.d.ts.map +1 -1
- package/types/cli/messaging/group-join.d.ts +53 -0
- package/types/cli/messaging/group-join.d.ts.map +1 -0
- package/types/cli/messaging/group-wait.d.ts +34 -0
- package/types/cli/messaging/group-wait.d.ts.map +1 -0
- package/types/cli/messaging/multisig.d.ts +36 -4
- package/types/cli/messaging/multisig.d.ts.map +1 -1
- package/types/cli/messaging/root-copy-lines.d.ts +39 -0
- package/types/cli/messaging/root-copy-lines.d.ts.map +1 -0
- package/types/cli/tools/annotate.d.ts.map +1 -1
- package/types/cli/tools/benchmark.d.ts.map +1 -1
- package/types/cli/tools/db-dump.d.ts.map +1 -1
- package/types/core/bytes.d.ts +2 -0
- package/types/core/bytes.d.ts.map +1 -1
- package/types/core/cues.d.ts +11 -0
- package/types/core/cues.d.ts.map +1 -1
- package/types/core/kel/delegation-ancestry.d.ts +41 -0
- package/types/core/kel/delegation-ancestry.d.ts.map +1 -0
- package/types/core/kel/eventing.d.ts.map +1 -1
- package/types/core/kel/kever.d.ts +5 -4
- package/types/core/kel/kever.d.ts.map +1 -1
- package/types/core/mailbox/kram-policy.d.ts +14 -0
- package/types/core/mailbox/kram-policy.d.ts.map +1 -1
- package/types/core/mailbox/kram-pruning.d.ts +1 -3
- package/types/core/mailbox/kram-pruning.d.ts.map +1 -1
- package/types/core/mailbox/kraming.d.ts +1 -1
- package/types/core/mailbox/kraming.d.ts.map +1 -1
- package/types/core/records.d.ts +61 -0
- package/types/core/records.d.ts.map +1 -1
- package/types/core/routing.d.ts +6 -0
- package/types/core/routing.d.ts.map +1 -1
- package/types/db/basing.d.ts +22 -25
- package/types/db/basing.d.ts.map +1 -1
- package/types/db/core/dber.d.ts +505 -0
- package/types/db/core/dber.d.ts.map +1 -0
- package/types/db/core/index.d.ts +4 -2
- package/types/db/core/index.d.ts.map +1 -1
- package/types/db/core/indexeddb-persistence.d.ts +59 -0
- package/types/db/core/indexeddb-persistence.d.ts.map +1 -0
- package/types/db/core/lmdb-opener.d.ts +17 -0
- package/types/db/core/lmdb-opener.d.ts.map +1 -0
- package/types/db/core/lmdber.d.ts +60 -383
- package/types/db/core/lmdber.d.ts.map +1 -1
- package/types/db/core/memstore.d.ts +129 -0
- package/types/db/core/memstore.d.ts.map +1 -0
- package/types/db/core/path-manager.d.ts +22 -45
- package/types/db/core/path-manager.d.ts.map +1 -1
- package/types/db/core/store-owner.d.ts +59 -0
- package/types/db/core/store-owner.d.ts.map +1 -0
- package/types/db/core/webdber.d.ts +127 -0
- package/types/db/core/webdber.d.ts.map +1 -0
- package/types/db/escrowing.d.ts +3 -3
- package/types/db/escrowing.d.ts.map +1 -1
- package/types/db/exchange/exchange-nests.d.ts.map +1 -1
- package/types/db/indexeddb.d.ts +37 -0
- package/types/db/indexeddb.d.ts.map +1 -0
- package/types/db/keeping.d.ts +14 -25
- package/types/db/keeping.d.ts.map +1 -1
- package/types/db/koming.d.ts +7 -8
- package/types/db/koming.d.ts.map +1 -1
- package/types/db/lmdb-stores.d.ts +45 -0
- package/types/db/lmdb-stores.d.ts.map +1 -0
- package/types/db/lmdb.d.ts +7 -0
- package/types/db/lmdb.d.ts.map +1 -0
- package/types/db/mailbox/mailboxing.d.ts +7 -21
- package/types/db/mailbox/mailboxing.d.ts.map +1 -1
- package/types/db/noting.d.ts +7 -12
- package/types/db/noting.d.ts.map +1 -1
- package/types/db/reger.d.ts +7 -11
- package/types/db/reger.d.ts.map +1 -1
- package/types/db/replay/witness-replay.d.ts +0 -2
- package/types/db/replay/witness-replay.d.ts.map +1 -1
- package/types/db/store-lock.d.ts +72 -0
- package/types/db/store-lock.d.ts.map +1 -0
- package/types/db/subing.d.ts +24 -25
- package/types/db/subing.d.ts.map +1 -1
- package/types/npm/db-indexeddb.d.ts +4 -0
- package/types/npm/db-indexeddb.d.ts.map +1 -0
- package/types/npm/db-lmdb.d.ts +4 -0
- package/types/npm/db-lmdb.d.ts.map +1 -0
- package/types/npm/runtime-node.d.ts +4 -0
- package/types/npm/runtime-node.d.ts.map +1 -0
- package/types/npm/runtime-web.d.ts +4 -0
- package/types/npm/runtime-web.d.ts.map +1 -0
- package/types/runtime/index.d.ts +48 -14
- package/types/runtime/index.d.ts.map +1 -1
- package/types/runtime/node.d.ts +15 -0
- package/types/runtime/node.d.ts.map +1 -0
- package/types/runtime/web/output-barrier.d.ts +30 -0
- package/types/runtime/web/output-barrier.d.ts.map +1 -0
- package/types/runtime/web/persistent-storage.d.ts +36 -0
- package/types/runtime/web/persistent-storage.d.ts.map +1 -0
- package/types/runtime/web.d.ts +11 -0
- package/types/runtime/web.d.ts.map +1 -0
- package/types/vdr/tel-publication.d.ts +6 -0
- package/types/vdr/tel-publication.d.ts.map +1 -1
- package/types/version.d.ts +2 -2
- package/esm/keri/npm/src/acdc/relating.js +0 -59
- package/esm/keri/npm/src/cli/common/tel-completion.js +0 -24
- package/esm/keri/npm/src/db/baser-defaults.js +0 -11
- package/types/acdc/relating.d.ts +0 -21
- package/types/acdc/relating.d.ts.map +0 -1
- package/types/cli/common/tel-completion.d.ts +0 -8
- package/types/cli/common/tel-completion.d.ts.map +0 -1
- package/types/db/baser-defaults.d.ts +0 -5
- package/types/db/baser-defaults.d.ts.map +0 -1
|
@@ -2,7 +2,7 @@ import { Cipher, MtrDex, NumberPrimitive, Prefixer, Salter, Signer, Verfer, } fr
|
|
|
2
2
|
import { DatabaseNotOpenError, DatabaseOperationError } from "../core/errors.js";
|
|
3
3
|
import { consoleLogger } from "../core/logger.js";
|
|
4
4
|
import { RawRecord } from "../core/records.js";
|
|
5
|
-
import {
|
|
5
|
+
import { StoreOwner } from "./core/store-owner.js";
|
|
6
6
|
import { Komer } from "./koming.js";
|
|
7
7
|
import { CatCesrIoSetSuber, CesrSuber, CryptSignerSuber, Suber } from "./subing.js";
|
|
8
8
|
/**
|
|
@@ -101,14 +101,9 @@ function reencryptSalt(salt, encrypter, decrypter) {
|
|
|
101
101
|
* named handles
|
|
102
102
|
* - compatibility mode supports KERIpy `.keri/ks` layout visibility
|
|
103
103
|
*/
|
|
104
|
-
export class Keeper {
|
|
105
|
-
constructor(
|
|
106
|
-
|
|
107
|
-
enumerable: true,
|
|
108
|
-
configurable: true,
|
|
109
|
-
writable: true,
|
|
110
|
-
value: void 0
|
|
111
|
-
});
|
|
104
|
+
export class Keeper extends StoreOwner {
|
|
105
|
+
constructor(store, logger = consoleLogger) {
|
|
106
|
+
super(store);
|
|
112
107
|
Object.defineProperty(this, "logger", {
|
|
113
108
|
enumerable: true,
|
|
114
109
|
configurable: true,
|
|
@@ -192,42 +187,7 @@ export class Keeper {
|
|
|
192
187
|
writable: true,
|
|
193
188
|
value: void 0
|
|
194
189
|
});
|
|
195
|
-
this.logger =
|
|
196
|
-
const compat = options.compat ?? false;
|
|
197
|
-
this.lmdber = new LMDBer(options, {
|
|
198
|
-
tailDirPath: Keeper.TailDirPath,
|
|
199
|
-
cleanTailDirPath: "keri/clean/ks",
|
|
200
|
-
altTailDirPath: compat
|
|
201
|
-
? Keeper.CompatAltTailDirPath
|
|
202
|
-
: Keeper.AltTailDirPath,
|
|
203
|
-
altCleanTailDirPath: compat ? ".keri/clean/ks" : ".tufa/clean/ks",
|
|
204
|
-
tempPrefix: Keeper.TempPrefix,
|
|
205
|
-
maxNamedDBs: Keeper.MaxNamedDBs,
|
|
206
|
-
});
|
|
207
|
-
}
|
|
208
|
-
/** Expose the resolved keeper database name delegated from the root LMDBer. */
|
|
209
|
-
get name() {
|
|
210
|
-
return this.lmdber.name;
|
|
211
|
-
}
|
|
212
|
-
/** Expose the resolved keeper base prefix delegated from the root LMDBer. */
|
|
213
|
-
get base() {
|
|
214
|
-
return this.lmdber.base;
|
|
215
|
-
}
|
|
216
|
-
/** Report whether the keeper LMDB environment and named subdb surface are open. */
|
|
217
|
-
get opened() {
|
|
218
|
-
return this.lmdber.opened;
|
|
219
|
-
}
|
|
220
|
-
/** Report whether the keeper environment is opened in read-only mode. */
|
|
221
|
-
get readonly() {
|
|
222
|
-
return this.lmdber.readonly;
|
|
223
|
-
}
|
|
224
|
-
/** Report whether this keeper uses a temporary backing directory. */
|
|
225
|
-
get temp() {
|
|
226
|
-
return this.lmdber.temp;
|
|
227
|
-
}
|
|
228
|
-
/** Expose the resolved filesystem path for the keeper environment, when open. */
|
|
229
|
-
get path() {
|
|
230
|
-
return this.lmdber.path;
|
|
190
|
+
this.logger = logger;
|
|
231
191
|
}
|
|
232
192
|
/**
|
|
233
193
|
* Reopen the keeper environment and bind the KERIpy-style named subdbs.
|
|
@@ -238,7 +198,7 @@ export class Keeper {
|
|
|
238
198
|
* flows have not yet exercised it deeply.
|
|
239
199
|
*/
|
|
240
200
|
*reopen(options = {}) {
|
|
241
|
-
const opened = yield* this.
|
|
201
|
+
const opened = yield* this.store.reopen(options);
|
|
242
202
|
if (!opened)
|
|
243
203
|
return false;
|
|
244
204
|
try {
|
|
@@ -246,62 +206,62 @@ export class Keeper {
|
|
|
246
206
|
// `aeid` anchors the encrypter/decrypter used to protect salts and
|
|
247
207
|
// private keys, while `pidx`, `algo`, `salt`, and `tier` capture the
|
|
248
208
|
// default root key-management settings.
|
|
249
|
-
this.gbls = new Suber(this.
|
|
209
|
+
this.gbls = new Suber(this.store, { subkey: "gbls." });
|
|
250
210
|
// Public-key to private-key secret material store.
|
|
251
211
|
// Keys are fully qualified public keys and values are the corresponding
|
|
252
212
|
// fully qualified private keys.
|
|
253
|
-
this.pris = new CryptSignerSuber(this.
|
|
213
|
+
this.pris = new CryptSignerSuber(this.store, { subkey: "pris." });
|
|
254
214
|
// Group signing member tuples for one multisig prefix.
|
|
255
215
|
// The stored tuple shape mirrors KERIpy's `(Prefixer, Number)` member
|
|
256
216
|
// identifier set used by GroupSignifyHab flows.
|
|
257
|
-
this.smids = new CatCesrIoSetSuber(this.
|
|
217
|
+
this.smids = new CatCesrIoSetSuber(this.store, {
|
|
258
218
|
subkey: "smids.",
|
|
259
219
|
ctor: [Prefixer, NumberPrimitive],
|
|
260
220
|
});
|
|
261
221
|
// Group rotating member tuples for one multisig prefix.
|
|
262
222
|
// The stored tuple shape mirrors KERIpy's `(Prefixer, Number)` member
|
|
263
223
|
// identifier set used by GroupSignifyHab flows.
|
|
264
|
-
this.rmids = new CatCesrIoSetSuber(this.
|
|
224
|
+
this.rmids = new CatCesrIoSetSuber(this.store, {
|
|
265
225
|
subkey: "rmids.",
|
|
266
226
|
ctor: [Prefixer, NumberPrimitive],
|
|
267
227
|
});
|
|
268
228
|
// Prefix index keyed by the first public key in a key sequence.
|
|
269
229
|
// Values are the identifier prefix, or the first public key for
|
|
270
230
|
// temporary prefixes, matching the KERIpy keeper index contract.
|
|
271
|
-
this.pres = new CesrSuber(this.
|
|
231
|
+
this.pres = new CesrSuber(this.store, {
|
|
272
232
|
subkey: "pres.",
|
|
273
233
|
ctor: Prefixer,
|
|
274
234
|
});
|
|
275
235
|
// Root derivation parameters for one managed identifier prefix.
|
|
276
|
-
this.prms = new Komer(this.
|
|
236
|
+
this.prms = new Komer(this.store, {
|
|
277
237
|
subkey: "prms.",
|
|
278
238
|
recordClass: PrePrm,
|
|
279
239
|
});
|
|
280
240
|
// Old/current/next key situation for one managed identifier prefix.
|
|
281
|
-
this.sits = new Komer(this.
|
|
241
|
+
this.sits = new Komer(this.store, {
|
|
282
242
|
subkey: "sits.",
|
|
283
243
|
recordClass: PreSit,
|
|
284
244
|
});
|
|
285
245
|
// Replayable public-key sets keyed by `(prefix, ridx)`.
|
|
286
246
|
// This enables lookup of the current signing keys after each rotation so
|
|
287
247
|
// establishment events can be replayed in order.
|
|
288
|
-
this.pubs = new Komer(this.
|
|
248
|
+
this.pubs = new Komer(this.store, {
|
|
289
249
|
subkey: "pubs.",
|
|
290
250
|
recordClass: PubSet,
|
|
291
251
|
});
|
|
292
252
|
// Encrypted next private keys used by group-signify keeper flows.
|
|
293
253
|
// KERIpy notes these are not yet broadly exercised outside that path.
|
|
294
|
-
this.prxs = new CesrSuber(this.
|
|
254
|
+
this.prxs = new CesrSuber(this.store, {
|
|
295
255
|
subkey: "prxs.",
|
|
296
256
|
ctor: Cipher,
|
|
297
257
|
});
|
|
298
258
|
// Encrypted next-key commitments used by group-signify keeper flows.
|
|
299
259
|
// KERIpy notes these are not yet broadly exercised outside that path.
|
|
300
|
-
this.nxts = new CesrSuber(this.
|
|
260
|
+
this.nxts = new CesrSuber(this.store, {
|
|
301
261
|
subkey: "nxts.",
|
|
302
262
|
ctor: Cipher,
|
|
303
263
|
});
|
|
304
|
-
this.rroots = new CesrSuber(this.
|
|
264
|
+
this.rroots = new CesrSuber(this.store, { subkey: "rroots.", ctor: Cipher });
|
|
305
265
|
return true;
|
|
306
266
|
}
|
|
307
267
|
catch (error) {
|
|
@@ -311,7 +271,7 @@ export class Keeper {
|
|
|
311
271
|
}
|
|
312
272
|
/** Close the underlying keeper LMDB environment. */
|
|
313
273
|
*close(clear = false) {
|
|
314
|
-
return yield* this.
|
|
274
|
+
return yield* this.store.close(clear);
|
|
315
275
|
}
|
|
316
276
|
/**
|
|
317
277
|
* Read one keeper-global string value from `gbls.`.
|
|
@@ -337,13 +297,12 @@ export class Keeper {
|
|
|
337
297
|
changeEncryption({ currentAeid, aeid, encrypter, decrypter }) {
|
|
338
298
|
if (this.readonly)
|
|
339
299
|
throw new DatabaseOperationError("Cannot change encryption in a read-only keeper");
|
|
340
|
-
|
|
341
|
-
if (!env)
|
|
300
|
+
if (!this.store.opened)
|
|
342
301
|
throw new DatabaseNotOpenError("Keeper environment is not open");
|
|
343
|
-
if (this.
|
|
302
|
+
if (this.store.inWriteTransaction) {
|
|
344
303
|
throw new DatabaseOperationError("Keeper encryption change must own its write transaction");
|
|
345
304
|
}
|
|
346
|
-
|
|
305
|
+
this.store.transaction(() => {
|
|
347
306
|
const storedAeid = this.getGbls("aeid");
|
|
348
307
|
if ((storedAeid ?? "") !== currentAeid) {
|
|
349
308
|
throw new DatabaseOperationError("Keeper AEID changed before encryption migration; reopen the manager");
|
|
@@ -384,21 +343,29 @@ export class Keeper {
|
|
|
384
343
|
throw new DatabaseOperationError("Keeper AEID write failed");
|
|
385
344
|
});
|
|
386
345
|
}
|
|
387
|
-
/**
|
|
388
|
-
|
|
346
|
+
/**
|
|
347
|
+
* Retain a root under the authenticated policy, owning its commit. Immutable unless `overwrite`, which the
|
|
348
|
+
* caller sets only for a root it has established was never used; the old root then stays until this write.
|
|
349
|
+
*/
|
|
350
|
+
retainRegistryRoot(keys, root, currentAeid, encrypter, decrypter, overwrite = false) {
|
|
389
351
|
if (this.readonly)
|
|
390
352
|
throw new DatabaseOperationError("Cannot retain registry roots in a read-only keeper");
|
|
391
|
-
|
|
392
|
-
if (!env)
|
|
353
|
+
if (!this.store.opened)
|
|
393
354
|
throw new DatabaseNotOpenError("Keeper environment is not open");
|
|
394
|
-
if (this.
|
|
355
|
+
if (this.store.inWriteTransaction) {
|
|
395
356
|
throw new DatabaseOperationError("Registry root retention must own its write transaction");
|
|
396
357
|
}
|
|
397
|
-
return
|
|
358
|
+
return this.store.transaction(() => {
|
|
398
359
|
if (this.getGbls("aeid") !== currentAeid) {
|
|
399
360
|
throw new DatabaseOperationError("Keeper AEID changed before registry root retention; reopen the manager");
|
|
400
361
|
}
|
|
401
362
|
const old = this.rroots.get(keys);
|
|
363
|
+
if (old && overwrite) {
|
|
364
|
+
if (!this.rroots.pin(keys, encrypter.encrypt({ prim: root }))) {
|
|
365
|
+
throw new DatabaseOperationError("Keeper registry root write failed");
|
|
366
|
+
}
|
|
367
|
+
return true;
|
|
368
|
+
}
|
|
402
369
|
if (old) {
|
|
403
370
|
const retained = decrypter.decrypt({ cipher: old, ctor: Salter });
|
|
404
371
|
if (retained.qb64 !== root.qb64) {
|
|
@@ -520,29 +487,12 @@ export class Keeper {
|
|
|
520
487
|
return this.rmids.get(pre);
|
|
521
488
|
}
|
|
522
489
|
}
|
|
523
|
-
|
|
490
|
+
/** Placement of this store kind. */
|
|
491
|
+
Object.defineProperty(Keeper, "Family", {
|
|
524
492
|
enumerable: true,
|
|
525
493
|
configurable: true,
|
|
526
494
|
writable: true,
|
|
527
|
-
value: "
|
|
528
|
-
});
|
|
529
|
-
Object.defineProperty(Keeper, "AltTailDirPath", {
|
|
530
|
-
enumerable: true,
|
|
531
|
-
configurable: true,
|
|
532
|
-
writable: true,
|
|
533
|
-
value: ".tufa/ks"
|
|
534
|
-
});
|
|
535
|
-
Object.defineProperty(Keeper, "CompatAltTailDirPath", {
|
|
536
|
-
enumerable: true,
|
|
537
|
-
configurable: true,
|
|
538
|
-
writable: true,
|
|
539
|
-
value: ".keri/ks"
|
|
540
|
-
});
|
|
541
|
-
Object.defineProperty(Keeper, "TempPrefix", {
|
|
542
|
-
enumerable: true,
|
|
543
|
-
configurable: true,
|
|
544
|
-
writable: true,
|
|
545
|
-
value: "keri_ks_"
|
|
495
|
+
value: { tail: "ks", maxTables: 24 }
|
|
546
496
|
});
|
|
547
497
|
Object.defineProperty(Keeper, "MaxNamedDBs", {
|
|
548
498
|
enumerable: true,
|
|
@@ -550,38 +500,3 @@ Object.defineProperty(Keeper, "MaxNamedDBs", {
|
|
|
550
500
|
writable: true,
|
|
551
501
|
value: 24
|
|
552
502
|
});
|
|
553
|
-
/** Constructor-safe async factory for a fully reopened `Keeper`. */
|
|
554
|
-
export function* createKeeper(options = {}) {
|
|
555
|
-
const keeper = new Keeper(options);
|
|
556
|
-
let delivered = false;
|
|
557
|
-
let failure;
|
|
558
|
-
try {
|
|
559
|
-
const opened = yield* keeper.reopen(options);
|
|
560
|
-
if (!opened) {
|
|
561
|
-
throw new DatabaseNotOpenError("Failed to open Keeper");
|
|
562
|
-
}
|
|
563
|
-
delivered = true;
|
|
564
|
-
return keeper;
|
|
565
|
-
}
|
|
566
|
-
catch (error) {
|
|
567
|
-
failure = { error };
|
|
568
|
-
throw error;
|
|
569
|
-
}
|
|
570
|
-
finally {
|
|
571
|
-
if (!delivered) {
|
|
572
|
-
try {
|
|
573
|
-
yield* keeper.close();
|
|
574
|
-
}
|
|
575
|
-
catch (error) {
|
|
576
|
-
if (failure) {
|
|
577
|
-
// deno-lint-ignore no-unsafe-finally -- Preserve the operation failure alongside shutdown failure.
|
|
578
|
-
throw new AggregateError([failure.error, error], "Database acquisition and close failed", {
|
|
579
|
-
cause: failure.error,
|
|
580
|
-
});
|
|
581
|
-
}
|
|
582
|
-
// deno-lint-ignore no-unsafe-finally -- A shutdown failure must propagate.
|
|
583
|
-
throw error;
|
|
584
|
-
}
|
|
585
|
-
}
|
|
586
|
-
}
|
|
587
|
-
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LMDB-backed construction of the domain stores.
|
|
3
|
+
*
|
|
4
|
+
* These helpers bind each `StoreOwner` to an `LMDBer` at its established paths.
|
|
5
|
+
* Everything here reaches the native addon; backend-neutral callers use the
|
|
6
|
+
* store classes with an injected `DBer` instead.
|
|
7
|
+
*/
|
|
8
|
+
import { RegBaser } from "../acdc/regbasing.js";
|
|
9
|
+
import { adoptRegistry } from "../acdc/registering.js";
|
|
10
|
+
import { ValidationError } from "../core/errors.js";
|
|
11
|
+
import { Baser } from "./basing.js";
|
|
12
|
+
import { lmdbDefaultsFor } from "./core/lmdb-opener.js";
|
|
13
|
+
import { LMDBer } from "./core/lmdber.js";
|
|
14
|
+
import { openOwner } from "./core/store-owner.js";
|
|
15
|
+
import { Keeper } from "./keeping.js";
|
|
16
|
+
import { Mailboxer } from "./mailbox/mailboxing.js";
|
|
17
|
+
import { Noter } from "./noting.js";
|
|
18
|
+
import { Reger } from "./reger.js";
|
|
19
|
+
/** Construct a closed LMDB-backed `Baser` at its established paths. */
|
|
20
|
+
export function lmdbBaser({ compat, ...options } = {}) {
|
|
21
|
+
return new Baser(new LMDBer(options, lmdbDefaultsFor(Baser.Family, compat)), options.logger);
|
|
22
|
+
}
|
|
23
|
+
/** Constructor-safe async factory for a fully reopened `Baser`. */
|
|
24
|
+
export function* createBaser(options = {}) {
|
|
25
|
+
return yield* openOwner(lmdbBaser(options), "Baser", options);
|
|
26
|
+
}
|
|
27
|
+
/** Construct a closed LMDB-backed `Keeper` at its established paths. */
|
|
28
|
+
export function lmdbKeeper({ compat, ...options } = {}) {
|
|
29
|
+
return new Keeper(new LMDBer(options, lmdbDefaultsFor(Keeper.Family, compat)), options.logger);
|
|
30
|
+
}
|
|
31
|
+
/** Constructor-safe async factory for a fully reopened `Keeper`. */
|
|
32
|
+
export function* createKeeper(options = {}) {
|
|
33
|
+
return yield* openOwner(lmdbKeeper(options), "Keeper", options);
|
|
34
|
+
}
|
|
35
|
+
/** Construct a closed LMDB-backed `Noter` at its established paths. */
|
|
36
|
+
export function lmdbNoter({ compat, ...options } = {}) {
|
|
37
|
+
return new Noter(new LMDBer(options, lmdbDefaultsFor(Noter.Family, compat)));
|
|
38
|
+
}
|
|
39
|
+
/** Open a notification sidecar and return the ready-to-use databaser. */
|
|
40
|
+
export function* createNoter(options = {}) {
|
|
41
|
+
return yield* openOwner(lmdbNoter(options), "Noter", options);
|
|
42
|
+
}
|
|
43
|
+
/** Construct a closed LMDB-backed `Mailboxer` at its established paths. */
|
|
44
|
+
export function lmdbMailboxer({ compat, ...options } = {}) {
|
|
45
|
+
return new Mailboxer(new LMDBer(options, lmdbDefaultsFor(Mailboxer.Family, compat)));
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Open a mailbox environment and return the ready-to-use databaser.
|
|
49
|
+
*
|
|
50
|
+
* Compatibility rule:
|
|
51
|
+
* - explicit mailbox opens stay strict
|
|
52
|
+
* - missing additive sidecars are tolerated only by higher-level habery open
|
|
53
|
+
* flows that are inspecting compat stores readonly
|
|
54
|
+
*/
|
|
55
|
+
export function* createMailboxer(options = {}) {
|
|
56
|
+
return yield* openOwner(lmdbMailboxer(options), "Mailboxer", options);
|
|
57
|
+
}
|
|
58
|
+
/** Transfer a ready `Reger` to its caller, closing unreturned acquisitions on failure or cancellation. */
|
|
59
|
+
export function* createReger({ compat, ...options } = {}) {
|
|
60
|
+
const store = new LMDBer(options, lmdbDefaultsFor(Reger.Family, compat));
|
|
61
|
+
return yield* openOwner(new Reger(store), "Reger", options);
|
|
62
|
+
}
|
|
63
|
+
/** Open a registry store on LMDB at its established paths; the reference web backend remains unsupported. */
|
|
64
|
+
export function* openLmdbRegistry({ web = false, reopen = true, compat, opener: _opener, ...options } = {}) {
|
|
65
|
+
if (web)
|
|
66
|
+
throw new ValidationError("web registry backend is not yet supported by V2 Regery");
|
|
67
|
+
return yield* adoptRegistry(new RegBaser(new LMDBer(options, lmdbDefaultsFor(RegBaser.Family, compat))), reopen);
|
|
68
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** LMDB backend surface: native stores, paths and the default opener. */
|
|
2
|
+
export { createHabery } from "../app/identity/lmdb-habery.js";
|
|
3
|
+
export * from "./core/lmdb-opener.js";
|
|
4
|
+
export * from "./core/lmdber.js";
|
|
5
|
+
export * from "./core/path-manager.js";
|
|
6
|
+
export * from "./lmdb-stores.js";
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { Diger, MtrDex } from "cesr-ts";
|
|
17
17
|
import { DatabaseNotOpenError } from "../../core/errors.js";
|
|
18
|
-
import {
|
|
18
|
+
import { StoreOwner } from "../core/store-owner.js";
|
|
19
19
|
import { CesrOnSuber, Suber } from "../subing.js";
|
|
20
20
|
/** Raw-byte value family used for stored mailbox message bodies. */
|
|
21
21
|
class BytesSuber extends Suber {
|
|
@@ -39,19 +39,9 @@ class BytesSuber extends Suber {
|
|
|
39
39
|
* - `.tpcs` stores `(topic, on) -> digest`
|
|
40
40
|
* - `.msgs` stores `digest -> raw message bytes`
|
|
41
41
|
*/
|
|
42
|
-
export class Mailboxer extends
|
|
43
|
-
constructor(
|
|
44
|
-
|
|
45
|
-
super(options, {
|
|
46
|
-
tailDirPath: Mailboxer.TailDirPath,
|
|
47
|
-
cleanTailDirPath: "keri/clean/mbx",
|
|
48
|
-
altTailDirPath: compat
|
|
49
|
-
? Mailboxer.CompatAltTailDirPath
|
|
50
|
-
: Mailboxer.AltTailDirPath,
|
|
51
|
-
altCleanTailDirPath: compat ? ".keri/clean/mbx" : ".tufa/clean/mbx",
|
|
52
|
-
tempPrefix: Mailboxer.TempPrefix,
|
|
53
|
-
maxNamedDBs: Mailboxer.MaxNamedDBs,
|
|
54
|
-
});
|
|
42
|
+
export class Mailboxer extends StoreOwner {
|
|
43
|
+
constructor() {
|
|
44
|
+
super(...arguments);
|
|
55
45
|
Object.defineProperty(this, "tpcs", {
|
|
56
46
|
enumerable: true,
|
|
57
47
|
configurable: true,
|
|
@@ -69,12 +59,12 @@ export class Mailboxer extends LMDBer {
|
|
|
69
59
|
* Reopen the mailbox environment and bind the KERIpy-shaped named subdbs.
|
|
70
60
|
*/
|
|
71
61
|
*reopen(options = {}) {
|
|
72
|
-
const opened = yield*
|
|
62
|
+
const opened = yield* this.store.reopen(options);
|
|
73
63
|
if (!opened) {
|
|
74
64
|
return false;
|
|
75
65
|
}
|
|
76
|
-
this.tpcs = new CesrOnSuber(this, { subkey: "tpcs.", ctor: Diger });
|
|
77
|
-
this.msgs = new BytesSuber(this, { subkey: "msgs." });
|
|
66
|
+
this.tpcs = new CesrOnSuber(this.store, { subkey: "tpcs.", ctor: Diger });
|
|
67
|
+
this.msgs = new BytesSuber(this.store, { subkey: "msgs." });
|
|
78
68
|
return true;
|
|
79
69
|
}
|
|
80
70
|
/**
|
|
@@ -119,15 +109,14 @@ export class Mailboxer extends LMDBer {
|
|
|
119
109
|
* one transaction; false publication is an invariant failure, not a duplicate.
|
|
120
110
|
*/
|
|
121
111
|
storeMsg(topic, msg) {
|
|
122
|
-
|
|
123
|
-
if (!env)
|
|
112
|
+
if (!this.opened)
|
|
124
113
|
throw new DatabaseNotOpenError("Mailbox environment is not open");
|
|
125
114
|
const raw = typeof msg === "string" ? new TextEncoder().encode(msg) : msg;
|
|
126
115
|
const dig = new Diger({
|
|
127
116
|
raw: Diger.digest(raw, MtrDex.Blake3_256),
|
|
128
117
|
code: MtrDex.Blake3_256,
|
|
129
118
|
});
|
|
130
|
-
return
|
|
119
|
+
return this.transaction(() => {
|
|
131
120
|
const on = this.appendToTopic(topic, dig);
|
|
132
121
|
if (!Number.isSafeInteger(on) || on < 0)
|
|
133
122
|
throw new Error("Mailbox topic publication failed");
|
|
@@ -152,52 +141,10 @@ export class Mailboxer extends LMDBer {
|
|
|
152
141
|
}
|
|
153
142
|
}
|
|
154
143
|
}
|
|
155
|
-
/**
|
|
156
|
-
Object.defineProperty(Mailboxer, "
|
|
157
|
-
enumerable: true,
|
|
158
|
-
configurable: true,
|
|
159
|
-
writable: true,
|
|
160
|
-
value: "keri/mbx"
|
|
161
|
-
});
|
|
162
|
-
/** Default alternate path for Tufa-owned mailbox environments. */
|
|
163
|
-
Object.defineProperty(Mailboxer, "AltTailDirPath", {
|
|
164
|
-
enumerable: true,
|
|
165
|
-
configurable: true,
|
|
166
|
-
writable: true,
|
|
167
|
-
value: ".tufa/mbx"
|
|
168
|
-
});
|
|
169
|
-
/** Alternate path used when opening KERIpy-compatible mailbox stores. */
|
|
170
|
-
Object.defineProperty(Mailboxer, "CompatAltTailDirPath", {
|
|
171
|
-
enumerable: true,
|
|
172
|
-
configurable: true,
|
|
173
|
-
writable: true,
|
|
174
|
-
value: ".keri/mbx"
|
|
175
|
-
});
|
|
176
|
-
Object.defineProperty(Mailboxer, "TempPrefix", {
|
|
177
|
-
enumerable: true,
|
|
178
|
-
configurable: true,
|
|
179
|
-
writable: true,
|
|
180
|
-
value: "keri_mbx_"
|
|
181
|
-
});
|
|
182
|
-
Object.defineProperty(Mailboxer, "MaxNamedDBs", {
|
|
144
|
+
/** Placement of this store kind. */
|
|
145
|
+
Object.defineProperty(Mailboxer, "Family", {
|
|
183
146
|
enumerable: true,
|
|
184
147
|
configurable: true,
|
|
185
148
|
writable: true,
|
|
186
|
-
value: 8
|
|
149
|
+
value: { tail: "mbx", maxTables: 8 }
|
|
187
150
|
});
|
|
188
|
-
/**
|
|
189
|
-
* Open a mailbox environment and return the ready-to-use databaser.
|
|
190
|
-
*
|
|
191
|
-
* Compatibility rule:
|
|
192
|
-
* - explicit mailbox opens stay strict
|
|
193
|
-
* - missing additive sidecars are tolerated only by higher-level habery open
|
|
194
|
-
* flows that are inspecting compat stores readonly
|
|
195
|
-
*/
|
|
196
|
-
export function* createMailboxer(options = {}) {
|
|
197
|
-
const mailboxer = new Mailboxer(options);
|
|
198
|
-
const opened = yield* mailboxer.reopen(options);
|
|
199
|
-
if (!opened) {
|
|
200
|
-
throw new DatabaseNotOpenError("Failed to open Mailboxer");
|
|
201
|
-
}
|
|
202
|
-
return mailboxer;
|
|
203
|
-
}
|
|
@@ -23,8 +23,7 @@ var _Notice_raw, _Notice_pad;
|
|
|
23
23
|
* - higher-level notification policy lives in `app/notifying.ts`
|
|
24
24
|
*/
|
|
25
25
|
import { Cigar, MtrDex, Salter } from "cesr-ts";
|
|
26
|
-
import {
|
|
27
|
-
import { LMDBer } from "./core/lmdber.js";
|
|
26
|
+
import { StoreOwner } from "./core/store-owner.js";
|
|
28
27
|
import { CesrSuber, Suber } from "./subing.js";
|
|
29
28
|
const textEncoder = new TextEncoder();
|
|
30
29
|
const textDecoder = new TextDecoder();
|
|
@@ -128,20 +127,9 @@ class NoticeSuber extends Suber {
|
|
|
128
127
|
* - `.nidx` stores `rid -> dt`
|
|
129
128
|
* - `.ncigs` stores detached `Cigar`s for integrity verification
|
|
130
129
|
*/
|
|
131
|
-
export class Noter extends
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
const compat = options.compat ?? false;
|
|
135
|
-
super(options, {
|
|
136
|
-
tailDirPath: Noter.TailDirPath,
|
|
137
|
-
cleanTailDirPath: "keri/clean/not",
|
|
138
|
-
altTailDirPath: compat
|
|
139
|
-
? Noter.CompatAltTailDirPath
|
|
140
|
-
: Noter.AltTailDirPath,
|
|
141
|
-
altCleanTailDirPath: compat ? ".keri/clean/not" : ".tufa/clean/not",
|
|
142
|
-
tempPrefix: Noter.TempPrefix,
|
|
143
|
-
maxNamedDBs: Noter.MaxNamedDBs,
|
|
144
|
-
});
|
|
130
|
+
export class Noter extends StoreOwner {
|
|
131
|
+
constructor() {
|
|
132
|
+
super(...arguments);
|
|
145
133
|
Object.defineProperty(this, "notes", {
|
|
146
134
|
enumerable: true,
|
|
147
135
|
configurable: true,
|
|
@@ -163,16 +151,16 @@ export class Noter extends LMDBer {
|
|
|
163
151
|
}
|
|
164
152
|
/** Open all notice, reverse-index, and detached-signature families. */
|
|
165
153
|
*reopen(options = {}) {
|
|
166
|
-
const opened = yield*
|
|
154
|
+
const opened = yield* this.store.reopen(options);
|
|
167
155
|
if (!opened) {
|
|
168
156
|
return false;
|
|
169
157
|
}
|
|
170
|
-
this.notes = new NoticeSuber(this, {
|
|
158
|
+
this.notes = new NoticeSuber(this.store, {
|
|
171
159
|
subkey: "nots.",
|
|
172
160
|
sep: "/",
|
|
173
161
|
});
|
|
174
|
-
this.nidx = new Suber(this, { subkey: "nidx." });
|
|
175
|
-
this.ncigs = new CesrSuber(this, {
|
|
162
|
+
this.nidx = new Suber(this.store, { subkey: "nidx." });
|
|
163
|
+
this.ncigs = new CesrSuber(this.store, {
|
|
176
164
|
subkey: "ncigs.",
|
|
177
165
|
ctor: Cigar,
|
|
178
166
|
});
|
|
@@ -249,42 +237,10 @@ export class Noter extends LMDBer {
|
|
|
249
237
|
return pairs;
|
|
250
238
|
}
|
|
251
239
|
}
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
configurable: true,
|
|
255
|
-
writable: true,
|
|
256
|
-
value: "keri/not"
|
|
257
|
-
});
|
|
258
|
-
Object.defineProperty(Noter, "AltTailDirPath", {
|
|
240
|
+
/** Placement of this store kind. */
|
|
241
|
+
Object.defineProperty(Noter, "Family", {
|
|
259
242
|
enumerable: true,
|
|
260
243
|
configurable: true,
|
|
261
244
|
writable: true,
|
|
262
|
-
value: "
|
|
245
|
+
value: { tail: "not", maxTables: 8 }
|
|
263
246
|
});
|
|
264
|
-
Object.defineProperty(Noter, "CompatAltTailDirPath", {
|
|
265
|
-
enumerable: true,
|
|
266
|
-
configurable: true,
|
|
267
|
-
writable: true,
|
|
268
|
-
value: ".keri/not"
|
|
269
|
-
});
|
|
270
|
-
Object.defineProperty(Noter, "TempPrefix", {
|
|
271
|
-
enumerable: true,
|
|
272
|
-
configurable: true,
|
|
273
|
-
writable: true,
|
|
274
|
-
value: "keri_not_"
|
|
275
|
-
});
|
|
276
|
-
Object.defineProperty(Noter, "MaxNamedDBs", {
|
|
277
|
-
enumerable: true,
|
|
278
|
-
configurable: true,
|
|
279
|
-
writable: true,
|
|
280
|
-
value: 8
|
|
281
|
-
});
|
|
282
|
-
/** Open a notification sidecar and return the ready-to-use databaser. */
|
|
283
|
-
export function* createNoter(options = {}) {
|
|
284
|
-
const noter = new Noter(options);
|
|
285
|
-
const opened = yield* noter.reopen(options);
|
|
286
|
-
if (!opened) {
|
|
287
|
-
throw new DatabaseNotOpenError("Failed to open Noter");
|
|
288
|
-
}
|
|
289
|
-
return noter;
|
|
290
|
-
}
|