keri-ts 1.0.0 → 2.0.1
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 +23 -0
- package/esm/keri/npm/src/acdc/chaining.js +213 -0
- package/esm/keri/npm/src/acdc/dhking.js +716 -0
- package/esm/keri/npm/src/acdc/messaging.js +2 -0
- package/esm/keri/npm/src/acdc/observing.js +40 -7
- package/esm/keri/npm/src/acdc/regbasing.js +13 -2
- package/esm/keri/npm/src/acdc/regengine.js +71 -23
- package/esm/keri/npm/src/acdc/regeventing.js +163 -44
- package/esm/keri/npm/src/acdc/registering.js +93 -14
- package/esm/keri/npm/src/acdc/relating.js +59 -0
- package/esm/keri/npm/src/acdc/salting.js +720 -0
- package/esm/keri/npm/src/acdc/scheming.js +94 -39
- package/esm/keri/npm/src/acdc/unblinding.js +1042 -0
- package/esm/keri/npm/src/app/{authenticating.js → bootstrap/authenticating.js} +39 -18
- package/esm/keri/npm/src/app/bootstrap/bootstrapping.js +109 -0
- package/esm/keri/npm/src/app/{oobi-replies.js → bootstrap/oobi-replies.js} +8 -6
- package/esm/keri/npm/src/app/{oobiery.js → bootstrap/oobiery.js} +161 -75
- package/esm/keri/npm/src/app/credentials/credential-importing.js +201 -0
- package/esm/keri/npm/src/app/credentials/credential-proposals.js +120 -0
- package/esm/keri/npm/src/app/credentials/credential-revoking.js +165 -0
- package/esm/keri/npm/src/app/credentials/credential-workflows.js +365 -0
- package/esm/keri/npm/src/app/credentials/tel-publishing.js +27 -0
- package/esm/keri/npm/src/app/{verifying.js → credentials/verifying.js} +50 -6
- package/esm/keri/npm/src/app/delivery/forwarding.js +600 -0
- package/esm/keri/npm/src/app/delivery/introducing.js +68 -0
- package/esm/keri/npm/src/app/{reply-streams.js → delivery/reply-streams.js} +52 -7
- package/esm/keri/npm/src/app/delivery/respondant.js +159 -0
- package/esm/keri/npm/src/app/{stored-replies.js → delivery/stored-replies.js} +4 -4
- package/esm/keri/npm/src/app/exchanges/essr.js +111 -0
- package/esm/keri/npm/src/app/exchanges/exchange-messaging.js +66 -0
- package/esm/keri/npm/src/app/exchanges/exchanging.js +1354 -0
- package/esm/keri/npm/src/app/{configing.js → identity/configing.js} +4 -4
- package/esm/keri/npm/src/app/{delegating.js → identity/delegating.js} +99 -29
- package/esm/keri/npm/src/app/{endpoint-roleing.js → identity/endpoint-roleing.js} +36 -36
- package/esm/keri/npm/src/app/{habbing.js → identity/habbing.js} +232 -150
- package/esm/keri/npm/src/app/{keeping.js → identity/keeping.js} +60 -56
- package/esm/keri/npm/src/app/{organizing.js → identity/organizing.js} +47 -21
- package/esm/keri/npm/src/app/ipex/ipex-building.js +162 -0
- package/esm/keri/npm/src/app/{ipex-credentialing.js → ipex/ipex-credentialing.js} +142 -31
- package/esm/keri/npm/src/app/ipex/ipex-graph.js +243 -0
- package/esm/keri/npm/src/app/ipex/ipex-grouping.js +664 -0
- package/esm/keri/npm/src/app/{ipex-node-authentication.js → ipex/ipex-node-authentication.js} +83 -6
- package/esm/keri/npm/src/app/ipex/ipex-v2.js +692 -0
- package/esm/keri/npm/src/app/{ipexing.js → ipex/ipexing.js} +58 -1
- package/esm/keri/npm/src/app/mailbox/forward-handler.js +228 -0
- package/esm/keri/npm/src/app/{mailbox-director.js → mailbox/mailbox-director.js} +120 -15
- package/esm/keri/npm/src/app/mailbox/mailbox-poller.js +305 -0
- package/esm/keri/npm/src/app/mailbox/mailbox-sse.js +254 -0
- package/esm/keri/npm/src/app/{mailboxing.js → mailbox/mailboxing.js} +118 -67
- package/esm/keri/npm/src/app/mailbox/topic-routing.js +54 -0
- package/esm/keri/npm/src/app/multisig/group-members.js +173 -0
- package/esm/keri/npm/src/app/{grouping.js → multisig/grouping.js} +384 -70
- package/esm/keri/npm/src/app/multisig/multisig-messaging.js +164 -0
- package/esm/keri/npm/src/app/multisig/multisig-workflows.js +821 -0
- package/esm/keri/npm/src/app/{notifying.js → notifications/notifying.js} +8 -14
- package/esm/keri/npm/src/app/{signaling.js → notifications/signaling.js} +1 -1
- package/esm/keri/npm/src/app/{parsering.js → protocol/parsering.js} +86 -18
- package/esm/keri/npm/src/app/protocol/protocol-processing.js +245 -0
- package/esm/keri/npm/src/app/protocol/reactor.js +55 -0
- package/esm/keri/npm/src/app/{query-replies.js → queries/query-replies.js} +57 -6
- package/esm/keri/npm/src/app/queries/querying.js +306 -0
- package/esm/keri/npm/src/app/queries/witness-inquisitor.js +415 -0
- package/esm/keri/npm/src/app/{abortable.js → runtime/abortable.js} +43 -4
- package/esm/keri/npm/src/app/runtime/agent-runtime.js +633 -0
- package/esm/keri/npm/src/app/runtime/cue-runtime.js +61 -0
- package/esm/keri/npm/src/app/runtime/runtime-clock.js +6 -0
- package/esm/keri/npm/src/app/{byte-source.js → transport/byte-source.js} +36 -6
- package/esm/keri/npm/src/app/transport/cesr-egress.js +317 -0
- package/esm/keri/npm/src/app/{cesr-http.js → transport/cesr-http.js} +20 -55
- package/esm/keri/npm/src/app/transport/http-client.js +172 -0
- package/esm/keri/npm/src/app/transport/http-messenger.js +52 -0
- package/esm/keri/npm/src/app/transport/http-stream-messenger.js +60 -0
- package/esm/keri/npm/src/app/transport/httping.js +57 -0
- package/esm/keri/npm/src/app/transport/message-source.js +77 -0
- package/esm/keri/npm/src/app/transport/messengering.js +68 -0
- package/esm/keri/npm/src/app/{socket-source.js → transport/socket-source.js} +39 -2
- package/esm/keri/npm/src/app/transport/tcp-egress.js +377 -0
- package/esm/keri/npm/src/app/transport/tcp-messenger.js +162 -0
- package/esm/keri/npm/src/app/transport/tcp-stream-messenger.js +40 -0
- package/esm/keri/npm/src/app/transport/transport-error.js +14 -0
- package/esm/keri/npm/src/app/witness/http-endpoints.js +185 -0
- package/esm/keri/npm/src/app/witness/ingress.js +148 -0
- package/esm/keri/npm/src/app/witness/receipt-client.js +248 -0
- package/esm/keri/npm/src/app/witness/receipt-messages.js +29 -0
- package/esm/keri/npm/src/app/witness/receipting.js +323 -0
- package/esm/keri/npm/src/app/witness/registration.js +50 -0
- package/esm/keri/npm/src/cli/common/bootstrap.js +12 -0
- package/esm/keri/npm/src/{app/cli → cli}/common/context.js +47 -6
- package/esm/keri/npm/src/{app/cli → cli}/common/existing.js +9 -11
- package/esm/keri/npm/src/cli/common/parsing.js +279 -0
- package/esm/keri/npm/src/cli/common/passcode.js +66 -0
- package/esm/keri/npm/src/cli/common/tel-completion.js +24 -0
- package/esm/keri/npm/src/{app/cli → cli}/common/witness-auth.js +2 -2
- package/esm/keri/npm/src/cli/credentials/ipex.js +702 -0
- package/esm/keri/npm/src/cli/credentials/vc.js +399 -0
- package/esm/keri/npm/src/{app/cli → cli/endpoints}/did.js +63 -36
- package/esm/keri/npm/src/{app/cli → cli/endpoints}/ends.js +33 -28
- package/esm/keri/npm/src/{app/cli → cli/endpoints}/loc.js +16 -11
- package/esm/keri/npm/src/cli/endpoints/oobi-clean.js +134 -0
- package/esm/keri/npm/src/{app/cli → cli/endpoints}/oobi.js +35 -32
- package/esm/keri/npm/src/{app/cli → cli/identity}/aid.js +8 -7
- package/esm/keri/npm/src/{app/cli → cli/identity}/challenge.js +60 -49
- package/esm/keri/npm/src/{app/cli → cli/identity}/delegate.js +61 -26
- package/esm/keri/npm/src/{app/cli → cli/identity}/export.js +9 -8
- package/esm/keri/npm/src/cli/identity/incept.js +181 -0
- package/esm/keri/npm/src/cli/identity/init.js +153 -0
- package/esm/keri/npm/src/cli/identity/interact.js +84 -0
- package/esm/keri/npm/src/{app/cli → cli/identity}/list.js +7 -6
- package/esm/keri/npm/src/{app/cli → cli/identity}/rotate.js +60 -57
- package/esm/keri/npm/src/cli/index.js +38 -0
- package/esm/keri/npm/src/{app/cli → cli/messaging}/exchange.js +24 -22
- package/esm/keri/npm/src/{app/cli → cli/messaging}/multisig.js +165 -156
- package/esm/keri/npm/src/{app/cli → cli/messaging}/notifications.js +26 -22
- package/esm/keri/npm/src/{app/cli → cli}/output.js +1 -1
- package/esm/keri/npm/src/{app/cli → cli/tools}/annotate.js +10 -4
- package/esm/keri/npm/src/{app/cli → cli/tools}/benchmark.js +15 -4
- package/esm/keri/npm/src/{app/cli → cli/tools}/db-dump.js +11 -10
- package/esm/keri/npm/src/{app/cli → cli/tools}/saidify.js +3 -2
- package/esm/keri/npm/src/{app/cli → cli/tools}/sign.js +16 -10
- package/esm/keri/npm/src/{app/cli → cli/tools}/verify.js +10 -10
- package/esm/keri/npm/src/core/attachment-countering.js +31 -1
- package/esm/keri/npm/src/core/{exchange-proofing.js → exchange/exchange-proofing.js} +32 -2
- package/esm/keri/npm/src/core/{protocol-exchanging.js → exchange/protocol-exchanging.js} +26 -4
- package/esm/keri/npm/src/core/genus-framing.js +44 -0
- package/esm/keri/npm/src/core/{eventing.js → kel/eventing.js} +57 -25
- package/esm/keri/npm/src/core/{kever-decisions.js → kel/kever-decisions.js} +24 -12
- package/esm/keri/npm/src/core/{kever.js → kel/kever.js} +4 -4
- package/esm/keri/npm/src/core/logger.js +3 -3
- package/esm/keri/npm/src/core/{kram-policy.js → mailbox/kram-policy.js} +14 -4
- package/esm/keri/npm/src/core/{kram-pruning.js → mailbox/kram-pruning.js} +3 -3
- package/esm/keri/npm/src/core/{kram-signatures.js → mailbox/kram-signatures.js} +1 -1
- package/esm/keri/npm/src/core/{kram-staging.js → mailbox/kram-staging.js} +6 -6
- package/esm/keri/npm/src/core/{kram-time.js → mailbox/kram-time.js} +4 -3
- package/esm/keri/npm/src/core/{kraming.js → mailbox/kraming.js} +2 -2
- package/esm/keri/npm/src/core/protocol-eventing.js +1 -1
- package/esm/keri/npm/src/core/protocol-serialization.js +9 -34
- package/esm/keri/npm/src/core/routing.js +52 -17
- package/esm/keri/npm/src/db/baser-defaults.js +11 -0
- package/esm/keri/npm/src/db/basing.js +89 -232
- package/esm/keri/npm/src/db/core/lmdber.js +102 -63
- package/esm/keri/npm/src/db/escrowing.js +73 -49
- package/esm/keri/npm/src/db/exchange/exchange-nests.js +54 -0
- package/esm/keri/npm/src/db/exchange/exchange-records.js +7 -0
- package/esm/keri/npm/src/db/index.js +5 -4
- package/esm/keri/npm/src/db/keeping.js +122 -3
- package/esm/keri/npm/src/db/{kram-factors.js → mailbox/kram-factors.js} +1 -1
- package/esm/keri/npm/src/db/{mailboxing.js → mailbox/mailboxing.js} +3 -3
- package/esm/keri/npm/src/db/reger.js +38 -29
- package/esm/keri/npm/src/db/{kel-replay.js → replay/kel-replay.js} +11 -4
- package/esm/keri/npm/src/db/{tel-replay.js → replay/tel-replay.js} +34 -0
- package/esm/keri/npm/src/db/{witness-replay.js → replay/witness-replay.js} +2 -2
- package/esm/keri/npm/src/db/subing.js +2 -3
- package/esm/keri/npm/src/did/webs/artifacts.js +15 -18
- package/esm/keri/npm/src/did/webs/designated-aliases.js +5 -7
- package/esm/keri/npm/src/did/webs/resolving.js +73 -56
- package/esm/keri/npm/src/library/index.js +1 -1
- package/esm/keri/npm/src/npm/cli.js +1 -1
- package/esm/keri/npm/src/npm/index.js +1 -1
- package/esm/keri/npm/src/runtime/index.js +79 -47
- package/esm/keri/npm/src/vdr/backer-state.js +55 -0
- package/esm/keri/npm/src/vdr/credential-tsn-record.js +59 -0
- package/esm/keri/npm/src/vdr/credentialing.js +84 -82
- package/esm/keri/npm/src/vdr/eventing.js +592 -204
- package/esm/keri/npm/src/vdr/registry-tsn-record.js +55 -0
- package/esm/keri/npm/src/vdr/revoking.js +90 -0
- package/esm/keri/npm/src/vdr/tel-anchor.js +29 -0
- package/esm/keri/npm/src/vdr/tel-publication.js +178 -0
- package/esm/keri/npm/src/{app/version.js → version.js} +2 -2
- package/package.json +5 -3
- package/types/_dnt.polyfills.d.ts +6 -0
- package/types/_dnt.polyfills.d.ts.map +1 -1
- package/types/acdc/chaining.d.ts +35 -0
- package/types/acdc/chaining.d.ts.map +1 -0
- package/types/acdc/dhking.d.ts +136 -0
- package/types/acdc/dhking.d.ts.map +1 -0
- package/types/acdc/messaging.d.ts.map +1 -1
- package/types/acdc/observing.d.ts +18 -7
- package/types/acdc/observing.d.ts.map +1 -1
- package/types/acdc/regbasing.d.ts +3 -1
- package/types/acdc/regbasing.d.ts.map +1 -1
- package/types/acdc/regengine.d.ts +9 -4
- package/types/acdc/regengine.d.ts.map +1 -1
- package/types/acdc/regeventing.d.ts +24 -7
- package/types/acdc/regeventing.d.ts.map +1 -1
- package/types/acdc/registering.d.ts +22 -6
- package/types/acdc/registering.d.ts.map +1 -1
- package/types/acdc/registraring.d.ts +1 -1
- package/types/acdc/registraring.d.ts.map +1 -1
- package/types/acdc/relating.d.ts +21 -0
- package/types/acdc/relating.d.ts.map +1 -0
- package/types/acdc/salting.d.ts +241 -0
- package/types/acdc/salting.d.ts.map +1 -0
- package/types/acdc/scheming.d.ts +1 -1
- package/types/acdc/scheming.d.ts.map +1 -1
- package/types/acdc/unblinding.d.ts +150 -0
- package/types/acdc/unblinding.d.ts.map +1 -0
- package/types/app/bootstrap/authenticating.d.ts +54 -0
- package/types/app/bootstrap/authenticating.d.ts.map +1 -0
- package/types/app/bootstrap/bootstrapping.d.ts +45 -0
- package/types/app/bootstrap/bootstrapping.d.ts.map +1 -0
- package/types/app/{oobi-replies.d.ts → bootstrap/oobi-replies.d.ts} +1 -1
- package/types/app/bootstrap/oobi-replies.d.ts.map +1 -0
- package/types/app/{oobiery.d.ts → bootstrap/oobiery.d.ts} +98 -25
- package/types/app/bootstrap/oobiery.d.ts.map +1 -0
- package/types/app/credentials/credential-importing.d.ts +29 -0
- package/types/app/credentials/credential-importing.d.ts.map +1 -0
- package/types/app/credentials/credential-proposals.d.ts +27 -0
- package/types/app/credentials/credential-proposals.d.ts.map +1 -0
- package/types/app/credentials/credential-revoking.d.ts +44 -0
- package/types/app/credentials/credential-revoking.d.ts.map +1 -0
- package/types/app/credentials/credential-workflows.d.ts +149 -0
- package/types/app/credentials/credential-workflows.d.ts.map +1 -0
- package/types/app/{schema-resolving.d.ts → credentials/schema-resolving.d.ts} +2 -2
- package/types/app/credentials/schema-resolving.d.ts.map +1 -0
- package/types/app/credentials/tel-publishing.d.ts +16 -0
- package/types/app/credentials/tel-publishing.d.ts.map +1 -0
- package/types/app/{verifying.d.ts → credentials/verifying.d.ts} +19 -7
- package/types/app/credentials/verifying.d.ts.map +1 -0
- package/types/app/delivery/forwarding.d.ts +227 -0
- package/types/app/delivery/forwarding.d.ts.map +1 -0
- package/types/app/delivery/introducing.d.ts +21 -0
- package/types/app/delivery/introducing.d.ts.map +1 -0
- package/types/app/delivery/reply-streams.d.ts +49 -0
- package/types/app/delivery/reply-streams.d.ts.map +1 -0
- package/types/app/delivery/respondant.d.ts +52 -0
- package/types/app/delivery/respondant.d.ts.map +1 -0
- package/types/app/{stored-replies.d.ts → delivery/stored-replies.d.ts} +1 -1
- package/types/app/delivery/stored-replies.d.ts.map +1 -0
- package/types/app/exchanges/essr.d.ts +53 -0
- package/types/app/exchanges/essr.d.ts.map +1 -0
- package/types/app/exchanges/exchange-messaging.d.ts +73 -0
- package/types/app/exchanges/exchange-messaging.d.ts.map +1 -0
- package/types/app/exchanges/exchanging.d.ts +379 -0
- package/types/app/exchanges/exchanging.d.ts.map +1 -0
- package/types/app/{challenging.d.ts → identity/challenging.d.ts} +3 -3
- package/types/app/identity/challenging.d.ts.map +1 -0
- package/types/app/{configing.d.ts → identity/configing.d.ts} +1 -1
- package/types/app/identity/configing.d.ts.map +1 -0
- package/types/app/{delegating.d.ts → identity/delegating.d.ts} +52 -15
- package/types/app/identity/delegating.d.ts.map +1 -0
- package/types/app/{endpoint-roleing.d.ts → identity/endpoint-roleing.d.ts} +24 -13
- package/types/app/identity/endpoint-roleing.d.ts.map +1 -0
- package/types/app/{habbing.d.ts → identity/habbing.d.ts} +73 -32
- package/types/app/identity/habbing.d.ts.map +1 -0
- package/types/app/{keeping.d.ts → identity/keeping.d.ts} +19 -5
- package/types/app/identity/keeping.d.ts.map +1 -0
- package/types/app/{organizing.d.ts → identity/organizing.d.ts} +19 -4
- package/types/app/identity/organizing.d.ts.map +1 -0
- package/types/app/ipex/ipex-building.d.ts +30 -0
- package/types/app/ipex/ipex-building.d.ts.map +1 -0
- package/types/app/{ipex-credentialing.d.ts → ipex/ipex-credentialing.d.ts} +33 -6
- package/types/app/ipex/ipex-credentialing.d.ts.map +1 -0
- package/types/app/ipex/ipex-graph.d.ts +28 -0
- package/types/app/ipex/ipex-graph.d.ts.map +1 -0
- package/types/app/ipex/ipex-grouping.d.ts +112 -0
- package/types/app/ipex/ipex-grouping.d.ts.map +1 -0
- package/types/app/{ipex-node-authentication.d.ts → ipex/ipex-node-authentication.d.ts} +10 -5
- package/types/app/ipex/ipex-node-authentication.d.ts.map +1 -0
- package/types/app/ipex/ipex-v2.d.ts +71 -0
- package/types/app/ipex/ipex-v2.d.ts.map +1 -0
- package/types/app/{ipexing.d.ts → ipex/ipexing.d.ts} +21 -6
- package/types/app/ipex/ipexing.d.ts.map +1 -0
- package/types/app/mailbox/forward-handler.d.ts +68 -0
- package/types/app/mailbox/forward-handler.d.ts.map +1 -0
- package/types/app/mailbox/mailbox-director.d.ts +252 -0
- package/types/app/mailbox/mailbox-director.d.ts.map +1 -0
- package/types/app/mailbox/mailbox-poller.d.ts +149 -0
- package/types/app/mailbox/mailbox-poller.d.ts.map +1 -0
- package/types/app/mailbox/mailbox-sse.d.ts +63 -0
- package/types/app/mailbox/mailbox-sse.d.ts.map +1 -0
- package/types/app/{mailboxing.d.ts → mailbox/mailboxing.d.ts} +92 -40
- package/types/app/mailbox/mailboxing.d.ts.map +1 -0
- package/types/app/mailbox/topic-routing.d.ts +18 -0
- package/types/app/mailbox/topic-routing.d.ts.map +1 -0
- package/types/app/multisig/group-members.d.ts +60 -0
- package/types/app/multisig/group-members.d.ts.map +1 -0
- package/types/app/{grouping.d.ts → multisig/grouping.d.ts} +142 -19
- package/types/app/multisig/grouping.d.ts.map +1 -0
- package/types/app/multisig/multisig-messaging.d.ts +97 -0
- package/types/app/multisig/multisig-messaging.d.ts.map +1 -0
- package/types/app/multisig/multisig-workflows.d.ts +85 -0
- package/types/app/multisig/multisig-workflows.d.ts.map +1 -0
- package/types/app/{notifying.d.ts → notifications/notifying.d.ts} +4 -5
- package/types/app/notifications/notifying.d.ts.map +1 -0
- package/types/app/notifications/signaling.d.ts.map +1 -0
- package/types/app/{parsering.d.ts → protocol/parsering.d.ts} +40 -11
- package/types/app/protocol/parsering.d.ts.map +1 -0
- package/types/app/{protocol-host-policy.d.ts → protocol/protocol-host-policy.d.ts} +1 -10
- package/types/app/protocol/protocol-host-policy.d.ts.map +1 -0
- package/types/app/protocol/protocol-processing.d.ts +140 -0
- package/types/app/protocol/protocol-processing.d.ts.map +1 -0
- package/types/app/protocol/reactor.d.ts +43 -0
- package/types/app/protocol/reactor.d.ts.map +1 -0
- package/types/app/queries/query-replies.d.ts +78 -0
- package/types/app/queries/query-replies.d.ts.map +1 -0
- package/types/app/queries/querying.d.ts +155 -0
- package/types/app/queries/querying.d.ts.map +1 -0
- package/types/app/queries/witness-inquisitor.d.ts +150 -0
- package/types/app/queries/witness-inquisitor.d.ts.map +1 -0
- package/types/app/runtime/abortable.d.ts +39 -0
- package/types/app/runtime/abortable.d.ts.map +1 -0
- package/types/app/runtime/agent-runtime.d.ts +348 -0
- package/types/app/runtime/agent-runtime.d.ts.map +1 -0
- package/types/app/runtime/cue-runtime.d.ts +33 -0
- package/types/app/runtime/cue-runtime.d.ts.map +1 -0
- package/types/app/runtime/runtime-clock.d.ts +28 -0
- package/types/app/runtime/runtime-clock.d.ts.map +1 -0
- package/types/app/runtime/runtime-turn.d.ts.map +1 -0
- package/types/app/transport/byte-source.d.ts +41 -0
- package/types/app/transport/byte-source.d.ts.map +1 -0
- package/types/app/transport/cesr-egress.d.ts +117 -0
- package/types/app/transport/cesr-egress.d.ts.map +1 -0
- package/types/app/{cesr-http.d.ts → transport/cesr-http.d.ts} +4 -27
- package/types/app/transport/cesr-http.d.ts.map +1 -0
- package/types/app/transport/http-client.d.ts +99 -0
- package/types/app/transport/http-client.d.ts.map +1 -0
- package/types/app/transport/http-messenger.d.ts +37 -0
- package/types/app/transport/http-messenger.d.ts.map +1 -0
- package/types/app/transport/http-stream-messenger.d.ts +30 -0
- package/types/app/transport/http-stream-messenger.d.ts.map +1 -0
- package/types/app/transport/httping.d.ts +19 -0
- package/types/app/transport/httping.d.ts.map +1 -0
- package/types/app/transport/message-source.d.ts +22 -0
- package/types/app/transport/message-source.d.ts.map +1 -0
- package/types/app/transport/messengering.d.ts +41 -0
- package/types/app/transport/messengering.d.ts.map +1 -0
- package/types/app/{socket-source.d.ts → transport/socket-source.d.ts} +8 -0
- package/types/app/transport/socket-source.d.ts.map +1 -0
- package/types/app/transport/tcp-egress.d.ts +118 -0
- package/types/app/transport/tcp-egress.d.ts.map +1 -0
- package/types/app/transport/tcp-messenger.d.ts +69 -0
- package/types/app/transport/tcp-messenger.d.ts.map +1 -0
- package/types/app/transport/tcp-stream-messenger.d.ts +25 -0
- package/types/app/transport/tcp-stream-messenger.d.ts.map +1 -0
- package/types/app/transport/transport-error.d.ts +12 -0
- package/types/app/transport/transport-error.d.ts.map +1 -0
- package/types/app/witness/http-endpoints.d.ts +77 -0
- package/types/app/witness/http-endpoints.d.ts.map +1 -0
- package/types/app/witness/ingress.d.ts +65 -0
- package/types/app/witness/ingress.d.ts.map +1 -0
- package/types/app/witness/receipt-client.d.ts +82 -0
- package/types/app/witness/receipt-client.d.ts.map +1 -0
- package/types/app/witness/receipt-messages.d.ts +21 -0
- package/types/app/witness/receipt-messages.d.ts.map +1 -0
- package/types/app/witness/receipting.d.ts +117 -0
- package/types/app/witness/receipting.d.ts.map +1 -0
- package/types/app/witness/registration.d.ts +27 -0
- package/types/app/witness/registration.d.ts.map +1 -0
- package/types/cli/common/bootstrap.d.ts +5 -0
- package/types/cli/common/bootstrap.d.ts.map +1 -0
- package/types/{app/cli → cli}/common/context.d.ts +10 -5
- package/types/cli/common/context.d.ts.map +1 -0
- package/types/{app/cli → cli}/common/existing.d.ts +2 -4
- package/types/cli/common/existing.d.ts.map +1 -0
- package/types/{app/cli → cli}/common/parsing.d.ts +26 -15
- package/types/cli/common/parsing.d.ts.map +1 -0
- package/types/cli/common/passcode.d.ts +9 -0
- package/types/cli/common/passcode.d.ts.map +1 -0
- package/types/cli/common/rendering.d.ts.map +1 -0
- package/types/cli/common/tel-completion.d.ts +8 -0
- package/types/cli/common/tel-completion.d.ts.map +1 -0
- package/types/{app/cli → cli}/common/witness-auth.d.ts +1 -1
- package/types/cli/common/witness-auth.d.ts.map +1 -0
- package/types/cli/credentials/ipex.d.ts +110 -0
- package/types/cli/credentials/ipex.d.ts.map +1 -0
- package/types/cli/credentials/vc.d.ts +42 -0
- package/types/cli/credentials/vc.d.ts.map +1 -0
- package/types/{app/cli → cli/endpoints}/did.d.ts +5 -1
- package/types/cli/endpoints/did.d.ts.map +1 -0
- package/types/{app/cli → cli/endpoints}/ends.d.ts +9 -1
- package/types/cli/endpoints/ends.d.ts.map +1 -0
- package/types/cli/endpoints/loc.d.ts.map +1 -0
- package/types/cli/endpoints/oobi-clean.d.ts +8 -0
- package/types/cli/endpoints/oobi-clean.d.ts.map +1 -0
- package/types/{app/cli → cli/endpoints}/oobi.d.ts +2 -0
- package/types/cli/endpoints/oobi.d.ts.map +1 -0
- package/types/cli/identity/aid.d.ts.map +1 -0
- package/types/{app/cli → cli/identity}/challenge.d.ts +5 -1
- package/types/cli/identity/challenge.d.ts.map +1 -0
- package/types/cli/identity/delegate.d.ts.map +1 -0
- package/types/cli/identity/export.d.ts.map +1 -0
- package/types/{app/cli → cli/identity}/incept.d.ts +2 -0
- package/types/cli/identity/incept.d.ts.map +1 -0
- package/types/{app/cli → cli/identity}/init.d.ts +2 -0
- package/types/cli/identity/init.d.ts.map +1 -0
- package/types/{app/cli → cli/identity}/interact.d.ts +2 -0
- package/types/cli/identity/interact.d.ts.map +1 -0
- package/types/cli/identity/list.d.ts.map +1 -0
- package/types/{app/cli → cli/identity}/rotate.d.ts +9 -2
- package/types/cli/identity/rotate.d.ts.map +1 -0
- package/types/cli/index.d.ts +39 -0
- package/types/cli/index.d.ts.map +1 -0
- package/types/{app/cli → cli/messaging}/exchange.d.ts +3 -1
- package/types/cli/messaging/exchange.d.ts.map +1 -0
- package/types/cli/messaging/multisig.d.ts +29 -0
- package/types/cli/messaging/multisig.d.ts.map +1 -0
- package/types/cli/messaging/notifications.d.ts.map +1 -0
- package/types/cli/output.d.ts.map +1 -0
- package/types/cli/tools/annotate-color.d.ts.map +1 -0
- package/types/cli/tools/annotate.d.ts.map +1 -0
- package/types/cli/tools/benchmark.d.ts.map +1 -0
- package/types/cli/tools/db-dump.d.ts.map +1 -0
- package/types/cli/tools/saidify.d.ts.map +1 -0
- package/types/{app/cli → cli/tools}/sign.d.ts +2 -0
- package/types/cli/tools/sign.d.ts.map +1 -0
- package/types/cli/tools/verify.d.ts.map +1 -0
- package/types/core/attachment-countering.d.ts +10 -1
- package/types/core/attachment-countering.d.ts.map +1 -1
- package/types/core/cues.d.ts +78 -21
- package/types/core/cues.d.ts.map +1 -1
- package/types/core/{exchange-proofing.d.ts → exchange/exchange-proofing.d.ts} +9 -2
- package/types/core/exchange/exchange-proofing.d.ts.map +1 -0
- package/types/core/{protocol-exchanging.d.ts → exchange/protocol-exchanging.d.ts} +10 -2
- package/types/core/exchange/protocol-exchanging.d.ts.map +1 -0
- package/types/core/genus-framing.d.ts +12 -0
- package/types/core/genus-framing.d.ts.map +1 -0
- package/types/core/{eventing.d.ts → kel/eventing.d.ts} +22 -10
- package/types/core/kel/eventing.d.ts.map +1 -0
- package/types/core/{kever-decisions.d.ts → kel/kever-decisions.d.ts} +21 -8
- package/types/core/kel/kever-decisions.d.ts.map +1 -0
- package/types/core/{kever.d.ts → kel/kever.d.ts} +2 -2
- package/types/core/kel/kever.d.ts.map +1 -0
- package/types/core/kel/witnesses.d.ts.map +1 -0
- package/types/core/logger.d.ts +1 -1
- package/types/core/logger.d.ts.map +1 -1
- package/types/core/{kram-auth.d.ts → mailbox/kram-auth.d.ts} +2 -2
- package/types/core/mailbox/kram-auth.d.ts.map +1 -0
- package/types/core/{kram-policy.d.ts → mailbox/kram-policy.d.ts} +2 -2
- package/types/core/mailbox/kram-policy.d.ts.map +1 -0
- package/types/core/{kram-pruning.d.ts → mailbox/kram-pruning.d.ts} +1 -1
- package/types/core/mailbox/kram-pruning.d.ts.map +1 -0
- package/types/core/{kram-signatures.d.ts → mailbox/kram-signatures.d.ts} +3 -3
- package/types/core/mailbox/kram-signatures.d.ts.map +1 -0
- package/types/core/{kram-staging.d.ts → mailbox/kram-staging.d.ts} +2 -2
- package/types/core/mailbox/kram-staging.d.ts.map +1 -0
- package/types/core/{kram-time.d.ts → mailbox/kram-time.d.ts} +2 -2
- package/types/core/mailbox/kram-time.d.ts.map +1 -0
- package/types/core/{kraming.d.ts → mailbox/kraming.d.ts} +5 -5
- package/types/core/mailbox/kraming.d.ts.map +1 -0
- package/types/core/mailbox/mailbox-topics.d.ts.map +1 -0
- package/types/core/protocol-eventing.d.ts.map +1 -1
- package/types/core/protocol-serialization.d.ts +1 -1
- package/types/core/protocol-serialization.d.ts.map +1 -1
- package/types/core/records.d.ts +1 -1
- package/types/core/records.d.ts.map +1 -1
- package/types/core/routing.d.ts +24 -4
- package/types/core/routing.d.ts.map +1 -1
- package/types/db/baser-defaults.d.ts +5 -0
- package/types/db/baser-defaults.d.ts.map +1 -0
- package/types/db/basing.d.ts +32 -44
- package/types/db/basing.d.ts.map +1 -1
- package/types/db/core/lmdber.d.ts +18 -13
- package/types/db/core/lmdber.d.ts.map +1 -1
- package/types/db/escrowing.d.ts +3 -1
- package/types/db/escrowing.d.ts.map +1 -1
- package/types/db/exchange/exchange-nests.d.ts +12 -0
- package/types/db/exchange/exchange-nests.d.ts.map +1 -0
- package/types/db/exchange/exchange-records.d.ts +38 -0
- package/types/db/exchange/exchange-records.d.ts.map +1 -0
- package/types/db/index.d.ts +5 -4
- package/types/db/index.d.ts.map +1 -1
- package/types/db/keeping.d.ts +19 -1
- package/types/db/keeping.d.ts.map +1 -1
- package/types/db/{kram-factors.d.ts → mailbox/kram-factors.d.ts} +2 -2
- package/types/db/mailbox/kram-factors.d.ts.map +1 -0
- package/types/db/{mailboxing.d.ts → mailbox/mailboxing.d.ts} +2 -2
- package/types/db/mailbox/mailboxing.d.ts.map +1 -0
- package/types/db/reger.d.ts +7 -6
- package/types/db/reger.d.ts.map +1 -1
- package/types/db/{kel-replay.d.ts → replay/kel-replay.d.ts} +1 -2
- package/types/db/replay/kel-replay.d.ts.map +1 -0
- package/types/db/{tel-replay.d.ts → replay/tel-replay.d.ts} +11 -1
- package/types/db/replay/tel-replay.d.ts.map +1 -0
- package/types/db/{witness-replay.d.ts → replay/witness-replay.d.ts} +1 -1
- package/types/db/replay/witness-replay.d.ts.map +1 -0
- package/types/db/subing.d.ts.map +1 -1
- package/types/did/keri/resolving.d.ts +1 -1
- package/types/did/keri/resolving.d.ts.map +1 -1
- package/types/did/webs/artifacts.d.ts +5 -5
- package/types/did/webs/artifacts.d.ts.map +1 -1
- package/types/did/webs/designated-aliases.d.ts +1 -2
- package/types/did/webs/designated-aliases.d.ts.map +1 -1
- package/types/did/webs/documenting.d.ts +1 -1
- package/types/did/webs/documenting.d.ts.map +1 -1
- package/types/did/webs/resolving.d.ts +13 -9
- package/types/did/webs/resolving.d.ts.map +1 -1
- package/types/library/index.d.ts +1 -1
- package/types/library/index.d.ts.map +1 -1
- package/types/npm/cli.d.ts +1 -1
- package/types/npm/cli.d.ts.map +1 -1
- package/types/npm/index.d.ts +1 -1
- package/types/npm/index.d.ts.map +1 -1
- package/types/runtime/index.d.ts +86 -51
- package/types/runtime/index.d.ts.map +1 -1
- package/types/vdr/backer-state.d.ts +22 -0
- package/types/vdr/backer-state.d.ts.map +1 -0
- package/types/vdr/credential-tsn-record.d.ts +13 -0
- package/types/vdr/credential-tsn-record.d.ts.map +1 -0
- package/types/vdr/credentialing.d.ts +16 -17
- package/types/vdr/credentialing.d.ts.map +1 -1
- package/types/vdr/eventing.d.ts +60 -18
- package/types/vdr/eventing.d.ts.map +1 -1
- package/types/vdr/registry-tsn-record.d.ts +6 -0
- package/types/vdr/registry-tsn-record.d.ts.map +1 -0
- package/types/vdr/revoking.d.ts +18 -0
- package/types/vdr/revoking.d.ts.map +1 -0
- package/types/vdr/tel-anchor.d.ts +10 -0
- package/types/vdr/tel-anchor.d.ts.map +1 -0
- package/types/vdr/tel-publication.d.ts +49 -0
- package/types/vdr/tel-publication.d.ts.map +1 -0
- package/types/vdr/tsn-query.d.ts +1 -1
- package/types/vdr/tsn-query.d.ts.map +1 -1
- package/types/{app/version.d.ts → version.d.ts} +2 -2
- package/types/version.d.ts.map +1 -0
- package/esm/keri/npm/src/app/agent-runtime.js +0 -544
- package/esm/keri/npm/src/app/cesr-egress.js +0 -294
- package/esm/keri/npm/src/app/cli/common/displaying.js +0 -43
- package/esm/keri/npm/src/app/cli/common/parsing.js +0 -215
- package/esm/keri/npm/src/app/cli/incept.js +0 -185
- package/esm/keri/npm/src/app/cli/index.js +0 -36
- package/esm/keri/npm/src/app/cli/init.js +0 -149
- package/esm/keri/npm/src/app/cli/interact.js +0 -72
- package/esm/keri/npm/src/app/cli/ipex.js +0 -519
- package/esm/keri/npm/src/app/cli/query.js +0 -142
- package/esm/keri/npm/src/app/cli/vc.js +0 -283
- package/esm/keri/npm/src/app/cli/verifier.js +0 -92
- package/esm/keri/npm/src/app/credential-workflows.js +0 -409
- package/esm/keri/npm/src/app/cue-runtime.js +0 -38
- package/esm/keri/npm/src/app/essr.js +0 -170
- package/esm/keri/npm/src/app/exchanging.js +0 -1001
- package/esm/keri/npm/src/app/forwarding.js +0 -936
- package/esm/keri/npm/src/app/group-members.js +0 -37
- package/esm/keri/npm/src/app/httping.js +0 -162
- package/esm/keri/npm/src/app/ipex-graph.js +0 -407
- package/esm/keri/npm/src/app/ipex-grouping.js +0 -276
- package/esm/keri/npm/src/app/ipex-v2.js +0 -438
- package/esm/keri/npm/src/app/mailbox-sse.js +0 -240
- package/esm/keri/npm/src/app/multisig-workflows.js +0 -457
- package/esm/keri/npm/src/app/querying.js +0 -775
- package/esm/keri/npm/src/app/reactor.js +0 -394
- package/esm/keri/npm/src/app/respondant.js +0 -358
- package/esm/keri/npm/src/app/runtime-services.js +0 -22
- package/esm/keri/npm/src/app/tcp-conversation.js +0 -85
- package/esm/keri/npm/src/app/tcp-egress.js +0 -251
- package/esm/keri/npm/src/app/verifier-agent.js +0 -443
- package/esm/keri/npm/src/app/witnessing.js +0 -914
- package/esm/keri/npm/src/core/index.js +0 -23
- package/esm/keri/npm/src/db/exchange-nests.js +0 -80
- package/esm/keri/npm/src/db/exchange-records.js +0 -7
- package/esm/keri/npm/src/db/payload-archive.js +0 -402
- package/esm/keri/npm/src/db/payload-store.js +0 -406
- package/esm/keri/npm/src/db/payload-view.js +0 -23
- package/esm/keri/npm/src/db/verifier-cueing.js +0 -132
- package/esm/keri/npm/src/vdr/credential-tsn.js +0 -230
- package/esm/keri/npm/src/vdr/registry-tsn.js +0 -217
- package/types/app/abortable.d.ts +0 -13
- package/types/app/abortable.d.ts.map +0 -1
- package/types/app/agent-runtime.d.ts +0 -221
- package/types/app/agent-runtime.d.ts.map +0 -1
- package/types/app/authenticating.d.ts +0 -36
- package/types/app/authenticating.d.ts.map +0 -1
- package/types/app/byte-source.d.ts +0 -16
- package/types/app/byte-source.d.ts.map +0 -1
- package/types/app/cesr-egress.d.ts +0 -45
- package/types/app/cesr-egress.d.ts.map +0 -1
- package/types/app/cesr-http.d.ts.map +0 -1
- package/types/app/challenging.d.ts.map +0 -1
- package/types/app/cli/aid.d.ts.map +0 -1
- package/types/app/cli/annotate-color.d.ts.map +0 -1
- package/types/app/cli/annotate.d.ts.map +0 -1
- package/types/app/cli/benchmark.d.ts.map +0 -1
- package/types/app/cli/challenge.d.ts.map +0 -1
- package/types/app/cli/common/context.d.ts.map +0 -1
- package/types/app/cli/common/displaying.d.ts +0 -12
- package/types/app/cli/common/displaying.d.ts.map +0 -1
- package/types/app/cli/common/existing.d.ts.map +0 -1
- package/types/app/cli/common/parsing.d.ts.map +0 -1
- package/types/app/cli/common/rendering.d.ts.map +0 -1
- package/types/app/cli/common/witness-auth.d.ts.map +0 -1
- package/types/app/cli/db-dump.d.ts.map +0 -1
- package/types/app/cli/delegate.d.ts.map +0 -1
- package/types/app/cli/did.d.ts.map +0 -1
- package/types/app/cli/ends.d.ts.map +0 -1
- package/types/app/cli/exchange.d.ts.map +0 -1
- package/types/app/cli/export.d.ts.map +0 -1
- package/types/app/cli/incept.d.ts.map +0 -1
- package/types/app/cli/index.d.ts +0 -37
- package/types/app/cli/index.d.ts.map +0 -1
- package/types/app/cli/init.d.ts.map +0 -1
- package/types/app/cli/interact.d.ts.map +0 -1
- package/types/app/cli/ipex.d.ts +0 -20
- package/types/app/cli/ipex.d.ts.map +0 -1
- package/types/app/cli/list.d.ts.map +0 -1
- package/types/app/cli/loc.d.ts.map +0 -1
- package/types/app/cli/multisig.d.ts +0 -12
- package/types/app/cli/multisig.d.ts.map +0 -1
- package/types/app/cli/notifications.d.ts.map +0 -1
- package/types/app/cli/oobi.d.ts.map +0 -1
- package/types/app/cli/output.d.ts.map +0 -1
- package/types/app/cli/query.d.ts +0 -12
- package/types/app/cli/query.d.ts.map +0 -1
- package/types/app/cli/rotate.d.ts.map +0 -1
- package/types/app/cli/saidify.d.ts.map +0 -1
- package/types/app/cli/sign.d.ts.map +0 -1
- package/types/app/cli/vc.d.ts +0 -20
- package/types/app/cli/vc.d.ts.map +0 -1
- package/types/app/cli/verifier.d.ts +0 -3
- package/types/app/cli/verifier.d.ts.map +0 -1
- package/types/app/cli/verify.d.ts.map +0 -1
- package/types/app/configing.d.ts.map +0 -1
- package/types/app/credential-workflows.d.ts +0 -113
- package/types/app/credential-workflows.d.ts.map +0 -1
- package/types/app/cue-runtime.d.ts +0 -12
- package/types/app/cue-runtime.d.ts.map +0 -1
- package/types/app/delegating.d.ts.map +0 -1
- package/types/app/endpoint-roleing.d.ts.map +0 -1
- package/types/app/essr.d.ts +0 -58
- package/types/app/essr.d.ts.map +0 -1
- package/types/app/exchanging.d.ts +0 -233
- package/types/app/exchanging.d.ts.map +0 -1
- package/types/app/forwarding.d.ts +0 -352
- package/types/app/forwarding.d.ts.map +0 -1
- package/types/app/group-members.d.ts +0 -12
- package/types/app/group-members.d.ts.map +0 -1
- package/types/app/grouping.d.ts.map +0 -1
- package/types/app/habbing.d.ts.map +0 -1
- package/types/app/httping.d.ts +0 -49
- package/types/app/httping.d.ts.map +0 -1
- package/types/app/ipex-credentialing.d.ts.map +0 -1
- package/types/app/ipex-graph.d.ts +0 -49
- package/types/app/ipex-graph.d.ts.map +0 -1
- package/types/app/ipex-grouping.d.ts +0 -43
- package/types/app/ipex-grouping.d.ts.map +0 -1
- package/types/app/ipex-node-authentication.d.ts.map +0 -1
- package/types/app/ipex-v2.d.ts +0 -46
- package/types/app/ipex-v2.d.ts.map +0 -1
- package/types/app/ipexing.d.ts.map +0 -1
- package/types/app/keeping.d.ts.map +0 -1
- package/types/app/mailbox-director.d.ts +0 -140
- package/types/app/mailbox-director.d.ts.map +0 -1
- package/types/app/mailbox-sse.d.ts +0 -32
- package/types/app/mailbox-sse.d.ts.map +0 -1
- package/types/app/mailboxing.d.ts.map +0 -1
- package/types/app/multisig-workflows.d.ts +0 -47
- package/types/app/multisig-workflows.d.ts.map +0 -1
- package/types/app/notifying.d.ts.map +0 -1
- package/types/app/oobi-replies.d.ts.map +0 -1
- package/types/app/oobiery.d.ts.map +0 -1
- package/types/app/organizing.d.ts.map +0 -1
- package/types/app/parsering.d.ts.map +0 -1
- package/types/app/protocol-host-policy.d.ts.map +0 -1
- package/types/app/query-replies.d.ts +0 -40
- package/types/app/query-replies.d.ts.map +0 -1
- package/types/app/querying.d.ts +0 -221
- package/types/app/querying.d.ts.map +0 -1
- package/types/app/reactor.d.ts +0 -138
- package/types/app/reactor.d.ts.map +0 -1
- package/types/app/reply-streams.d.ts +0 -20
- package/types/app/reply-streams.d.ts.map +0 -1
- package/types/app/respondant.d.ts +0 -63
- package/types/app/respondant.d.ts.map +0 -1
- package/types/app/runtime-services.d.ts +0 -26
- package/types/app/runtime-services.d.ts.map +0 -1
- package/types/app/runtime-turn.d.ts.map +0 -1
- package/types/app/schema-resolving.d.ts.map +0 -1
- package/types/app/signaling.d.ts.map +0 -1
- package/types/app/socket-source.d.ts.map +0 -1
- package/types/app/stored-replies.d.ts.map +0 -1
- package/types/app/tcp-conversation.d.ts +0 -27
- package/types/app/tcp-conversation.d.ts.map +0 -1
- package/types/app/tcp-egress.d.ts +0 -49
- package/types/app/tcp-egress.d.ts.map +0 -1
- package/types/app/verifier-agent.d.ts +0 -92
- package/types/app/verifier-agent.d.ts.map +0 -1
- package/types/app/verifying.d.ts.map +0 -1
- package/types/app/version.d.ts.map +0 -1
- package/types/app/witnessing.d.ts +0 -223
- package/types/app/witnessing.d.ts.map +0 -1
- package/types/core/eventing.d.ts.map +0 -1
- package/types/core/exchange-proofing.d.ts.map +0 -1
- package/types/core/index.d.ts +0 -24
- package/types/core/index.d.ts.map +0 -1
- package/types/core/kever-decisions.d.ts.map +0 -1
- package/types/core/kever.d.ts.map +0 -1
- package/types/core/kram-auth.d.ts.map +0 -1
- package/types/core/kram-policy.d.ts.map +0 -1
- package/types/core/kram-pruning.d.ts.map +0 -1
- package/types/core/kram-signatures.d.ts.map +0 -1
- package/types/core/kram-staging.d.ts.map +0 -1
- package/types/core/kram-time.d.ts.map +0 -1
- package/types/core/kraming.d.ts.map +0 -1
- package/types/core/mailbox-topics.d.ts.map +0 -1
- package/types/core/protocol-exchanging.d.ts.map +0 -1
- package/types/core/witnesses.d.ts.map +0 -1
- package/types/db/exchange-nests.d.ts +0 -15
- package/types/db/exchange-nests.d.ts.map +0 -1
- package/types/db/exchange-records.d.ts +0 -33
- package/types/db/exchange-records.d.ts.map +0 -1
- package/types/db/kel-replay.d.ts.map +0 -1
- package/types/db/kram-factors.d.ts.map +0 -1
- package/types/db/mailboxing.d.ts.map +0 -1
- package/types/db/payload-archive.d.ts +0 -70
- package/types/db/payload-archive.d.ts.map +0 -1
- package/types/db/payload-store.d.ts +0 -40
- package/types/db/payload-store.d.ts.map +0 -1
- package/types/db/payload-view.d.ts +0 -4
- package/types/db/payload-view.d.ts.map +0 -1
- package/types/db/tel-replay.d.ts.map +0 -1
- package/types/db/verifier-cueing.d.ts +0 -46
- package/types/db/verifier-cueing.d.ts.map +0 -1
- package/types/db/witness-replay.d.ts.map +0 -1
- package/types/vdr/credential-tsn.d.ts +0 -23
- package/types/vdr/credential-tsn.d.ts.map +0 -1
- package/types/vdr/registry-tsn.d.ts +0 -28
- package/types/vdr/registry-tsn.d.ts.map +0 -1
- /package/esm/keri/npm/src/app/{schema-resolving.js → credentials/schema-resolving.js} +0 -0
- /package/esm/keri/npm/src/app/{challenging.js → identity/challenging.js} +0 -0
- /package/esm/keri/npm/src/app/{protocol-host-policy.js → protocol/protocol-host-policy.js} +0 -0
- /package/esm/keri/npm/src/app/{runtime-turn.js → runtime/runtime-turn.js} +0 -0
- /package/esm/keri/npm/src/{app/cli → cli}/common/rendering.js +0 -0
- /package/esm/keri/npm/src/{app/cli → cli/tools}/annotate-color.js +0 -0
- /package/esm/keri/npm/src/core/{witnesses.js → kel/witnesses.js} +0 -0
- /package/esm/keri/npm/src/core/{kram-auth.js → mailbox/kram-auth.js} +0 -0
- /package/esm/keri/npm/src/core/{mailbox-topics.js → mailbox/mailbox-topics.js} +0 -0
- /package/types/app/{signaling.d.ts → notifications/signaling.d.ts} +0 -0
- /package/types/app/{runtime-turn.d.ts → runtime/runtime-turn.d.ts} +0 -0
- /package/types/{app/cli → cli}/common/rendering.d.ts +0 -0
- /package/types/{app/cli → cli/endpoints}/loc.d.ts +0 -0
- /package/types/{app/cli → cli/identity}/aid.d.ts +0 -0
- /package/types/{app/cli → cli/identity}/delegate.d.ts +0 -0
- /package/types/{app/cli → cli/identity}/export.d.ts +0 -0
- /package/types/{app/cli → cli/identity}/list.d.ts +0 -0
- /package/types/{app/cli → cli/messaging}/notifications.d.ts +0 -0
- /package/types/{app/cli → cli}/output.d.ts +0 -0
- /package/types/{app/cli → cli/tools}/annotate-color.d.ts +0 -0
- /package/types/{app/cli → cli/tools}/annotate.d.ts +0 -0
- /package/types/{app/cli → cli/tools}/benchmark.d.ts +0 -0
- /package/types/{app/cli → cli/tools}/db-dump.d.ts +0 -0
- /package/types/{app/cli → cli/tools}/saidify.d.ts +0 -0
- /package/types/{app/cli → cli/tools}/verify.d.ts +0 -0
- /package/types/core/{witnesses.d.ts → kel/witnesses.d.ts} +0 -0
- /package/types/core/{mailbox-topics.d.ts → mailbox/mailbox-topics.d.ts} +0 -0
|
@@ -0,0 +1,720 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Explicit encrypted copies of existing registry roots.
|
|
3
|
+
*
|
|
4
|
+
* `RegistryRoot` replicates held roots to individual members with ESSR `exn`
|
|
5
|
+
* messages, ported from KERIpy `keri.acdc.salting` (kentbull/keripy v2-spec).
|
|
6
|
+
*
|
|
7
|
+
* Local profile, not a KERI, ACDC or #1740 standard. Upstream KERIpy uses ESSR
|
|
8
|
+
* only as the v1 `/essr/req` transport envelope on direct sends.
|
|
9
|
+
* `/registry/root` is the first application-route ESSR payload and the first
|
|
10
|
+
* ESSR carried through a witness mailbox. Its v2 `a` field map `{essr, gid, rd}`
|
|
11
|
+
* carries the payload digest that v1 puts in a string `a`; the Exchanger checks
|
|
12
|
+
* only the v1 form, so this handler verifies it.
|
|
13
|
+
*
|
|
14
|
+
* Copies are store-and-forward: KRAM exempts the route (built-in
|
|
15
|
+
* `KramPolicy` store-and-forward exemption) and the exchange store keys them by
|
|
16
|
+
* SAID. Received copies are accepted automatically, with no approval step: a
|
|
17
|
+
* copy that verifies on arrival is retained at once, and one that cannot yet
|
|
18
|
+
* verify because local KEL, TEL, group or opening evidence is missing waits in a
|
|
19
|
+
* dependency escrow (`Baser.rrpe`, no timeout) that `processEscrows` retries.
|
|
20
|
+
*/
|
|
21
|
+
import { concatBytes, Counter, Dater, Diger, Encrypter, essrChunks, Kinds, LabelDex, makeBlindUuid, MtrDex, ParserError, Prefixer, Saider, Salter, Texter, unblindBlindState, unblindBoundState, Vrsn_2_0, } from "cesr-ts";
|
|
22
|
+
import { groupWitnesserSelection, isLocalGroupHab } from "../app/multisig/group-members.js";
|
|
23
|
+
import { ValidationError } from "../core/errors.js";
|
|
24
|
+
import { exchange } from "../core/protocol-eventing.js";
|
|
25
|
+
import { makeNowIso8601 } from "../time/mod.js";
|
|
26
|
+
import { validateRip, validateUpdate, verifyRegistryAnchor, vetBlind } from "./regeventing.js";
|
|
27
|
+
/** A stored registry-root copy that can never be retained as received. */
|
|
28
|
+
export class RootRefused extends ValidationError {
|
|
29
|
+
}
|
|
30
|
+
/** A stored registry-root copy whose root cannot yet be verified locally. */
|
|
31
|
+
export class RootUnverified extends ValidationError {
|
|
32
|
+
}
|
|
33
|
+
/** A registry-root copy whose authorization needs KEL, TEL or group state not yet local. */
|
|
34
|
+
export class RootDeferred extends RootUnverified {
|
|
35
|
+
}
|
|
36
|
+
const ED25519 = new Set([MtrDex.Ed25519, MtrDex.Ed25519N]);
|
|
37
|
+
const PLAIN_REQUIRED = ["i", "ri", "gid", "rd", "s", "e"];
|
|
38
|
+
const PLAIN_ALLOWED = new Set([...PLAIN_REQUIRED, "td"]);
|
|
39
|
+
/** Parse a canonical primitive; malformed remote text is a ValidationError, never a parser crash. */
|
|
40
|
+
function canonical(value, ctor) {
|
|
41
|
+
if (typeof value !== "string")
|
|
42
|
+
throw new ValidationError("invalid registry root identity");
|
|
43
|
+
try {
|
|
44
|
+
const material = new ctor({ qb64: value });
|
|
45
|
+
if (material.qb64 !== value)
|
|
46
|
+
throw new ValidationError("invalid registry root identity");
|
|
47
|
+
return material;
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
if (error instanceof ParserError || error instanceof RangeError || error instanceof TypeError) {
|
|
51
|
+
throw new ValidationError("invalid registry root identity", { cause: error });
|
|
52
|
+
}
|
|
53
|
+
throw error;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/** Latest member establishment whose first key is in `verfers`, as KERIpy `fetchLatestContribTo`. */
|
|
57
|
+
function contribution(db, member, verfers) {
|
|
58
|
+
const state = db.getKever(member);
|
|
59
|
+
if (!state)
|
|
60
|
+
return null;
|
|
61
|
+
const keys = verfers.map(verfer => verfer.qb64);
|
|
62
|
+
for (const [, sn, said] of db.kels.getOnItemBackIter(member, state.lastEst.s)) {
|
|
63
|
+
if (db.kels.getLast(member, sn) !== said)
|
|
64
|
+
continue;
|
|
65
|
+
const event = db.getEvtSerder(member, said);
|
|
66
|
+
if (!event?.estive)
|
|
67
|
+
continue;
|
|
68
|
+
const index = keys.indexOf(event.verfers[0]?.qb64 ?? "");
|
|
69
|
+
if (index >= 0)
|
|
70
|
+
return { sn, index };
|
|
71
|
+
}
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
/** Qualify one sealed box as a variable-size bytes Texter, as KERIpy `Texter(raw=...)`. */
|
|
75
|
+
function essrTexter(raw) {
|
|
76
|
+
const rem = raw.length % 3;
|
|
77
|
+
return new Texter({ code: rem === 0 ? LabelDex.Bytes_L0 : rem === 1 ? LabelDex.Bytes_L1 : LabelDex.Bytes_L2, raw });
|
|
78
|
+
}
|
|
79
|
+
/** Concatenate ordered ESSR fragments into the sealed box bytes. */
|
|
80
|
+
function essrBytes(essrs) {
|
|
81
|
+
return concatBytes(...(essrs ?? []).map(texter => texter.raw));
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Return one signed v2 `/registry/root` ESSR exchange carrying `root`.
|
|
85
|
+
*
|
|
86
|
+
* The individual `hab` signs a bare `exn` (`x`/`p` empty) whose `a` is
|
|
87
|
+
* `{essr, gid, rd}`: `essr` is the Blake3-256 digest of a libsodium sealed box
|
|
88
|
+
* to `recipient`'s current first signing key. The box holds the JSON field map
|
|
89
|
+
* `{i, ri, gid, rd, s, e[, td]}`: sender, recipient, holder AID, registry,
|
|
90
|
+
* Salt128 root, one accepted BUP SAID and an optional ACDC SAID hint. The box
|
|
91
|
+
* travels as one ESSR payload Texter inside the message's attachment group.
|
|
92
|
+
* Callers apply policy first.
|
|
93
|
+
*/
|
|
94
|
+
export function rootExn(hab, recipient, gid, registry, root, { event, td }) {
|
|
95
|
+
if (!hab.pre || hab.db.getHab(hab.pre)?.mid) {
|
|
96
|
+
throw new ValidationError("registry root copies are signed by an individual habitat");
|
|
97
|
+
}
|
|
98
|
+
if (!(root instanceof Salter) || root.code !== MtrDex.Salt_128) {
|
|
99
|
+
throw new ValidationError("registry root must be a Salt128 primitive");
|
|
100
|
+
}
|
|
101
|
+
const verfer = hab.db.getKever(recipient)?.verfers[0];
|
|
102
|
+
if (!verfer || !ED25519.has(verfer.code)) {
|
|
103
|
+
throw new ValidationError("recipient encryption requires a current Ed25519 key");
|
|
104
|
+
}
|
|
105
|
+
const plain = { i: hab.pre, ri: recipient, gid, rd: registry, s: root.qb64, e: event };
|
|
106
|
+
if (td)
|
|
107
|
+
plain.td = td;
|
|
108
|
+
const sealed = new Encrypter({ verkey: verfer.qb64 }).encrypt({
|
|
109
|
+
ser: new TextEncoder().encode(JSON.stringify(plain)),
|
|
110
|
+
}).raw;
|
|
111
|
+
const texter = essrTexter(sealed);
|
|
112
|
+
const digest = new Diger({ code: MtrDex.Blake3_256, raw: Diger.digest(sealed, MtrDex.Blake3_256) });
|
|
113
|
+
const serder = exchange(RegistryRoot.Route, {
|
|
114
|
+
sender: hab.pre,
|
|
115
|
+
receiver: recipient,
|
|
116
|
+
attributes: { essr: digest.qb64, gid, rd: registry },
|
|
117
|
+
pvrsn: Vrsn_2_0,
|
|
118
|
+
kind: Kinds.json,
|
|
119
|
+
});
|
|
120
|
+
const signed = hab.endorse(serder, { gvrsn: Vrsn_2_0, pipelined: false });
|
|
121
|
+
const atc = concatBytes(signed.slice(serder.raw.length), ...essrChunks([texter], { gvrsn: Vrsn_2_0 }));
|
|
122
|
+
return concatBytes(serder.raw, Counter.enclose({ qb64: atc, code: "AttachmentGroup", version: Vrsn_2_0 }));
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Replicate held registry roots to individual members by ESSR `exn`.
|
|
126
|
+
*
|
|
127
|
+
* Local profile route `/registry/root`; see `rootExn` for the wire.
|
|
128
|
+
* `createAgentRuntime` registers one instance on its Exchanger whenever a v2
|
|
129
|
+
* registry is available (`runtime.registryRoot`), so every runtime that polls
|
|
130
|
+
* the `credential` mailbox retains copies with no extra command. Authorization
|
|
131
|
+
* uses the accepted KEL and TEL only:
|
|
132
|
+
*
|
|
133
|
+
* - recipient `ri`: a local individual habitat that is a current signing member
|
|
134
|
+
* of `gid` (or is `gid`, an individual holder) with a local group habitat for
|
|
135
|
+
* `gid`;
|
|
136
|
+
* - sender `i`: an individual AID, other than the recipient, that is a
|
|
137
|
+
* historical signing member of `gid`, the registry issuer, or a historical
|
|
138
|
+
* signing member of the issuer group;
|
|
139
|
+
* - registry `rd`: an accepted, issuer-anchored registry with a BUP head;
|
|
140
|
+
* - `a.essr`: the Blake3-256 digest of the attached ESSR payload.
|
|
141
|
+
*
|
|
142
|
+
* `verify` refuses, so nothing persists, when the copy can never be retained
|
|
143
|
+
* here: malformed exchange or identifiers, ESSR digest mismatch, `ri` not a
|
|
144
|
+
* local individual habitat, `i == ri`, `gid` a local habitat that is not this
|
|
145
|
+
* member's group, a non-Ed25519 recipient key, or a membership or
|
|
146
|
+
* sender-authority failure against complete local state. A SAID already
|
|
147
|
+
* stored is ignored while its root is retained or the copy is still escrowed,
|
|
148
|
+
* so duplicate deliveries are idempotent; an identical resend of a stored copy
|
|
149
|
+
* that is neither escrows it again.
|
|
150
|
+
*
|
|
151
|
+
* Acceptance is automatic. `handle` escrows the stored copy (exchange store plus
|
|
152
|
+
* an `rrpe` entry) and immediately tries to retain it: full authorization,
|
|
153
|
+
* decryption, plaintext binding and root verification against a held opening or
|
|
154
|
+
* by reproducing the BUP `b` commitment. On success the root is retained and the
|
|
155
|
+
* escrow entry removed; a newly retained root adds one informational Notifier
|
|
156
|
+
* note. A copy not yet verifiable (missing registry TEL, sender, recipient or
|
|
157
|
+
* holder key state, local group habitat, an unaccepted rotation that adds the
|
|
158
|
+
* recipient, missing opening evidence or a locked Keeper) stays escrowed and
|
|
159
|
+
* `processEscrows` retries it, which the Exchanger drives from its own
|
|
160
|
+
* `processEscrows`. Like the v2 TEL dependency escrows it has no wall-clock
|
|
161
|
+
* timeout: it stays escrowed until retained or refused, so a newcomer that
|
|
162
|
+
* acquires the missing state much later still retains it. A copy refused on any attempt
|
|
163
|
+
* (plaintext mismatch, undecryptable, membership lost, or a different root
|
|
164
|
+
* already retained, which is never replaced) is dropped from escrow; the signed
|
|
165
|
+
* exchange stays in `exns`. `receive` is a manual retry that can supply a BUP or
|
|
166
|
+
* opening. `reconcile`, run on construction, adopts copies an Exchanger without
|
|
167
|
+
* this handler stored earlier.
|
|
168
|
+
*
|
|
169
|
+
* TypeScript divergences: `verify` runs inside the Exchanger's synchronous LMDB
|
|
170
|
+
* writer, so it only reads stores; `handle` escrows and attempts after commit.
|
|
171
|
+
* A locked Keeper is a `RootUnverified` here (KERIpy raises `AuthError`), so it
|
|
172
|
+
* keeps the copy escrowed rather than refusing it.
|
|
173
|
+
*/
|
|
174
|
+
export class RegistryRoot {
|
|
175
|
+
constructor(hby, rgy, notifier = null) {
|
|
176
|
+
Object.defineProperty(this, "resource", {
|
|
177
|
+
enumerable: true,
|
|
178
|
+
configurable: true,
|
|
179
|
+
writable: true,
|
|
180
|
+
value: RegistryRoot.Route
|
|
181
|
+
});
|
|
182
|
+
Object.defineProperty(this, "protocolMajor", {
|
|
183
|
+
enumerable: true,
|
|
184
|
+
configurable: true,
|
|
185
|
+
writable: true,
|
|
186
|
+
value: 2
|
|
187
|
+
});
|
|
188
|
+
Object.defineProperty(this, "hby", {
|
|
189
|
+
enumerable: true,
|
|
190
|
+
configurable: true,
|
|
191
|
+
writable: true,
|
|
192
|
+
value: void 0
|
|
193
|
+
});
|
|
194
|
+
Object.defineProperty(this, "rgy", {
|
|
195
|
+
enumerable: true,
|
|
196
|
+
configurable: true,
|
|
197
|
+
writable: true,
|
|
198
|
+
value: void 0
|
|
199
|
+
});
|
|
200
|
+
Object.defineProperty(this, "notifier", {
|
|
201
|
+
enumerable: true,
|
|
202
|
+
configurable: true,
|
|
203
|
+
writable: true,
|
|
204
|
+
value: void 0
|
|
205
|
+
});
|
|
206
|
+
if (rgy.hby !== hby)
|
|
207
|
+
throw new ValidationError("registry root replication requires the Habery's registry owner");
|
|
208
|
+
this.hby = hby;
|
|
209
|
+
this.rgy = rgy;
|
|
210
|
+
this.notifier = notifier;
|
|
211
|
+
if (!hby.readonly)
|
|
212
|
+
this.reconcile();
|
|
213
|
+
}
|
|
214
|
+
// policy
|
|
215
|
+
/** True when `member` contributed to any accepted establishment of `group`. */
|
|
216
|
+
historical(member, group) {
|
|
217
|
+
const db = this.hby.db, gkever = db.getKever(group);
|
|
218
|
+
if (!db.getKever(member) || !gkever)
|
|
219
|
+
return false;
|
|
220
|
+
for (const [, sn, said] of db.kels.getOnItemBackIter(group, gkever.sn)) {
|
|
221
|
+
if (db.kels.getLast(group, sn) !== said)
|
|
222
|
+
continue;
|
|
223
|
+
const event = db.getEvtSerder(group, said);
|
|
224
|
+
if (event?.estive && contribution(db, member, event.verfers))
|
|
225
|
+
return true;
|
|
226
|
+
}
|
|
227
|
+
return false;
|
|
228
|
+
}
|
|
229
|
+
/** True when `member`'s latest contributing key is in `group`'s current keys. */
|
|
230
|
+
current(member, group) {
|
|
231
|
+
const gkever = this.hby.db.getKever(group);
|
|
232
|
+
return !!gkever && !!this.hby.db.getKever(member) && !!contribution(this.hby.db, member, gkever.verfers);
|
|
233
|
+
}
|
|
234
|
+
/** True when `group`'s latest next-key digests commit to `member`'s current key (an unaccepted rotation). */
|
|
235
|
+
prospective(member, group) {
|
|
236
|
+
const mkever = this.hby.db.getKever(member), gkever = this.hby.db.getKever(group);
|
|
237
|
+
return gkever.ndigers.some(diger => mkever.verfers.some(verfer => diger.verify(verfer.qb64b)));
|
|
238
|
+
}
|
|
239
|
+
/** Return the accepted, issuer-anchored `rip`; RootDeferred when not yet accepted locally. */
|
|
240
|
+
registry(registry) {
|
|
241
|
+
const store = this.rgy.store, rip = store.seqEvent(registry, 0), head = store.headEvent(registry);
|
|
242
|
+
const inception = rip && validateRip(rip);
|
|
243
|
+
if (!rip || rip.said !== registry || inception?.kind !== "valid" || !head || head.ilk !== "bup") {
|
|
244
|
+
throw new RootDeferred("registry is not yet accepted locally with a registry update");
|
|
245
|
+
}
|
|
246
|
+
const anchor = store.anchor(rip.said);
|
|
247
|
+
if (!verifyRegistryAnchor(inception.event, {
|
|
248
|
+
db: this.hby.db,
|
|
249
|
+
issuer: rip.issuer,
|
|
250
|
+
number: anchor?.[0],
|
|
251
|
+
diger: anchor?.[1],
|
|
252
|
+
})) {
|
|
253
|
+
throw new RootDeferred("registry is not yet anchored in the local issuer KEL");
|
|
254
|
+
}
|
|
255
|
+
return rip;
|
|
256
|
+
}
|
|
257
|
+
/** Raise ValidationError for malformed or self-addressed copy identities. */
|
|
258
|
+
static identities(sender, recipient, gid, registry) {
|
|
259
|
+
for (const aid of [sender, recipient, gid])
|
|
260
|
+
canonical(aid, Prefixer);
|
|
261
|
+
canonical(registry, Saider);
|
|
262
|
+
if (sender === recipient)
|
|
263
|
+
throw new ValidationError("registry root sender and recipient must differ");
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Raise ValidationError unless this KEL/TEL state authorizes the copy.
|
|
267
|
+
* RootDeferred (a RootUnverified) means only local state is missing: sender,
|
|
268
|
+
* recipient or holder key state, an unaccepted group rotation that adds the
|
|
269
|
+
* recipient, or the registry TEL.
|
|
270
|
+
*/
|
|
271
|
+
authorize(sender, recipient, gid, registry) {
|
|
272
|
+
RegistryRoot.identities(sender, recipient, gid, registry);
|
|
273
|
+
const db = this.hby.db;
|
|
274
|
+
const missing = [sender, recipient, gid].filter((aid, index, all) => all.indexOf(aid) === index)
|
|
275
|
+
.filter(aid => !db.getKever(aid));
|
|
276
|
+
if (missing.length)
|
|
277
|
+
throw new RootDeferred(`key state is not yet local for ${missing.join(", ")}`);
|
|
278
|
+
if (!ED25519.has(db.getKever(recipient).verfers[0]?.code ?? "")) {
|
|
279
|
+
throw new ValidationError("recipient encryption requires a current Ed25519 key");
|
|
280
|
+
}
|
|
281
|
+
if (recipient !== gid && !this.current(recipient, gid)) {
|
|
282
|
+
if (this.prospective(recipient, gid)) {
|
|
283
|
+
throw new RootDeferred("the holder rotation that adds the recipient is not yet accepted");
|
|
284
|
+
}
|
|
285
|
+
throw new ValidationError("recipient is not a current signing member of the holder");
|
|
286
|
+
}
|
|
287
|
+
const rip = this.registry(registry), issuer = rip.issuer;
|
|
288
|
+
if (!(this.historical(sender, gid) || sender === issuer || this.historical(sender, issuer))) {
|
|
289
|
+
throw new ValidationError("sender is not a historical holder member or registry issuer");
|
|
290
|
+
}
|
|
291
|
+
return rip;
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Return current signing member AIDs added by one accepted group rotation.
|
|
295
|
+
*
|
|
296
|
+
* Members, not keys, are compared: a continuing member usually rotates its
|
|
297
|
+
* own key, so it contributes to both establishments. Candidates are the AIDs
|
|
298
|
+
* with accepted key state in this Habery.
|
|
299
|
+
*/
|
|
300
|
+
newcomers(ghab, rotation) {
|
|
301
|
+
const db = this.hby.db, pre = ghab.pre;
|
|
302
|
+
if (!pre || ghab.db !== db || !isLocalGroupHab(this.hby, ghab)) {
|
|
303
|
+
throw new ValidationError("newcomers require a local group habitat");
|
|
304
|
+
}
|
|
305
|
+
const event = db.getEvtSerder(pre, rotation);
|
|
306
|
+
if (!event || !["rot", "drt"].includes(event.ilk) || db.kels.getLast(pre, event.sn) !== rotation) {
|
|
307
|
+
throw new ValidationError("newcomers require an accepted group rotation");
|
|
308
|
+
}
|
|
309
|
+
let prior = null;
|
|
310
|
+
for (const [, sn, said] of db.kels.getOnItemBackIter(pre, event.sn - 1)) {
|
|
311
|
+
if (db.kels.getLast(pre, sn) !== said)
|
|
312
|
+
continue;
|
|
313
|
+
const candidate = db.getEvtSerder(pre, said);
|
|
314
|
+
if (candidate?.estive) {
|
|
315
|
+
prior = candidate;
|
|
316
|
+
break;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
if (!prior)
|
|
320
|
+
throw new ValidationError("rotation has no accepted prior establishment");
|
|
321
|
+
const found = [];
|
|
322
|
+
for (const [keys] of db.states.getTopItemIter()) {
|
|
323
|
+
const aid = keys.join(".");
|
|
324
|
+
if (aid === pre || !db.getKever(aid))
|
|
325
|
+
continue;
|
|
326
|
+
const added = contribution(db, aid, event.verfers);
|
|
327
|
+
if (added && !contribution(db, aid, prior.verfers) && this.current(aid, pre))
|
|
328
|
+
found.push([added.index, aid]);
|
|
329
|
+
}
|
|
330
|
+
return found.sort((left, right) => left[0] - right[0]).map(([, aid]) => aid);
|
|
331
|
+
}
|
|
332
|
+
/** Return the current signing member AIDs of `gid` known to this Habery. */
|
|
333
|
+
members(gid) {
|
|
334
|
+
const db = this.hby.db, gkever = db.getKever(gid), found = [];
|
|
335
|
+
if (!gkever)
|
|
336
|
+
return [];
|
|
337
|
+
for (const [keys] of db.states.getTopItemIter()) {
|
|
338
|
+
const aid = keys.join(".");
|
|
339
|
+
const contributed = aid === gid ? null : contribution(db, aid, gkever.verfers);
|
|
340
|
+
if (contributed)
|
|
341
|
+
found.push([contributed.index, aid]);
|
|
342
|
+
}
|
|
343
|
+
return found.sort((left, right) => left[0] - right[0]).map(([, aid]) => aid);
|
|
344
|
+
}
|
|
345
|
+
/** Return the registry SAIDs with a root retained locally for `gid`. */
|
|
346
|
+
held(gid) {
|
|
347
|
+
const found = [];
|
|
348
|
+
for (const [keys] of this.hby.mgr.ks.rroots.getTopItemIter()) {
|
|
349
|
+
if (keys[0] === gid && keys.length === 2)
|
|
350
|
+
found.push(keys[1]);
|
|
351
|
+
}
|
|
352
|
+
return found.sort();
|
|
353
|
+
}
|
|
354
|
+
/** True when `ghab`'s local member is the elected sender for `rotation`. */
|
|
355
|
+
witnesser(ghab, rotation) {
|
|
356
|
+
const db = this.hby.db, event = ghab.pre ? db.getEvtSerder(ghab.pre, rotation) : null;
|
|
357
|
+
if (!event)
|
|
358
|
+
return false;
|
|
359
|
+
const selection = groupWitnesserSelection(db, ghab.pre, { sn: event.sn, said: rotation });
|
|
360
|
+
const member = db.getHab(ghab.pre)?.mid;
|
|
361
|
+
if (!selection || !member)
|
|
362
|
+
return false;
|
|
363
|
+
return contribution(db, member, selection.establishment.verfers)?.index === selection.index;
|
|
364
|
+
}
|
|
365
|
+
// sending
|
|
366
|
+
/**
|
|
367
|
+
* Return one authorized copy of a root held locally for `gid` or the issuer.
|
|
368
|
+
* `hab` is the local individual sender. `event` defaults to the registry's
|
|
369
|
+
* accepted BUP head.
|
|
370
|
+
*/
|
|
371
|
+
prepare(hab, recipient, gid, registry, { event, td } = {}) {
|
|
372
|
+
const rip = this.authorize(hab.pre, recipient, gid, registry);
|
|
373
|
+
let root = null;
|
|
374
|
+
for (const holder of [gid, rip.issuer]) {
|
|
375
|
+
if (this.hby.habs.has(holder)) {
|
|
376
|
+
root = this.hby.mgr.getRegistryRoot(holder, registry);
|
|
377
|
+
if (root)
|
|
378
|
+
break;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
if (!root)
|
|
382
|
+
throw new ValidationError("no local root is held for this registry");
|
|
383
|
+
const [bup] = this.event(registry, event ?? this.rgy.store.headEvent(registry).said, rip);
|
|
384
|
+
return rootExn(hab, recipient, gid, registry, root, { event: bup.said, td });
|
|
385
|
+
}
|
|
386
|
+
// receiving
|
|
387
|
+
/** Recheck exact accepted BUP membership and issuer anchoring; return the BUP and its ordinal. */
|
|
388
|
+
event(registry, said, rip) {
|
|
389
|
+
const store = this.rgy.store, body = store.event(said);
|
|
390
|
+
const update = body && validateUpdate(body, registry);
|
|
391
|
+
if (!body || body.said !== said || update?.kind !== "valid" || update.event.sn > BigInt(Number.MAX_SAFE_INTEGER)) {
|
|
392
|
+
throw new RootUnverified("root verification requires an accepted registry BUP");
|
|
393
|
+
}
|
|
394
|
+
if (store.seqSaider(registry, Number(update.event.sn))?.qb64 !== said) {
|
|
395
|
+
throw new RootUnverified("root verification BUP is not accepted");
|
|
396
|
+
}
|
|
397
|
+
const inception = rip ?? store.seqEvent(registry, 0), anchor = store.anchor(said);
|
|
398
|
+
if (!inception || !verifyRegistryAnchor(update.event, {
|
|
399
|
+
db: this.hby.db,
|
|
400
|
+
issuer: inception.issuer,
|
|
401
|
+
number: anchor?.[0],
|
|
402
|
+
diger: anchor?.[1],
|
|
403
|
+
})) {
|
|
404
|
+
throw new RootUnverified("root verification BUP lacks accepted issuer anchoring");
|
|
405
|
+
}
|
|
406
|
+
return [body, update.event.sn];
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Check the outer exchange and authorize it; return [recipient hab, gid, rd].
|
|
410
|
+
* Raises ValidationError for a copy that can never be retained here and
|
|
411
|
+
* RootDeferred when only local KEL, TEL or group state is missing.
|
|
412
|
+
*/
|
|
413
|
+
scope(serder, essr) {
|
|
414
|
+
const sad = serder.sad ?? {}, data = sad.a;
|
|
415
|
+
if (serder.pvrsn.major !== 2 || serder.pvrsn.minor !== 0 || serder.ilk !== "exn" || sad.r !== RegistryRoot.Route
|
|
416
|
+
|| sad.x || sad.p || (sad.q && (typeof sad.q !== "object" || Object.keys(sad.q).length))
|
|
417
|
+
|| !data || typeof data !== "object" || Array.isArray(data)
|
|
418
|
+
|| Object.keys(data).sort().join() !== "essr,gid,rd"
|
|
419
|
+
|| Object.values(data).some(value => typeof value !== "string")) {
|
|
420
|
+
throw new ValidationError("invalid registry root exchange");
|
|
421
|
+
}
|
|
422
|
+
const { essr: commitment, gid, rd: registry } = data;
|
|
423
|
+
const recipient = sad.ri;
|
|
424
|
+
const hab = typeof recipient === "string" ? this.hby.habs.get(recipient) : undefined;
|
|
425
|
+
if (!hab || isLocalGroupHab(this.hby, hab)) {
|
|
426
|
+
throw new ValidationError("registry root recipient is not a local individual habitat");
|
|
427
|
+
}
|
|
428
|
+
const holder = this.hby.habs.get(gid);
|
|
429
|
+
if (gid !== recipient && holder && this.hby.db.getHab(gid)?.mid !== recipient) {
|
|
430
|
+
throw new ValidationError("registry root holder is not this member's local group");
|
|
431
|
+
}
|
|
432
|
+
if (!essr.length)
|
|
433
|
+
throw new ValidationError("registry root exchange requires an ESSR payload");
|
|
434
|
+
if (!RegistryRoot.essrMatches(commitment, essr)) {
|
|
435
|
+
throw new ValidationError("ESSR payload does not match its digest");
|
|
436
|
+
}
|
|
437
|
+
if (gid !== recipient && !holder) {
|
|
438
|
+
RegistryRoot.identities(serder.pre, recipient, gid, registry);
|
|
439
|
+
throw new RootDeferred("the holder group habitat is not yet local");
|
|
440
|
+
}
|
|
441
|
+
this.authorize(serder.pre, recipient, gid, registry);
|
|
442
|
+
return [hab, gid, registry];
|
|
443
|
+
}
|
|
444
|
+
/** True when `commitment` is the canonical Blake3-256 digest of the sealed box. */
|
|
445
|
+
static essrMatches(commitment, essr) {
|
|
446
|
+
let digest;
|
|
447
|
+
try {
|
|
448
|
+
digest = canonical(commitment, Diger);
|
|
449
|
+
}
|
|
450
|
+
catch (error) {
|
|
451
|
+
if (error instanceof ValidationError)
|
|
452
|
+
return false;
|
|
453
|
+
throw error;
|
|
454
|
+
}
|
|
455
|
+
return digest.code === MtrDex.Blake3_256 && digest.verify(essr);
|
|
456
|
+
}
|
|
457
|
+
/**
|
|
458
|
+
* Store authorized or deferred copies once; refuse the rest; never decrypt here.
|
|
459
|
+
*
|
|
460
|
+
* A stored SAID is ignored while it is escrowed or its holder already retains
|
|
461
|
+
* a root for that registry. Otherwise an identical resend falls through and
|
|
462
|
+
* `handle` escrows it again.
|
|
463
|
+
*/
|
|
464
|
+
verify(args) {
|
|
465
|
+
const said = args.serder.said;
|
|
466
|
+
if (this.hby.db.exns.get([said]) && (this.hby.db.rrpe.get([said]) || this.retains(args.serder)))
|
|
467
|
+
return false;
|
|
468
|
+
try {
|
|
469
|
+
this.scope(args.serder, essrBytes(args.essrs));
|
|
470
|
+
}
|
|
471
|
+
catch (error) {
|
|
472
|
+
if (error instanceof RootDeferred)
|
|
473
|
+
return true;
|
|
474
|
+
if (error instanceof ValidationError)
|
|
475
|
+
return false;
|
|
476
|
+
throw error;
|
|
477
|
+
}
|
|
478
|
+
return true;
|
|
479
|
+
}
|
|
480
|
+
/** True when the copy's holder already retains a root for its registry; never decrypts. */
|
|
481
|
+
retains(serder) {
|
|
482
|
+
const data = serder.sad?.a;
|
|
483
|
+
if (!data || typeof data !== "object" || Array.isArray(data))
|
|
484
|
+
return false;
|
|
485
|
+
const { gid, rd } = data;
|
|
486
|
+
return typeof gid === "string" && typeof rd === "string" && !!this.hby.mgr.ks.rroots.get([gid, rd]);
|
|
487
|
+
}
|
|
488
|
+
/** Escrow the stored copy and retain its root now when it verifies. */
|
|
489
|
+
handle(args) {
|
|
490
|
+
const said = args.serder.said;
|
|
491
|
+
this.hby.db.rrpe.put([said], new Dater({ dts: makeNowIso8601() }));
|
|
492
|
+
this.attempt(said);
|
|
493
|
+
}
|
|
494
|
+
stored(said) {
|
|
495
|
+
const serder = this.hby.db.exns.get([said]);
|
|
496
|
+
if (!serder || serder.route !== RegistryRoot.Route)
|
|
497
|
+
throw new ValidationError("no stored registry root copy");
|
|
498
|
+
return [serder, essrBytes(this.hby.db.getEssrs(said))];
|
|
499
|
+
}
|
|
500
|
+
/** Return [gid, rd, root, plaintext] after decrypting and binding the box. */
|
|
501
|
+
open(serder, essr) {
|
|
502
|
+
const [hab, gid, registry] = this.scope(serder, essr);
|
|
503
|
+
try {
|
|
504
|
+
hab.mgr.requireRegistryRootAccess();
|
|
505
|
+
}
|
|
506
|
+
catch (error) {
|
|
507
|
+
if (error instanceof ValidationError)
|
|
508
|
+
throw new RootUnverified(error.message, { cause: error });
|
|
509
|
+
throw error;
|
|
510
|
+
}
|
|
511
|
+
let plain;
|
|
512
|
+
try {
|
|
513
|
+
const opened = hab.mgr.open(essr, hab.kever.verfers[0]);
|
|
514
|
+
if (!opened)
|
|
515
|
+
throw new Error("unopened");
|
|
516
|
+
plain = JSON.parse(new TextDecoder().decode(opened));
|
|
517
|
+
}
|
|
518
|
+
catch {
|
|
519
|
+
throw new RootRefused("registry root cannot be decrypted with the current recipient key; resend needed");
|
|
520
|
+
}
|
|
521
|
+
const fields = plain && typeof plain === "object" && !Array.isArray(plain)
|
|
522
|
+
? plain
|
|
523
|
+
: null;
|
|
524
|
+
if (!fields || PLAIN_REQUIRED.some(key => !(key in fields))
|
|
525
|
+
|| Object.keys(fields).some(key => !PLAIN_ALLOWED.has(key))
|
|
526
|
+
|| Object.values(fields).some(value => typeof value !== "string")
|
|
527
|
+
|| fields.i !== serder.pre || fields.ri !== hab.pre || fields.gid !== gid || fields.rd !== registry) {
|
|
528
|
+
throw new RootRefused("registry root plaintext does not match its exchange");
|
|
529
|
+
}
|
|
530
|
+
let root;
|
|
531
|
+
try {
|
|
532
|
+
root = canonical(fields.s, Salter);
|
|
533
|
+
}
|
|
534
|
+
catch {
|
|
535
|
+
throw new RootRefused("registry root is not a canonical Salt128");
|
|
536
|
+
}
|
|
537
|
+
if (root.code !== MtrDex.Salt_128)
|
|
538
|
+
throw new RootRefused("registry root is not a canonical Salt128");
|
|
539
|
+
return [gid, registry, root, fields];
|
|
540
|
+
}
|
|
541
|
+
/**
|
|
542
|
+
* Verify one stored copy and retain its root; return true when newly retained.
|
|
543
|
+
*
|
|
544
|
+
* Throws RootUnverified (or its RootDeferred) while the copy may still verify
|
|
545
|
+
* later, and RootRefused or another ValidationError when it never can be
|
|
546
|
+
* retained here.
|
|
547
|
+
*/
|
|
548
|
+
accept(said, { event, opening } = {}) {
|
|
549
|
+
const [serder, essr] = this.stored(said);
|
|
550
|
+
let opened;
|
|
551
|
+
try {
|
|
552
|
+
opened = this.open(serder, essr);
|
|
553
|
+
}
|
|
554
|
+
catch (error) {
|
|
555
|
+
if (error instanceof RootDeferred) {
|
|
556
|
+
throw new RootDeferred(`registry root copy is not yet verifiable: ${error.message}; it stays pending until that state is local`);
|
|
557
|
+
}
|
|
558
|
+
throw error;
|
|
559
|
+
}
|
|
560
|
+
const [gid, registry, root, plain] = opened;
|
|
561
|
+
// A retained root is immutable, so a copy carrying a different root can
|
|
562
|
+
// never be retained here: refuse it before awaiting verification evidence.
|
|
563
|
+
const retained = this.hby.mgr.getRegistryRoot(gid, registry);
|
|
564
|
+
if (retained && retained.qb64 !== root.qb64) {
|
|
565
|
+
throw new RootRefused("a different root is already retained for this holder and registry");
|
|
566
|
+
}
|
|
567
|
+
const [bup, sn] = this.event(registry, event ?? plain.e);
|
|
568
|
+
const blid = bup.sad.b;
|
|
569
|
+
const uuid = makeBlindUuid({ salt: root.qb64, sn });
|
|
570
|
+
const held = opening ?? this.rgy.store.publicOpening(bup.said);
|
|
571
|
+
if (held) {
|
|
572
|
+
if (!vetBlind(held, blid))
|
|
573
|
+
throw new ValidationError("held opening does not match the registry commitment");
|
|
574
|
+
if (held.u.qb64 !== uuid.qb64)
|
|
575
|
+
throw new RootUnverified("root does not reproduce the held opening");
|
|
576
|
+
}
|
|
577
|
+
else if (!this.reproduces(blid, uuid.qb64, plain.td ?? "", gid)) {
|
|
578
|
+
throw new RootUnverified("root does not yet reproduce the registry commitment");
|
|
579
|
+
}
|
|
580
|
+
const added = this.hby.mgr.putRegistryRoot(gid, registry, root);
|
|
581
|
+
this.hby.db.rrpe.rem([said]);
|
|
582
|
+
if (added && this.notifier) {
|
|
583
|
+
this.notifier.add({
|
|
584
|
+
r: RegistryRoot.Note,
|
|
585
|
+
d: said,
|
|
586
|
+
i: serder.pre,
|
|
587
|
+
ri: serder.sad.ri,
|
|
588
|
+
gid,
|
|
589
|
+
rd: registry,
|
|
590
|
+
});
|
|
591
|
+
}
|
|
592
|
+
return added;
|
|
593
|
+
}
|
|
594
|
+
/** Try one escrowed copy: true retained, null still pending, false dropped. */
|
|
595
|
+
attempt(said) {
|
|
596
|
+
try {
|
|
597
|
+
this.accept(said);
|
|
598
|
+
}
|
|
599
|
+
catch (error) {
|
|
600
|
+
if (error instanceof RootUnverified)
|
|
601
|
+
return null;
|
|
602
|
+
if (error instanceof ValidationError) {
|
|
603
|
+
this.hby.db.rrpe.rem([said]);
|
|
604
|
+
return false;
|
|
605
|
+
}
|
|
606
|
+
throw error;
|
|
607
|
+
}
|
|
608
|
+
return true;
|
|
609
|
+
}
|
|
610
|
+
/**
|
|
611
|
+
* Retry every escrowed copy; drop refused ones. The Exchanger
|
|
612
|
+
* calls this from its own `processEscrows` when this handler is registered,
|
|
613
|
+
* so ordinary escrow loops drive it.
|
|
614
|
+
*/
|
|
615
|
+
processEscrows() {
|
|
616
|
+
for (const [keys] of [...this.hby.db.rrpe.getTopItemIter()])
|
|
617
|
+
this.attempt(keys.join("."));
|
|
618
|
+
}
|
|
619
|
+
/**
|
|
620
|
+
* Adopt stored copies that never reached this handler's escrow.
|
|
621
|
+
*
|
|
622
|
+
* An Exchanger without this route registered still authenticates and stores
|
|
623
|
+
* a `/registry/root` copy in `exns` and `essrs`, but nothing escrows or
|
|
624
|
+
* retries it. Scan the ESSR-bearing exchanges for stored copies addressed to
|
|
625
|
+
* a local individual habitat that are neither escrowed nor already retained
|
|
626
|
+
* for their `(gid, rd)`, escrow each and attempt it like a fresh arrival.
|
|
627
|
+
* Every attempt re-runs full authorization against current local state; a
|
|
628
|
+
* locked or unencrypted Keeper leaves the copy escrowed. Returns the SAIDs
|
|
629
|
+
* newly escrowed.
|
|
630
|
+
*/
|
|
631
|
+
reconcile() {
|
|
632
|
+
const db = this.hby.db, adopted = [];
|
|
633
|
+
const saids = new Set([...db.essrs.getTopItemIter()].map(([keys]) => keys.join(".")));
|
|
634
|
+
for (const said of saids) {
|
|
635
|
+
const serder = db.exns.get([said]);
|
|
636
|
+
if (serder?.route !== RegistryRoot.Route || db.rrpe.get([said]) || this.retains(serder))
|
|
637
|
+
continue;
|
|
638
|
+
const recipient = serder.sad?.ri;
|
|
639
|
+
const hab = typeof recipient === "string" ? this.hby.habs.get(recipient) : undefined;
|
|
640
|
+
if (!hab || isLocalGroupHab(this.hby, hab))
|
|
641
|
+
continue;
|
|
642
|
+
db.rrpe.put([said], new Dater({ dts: makeNowIso8601() }));
|
|
643
|
+
adopted.push(said);
|
|
644
|
+
this.attempt(said);
|
|
645
|
+
}
|
|
646
|
+
return adopted;
|
|
647
|
+
}
|
|
648
|
+
/**
|
|
649
|
+
* Manually retry one stored copy with an optional BUP and held opening.
|
|
650
|
+
*
|
|
651
|
+
* Retention is automatic; use this only to supply evidence the copy lacks:
|
|
652
|
+
* `event` overrides the sender's BUP hint and `opening` is a held opening for
|
|
653
|
+
* that BUP. Without one, a held public opening in the registry store is used,
|
|
654
|
+
* else the BUP `b` commitment is reproduced from `(uuid, td, ts)` using the
|
|
655
|
+
* sender's `td` hint. Returns true on retention. RootRefused marks a copy that
|
|
656
|
+
* can never be retained and drops it from escrow; RootUnverified leaves it as
|
|
657
|
+
* it was; its RootDeferred subclass names the local state still missing.
|
|
658
|
+
*/
|
|
659
|
+
receive(said, { event, opening } = {}) {
|
|
660
|
+
try {
|
|
661
|
+
this.accept(said, { event, opening });
|
|
662
|
+
}
|
|
663
|
+
catch (error) {
|
|
664
|
+
if (error instanceof ValidationError && !(error instanceof RootUnverified))
|
|
665
|
+
this.hby.db.rrpe.rem([said]);
|
|
666
|
+
throw error;
|
|
667
|
+
}
|
|
668
|
+
return true;
|
|
669
|
+
}
|
|
670
|
+
reproduces(blid, uuid, td, gid) {
|
|
671
|
+
const states = [...RegistryRoot.States];
|
|
672
|
+
if (unblindBlindState({ said: blid, uuid, acdc: td, states }))
|
|
673
|
+
return true;
|
|
674
|
+
const db = this.hby.db, kever = db.getKever(gid), bounds = [];
|
|
675
|
+
for (let sn = 0; kever && sn <= kever.sn; sn++) {
|
|
676
|
+
const dig = db.kels.getLast(gid, sn);
|
|
677
|
+
if (dig)
|
|
678
|
+
bounds.push([sn, dig]);
|
|
679
|
+
}
|
|
680
|
+
return unblindBoundState({ said: blid, uuid, acdc: td, states, bounds }) !== null;
|
|
681
|
+
}
|
|
682
|
+
/** List escrowed copies awaiting automatic retention, without decrypting. */
|
|
683
|
+
pending() {
|
|
684
|
+
const items = [];
|
|
685
|
+
for (const [keys, escrowed] of this.hby.db.rrpe.getTopItemIter()) {
|
|
686
|
+
const said = keys.join("."), serder = this.hby.db.exns.get([said]);
|
|
687
|
+
if (!serder)
|
|
688
|
+
continue;
|
|
689
|
+
const data = (serder.sad?.a ?? {});
|
|
690
|
+
items.push({
|
|
691
|
+
said,
|
|
692
|
+
sender: serder.pre,
|
|
693
|
+
recipient: serder.sad?.ri,
|
|
694
|
+
gid: data.gid,
|
|
695
|
+
registry: data.rd,
|
|
696
|
+
dt: serder.sad?.dt,
|
|
697
|
+
escrowed: escrowed.dts,
|
|
698
|
+
});
|
|
699
|
+
}
|
|
700
|
+
return items;
|
|
701
|
+
}
|
|
702
|
+
}
|
|
703
|
+
Object.defineProperty(RegistryRoot, "Route", {
|
|
704
|
+
enumerable: true,
|
|
705
|
+
configurable: true,
|
|
706
|
+
writable: true,
|
|
707
|
+
value: "/registry/root"
|
|
708
|
+
});
|
|
709
|
+
Object.defineProperty(RegistryRoot, "Note", {
|
|
710
|
+
enumerable: true,
|
|
711
|
+
configurable: true,
|
|
712
|
+
writable: true,
|
|
713
|
+
value: "/exn/registry/root"
|
|
714
|
+
});
|
|
715
|
+
Object.defineProperty(RegistryRoot, "States", {
|
|
716
|
+
enumerable: true,
|
|
717
|
+
configurable: true,
|
|
718
|
+
writable: true,
|
|
719
|
+
value: ["issued", "revoked"]
|
|
720
|
+
});
|