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
|
@@ -6,25 +6,37 @@
|
|
|
6
6
|
* own group key-event counseling; local group habitat state still lives under
|
|
7
7
|
* `Habery.makeGroupHab(...)`, `Baser.habs`, and the keeper member stores.
|
|
8
8
|
*/
|
|
9
|
-
import { collectPayload, concatBytes, Counter, nestedPayload, parse, parseBytes, parsePather, Prefixer, Saider, Serder, SerderKERI, Vrsn_1_0, Vrsn_2_0, } from "cesr-ts";
|
|
9
|
+
import { collectPayload, concatBytes, Counter, nestedPayload, parse, parseBytes, parsePather, Prefixer, Saider, Serder, SerderACDC, SerderKERI, Vrsn_1_0, Vrsn_2_0, } from "cesr-ts";
|
|
10
10
|
import { call, ensure } from "effection";
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
11
|
+
import { validateRip, validateUpdate } from "../../acdc/regeventing.js";
|
|
12
|
+
import { ValidationError } from "../../core/errors.js";
|
|
13
|
+
import { exchange, isIpexVerb, isV2RegistryRoute, multisigChildField, nestedIpexRoute, nestedMultisigIlks, } from "../../core/exchange/protocol-exchanging.js";
|
|
14
|
+
import { Kevery } from "../../core/kel/eventing.js";
|
|
15
|
+
import { BasicReplyRouteHandler, Revery, Router } from "../../core/routing.js";
|
|
16
|
+
import { Exchanger } from "../exchanges/exchanging.js";
|
|
17
|
+
import { IpexV2Handler } from "../ipex/ipex-v2.js";
|
|
18
|
+
import { dispatchEnvelope, envelopeFromFrame } from "../protocol/parsering.js";
|
|
19
|
+
import { abortable, rethrowCleanupFailure } from "../runtime/abortable.js";
|
|
20
|
+
import { groupSigningMembers, localIpexContribution } from "./group-members.js";
|
|
21
|
+
import { multisigEmbeddedSection, multisigPayloadSaid } from "./multisig-messaging.js";
|
|
17
22
|
/** KERIpy multisig route constants. */
|
|
18
23
|
export const MULTISIG_ICP_ROUTE = "/multisig/icp";
|
|
19
24
|
export const MULTISIG_ROT_ROUTE = "/multisig/rot";
|
|
20
25
|
export const MULTISIG_IXN_ROUTE = "/multisig/ixn";
|
|
26
|
+
export const MULTISIG_RIP_ROUTE = "/multisig/rip";
|
|
27
|
+
export const MULTISIG_BUP_ROUTE = "/multisig/bup";
|
|
21
28
|
export const MULTISIG_VCP_ROUTE = "/multisig/vcp";
|
|
22
29
|
export const MULTISIG_ISS_ROUTE = "/multisig/iss";
|
|
23
30
|
export const MULTISIG_REV_ROUTE = "/multisig/rev";
|
|
24
31
|
export const MULTISIG_EXN_ROUTE = "/multisig/exn";
|
|
25
32
|
export const MULTISIG_RPY_ROUTE = "/multisig/rpy";
|
|
33
|
+
/** Local v2 coordination profile routes, as in KERIpy core; not upstream KERI or #1740 routes. */
|
|
34
|
+
export const MULTISIG_QRY_ROUTE = "/multisig/qry";
|
|
35
|
+
export const MULTISIG_IPEX_PROOF_ROUTE = "/multisig/ipex-proof";
|
|
26
36
|
/** Ordered route list used for handler registration. */
|
|
27
37
|
export const MULTISIG_ROUTES = [
|
|
38
|
+
MULTISIG_RIP_ROUTE,
|
|
39
|
+
MULTISIG_BUP_ROUTE,
|
|
28
40
|
MULTISIG_ICP_ROUTE,
|
|
29
41
|
MULTISIG_ROT_ROUTE,
|
|
30
42
|
MULTISIG_IXN_ROUTE,
|
|
@@ -33,7 +45,103 @@ export const MULTISIG_ROUTES = [
|
|
|
33
45
|
MULTISIG_REV_ROUTE,
|
|
34
46
|
MULTISIG_EXN_ROUTE,
|
|
35
47
|
MULTISIG_RPY_ROUTE,
|
|
48
|
+
MULTISIG_QRY_ROUTE,
|
|
49
|
+
MULTISIG_IPEX_PROOF_ROUTE,
|
|
36
50
|
];
|
|
51
|
+
/** Children whose verification needs caller-owned processors; the Multiplexor indexes and notifies only. */
|
|
52
|
+
const UNREPLAYED_ROUTES = [MULTISIG_QRY_ROUTE, MULTISIG_IPEX_PROOF_ROUTE];
|
|
53
|
+
/** Build an unsigned legacy VDR wrapper with its required named children. */
|
|
54
|
+
export function prepareMultisigVdrExn(sender, proposal, options = {}) {
|
|
55
|
+
return exchange(proposal.route, proposal.attrs, { ...options, sender, embeds: proposal.embeds });
|
|
56
|
+
}
|
|
57
|
+
/** Validate public TEL linkage before proposing or signing an anchor; no state is inferred from b. */
|
|
58
|
+
export function registryProposalEvent(tel, gid, store) {
|
|
59
|
+
const checked = tel.ilk === "rip" ? validateRip(tel, gid) : validateUpdate(tel, tel.regid ?? "");
|
|
60
|
+
if (checked.kind !== "valid" || tel.pvrsn.major !== 2 || tel.pvrsn.minor !== 0) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
if (tel.ilk === "rip") {
|
|
64
|
+
return checked.event;
|
|
65
|
+
}
|
|
66
|
+
const rip = store?.seqEvent(checked.event.regid, 0);
|
|
67
|
+
const inception = rip && validateRip(rip, gid);
|
|
68
|
+
const head = store?.headEvent(checked.event.regid);
|
|
69
|
+
if (!rip || !head || !inception || inception.kind !== "valid" || rip.pvrsn.major !== 2 || rip.pvrsn.minor !== 0) {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
const headSn = BigInt(`0x${head.sad.n}`);
|
|
73
|
+
const sn = checked.event.sn;
|
|
74
|
+
if (sn > headSn + 1n || sn > BigInt(Number.MAX_SAFE_INTEGER)) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
const accepted = store.seqEvent(rip.said, Number(sn));
|
|
78
|
+
if (accepted) {
|
|
79
|
+
return sameBytes(accepted.raw, tel.raw) ? checked.event : null;
|
|
80
|
+
}
|
|
81
|
+
return sn === headSn + 1n && checked.event.prior === head.said ? checked.event : null;
|
|
82
|
+
}
|
|
83
|
+
/** Exact authenticated consent may share an anchor index with unrelated v2 TEL proposals. */
|
|
84
|
+
export function sameRegistryProposal(left, right) {
|
|
85
|
+
const a = left.sad?.a;
|
|
86
|
+
const b = right.sad?.a;
|
|
87
|
+
return isV2RegistryRoute(left.route ?? "") && left.route === right.route && isRecord(a) && isRecord(b)
|
|
88
|
+
&& ["gid", "tel", "anc"].every(field => a[field] === b[field]);
|
|
89
|
+
}
|
|
90
|
+
/** Validate both child commitments and every supplied source coordinate without writing evidence. */
|
|
91
|
+
export function acdcV2RegistryProposal(wrapper, nests, store) {
|
|
92
|
+
const payload = wrapper.sad?.a;
|
|
93
|
+
const route = wrapper.route ?? "";
|
|
94
|
+
if (!isV2RegistryRoute(route) || !isRecord(payload) || typeof payload.gid !== "string" || nests.length !== 2
|
|
95
|
+
|| wrapper.pvrsn.major !== 2 || wrapper.pvrsn.minor !== 0) {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
const [tel, anchor] = nests.map(child => child.body);
|
|
99
|
+
if (!(tel instanceof SerderACDC) || !(anchor instanceof SerderKERI) || route !== `/multisig/${tel.ilk}`
|
|
100
|
+
|| nests.some(child => child.nests?.length) || tel.said !== payload.tel || anchor.said !== payload.anc
|
|
101
|
+
|| anchor.pvrsn.major !== 2 || anchor.pvrsn.minor !== 0 || !anchor.verify()
|
|
102
|
+
|| anchor.pre !== payload.gid || !["ixn", "rot", "drt"].includes(anchor.ilk ?? "")) {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
const event = registryProposalEvent(tel, payload.gid, store);
|
|
106
|
+
if (!event || !anchor.seals.some(seal => isRecord(seal) && seal.i === event.regid
|
|
107
|
+
&& seal.s === tel.sad.n && seal.d === tel.said)) {
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
const evidence = envelopeFromFrame(nests[0]);
|
|
111
|
+
if (evidence.sscs.some(seal => seal.s.num !== BigInt(anchor.sn) || seal.d.qb64 !== anchor.said)
|
|
112
|
+
|| evidence.ssts.some(seal => seal.i.qb64 !== payload.gid
|
|
113
|
+
|| seal.s.num !== BigInt(anchor.sn) || seal.d.qb64 !== anchor.said)) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
return { tel, anchor };
|
|
117
|
+
}
|
|
118
|
+
/** Compare retained event bytes without normalizing their signed representation. */
|
|
119
|
+
function sameBytes(left, right) {
|
|
120
|
+
return left.length === right.length && left.every((value, index) => value === right[index]);
|
|
121
|
+
}
|
|
122
|
+
/** Commit one exact ACDC v2 registry/anchor pair using the ordinary nested-wire serializer. */
|
|
123
|
+
export function* prepareAcdcV2RegistryExn(sender, tel, anchor, store, options = {}) {
|
|
124
|
+
const children = [tel, anchor].map(wire => parseBytes(concatBytes(Counter.makeGVC(Vrsn_2_0), wire)));
|
|
125
|
+
if (children.some(frames => frames.length !== 1)) {
|
|
126
|
+
throw new Error("ACDC v2 registry proposal requires one TEL and one KEL event.");
|
|
127
|
+
}
|
|
128
|
+
const nests = children.map(frames => frames[0]);
|
|
129
|
+
if (!(nests[1].body instanceof SerderKERI))
|
|
130
|
+
throw new Error("ACDC v2 registry anchor must be KERI.");
|
|
131
|
+
const wrapper = exchange(`/multisig/${nests[0].body.ilk}`, {
|
|
132
|
+
gid: nests[1].body.pre,
|
|
133
|
+
tel: nests[0].body.said,
|
|
134
|
+
anc: nests[1].body.said,
|
|
135
|
+
}, {
|
|
136
|
+
...options,
|
|
137
|
+
sender,
|
|
138
|
+
version: Vrsn_2_0,
|
|
139
|
+
})[0];
|
|
140
|
+
if (!acdcV2RegistryProposal(wrapper, nests, store))
|
|
141
|
+
throw new Error("Invalid ACDC v2 registry proposal.");
|
|
142
|
+
const parts = yield* abortable(signal => Promise.all(nests.map(child => collectPayload(nestedPayload(child, Vrsn_2_0), signal))));
|
|
143
|
+
return [wrapper, concatBytes(...parts)];
|
|
144
|
+
}
|
|
37
145
|
/** Coordinate one proposed group inception event. */
|
|
38
146
|
export function* multisigInceptExn(member, smids, rmids, icp, delegator, options = {}) {
|
|
39
147
|
return yield* prepareMultisigEventExn(member.pre, {
|
|
@@ -68,42 +176,27 @@ export function* multisigInteractExn(group, member, aids, ixn, options = {}) {
|
|
|
68
176
|
}
|
|
69
177
|
/** Coordinate one proposed multisig credential-registry inception. */
|
|
70
178
|
export function multisigRegistryInceptExn(group, member, usage, vcp, anc, options = {}) {
|
|
71
|
-
return
|
|
72
|
-
|
|
73
|
-
usage,
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
embeds: {
|
|
77
|
-
vcp: rawMessage(vcp),
|
|
78
|
-
anc: rawMessage(anc),
|
|
79
|
-
},
|
|
80
|
-
});
|
|
179
|
+
return prepareMultisigVdrExn(member.pre, {
|
|
180
|
+
route: MULTISIG_VCP_ROUTE,
|
|
181
|
+
attrs: { gid: groupPrefix(group), usage },
|
|
182
|
+
embeds: { vcp: rawMessage(vcp), anc: rawMessage(anc) },
|
|
183
|
+
}, exchangeOptions(member, options));
|
|
81
184
|
}
|
|
82
185
|
/** Coordinate one proposed multisig credential issuance. */
|
|
83
186
|
export function multisigIssueExn(group, member, acdc, iss, anc, options = {}) {
|
|
84
|
-
return
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
acdc: rawMessage(acdc),
|
|
90
|
-
iss: rawMessage(iss),
|
|
91
|
-
anc: rawMessage(anc),
|
|
92
|
-
},
|
|
93
|
-
});
|
|
187
|
+
return prepareMultisigVdrExn(member.pre, {
|
|
188
|
+
route: MULTISIG_ISS_ROUTE,
|
|
189
|
+
attrs: { gid: groupPrefix(group) },
|
|
190
|
+
embeds: { acdc: rawMessage(acdc), iss: rawMessage(iss), anc: rawMessage(anc) },
|
|
191
|
+
}, exchangeOptions(member, options));
|
|
94
192
|
}
|
|
95
193
|
/** Coordinate one proposed multisig credential revocation. */
|
|
96
194
|
export function multisigRevokeExn(group, member, said, rev, anc, options = {}) {
|
|
97
|
-
return
|
|
98
|
-
|
|
99
|
-
said,
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
embeds: {
|
|
103
|
-
rev: rawMessage(rev),
|
|
104
|
-
anc: rawMessage(anc),
|
|
105
|
-
},
|
|
106
|
-
});
|
|
195
|
+
return prepareMultisigVdrExn(member.pre, {
|
|
196
|
+
route: MULTISIG_REV_ROUTE,
|
|
197
|
+
attrs: { gid: groupPrefix(group), said },
|
|
198
|
+
embeds: { rev: rawMessage(rev), anc: rawMessage(anc) },
|
|
199
|
+
}, exchangeOptions(member, options));
|
|
107
200
|
}
|
|
108
201
|
/** Coordinate one proposed multisig reply event. */
|
|
109
202
|
export function* multisigRpyExn(group, member, rpy, options = {}) {
|
|
@@ -114,6 +207,25 @@ export function* multisigRpyExn(group, member, rpy, options = {}) {
|
|
|
114
207
|
},
|
|
115
208
|
}, rawMessage(rpy), options);
|
|
116
209
|
}
|
|
210
|
+
/**
|
|
211
|
+
* Propose one exact signed v2 query authored by the group to its members.
|
|
212
|
+
*
|
|
213
|
+
* KERIpy `multisigQueryExn`: local v2 coordination profile route `/multisig/qry`
|
|
214
|
+
* whose `a` is `{gid, qry}` and whose single nested substream is the query stream.
|
|
215
|
+
*/
|
|
216
|
+
export function* multisigQueryExn(group, member, qry, options = {}) {
|
|
217
|
+
return yield* prepareMultisigEventExn(member.pre, { route: MULTISIG_QRY_ROUTE, attrs: { gid: groupPrefix(group) } }, rawMessage(qry), { ...options, pvrsn: Vrsn_2_0 });
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Share one exact v2 IPEX Grant stream, with its proofs, with group members.
|
|
221
|
+
*
|
|
222
|
+
* KERIpy `multisigIpexProofExn`: local v2 coordination profile route
|
|
223
|
+
* `/multisig/ipex-proof` whose `a` is `{gid, grant}` and whose single nested
|
|
224
|
+
* substream is the complete Grant stream, authored by or addressed to the group.
|
|
225
|
+
*/
|
|
226
|
+
export function* multisigIpexProofExn(group, member, grant, options = {}) {
|
|
227
|
+
return yield* prepareMultisigEventExn(member.pre, { route: MULTISIG_IPEX_PROOF_ROUTE, attrs: { gid: groupPrefix(group) } }, rawMessage(grant), { ...options, pvrsn: Vrsn_2_0 });
|
|
228
|
+
}
|
|
117
229
|
/** Wrap one business EXN, such as `/ipex/grant`, for group approval. */
|
|
118
230
|
export function multisigExn(group, member, exn, options = {}) {
|
|
119
231
|
return exchange(MULTISIG_EXN_ROUTE, {
|
|
@@ -137,12 +249,39 @@ export function multisigExnBody(sender, proposal, child, options = {}) {
|
|
|
137
249
|
if (!child.said || !nestedMultisigIlks(route)?.includes(child.ilk ?? "")) {
|
|
138
250
|
throw new Error("Multisig proposal requires a supported route and child kind.");
|
|
139
251
|
}
|
|
140
|
-
|
|
252
|
+
if (route === MULTISIG_EXN_ROUTE && !v2IpexChild(child, attrs.gid)) {
|
|
253
|
+
throw new Error("Multisig IPEX requires a v2 child authored by the selected group.");
|
|
254
|
+
}
|
|
255
|
+
const coordination = v2CoordinationChild(route, child, "gid" in attrs ? attrs.gid : undefined);
|
|
256
|
+
if (coordination)
|
|
257
|
+
throw new Error(coordination);
|
|
258
|
+
const field = multisigChildField(route);
|
|
141
259
|
const payload = route === MULTISIG_ICP_ROUTE
|
|
142
260
|
? { gid: requireString(child.pre, "group inception prefix"), ...attrs, [field]: child.said }
|
|
143
261
|
: { ...attrs, [field]: child.said };
|
|
144
262
|
return exchange(route, payload, { ...options, sender, pvrsn })[0];
|
|
145
263
|
}
|
|
264
|
+
/** V2 IPEX proposals carry one exact group-authored child on a supported conversation route. */
|
|
265
|
+
function v2IpexChild(child, group) {
|
|
266
|
+
return child.pvrsn.major === 2 && child.pvrsn.minor === 0 && child.pre === group
|
|
267
|
+
&& ["xip", "exn"].includes(child.ilk ?? "") && child.route?.startsWith("/ipex/") === true
|
|
268
|
+
&& isIpexVerb(child.route.slice(6));
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* KERIpy core checks for the two local coordination routes: a group-authored v2
|
|
272
|
+
* query, or a v2 Grant authored by or addressed to the group. Returns a reason.
|
|
273
|
+
*/
|
|
274
|
+
function v2CoordinationChild(route, child, group) {
|
|
275
|
+
const v2 = child.pvrsn.major === 2 && child.pvrsn.minor === 0;
|
|
276
|
+
if (route === MULTISIG_QRY_ROUTE && (!v2 || child.ilk !== "qry" || child.pre !== group)) {
|
|
277
|
+
return "Multisig query requires a v2 query authored by the selected group.";
|
|
278
|
+
}
|
|
279
|
+
if (route === MULTISIG_IPEX_PROOF_ROUTE
|
|
280
|
+
&& (!v2 || child.route !== "/ipex/grant" || (child.pre !== group && child.sad?.ri !== group))) {
|
|
281
|
+
return "Multisig IPEX proof requires a v2 Grant for the selected group.";
|
|
282
|
+
}
|
|
283
|
+
return null;
|
|
284
|
+
}
|
|
146
285
|
/** Signed replay hint for a legacy child whose attachments use a different genus. */
|
|
147
286
|
export function multisigChildGenusAttrs(child, genus) {
|
|
148
287
|
return !child.gvrsn && (genus.major !== child.pvrsn.major || genus.minor !== child.pvrsn.minor)
|
|
@@ -151,7 +290,12 @@ export function multisigChildGenusAttrs(child, genus) {
|
|
|
151
290
|
}
|
|
152
291
|
/**
|
|
153
292
|
* Prepare finite child input, construct the parent and serialize its nested evidence.
|
|
154
|
-
*
|
|
293
|
+
* KEL (icp/rot/ixn) and reply proposals default to KERIpy's form for both v1 and v2
|
|
294
|
+
* groups: a v1 wrapper with a named `e` embed and pathed child attachments in the
|
|
295
|
+
* child's own genus. The group's version is the child KEL/reply version; the wrapper
|
|
296
|
+
* is only the coordination envelope. Other routes default to v2 nested wrappers, and
|
|
297
|
+
* an explicit `version`/`pvrsn` selects either form. The v1 pathed path retains
|
|
298
|
+
* its established encoding; v2 delegates parsing to parseBytes
|
|
155
299
|
* once and borrows the resulting child only until nestedPayload has been fully consumed.
|
|
156
300
|
* Parsed child evidence consists of ordinary values; serialization observes cancellation.
|
|
157
301
|
* Sending v2 requires enclosing these bytes and the parent's signatures together.
|
|
@@ -160,7 +304,10 @@ export function* prepareMultisigEventExn(sender, proposal, wire, options = {}) {
|
|
|
160
304
|
// Keep the route selection stable through parser suspension; attribute values remain immutable borrows.
|
|
161
305
|
const captured = { ...proposal };
|
|
162
306
|
const { route, attrs } = captured;
|
|
163
|
-
|
|
307
|
+
// KERIpy `kli multisig incept|interact|rotate` and `ends add` send these routes as v1
|
|
308
|
+
// `e`-embed wrappers whatever the group KEL version, and `kli multisig join` reads only `e`.
|
|
309
|
+
const keripyEmbedRoute = KERIPY_EMBED_PROPOSAL_ROUTES.includes(route);
|
|
310
|
+
const version = options.pvrsn ?? options.version ?? (keripyEmbedRoute ? Vrsn_1_0 : Vrsn_2_0);
|
|
164
311
|
const field = route.slice(route.lastIndexOf("/") + 1);
|
|
165
312
|
if (version.major === 1) {
|
|
166
313
|
const child = new SerderKERI({ raw: wire });
|
|
@@ -178,13 +325,25 @@ export function* prepareMultisigEventExn(sender, proposal, wire, options = {}) {
|
|
|
178
325
|
const input = selector.length ? concatBytes(selector, wire) : wire;
|
|
179
326
|
const frames = parseBytes(input);
|
|
180
327
|
const child = frames[0];
|
|
181
|
-
if (frames.length !== 1 || !(child.body instanceof SerderKERI)
|
|
328
|
+
if (frames.length !== 1 || !(child.body instanceof SerderKERI)
|
|
329
|
+
|| (child.nests?.length && !nestedChildAllowed(route, child.body))) {
|
|
182
330
|
throw new Error("Multisig proposal requires one supported direct child.");
|
|
183
331
|
}
|
|
184
332
|
const serder = multisigExnBody(sender, captured, child.body, options);
|
|
185
333
|
return [serder, await collectPayload(nestedPayload(child, Vrsn_2_0), signal)];
|
|
186
334
|
});
|
|
187
335
|
}
|
|
336
|
+
/** Coordination and IPEX children may carry their own nests; KEL and reply children may not. */
|
|
337
|
+
function nestedChildAllowed(route, child) {
|
|
338
|
+
return UNREPLAYED_ROUTES.includes(route) || (route === MULTISIG_EXN_ROUTE && nestedIpexRoute(child.route ?? ""));
|
|
339
|
+
}
|
|
340
|
+
/** Proposal routes KERIpy authors as v1 `e`-embed wrappers for both v1 and v2 groups. */
|
|
341
|
+
const KERIPY_EMBED_PROPOSAL_ROUTES = [
|
|
342
|
+
MULTISIG_ICP_ROUTE,
|
|
343
|
+
MULTISIG_ROT_ROUTE,
|
|
344
|
+
MULTISIG_IXN_ROUTE,
|
|
345
|
+
MULTISIG_RPY_ROUTE,
|
|
346
|
+
];
|
|
188
347
|
/** Route handler that forwards accepted multisig EXNs to the `Multiplexor`. */
|
|
189
348
|
export class MultisigNotificationHandler {
|
|
190
349
|
/** Bind one registered route to its shared approval coordinator. */
|
|
@@ -204,22 +363,42 @@ export class MultisigNotificationHandler {
|
|
|
204
363
|
this.resource = resource;
|
|
205
364
|
this.mux = mux;
|
|
206
365
|
}
|
|
207
|
-
/** Only
|
|
366
|
+
/** Only supported nested multisig routes have child consumers. */
|
|
208
367
|
get acceptsNests() {
|
|
209
368
|
return nestedMultisigIlks(this.resource) !== null;
|
|
210
369
|
}
|
|
211
|
-
/**
|
|
370
|
+
/**
|
|
371
|
+
* Authenticate the signed child relationship before exchange evidence is published.
|
|
372
|
+
* A child handler registered with `Multiplexor.addChildHandler` for this route and
|
|
373
|
+
* the nested child's route owns verification instead.
|
|
374
|
+
*/
|
|
212
375
|
verify(args) {
|
|
376
|
+
const delegate = this.mux.childHandlerFor(args.serder, args.nests);
|
|
377
|
+
if (delegate)
|
|
378
|
+
return delegate.verify ? delegate.verify(args) : false;
|
|
213
379
|
return args.serder.route === this.resource && this.mux.verify(args.serder, args.nests);
|
|
214
380
|
}
|
|
215
381
|
/** Borrow persisted children until approval replay and coordination indexing finish. */
|
|
216
382
|
*handle(args) {
|
|
383
|
+
const delegate = this.mux.childHandlerFor(args.serder, args.nests);
|
|
384
|
+
if (delegate) {
|
|
385
|
+
const handled = delegate.handle(args);
|
|
386
|
+
if (handled)
|
|
387
|
+
yield* handled;
|
|
388
|
+
return;
|
|
389
|
+
}
|
|
217
390
|
yield* this.mux.add(args.serder, args.nests);
|
|
218
391
|
}
|
|
219
392
|
}
|
|
220
393
|
/** Register the KERIpy multisig route family with one exchanger. */
|
|
221
394
|
export function loadMultisigHandlers(hby, exchanger, options = {}) {
|
|
222
|
-
const mux = options.mux
|
|
395
|
+
const mux = options.mux
|
|
396
|
+
?? new Multiplexor(hby, {
|
|
397
|
+
notifier: options.notifier ?? null,
|
|
398
|
+
exchanger,
|
|
399
|
+
registry: options.registry ?? undefined,
|
|
400
|
+
messageKevery: options.messageKevery,
|
|
401
|
+
});
|
|
223
402
|
for (const route of MULTISIG_ROUTES) {
|
|
224
403
|
exchanger.addHandler(new MultisigNotificationHandler(route, mux));
|
|
225
404
|
}
|
|
@@ -233,7 +412,7 @@ export function loadMultisigHandlers(hby, exchanger, options = {}) {
|
|
|
233
412
|
*/
|
|
234
413
|
export class Multiplexor {
|
|
235
414
|
/** Reuse durable group membership and separate child processors without sharing parent proof state. */
|
|
236
|
-
constructor(hby, { notifier } = {}) {
|
|
415
|
+
constructor(hby, { notifier, exchanger, registry, messageKevery } = {}) {
|
|
237
416
|
Object.defineProperty(this, "hby", {
|
|
238
417
|
enumerable: true,
|
|
239
418
|
configurable: true,
|
|
@@ -265,15 +444,89 @@ export class Multiplexor {
|
|
|
265
444
|
writable: true,
|
|
266
445
|
value: void 0
|
|
267
446
|
});
|
|
447
|
+
Object.defineProperty(this, "exchanger", {
|
|
448
|
+
enumerable: true,
|
|
449
|
+
configurable: true,
|
|
450
|
+
writable: true,
|
|
451
|
+
value: void 0
|
|
452
|
+
});
|
|
453
|
+
Object.defineProperty(this, "registry", {
|
|
454
|
+
enumerable: true,
|
|
455
|
+
configurable: true,
|
|
456
|
+
writable: true,
|
|
457
|
+
value: void 0
|
|
458
|
+
});
|
|
459
|
+
Object.defineProperty(this, "messageKevery", {
|
|
460
|
+
enumerable: true,
|
|
461
|
+
configurable: true,
|
|
462
|
+
writable: true,
|
|
463
|
+
value: void 0
|
|
464
|
+
});
|
|
465
|
+
/** Owners sharing one registered wrapper route, keyed by wrapper and nested child route. */
|
|
466
|
+
Object.defineProperty(this, "childHandlers", {
|
|
467
|
+
enumerable: true,
|
|
468
|
+
configurable: true,
|
|
469
|
+
writable: true,
|
|
470
|
+
value: new Map()
|
|
471
|
+
});
|
|
268
472
|
this.hby = hby;
|
|
269
473
|
this.notifier = notifier ?? null;
|
|
474
|
+
this.exchanger = exchanger;
|
|
475
|
+
this.registry = registry;
|
|
270
476
|
const router = new Router();
|
|
271
477
|
this.rvy = new Revery(hby.db, { rtr: router });
|
|
272
478
|
new BasicReplyRouteHandler(this.rvy).registerReplyRoutes(router);
|
|
273
479
|
this.kvy = new Kevery(hby.db, { lax: false, local: false, rvy: this.rvy });
|
|
480
|
+
this.messageKevery = messageKevery ?? this.kvy;
|
|
481
|
+
if (this.messageKevery.db !== hby.db) {
|
|
482
|
+
throw new TypeError("Multisig message intake must share the group evidence store.");
|
|
483
|
+
}
|
|
274
484
|
this.kvy.registerReplyRoutes(router);
|
|
275
485
|
this.replay = new Exchanger(hby);
|
|
276
486
|
}
|
|
487
|
+
/**
|
|
488
|
+
* Delegate one wrapper route's v2 children with route `child` to `handler`.
|
|
489
|
+
*
|
|
490
|
+
* KERIpy `Multiplexor.addChildHandler`: several owners share one registered
|
|
491
|
+
* `/multisig/*` Exchanger route without replacing `Exchanger.routes` entries.
|
|
492
|
+
* The delegate's `verify` and `handle` own all validation, indexing and
|
|
493
|
+
* notification for those children; the Multiplexor performs none of them.
|
|
494
|
+
* Registering a key twice is refused.
|
|
495
|
+
*/
|
|
496
|
+
addChildHandler(route, child, handler) {
|
|
497
|
+
const key = childHandlerKey(route, child);
|
|
498
|
+
if (this.childHandlers.has(key)) {
|
|
499
|
+
throw new ValidationError(`child handler for ${route} ${child} already registered`);
|
|
500
|
+
}
|
|
501
|
+
this.childHandlers.set(key, handler);
|
|
502
|
+
}
|
|
503
|
+
/**
|
|
504
|
+
* Release a finite owner's delegation. A TypeScript runtime can outlive one
|
|
505
|
+
* command phase, unlike KERIpy's per-process CLI owners; the shared route stays.
|
|
506
|
+
*/
|
|
507
|
+
removeChildHandler(route, child, handler) {
|
|
508
|
+
const key = childHandlerKey(route, child);
|
|
509
|
+
if (this.childHandlers.get(key) === handler)
|
|
510
|
+
this.childHandlers.delete(key);
|
|
511
|
+
}
|
|
512
|
+
/** Return the delegate for this v2 wrapper's single child route, if any. */
|
|
513
|
+
childHandlerFor(serder, nests = []) {
|
|
514
|
+
if (!this.childHandlers.size || serder.pvrsn.major !== 2 || nests.length !== 1)
|
|
515
|
+
return null;
|
|
516
|
+
const child = nests[0].body;
|
|
517
|
+
const route = child instanceof SerderKERI ? child.route : undefined;
|
|
518
|
+
return route ? this.childHandlers.get(childHandlerKey(serder.route ?? "", route)) ?? null : null;
|
|
519
|
+
}
|
|
520
|
+
/** V2 child replay borrows the caller's configured IPEX, registry, reply and KRAM owners. */
|
|
521
|
+
v2IpexOwners(child) {
|
|
522
|
+
const kvy = this.messageKevery, rvy = kvy.rvy, exc = this.exchanger;
|
|
523
|
+
const handler = exc?.handlerFor(child);
|
|
524
|
+
return !!this.registry && this.registry.db === this.hby.db && exc?.hby === this.hby
|
|
525
|
+
&& rvy?.db === this.hby.db && kvy.kramer?.db === this.hby.db
|
|
526
|
+
&& exc.cues === kvy.cues && rvy.cues === kvy.cues
|
|
527
|
+
&& handler instanceof IpexV2Handler && handler.hby === this.hby
|
|
528
|
+
&& handler.registry === this.registry.store;
|
|
529
|
+
}
|
|
277
530
|
/** Index an authenticated proposal; child acceptance still requires local approval and its own proofs. */
|
|
278
531
|
*add(serder, nests = []) {
|
|
279
532
|
const inspection = this.inspect(serder, nests);
|
|
@@ -285,11 +538,40 @@ export class Multiplexor {
|
|
|
285
538
|
};
|
|
286
539
|
}
|
|
287
540
|
const { said, embeddedSaid, route, sender } = inspection;
|
|
288
|
-
const
|
|
541
|
+
const v2Ipex = serder.pvrsn.major === 2 && route === MULTISIG_EXN_ROUTE;
|
|
542
|
+
if (v2Ipex) {
|
|
543
|
+
if (!this.exchanger?.verifyAccepted(said, route)) {
|
|
544
|
+
return { kind: "reject", said, reason: "V2 IPEX approval requires an authenticated wrapper." };
|
|
545
|
+
}
|
|
546
|
+
// The authenticated local wrapper carries this member's actual verified child contribution.
|
|
547
|
+
if (this.isLocalHab(sender))
|
|
548
|
+
yield* this.processApproved(nests);
|
|
549
|
+
}
|
|
550
|
+
const { existing, submitters } = this.hby.db.env.transactionSync(() => {
|
|
551
|
+
const indexed = this.hby.db.meids.get([embeddedSaid]);
|
|
552
|
+
const existing = isV2RegistryRoute(route) || v2Ipex
|
|
553
|
+
? indexed.filter(diger => {
|
|
554
|
+
const retained = this.hby.db.exns.get([diger.qb64]);
|
|
555
|
+
return retained && (v2Ipex
|
|
556
|
+
? retained.pvrsn.major === 2 && retained.route === route
|
|
557
|
+
&& isRecord(retained.sad?.a) && isRecord(serder.sad?.a)
|
|
558
|
+
&& retained.sad.a.gid === serder.sad.a.gid && retained.sad.a.exn === embeddedSaid
|
|
559
|
+
: sameRegistryProposal(retained, serder))
|
|
560
|
+
&& this.exchanger?.verifyAccepted(diger.qb64, route);
|
|
561
|
+
})
|
|
562
|
+
: indexed;
|
|
563
|
+
const submitters = isV2RegistryRoute(route) || v2Ipex
|
|
564
|
+
? existing.map(diger => new Prefixer({ qb64: this.hby.db.exns.get([diger.qb64]).pre }))
|
|
565
|
+
: this.hby.db.maids.get([embeddedSaid]);
|
|
566
|
+
// Approval is the authenticated wrapper, not completion of its asynchronous child replay.
|
|
567
|
+
this.hby.db.meids.add([embeddedSaid], new Saider({ qb64: said }));
|
|
568
|
+
this.hby.db.maids.add([embeddedSaid], new Prefixer({ qb64: sender }));
|
|
569
|
+
return { existing, submitters };
|
|
570
|
+
});
|
|
289
571
|
const firstSubmission = existing.length === 0;
|
|
290
|
-
const
|
|
572
|
+
const unreplayed = UNREPLAYED_ROUTES.includes(route);
|
|
291
573
|
if (!this.isLocalHab(sender)) {
|
|
292
|
-
if (submitters.some((submitter) => this.isLocalHab(submitter.qb64))) {
|
|
574
|
+
if (!unreplayed && submitters.some((submitter) => this.isLocalHab(submitter.qb64))) {
|
|
293
575
|
// The parent is durable, but approval never lends its signatures to the child.
|
|
294
576
|
if (serder.pvrsn.major === 1)
|
|
295
577
|
yield* this.processLegacyApproved(serder);
|
|
@@ -301,13 +583,11 @@ export class Multiplexor {
|
|
|
301
583
|
this.notifier?.add(firstSubmission ? { r: route, d: said } : { r: route, d: said, e: embeddedSaid });
|
|
302
584
|
}
|
|
303
585
|
}
|
|
304
|
-
else if (submitters.some((submitter) => !this.isLocalHab(submitter.qb64))) {
|
|
586
|
+
else if (!unreplayed && submitters.some((submitter) => !this.isLocalHab(submitter.qb64))) {
|
|
305
587
|
// Remote evidence can precede approval. Replay one durable wrapper at a time after reopen.
|
|
306
588
|
for (const prior of existing)
|
|
307
589
|
yield* call(() => this.replayApproved(prior.qb64));
|
|
308
590
|
}
|
|
309
|
-
this.hby.db.meids.add([embeddedSaid], new Saider({ qb64: said }));
|
|
310
|
-
this.hby.db.maids.add([embeddedSaid], new Prefixer({ qb64: sender }));
|
|
311
591
|
const duplicate = existing.some((saider) => saider.qb64 === said);
|
|
312
592
|
return {
|
|
313
593
|
kind: duplicate ? "duplicate" : "accept",
|
|
@@ -324,12 +604,17 @@ export class Multiplexor {
|
|
|
324
604
|
/** Process only the approved direct child; arbitrary descendants remain guarded. */
|
|
325
605
|
*processApproved(nests) {
|
|
326
606
|
for (const child of nests) {
|
|
327
|
-
|
|
607
|
+
const v2Ipex = child.body instanceof SerderKERI && child.body.pvrsn.major === 2
|
|
608
|
+
&& child.body.route?.startsWith("/ipex/");
|
|
609
|
+
if (v2Ipex && !this.v2IpexOwners(child.body)) {
|
|
610
|
+
throw new Error("V2 IPEX replay owners are unavailable.");
|
|
611
|
+
}
|
|
612
|
+
yield* dispatchEnvelope(envelopeFromFrame(child, true), v2Ipex ? this.messageKevery.rvy : this.rvy, v2Ipex ? this.messageKevery : this.kvy, this.exchanger, undefined, undefined, undefined, this.messageKevery, this.registry);
|
|
328
613
|
}
|
|
329
614
|
}
|
|
330
615
|
/** Replay v1 children with their own stored proofs and signed attachment genus, as KERIpy does. */
|
|
331
616
|
*processLegacyApproved(wrapper) {
|
|
332
|
-
const embeds =
|
|
617
|
+
const embeds = multisigEmbeddedSection(wrapper.ked);
|
|
333
618
|
for (const label of Object.keys(embeds ?? {})) {
|
|
334
619
|
const sad = embeds?.[label];
|
|
335
620
|
if (!isRecord(sad)) {
|
|
@@ -338,7 +623,7 @@ export class Multiplexor {
|
|
|
338
623
|
const event = new Serder({ sad });
|
|
339
624
|
const { attachment, genus } = multisigChildEvidence(this.hby, wrapper, label, event);
|
|
340
625
|
for (const frame of parseBytes(concatBytes(Counter.makeGVC(genus), event.raw, attachment))) {
|
|
341
|
-
yield* dispatchEnvelope(envelopeFromFrame(frame, true), this.rvy, this.kvy);
|
|
626
|
+
yield* dispatchEnvelope(envelopeFromFrame(frame, true), this.rvy, this.kvy, this.exchanger, undefined, undefined, undefined, this.messageKevery, this.registry);
|
|
342
627
|
}
|
|
343
628
|
}
|
|
344
629
|
}
|
|
@@ -408,17 +693,25 @@ export class Multiplexor {
|
|
|
408
693
|
}
|
|
409
694
|
const sender = serder.pre ?? "";
|
|
410
695
|
const route = serder.route ?? "";
|
|
411
|
-
const payload = payloadSection(ked);
|
|
412
696
|
let embeddedSaid;
|
|
413
697
|
if (serder.pvrsn.major === 1) {
|
|
414
|
-
const
|
|
415
|
-
if (!
|
|
698
|
+
const commitment = multisigPayloadSaid(serder);
|
|
699
|
+
if (!commitment || nests.length) {
|
|
416
700
|
return { ok: false, said, reason: "Missing multisig embedded SAID or unexpected v1 nesting." };
|
|
417
701
|
}
|
|
418
702
|
if (childGenusHint(ked.a) === null) {
|
|
419
703
|
return { ok: false, said, reason: "Invalid multisig child attachment genus." };
|
|
420
704
|
}
|
|
421
|
-
embeddedSaid =
|
|
705
|
+
embeddedSaid = commitment;
|
|
706
|
+
}
|
|
707
|
+
else if (isV2RegistryRoute(route)) {
|
|
708
|
+
const children = acdcV2RegistryProposal(serder, nests, this.registry?.store ?? null);
|
|
709
|
+
if (!children)
|
|
710
|
+
return { ok: false, said, reason: "Invalid ACDC v2 registry/anchor proposal." };
|
|
711
|
+
if (!groupSigningMembers(this.hby, children.anchor.pre).includes(sender)) {
|
|
712
|
+
return { ok: false, said, reason: "Registry proposal sender is not a current group signing member." };
|
|
713
|
+
}
|
|
714
|
+
embeddedSaid = children.anchor.said;
|
|
422
715
|
}
|
|
423
716
|
else {
|
|
424
717
|
const allowed = nestedMultisigIlks(route);
|
|
@@ -426,9 +719,10 @@ export class Multiplexor {
|
|
|
426
719
|
return { ok: false, said, reason: "Unsupported nested multisig route or child count." };
|
|
427
720
|
}
|
|
428
721
|
const child = nests[0];
|
|
429
|
-
const signed =
|
|
722
|
+
const signed = multisigPayloadSaid(serder);
|
|
430
723
|
if (typeof signed !== "string" || !child.body.said || !allowed.includes(child.body.ilk ?? "")
|
|
431
|
-
|| !(child.body instanceof SerderKERI)
|
|
724
|
+
|| !(child.body instanceof SerderKERI)
|
|
725
|
+
|| (route !== MULTISIG_EXN_ROUTE && !UNREPLAYED_ROUTES.includes(route) && child.nests?.length)) {
|
|
432
726
|
return { ok: false, said, reason: "Invalid multisig child kind, descendants, or signed SAID." };
|
|
433
727
|
}
|
|
434
728
|
try {
|
|
@@ -439,6 +733,30 @@ export class Multiplexor {
|
|
|
439
733
|
catch {
|
|
440
734
|
return { ok: false, said, reason: "Invalid multisig child commitment." };
|
|
441
735
|
}
|
|
736
|
+
if (route === MULTISIG_EXN_ROUTE) {
|
|
737
|
+
const attrs = serder.sad?.a;
|
|
738
|
+
if (serder.ilk !== "exn" || serder.pvrsn.minor !== 0
|
|
739
|
+
|| !isRecord(attrs) || Object.keys(attrs).sort().join(",") !== "exn,gid"
|
|
740
|
+
|| (child.nests?.length && !nestedIpexRoute(child.body.route ?? ""))
|
|
741
|
+
|| !v2IpexChild(child.body, attrs.gid) || !this.v2IpexOwners(child.body)
|
|
742
|
+
|| !groupSigningMembers(this.hby, child.body.pre).includes(sender)) {
|
|
743
|
+
return { ok: false, said, reason: "Invalid v2 IPEX group, member, route or replay owners." };
|
|
744
|
+
}
|
|
745
|
+
if (this.isLocalHab(sender)
|
|
746
|
+
&& !localIpexContribution(this.hby.db, sender, child.body, envelopeFromFrame(child).tsgs)) {
|
|
747
|
+
return { ok: false, said, reason: "Local IPEX approval has no verified member contribution." };
|
|
748
|
+
}
|
|
749
|
+
}
|
|
750
|
+
if (UNREPLAYED_ROUTES.includes(route)) {
|
|
751
|
+
const attrs = isRecord(serder.sad?.a) ? serder.sad.a : {};
|
|
752
|
+
const coordination = v2CoordinationChild(route, child.body, attrs.gid);
|
|
753
|
+
if (coordination)
|
|
754
|
+
return { ok: false, said, reason: coordination };
|
|
755
|
+
if (typeof attrs.gid !== "string" || !this.isLocalHab(attrs.gid)
|
|
756
|
+
|| !groupSigningMembers(this.hby, attrs.gid).includes(sender)) {
|
|
757
|
+
return { ok: false, said, reason: "Proposal sender is not a group signing member." };
|
|
758
|
+
}
|
|
759
|
+
}
|
|
442
760
|
embeddedSaid = signed;
|
|
443
761
|
}
|
|
444
762
|
const request = multisigMembership(route, ked.a);
|
|
@@ -489,13 +807,13 @@ export class Multiplexor {
|
|
|
489
807
|
}
|
|
490
808
|
/** Extract the embedded business EXN SAD from a `/multisig/exn` wrapper. */
|
|
491
809
|
export function embeddedBusinessExnSAD(serder) {
|
|
492
|
-
const embed = serder.ked ?
|
|
810
|
+
const embed = serder.ked ? multisigEmbeddedSection(serder.ked) : null;
|
|
493
811
|
const exn = embed && isRecord(embed["exn"]) ? embed["exn"] : null;
|
|
494
812
|
return exn ? { ...exn } : null;
|
|
495
813
|
}
|
|
496
814
|
/** Read one stored v1 child at the wire boundary, without authenticating its independent proof. */
|
|
497
815
|
export function multisigChild(hby, wrapper, label) {
|
|
498
|
-
const sad =
|
|
816
|
+
const sad = multisigEmbeddedSection(wrapper.ked ?? {})?.[label];
|
|
499
817
|
if (!isRecord(sad)) {
|
|
500
818
|
return null;
|
|
501
819
|
}
|
|
@@ -503,7 +821,7 @@ export function multisigChild(hby, wrapper, label) {
|
|
|
503
821
|
return { event, ...multisigChildEvidence(hby, wrapper, label, event) };
|
|
504
822
|
}
|
|
505
823
|
/** Resolve the stored proof and signed genus independently of the child protocol. */
|
|
506
|
-
function multisigChildEvidence(hby, wrapper, label, child) {
|
|
824
|
+
export function multisigChildEvidence(hby, wrapper, label, child) {
|
|
507
825
|
const attachment = multisigPathedAttachment(hby, wrapper.said, label);
|
|
508
826
|
const hint = attachment.length ? childGenusHint(wrapper.ked?.a) : undefined;
|
|
509
827
|
return { attachment, genus: child.gvrsn ?? hint ?? child.pvrsn };
|
|
@@ -555,13 +873,6 @@ function exchangeOptions(member, options) {
|
|
|
555
873
|
kind: options.kind,
|
|
556
874
|
};
|
|
557
875
|
}
|
|
558
|
-
function embeddedSection(ked) {
|
|
559
|
-
if (isRecord(ked.e) && typeof ked.e.d === "string") {
|
|
560
|
-
return ked.e;
|
|
561
|
-
}
|
|
562
|
-
const attrs = payloadSection(ked);
|
|
563
|
-
return isRecord(attrs.e) && typeof attrs.e.d === "string" ? attrs.e : null;
|
|
564
|
-
}
|
|
565
876
|
/** Decode the signed legacy child-genus hint before it can select attachment parsing. */
|
|
566
877
|
function childGenusHint(attrs) {
|
|
567
878
|
if (!isRecord(attrs) || attrs.cgvrsn === undefined)
|
|
@@ -599,6 +910,9 @@ function memberPrefixes(smids, rmids) {
|
|
|
599
910
|
const strings = (value) => Array.isArray(value) ? value.filter((item) => typeof item === "string") : [];
|
|
600
911
|
return [...strings(smids), ...strings(rmids)];
|
|
601
912
|
}
|
|
913
|
+
function childHandlerKey(route, child) {
|
|
914
|
+
return `${route}\u0000${child}`;
|
|
915
|
+
}
|
|
602
916
|
function groupPrefix(group) {
|
|
603
917
|
return typeof group === "string" ? group : group.pre;
|
|
604
918
|
}
|