keri-ts 1.0.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +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} +41 -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,664 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Group IPEX workflow orchestration.
|
|
3
|
+
*
|
|
4
|
+
* This module owns multisig coordination around embedded `/ipex/*` messages.
|
|
5
|
+
* CLI adapters supply parsed options and output/file handling; this service
|
|
6
|
+
* signs, publishes and sends completed group IPEX messages. CLI orchestration
|
|
7
|
+
* owns timed waits and worker lifetimes. Approval borrows explicit semantic,
|
|
8
|
+
* delivery and credential owners; its byte-input context belongs to the operation.
|
|
9
|
+
*/
|
|
10
|
+
import { attachmentPayload, bytesEqual, collectPayload, concatBytes, Counter, Diger, parseBytes, Prefixer, Seqner, SerderKERI, Vrsn_1_0, Vrsn_2_0, } from "cesr-ts";
|
|
11
|
+
import { call } from "effection";
|
|
12
|
+
import { evaluateChain } from "../../acdc/chaining.js";
|
|
13
|
+
import { resolveAttachmentGvrsn } from "../../core/attachment-countering.js";
|
|
14
|
+
import { TransIdxSigGroup } from "../../core/dispatch.js";
|
|
15
|
+
import { ValidationError } from "../../core/errors.js";
|
|
16
|
+
import { verifyExchangeProofs } from "../../core/exchange/exchange-proofing.js";
|
|
17
|
+
import { exchange, serializeMessage } from "../../core/exchange/protocol-exchanging.js";
|
|
18
|
+
import { Kever } from "../../core/kel/kever.js";
|
|
19
|
+
import { CREDENTIAL_MAILBOX_TOPIC } from "../../core/mailbox/mailbox-topics.js";
|
|
20
|
+
import { messageAttachmentGroups } from "../../core/protocol-serialization.js";
|
|
21
|
+
import { loadNests } from "../../db/exchange/exchange-nests.js";
|
|
22
|
+
import { groupSigningMembers, localGroupMember, localIpexContribution } from "../multisig/group-members.js";
|
|
23
|
+
import { embeddedBusinessExnSAD, MULTISIG_EXN_ROUTE, multisigChild, multisigChildGenusAttrs, prepareMultisigEventExn, } from "../multisig/grouping.js";
|
|
24
|
+
import { groupSendResult, multisigPayloadSaid, prepareGroupMessage, remoteGroupMembers, sendGroupMessage, storedGroupMessage, } from "../multisig/multisig-messaging.js";
|
|
25
|
+
import { envelopeFromFrame } from "../protocol/parsering.js";
|
|
26
|
+
import { Reactor } from "../protocol/reactor.js";
|
|
27
|
+
import { abortable } from "../runtime/abortable.js";
|
|
28
|
+
import { collectBytes } from "../transport/byte-source.js";
|
|
29
|
+
import { credentialGrantReady, credentialPresentationSupportMessages, credentialSaidFromGrant, validateAdmitGrant, } from "./ipex-credentialing.js";
|
|
30
|
+
import { walkIpexGraph } from "./ipex-graph.js";
|
|
31
|
+
import { authenticateIpexNode, issuedNodeVerdict } from "./ipex-node-authentication.js";
|
|
32
|
+
import { IPEX_ADMIT_ROUTE, IPEX_GRANT_ROUTE, ipexConversationReady, ipexRecipient } from "./ipexing.js";
|
|
33
|
+
/** Authenticate the exact disclosed graph; only the existing evaluator's explicit true authorizes new use. */
|
|
34
|
+
function acdcV2GraphUse(hby, registry, origin, nests) {
|
|
35
|
+
const graph = walkIpexGraph(origin, nests, true);
|
|
36
|
+
if (!graph)
|
|
37
|
+
throw new ValidationError("ACDC v2 group graph is malformed or incomplete.");
|
|
38
|
+
const verdicts = new Map();
|
|
39
|
+
for (const [said, node] of graph.nodes) {
|
|
40
|
+
verdicts.set(said, issuedNodeVerdict(authenticateIpexNode(node.body, envelopeFromFrame(node), hby.db, registry)));
|
|
41
|
+
}
|
|
42
|
+
const verdict = evaluateChain(graph, verdicts, hby.db);
|
|
43
|
+
if (verdict?.kind === "unknown" && verdict.retryable)
|
|
44
|
+
return null;
|
|
45
|
+
if (verdict?.kind !== "valid")
|
|
46
|
+
throw new ValidationError("ACDC v2 group graph is false or unresolved.");
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
/** Current retained Grant authentication and graph truth are separate from protocol completion/history. */
|
|
50
|
+
function acdcV2GrantUse(hby, exchanger, registry, said) {
|
|
51
|
+
const grant = hby.db.exns.get([said]);
|
|
52
|
+
if (!grant || !exchanger.verifyAccepted(said, IPEX_GRANT_ROUTE))
|
|
53
|
+
return null;
|
|
54
|
+
const origins = grant.sad.a.o;
|
|
55
|
+
if (!Array.isArray(origins) || origins.length !== 1 || typeof origins[0] !== "string") {
|
|
56
|
+
throw new ValidationError("ACDC v2 group Grant requires one origin.");
|
|
57
|
+
}
|
|
58
|
+
return acdcV2GraphUse(hby, registry, origins[0], loadNests(hby.db, said));
|
|
59
|
+
}
|
|
60
|
+
/** Recheck current graph authorization at an accepted group's new delivery, output or consent action. */
|
|
61
|
+
export function requireAcdcV2GroupUse(hby, protocol, embedded) {
|
|
62
|
+
const grant = embedded.route === IPEX_GRANT_ROUTE
|
|
63
|
+
? embedded.said
|
|
64
|
+
: embedded.route === IPEX_ADMIT_ROUTE
|
|
65
|
+
? embedded.sad.p
|
|
66
|
+
: undefined;
|
|
67
|
+
if (typeof grant === "string" && acdcV2GrantUse(hby, protocol.exc, protocol.registry?.store ?? null, grant) !== true) {
|
|
68
|
+
throw new ValidationError("ACDC v2 group graph is unavailable for completed use.");
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/** Approve exactly one ACDC v2 IPEX stream before adding this member's signature; no new acceptance rows are manufactured. */
|
|
72
|
+
export function* prepareAcdcV2GroupIpex(hby, protocol, group, raw) {
|
|
73
|
+
const frames = parseBytes(concatBytes(Counter.makeGVC(Vrsn_2_0), raw));
|
|
74
|
+
const frame = frames[0], embedded = frame?.body;
|
|
75
|
+
if (frames.length !== 1 || !(embedded instanceof SerderKERI) || embedded.pvrsn.major !== 2 || embedded.pre !== group.pre
|
|
76
|
+
|| !embedded.route?.startsWith("/ipex/")) {
|
|
77
|
+
throw new ValidationError("ACDC v2 group approval requires one exact group-authored IPEX message.");
|
|
78
|
+
}
|
|
79
|
+
localGroupMember(hby, group.pre);
|
|
80
|
+
const envelope = envelopeFromFrame(frame);
|
|
81
|
+
const prior = localIpexContribution(hby.db, localGroupMember(hby, group.pre).pre, embedded, rebuildStoredExchangeGroups(hby.db, embedded.said));
|
|
82
|
+
if (!prior) {
|
|
83
|
+
// A group candidate legitimately carries fewer than its final threshold.
|
|
84
|
+
// Verify each supplied contribution against its accepted establishment keys;
|
|
85
|
+
// the ordinary Exchanger still owns threshold completion after explicit approval.
|
|
86
|
+
for (const proof of envelope.tsgs.filter(proof => proof.pre === group.pre)) {
|
|
87
|
+
if (proof.sn > BigInt(Number.MAX_SAFE_INTEGER))
|
|
88
|
+
throw new ValidationError("Invalid group proof ordinal.");
|
|
89
|
+
const said = hby.db.kels.getLast(group.pre, Number(proof.sn));
|
|
90
|
+
const event = said ? hby.db.getEvtSerder(group.pre, said) : null;
|
|
91
|
+
if (!event)
|
|
92
|
+
return null;
|
|
93
|
+
if (said !== proof.said || !event.estive
|
|
94
|
+
|| Kever.verifyIndexedSignatures(embedded.raw, proof.sigers, event.verfers).sigers.length
|
|
95
|
+
!== proof.sigers.length) {
|
|
96
|
+
throw new ValidationError("Invalid group member contribution.");
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
const supplied = verifyExchangeProofs(hby.db, embedded, {
|
|
100
|
+
tsgs: envelope.tsgs.filter(proof => proof.pre !== group.pre),
|
|
101
|
+
cigars: envelope.cigars,
|
|
102
|
+
sourceSeals: envelope.ssts,
|
|
103
|
+
});
|
|
104
|
+
if (supplied.invalid)
|
|
105
|
+
throw new ValidationError("ACDC v2 group candidate contains invalid exchange proof.");
|
|
106
|
+
if (supplied.missing.length)
|
|
107
|
+
return null;
|
|
108
|
+
if (embedded.route === IPEX_GRANT_ROUTE) {
|
|
109
|
+
const origins = embedded.sad.a.o;
|
|
110
|
+
if (!Array.isArray(origins) || origins.length !== 1 || typeof origins[0] !== "string") {
|
|
111
|
+
throw new ValidationError("ACDC v2 group Grant requires one origin.");
|
|
112
|
+
}
|
|
113
|
+
if (acdcV2GraphUse(hby, protocol.registry?.store ?? null, origins[0], frame.nests ?? []) !== true)
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
else if (embedded.route === IPEX_ADMIT_ROUTE) {
|
|
117
|
+
if (typeof embedded.sad.p !== "string"
|
|
118
|
+
|| acdcV2GrantUse(hby, protocol.exc, protocol.registry?.store ?? null, embedded.sad.p) !== true)
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
const establishment = group.kever, sigers = prior ? prior.sigers : group.sign(embedded.raw, true);
|
|
123
|
+
const proof = prior
|
|
124
|
+
?? new TransIdxSigGroup(new Prefixer({ qb64: group.pre }), hby.db.getEvtSerder(group.pre, establishment.lastEst.d).sner, new Diger({ qb64: establishment.lastEst.d }), sigers);
|
|
125
|
+
const approved = {
|
|
126
|
+
...frame,
|
|
127
|
+
attachments: [...frame.attachments, ...messageAttachmentGroups({ tsgs: [proof] }, Vrsn_2_0)],
|
|
128
|
+
};
|
|
129
|
+
const attachments = yield* call(() => collectPayload(attachmentPayload(approved, { gvrsn: Vrsn_2_0 })));
|
|
130
|
+
const wire = concatBytes(embedded.raw, attachments);
|
|
131
|
+
yield* new Reactor(protocol).processBytes(wire, { local: true });
|
|
132
|
+
yield* protocol.processEscrowsOnce();
|
|
133
|
+
return wire;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Approve one pending multisig wrapper around an embedded IPEX message.
|
|
137
|
+
*
|
|
138
|
+
* @param hby Borrowed local identities and accepted-state stores.
|
|
139
|
+
* @param protocol Borrowed semantic owner; this approval creates its own byte-input context.
|
|
140
|
+
* @param postman Borrowed delivery owner; the caller runs and joins its worker.
|
|
141
|
+
* @param reger Explicit legacy store, required for grant approval/delivery and fresh admit approval.
|
|
142
|
+
* @param wrapper Accepted multisig exchange carrying the proposed IPEX child.
|
|
143
|
+
* @param options Approval/genus policy used for the existing group workflow.
|
|
144
|
+
* @returns Approval and current group/protocol completion information.
|
|
145
|
+
*/
|
|
146
|
+
export function* approveMultisigIpex(hby, protocol, postman, reger, wrapper, options = {}) {
|
|
147
|
+
const { child, groupHab } = yield* loadIpexProposal(hby, wrapper);
|
|
148
|
+
const { event: embedded, genus } = child;
|
|
149
|
+
const embeddedSaid = embedded.said;
|
|
150
|
+
if (embedded.pvrsn.major === 1 && embedded.route === IPEX_GRANT_ROUTE && !reger) {
|
|
151
|
+
throw new ValidationError("VDR runtime did not open Reger.");
|
|
152
|
+
}
|
|
153
|
+
const payloadSaid = multisigPayloadSaid(wrapper);
|
|
154
|
+
if (!payloadSaid)
|
|
155
|
+
throw new ValidationError("Multisig IPEX approval requires its coordination identity.");
|
|
156
|
+
if (!hby.db.meids.get([payloadSaid]).some(index => index.qb64 === wrapper.said)) {
|
|
157
|
+
// Recover only this explicitly selected accepted wrapper after an interrupted
|
|
158
|
+
// handler. Ordinary intake owns the index; do not synthesize it or sweep history.
|
|
159
|
+
const message = yield* abortable(signal => collectBytes(protocol.exc.replay(wrapper.said, signal)));
|
|
160
|
+
yield* new Reactor(protocol).processBytes(message, { local: true });
|
|
161
|
+
if (!hby.db.meids.get([payloadSaid]).some(index => index.qb64 === wrapper.said)) {
|
|
162
|
+
throw new ValidationError("Selected IPEX wrapper was not indexed by ordinary intake.");
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
const approved = yield* approveIpexChild(hby, protocol, groupHab, child, wrapper, reger);
|
|
166
|
+
if (!approved)
|
|
167
|
+
return { approved: null, accepted: protocol.exc.complete(embeddedSaid), messages: [], deliveries: [] };
|
|
168
|
+
const publication = options.publish
|
|
169
|
+
? yield* publishGroupIpexProposal(hby, protocol, postman, groupHab, approved, genus)
|
|
170
|
+
: { messages: [], deliveries: [] };
|
|
171
|
+
const deliveries = publication.deliveries;
|
|
172
|
+
if ((options.sendLead ?? true)
|
|
173
|
+
&& hby.db.exns.get([embeddedSaid])?.said === embeddedSaid
|
|
174
|
+
&& protocol.exc.lead(groupHab, embeddedSaid)) {
|
|
175
|
+
deliveries.push(...(yield* sendCompletedGroupIpex(hby, postman, reger, groupHab, embedded, options.gvrsn, protocol.registry?.store ?? null, protocol.exc)));
|
|
176
|
+
}
|
|
177
|
+
return {
|
|
178
|
+
accepted: hby.db.exns.get([embeddedSaid])?.said === embeddedSaid,
|
|
179
|
+
messages: publication.messages,
|
|
180
|
+
deliveries,
|
|
181
|
+
approved,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
/** Read the exact stored v2 child, or decode the separately framed legacy embed. */
|
|
185
|
+
export function storedMultisigIpexBody(db, wrapper) {
|
|
186
|
+
if (wrapper.pvrsn.major === 1) {
|
|
187
|
+
const sad = embeddedBusinessExnSAD(wrapper);
|
|
188
|
+
return sad ? new SerderKERI({ sad }) : null;
|
|
189
|
+
}
|
|
190
|
+
const children = loadNests(db, wrapper.said), child = children[0]?.body, attrs = wrapper.sad?.a;
|
|
191
|
+
return children.length === 1 && child instanceof SerderKERI && child.pvrsn.major === 2
|
|
192
|
+
&& attrs && typeof attrs === "object" && !Array.isArray(attrs)
|
|
193
|
+
&& attrs.exn === child.said && attrs.gid === child.pre
|
|
194
|
+
? child
|
|
195
|
+
: null;
|
|
196
|
+
}
|
|
197
|
+
/** Decode one accepted coordination wrapper and select its actual local group signing state. */
|
|
198
|
+
function* loadIpexProposal(hby, wrapper) {
|
|
199
|
+
let child;
|
|
200
|
+
if (wrapper.pvrsn.major === 2) {
|
|
201
|
+
const nested = loadNests(hby.db, wrapper.said);
|
|
202
|
+
const frame = nested[0], attrs = wrapper.sad?.a;
|
|
203
|
+
if (nested.length !== 1 || !(frame.body instanceof SerderKERI) || frame.body.pvrsn.major !== 2
|
|
204
|
+
|| !attrs || typeof attrs !== "object" || Array.isArray(attrs)
|
|
205
|
+
|| attrs.exn !== frame.body.said
|
|
206
|
+
|| attrs.gid !== frame.body.pre) {
|
|
207
|
+
throw new ValidationError("Multisig IPEX approval requires its exact retained child.");
|
|
208
|
+
}
|
|
209
|
+
child = {
|
|
210
|
+
event: frame.body,
|
|
211
|
+
attachment: yield* call(() => collectPayload(attachmentPayload(frame, { gvrsn: Vrsn_2_0 }))),
|
|
212
|
+
genus: Vrsn_2_0,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
child = multisigChild(hby, wrapper, "exn");
|
|
217
|
+
if (!child)
|
|
218
|
+
throw new ValidationError("Multisig IPEX approval requires an embedded child.");
|
|
219
|
+
}
|
|
220
|
+
const group = child.event.pre;
|
|
221
|
+
if (!group || !child.event.said || !wrapper.said) {
|
|
222
|
+
throw new ValidationError("Multisig IPEX approval requires wrapper, group, and embedded SAIDs.");
|
|
223
|
+
}
|
|
224
|
+
const groupHab = hby.habs.get(group);
|
|
225
|
+
if (!groupHab)
|
|
226
|
+
throw new ValidationError(`Local group ${group} is missing member signing state.`);
|
|
227
|
+
return { child, groupHab };
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Admit peer evidence, reuse or sign the local contribution, then advance ordinary escrows.
|
|
231
|
+
* The operation owns its byte-input context, borrowing only semantic owners and identities.
|
|
232
|
+
* It neither publishes member wrappers nor sends the completed business exchange.
|
|
233
|
+
*/
|
|
234
|
+
function* approveIpexChild(hby, protocol, groupHab, child, wrapper, reger) {
|
|
235
|
+
if (wrapper.pvrsn.major === 2) {
|
|
236
|
+
const retained = hby.db.exns.get([wrapper.said]);
|
|
237
|
+
if (!retained || !bytesEqual(retained.raw, wrapper.raw)
|
|
238
|
+
|| !protocol.exc.verifyAccepted(wrapper.said, MULTISIG_EXN_ROUTE)) {
|
|
239
|
+
throw new ValidationError("V2 IPEX approval requires the exact authenticated stored wrapper.");
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
const { event: embedded, attachment: peerAttachment, genus } = child;
|
|
243
|
+
if (embedded.pvrsn.major === 2) {
|
|
244
|
+
return yield* prepareAcdcV2GroupIpex(hby, protocol, groupHab, concatBytes(embedded.raw, peerAttachment));
|
|
245
|
+
}
|
|
246
|
+
if (embedded.route === IPEX_GRANT_ROUTE) {
|
|
247
|
+
if (!reger)
|
|
248
|
+
throw new ValidationError("Grant approval requires the local credential wallet.");
|
|
249
|
+
if (!credentialGrantReady(hby, reger, embedded, peerAttachment, genus))
|
|
250
|
+
return null;
|
|
251
|
+
}
|
|
252
|
+
const input = new Reactor(protocol);
|
|
253
|
+
if (peerAttachment.length > 0) {
|
|
254
|
+
yield* input.processBytes(concatBytes(Counter.makeGVC(genus), embedded.raw, peerAttachment), { local: true });
|
|
255
|
+
yield* protocol.processEscrowsOnce();
|
|
256
|
+
}
|
|
257
|
+
const member = localGroupMember(hby, groupHab.pre);
|
|
258
|
+
const prior = storedGroupMessage(hby.db, member.pre, wrapper);
|
|
259
|
+
let approved;
|
|
260
|
+
if (prior) {
|
|
261
|
+
// Accepted child proofs can replace provisional sets. The recipient wrapper
|
|
262
|
+
// retains this member's actual contribution independently of that merged row.
|
|
263
|
+
const retained = multisigChild(hby, prior, "exn");
|
|
264
|
+
if (!retained || retained.event.said !== embedded.said) {
|
|
265
|
+
throw new ValidationError("Recorded IPEX approval has a different child.");
|
|
266
|
+
}
|
|
267
|
+
const frames = parseBytes(concatBytes(Counter.makeGVC(retained.genus), retained.event.raw, retained.attachment));
|
|
268
|
+
if (frames.length !== 1)
|
|
269
|
+
throw new ValidationError("Recorded IPEX approval must retain one child message.");
|
|
270
|
+
const proof = localIpexContribution(hby.db, member.pre, embedded, envelopeFromFrame(frames[0]).tsgs);
|
|
271
|
+
if (!proof)
|
|
272
|
+
throw new ValidationError("Recorded IPEX approval lacks a valid member contribution.");
|
|
273
|
+
approved = concatBytes(serializeMessage(embedded, { tsgs: [proof], gvrsn: genus }), peerAttachment);
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
if (!ipexConversationReady(hby.db, embedded))
|
|
277
|
+
return null;
|
|
278
|
+
if (embedded.route === IPEX_ADMIT_ROUTE) {
|
|
279
|
+
if (!reger)
|
|
280
|
+
throw new ValidationError("Admit approval requires the local credential wallet.");
|
|
281
|
+
const prior = embedded.ked?.p;
|
|
282
|
+
const grant = typeof prior === "string" && prior.length > 0 ? hby.db.exns.get([prior]) : null;
|
|
283
|
+
if (!grant)
|
|
284
|
+
throw new ValidationError("Admit approval requires its accepted grant.");
|
|
285
|
+
validateAdmitGrant(grant, groupHab.pre, reger);
|
|
286
|
+
if (ipexRecipient(embedded, grant) !== grant.pre) {
|
|
287
|
+
throw new ValidationError("Admit recipient does not match its grant sender.");
|
|
288
|
+
}
|
|
289
|
+
const response = hby.db.erpy.get([grant.said]);
|
|
290
|
+
if (response && response.qb64 !== embedded.said) {
|
|
291
|
+
throw new ValidationError("Grant already has another accepted response.");
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
approved = groupIpexPartial(hby, groupHab, embedded, peerAttachment, genus);
|
|
295
|
+
}
|
|
296
|
+
yield* input.processBytes(concatBytes(Counter.makeGVC(genus), approved), { local: true });
|
|
297
|
+
yield* protocol.processEscrowsOnce();
|
|
298
|
+
return approved;
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Reuse this member's verified stored contribution, or sign its first partial.
|
|
302
|
+
* Group and member rotation cannot replace a recorded signature. Peer proof
|
|
303
|
+
* bytes remain distinct input; only a genuine local signature permits reuse.
|
|
304
|
+
*/
|
|
305
|
+
export function groupIpexPartial(hby, groupHab, embedded, attachments = new Uint8Array(), gvrsn = Vrsn_1_0) {
|
|
306
|
+
if (embedded.pvrsn.major === 2) {
|
|
307
|
+
throw new ValidationError("ACDC v2 group IPEX requires exact-stream prepareAcdcV2GroupIpex approval.");
|
|
308
|
+
}
|
|
309
|
+
const group = groupHab.pre;
|
|
310
|
+
const groupRecord = hby.db.getHab(group);
|
|
311
|
+
const memberPre = groupRecord?.mid;
|
|
312
|
+
const memberHab = memberPre ? hby.habs.get(memberPre) : null;
|
|
313
|
+
if (embedded.pre !== group || !embedded.said) {
|
|
314
|
+
throw new ValidationError("IPEX sender must match the selected group and have a SAID.");
|
|
315
|
+
}
|
|
316
|
+
const prior = memberHab
|
|
317
|
+
? localIpexContribution(hby.db, memberHab.pre, embedded, rebuildStoredExchangeGroups(hby.db, embedded.said))
|
|
318
|
+
: null;
|
|
319
|
+
if (prior)
|
|
320
|
+
return concatBytes(serializeMessage(embedded, { tsgs: [prior], gvrsn }), attachments);
|
|
321
|
+
const groupKever = groupHab.kever;
|
|
322
|
+
if (!group || !groupKever || !memberHab) {
|
|
323
|
+
throw new ValidationError(`Local group ${group || "<missing>"} is missing member signing state.`);
|
|
324
|
+
}
|
|
325
|
+
// Hab owns contribution selection, including a member that rotated ahead of
|
|
326
|
+
// the group's accepted key list. A fresh endorsement needs current authority
|
|
327
|
+
// only; recorded contributions above retain their original proof bytes.
|
|
328
|
+
const sigers = groupHab.sign(embedded.raw, true);
|
|
329
|
+
const estSaid = groupKever.lastEst.d || groupKever.said;
|
|
330
|
+
const estEvent = estSaid ? hby.db.getEvtSerder(group, estSaid) : null;
|
|
331
|
+
const seqner = estEvent?.sner;
|
|
332
|
+
if (!estSaid || !seqner) {
|
|
333
|
+
throw new ValidationError(`Missing establishment event material for group ${group}.`);
|
|
334
|
+
}
|
|
335
|
+
const tsg = new TransIdxSigGroup(new Prefixer({ qb64: group }), seqner, new Diger({ qb64: estSaid }), sigers);
|
|
336
|
+
return concatBytes(serializeMessage(embedded, { tsgs: [tsg], pipelined: false, gvrsn }), attachments);
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Prepare recipient-specific wrappers, replaying recorded ones, and admit each
|
|
340
|
+
* exact packet locally before returning any transmission work. Composition owns
|
|
341
|
+
* the delivery worker. Ordinary Baser/Multiplexor evidence is the recovery record;
|
|
342
|
+
* there is no new queue or cross-store/network transaction.
|
|
343
|
+
*/
|
|
344
|
+
function* prepareGroupIpexMessages(hby, protocol, groupHab, embedded, childGvrsn) {
|
|
345
|
+
const member = localGroupMember(hby, groupHab.pre);
|
|
346
|
+
const frames = parseBytes(childGvrsn ? concatBytes(Counter.makeGVC(childGvrsn), embedded) : embedded);
|
|
347
|
+
const childFrame = frames[0], child = childFrame?.body;
|
|
348
|
+
if (frames.length !== 1 || !(child instanceof SerderKERI)) {
|
|
349
|
+
throw new ValidationError("Group IPEX requires one complete exchange.");
|
|
350
|
+
}
|
|
351
|
+
const genus = childFrame.gvrsn ?? child.gvrsn ?? childGvrsn ?? child.pvrsn;
|
|
352
|
+
if (child.pvrsn.major === 2) {
|
|
353
|
+
if (child.route === IPEX_GRANT_ROUTE) {
|
|
354
|
+
const origins = child.sad.a.o;
|
|
355
|
+
if (!Array.isArray(origins) || origins.length !== 1 || typeof origins[0] !== "string"
|
|
356
|
+
|| acdcV2GraphUse(hby, protocol.registry?.store ?? null, origins[0], childFrame.nests ?? []) !== true) {
|
|
357
|
+
throw new ValidationError("ACDC v2 group graph is unavailable before proposal publication.");
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
else if (child.route === IPEX_ADMIT_ROUTE && (typeof child.sad.p !== "string"
|
|
361
|
+
|| acdcV2GrantUse(hby, protocol.exc, protocol.registry?.store ?? null, child.sad.p) !== true)) {
|
|
362
|
+
throw new ValidationError("ACDC v2 group Grant is unavailable before Admit publication.");
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
const payload = { gid: groupHab.pre, ...multisigChildGenusAttrs(child, genus) };
|
|
366
|
+
const input = new Reactor(protocol);
|
|
367
|
+
const messages = [];
|
|
368
|
+
for (const recipient of remoteGroupMembers(hby, member, groupSigningMembers(hby, groupHab.pre))) {
|
|
369
|
+
const prepared = child.pvrsn.major === 2
|
|
370
|
+
? yield* prepareMultisigEventExn(member.pre, { route: MULTISIG_EXN_ROUTE, attrs: { gid: groupHab.pre } }, embedded, {
|
|
371
|
+
recipient,
|
|
372
|
+
version: Vrsn_2_0,
|
|
373
|
+
childGvrsn: genus,
|
|
374
|
+
})
|
|
375
|
+
: exchange(MULTISIG_EXN_ROUTE, payload, {
|
|
376
|
+
sender: member.pre,
|
|
377
|
+
recipient,
|
|
378
|
+
version: Vrsn_1_0,
|
|
379
|
+
embeds: { exn: embedded },
|
|
380
|
+
});
|
|
381
|
+
const signed = yield* prepareGroupMessage(protocol.exc, member, recipient, prepared);
|
|
382
|
+
yield* input.processBytes(signed.message, { local: true });
|
|
383
|
+
if (!protocol.exc.complete(signed.exnSaid)
|
|
384
|
+
|| !hby.db.meids.get([signed.payloadSaid]).some(index => index.qb64 === signed.exnSaid)) {
|
|
385
|
+
throw new ValidationError("Group IPEX wrapper was not accepted and indexed locally.");
|
|
386
|
+
}
|
|
387
|
+
messages.push(signed);
|
|
388
|
+
}
|
|
389
|
+
return messages;
|
|
390
|
+
}
|
|
391
|
+
/** Publish approval wrappers through ordinary Poster sends; never acquire workers or stores here. */
|
|
392
|
+
export function* publishGroupIpexProposal(hby, protocol, postman, groupHab, embedded, childGvrsn) {
|
|
393
|
+
const outcomes = [];
|
|
394
|
+
for (const message of yield* prepareGroupIpexMessages(hby, protocol, groupHab, embedded, childGvrsn)) {
|
|
395
|
+
outcomes.push(yield* sendGroupMessage(postman, message));
|
|
396
|
+
}
|
|
397
|
+
return groupSendResult(outcomes);
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Publish an initial command's member wrappers with StreamPoster's original
|
|
401
|
+
* first-present-role routing. Shared preparation signs/replays and admits locally;
|
|
402
|
+
* this concrete operation retains its existing finite-stream transport contract.
|
|
403
|
+
*/
|
|
404
|
+
export function* publishInitialGroupIpex(hby, protocol, postman, groupHab, embedded, childGvrsn) {
|
|
405
|
+
const outcomes = [];
|
|
406
|
+
for (const message of yield* prepareGroupIpexMessages(hby, protocol, groupHab, embedded, childGvrsn)) {
|
|
407
|
+
const evt = postman.sendStream({
|
|
408
|
+
src: message.src,
|
|
409
|
+
dest: message.recipient,
|
|
410
|
+
msgs: [message.message],
|
|
411
|
+
topic: "multisig",
|
|
412
|
+
}, { notify: true });
|
|
413
|
+
const outcome = yield* postman.wait(evt);
|
|
414
|
+
if (outcome.kin === "failed")
|
|
415
|
+
throw outcome.error;
|
|
416
|
+
outcomes.push({
|
|
417
|
+
recipient: message.recipient,
|
|
418
|
+
exnSaid: message.exnSaid,
|
|
419
|
+
payloadSaid: message.payloadSaid,
|
|
420
|
+
deliveries: outcome.deliveries,
|
|
421
|
+
});
|
|
422
|
+
}
|
|
423
|
+
return groupSendResult(outcomes);
|
|
424
|
+
}
|
|
425
|
+
/** Approve stored wrappers for one IPEX child without external lead sending or acquiring stores/workers. */
|
|
426
|
+
export function* approveStoredMultisigIpexWrappers(hby, protocol, embeddedSaid, reger) {
|
|
427
|
+
for (const [, wrapper] of hby.db.exns.getTopItemIter()) {
|
|
428
|
+
if (wrapper.route !== MULTISIG_EXN_ROUTE) {
|
|
429
|
+
continue;
|
|
430
|
+
}
|
|
431
|
+
const embedded = storedMultisigIpexBody(hby.db, wrapper);
|
|
432
|
+
if (!embedded || embedded.said !== embeddedSaid) {
|
|
433
|
+
continue;
|
|
434
|
+
}
|
|
435
|
+
const { child, groupHab } = yield* loadIpexProposal(hby, wrapper);
|
|
436
|
+
yield* approveIpexChild(hby, protocol, groupHab, child, wrapper, reger);
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* Return the first incomplete stored `/multisig/exn` wrapping `/ipex/*`.
|
|
441
|
+
*
|
|
442
|
+
* @param db Borrowed accepted exchanges; discovery does not mutate notices or approval state.
|
|
443
|
+
* @returns First incomplete stored IPEX proposal, or no result when none exists.
|
|
444
|
+
*/
|
|
445
|
+
export function findPendingMultisigIpex(db) {
|
|
446
|
+
for (const [, wrapper] of db.exns.getTopItemIter()) {
|
|
447
|
+
if (wrapper.route !== MULTISIG_EXN_ROUTE) {
|
|
448
|
+
continue;
|
|
449
|
+
}
|
|
450
|
+
const embedded = storedMultisigIpexBody(db, wrapper);
|
|
451
|
+
if (!embedded?.route?.startsWith("/ipex/")) {
|
|
452
|
+
continue;
|
|
453
|
+
}
|
|
454
|
+
const embeddedSaid = embedded.said;
|
|
455
|
+
if (typeof embeddedSaid !== "string" || db.exns.get([embeddedSaid])?.said === embeddedSaid) {
|
|
456
|
+
continue;
|
|
457
|
+
}
|
|
458
|
+
return wrapper;
|
|
459
|
+
}
|
|
460
|
+
return null;
|
|
461
|
+
}
|
|
462
|
+
/**
|
|
463
|
+
* Send a completed group IPEX message from the elected local lead.
|
|
464
|
+
*
|
|
465
|
+
* @param hby Borrowed local identities and accepted-state stores.
|
|
466
|
+
* @param postman Borrowed Poster; its delivery worker must run while this operation awaits outcomes.
|
|
467
|
+
* @param reger Borrowed credential evidence store for grant artifacts.
|
|
468
|
+
* @param groupHab Group sender whose elected local lead publishes completed output.
|
|
469
|
+
* @param embedded Completed embedded IPEX message.
|
|
470
|
+
* @param gvrsn Attachment genus for the outgoing child/artifact stream.
|
|
471
|
+
* @returns Completed delivery results when this member is the elected sender.
|
|
472
|
+
*/
|
|
473
|
+
export function* sendCompletedGroupIpex(hby, postman, reger, groupHab, embedded, gvrsn = Vrsn_1_0, registry = null, exchanger) {
|
|
474
|
+
if (!embedded.said) {
|
|
475
|
+
throw new ValidationError("Completed group IPEX message is missing a SAID.");
|
|
476
|
+
}
|
|
477
|
+
const priorSaid = embedded.ked?.p;
|
|
478
|
+
const prior = typeof priorSaid === "string" && priorSaid.length > 0 ? hby.db.exns.get([priorSaid]) : null;
|
|
479
|
+
const recipient = embedded.pvrsn.major === 2 && typeof embedded.sad?.ri === "string"
|
|
480
|
+
? embedded.sad.ri
|
|
481
|
+
: ipexRecipient(embedded, prior ?? undefined);
|
|
482
|
+
if (!recipient) {
|
|
483
|
+
throw new ValidationError(`Unable to find recipient for ${embedded.route ?? "<unknown>"} ${embedded.said}.`);
|
|
484
|
+
}
|
|
485
|
+
const messages = [];
|
|
486
|
+
if (embedded.pvrsn.major === 2) {
|
|
487
|
+
if (!exchanger) {
|
|
488
|
+
throw new ValidationError("ACDC v2 group delivery requires its actual exchange verification owner.");
|
|
489
|
+
}
|
|
490
|
+
const grant = embedded.route === IPEX_GRANT_ROUTE
|
|
491
|
+
? embedded.said
|
|
492
|
+
: embedded.route === IPEX_ADMIT_ROUTE
|
|
493
|
+
? embedded.sad.p
|
|
494
|
+
: undefined;
|
|
495
|
+
if (typeof grant === "string" && acdcV2GrantUse(hby, exchanger, registry, grant) !== true) {
|
|
496
|
+
throw new ValidationError("ACDC v2 group graph is unavailable for completed delivery.");
|
|
497
|
+
}
|
|
498
|
+
if (embedded.route === IPEX_GRANT_ROUTE) {
|
|
499
|
+
const nests = loadNests(hby.db, embedded.said), aids = new Set([groupHab.pre]), regids = new Set();
|
|
500
|
+
for (const node of nests) {
|
|
501
|
+
const body = node.body;
|
|
502
|
+
if (body.issuer)
|
|
503
|
+
aids.add(body.issuer);
|
|
504
|
+
if (body.issuee)
|
|
505
|
+
aids.add(body.issuee);
|
|
506
|
+
if (body.regid)
|
|
507
|
+
regids.add(body.regid);
|
|
508
|
+
const a = body.sad.a;
|
|
509
|
+
if (a && typeof a === "object" && typeof a.rd === "string")
|
|
510
|
+
regids.add(a.rd);
|
|
511
|
+
}
|
|
512
|
+
messages.push(Counter.makeGVC(Vrsn_2_0));
|
|
513
|
+
for (const aid of aids) {
|
|
514
|
+
const state = hby.db.getKever(aid);
|
|
515
|
+
if (state)
|
|
516
|
+
messages.push(...hby.db.cloneDelegation(state, Vrsn_2_0), ...hby.db.clonePreIter(aid, 0, Vrsn_2_0));
|
|
517
|
+
}
|
|
518
|
+
for (const regid of regids) {
|
|
519
|
+
if (!registry)
|
|
520
|
+
throw new ValidationError("ACDC v2 group delivery registry evidence is unavailable.");
|
|
521
|
+
messages.push(registry.cloneTel(regid));
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
else if (embedded.route === IPEX_GRANT_ROUTE) {
|
|
526
|
+
if (!reger) {
|
|
527
|
+
throw new ValidationError("VDR runtime did not open Reger.");
|
|
528
|
+
}
|
|
529
|
+
messages.push(...groupGrantSupport(hby, reger, embedded, recipient, gvrsn));
|
|
530
|
+
}
|
|
531
|
+
if (embedded.pvrsn.major === 2) {
|
|
532
|
+
messages.push(yield* abortable(signal => collectBytes(exchanger.replay(embedded.said, signal))));
|
|
533
|
+
return yield* sendCredentialStream(postman, localGroupMember(hby, groupHab.pre), recipient, messages);
|
|
534
|
+
}
|
|
535
|
+
else {
|
|
536
|
+
messages.push(storedExchangeMessage(hby, requireStoredExchange(hby, embedded.said), gvrsn));
|
|
537
|
+
}
|
|
538
|
+
return yield* sendCredentialBytes(postman, localGroupMember(hby, groupHab.pre), recipient, messages);
|
|
539
|
+
}
|
|
540
|
+
/** Build credential support from the explicitly selected legacy store. */
|
|
541
|
+
function groupGrantSupport(hby, reger, embedded, recipient, gvrsn) {
|
|
542
|
+
const credentialSaid = credentialSaidFromGrant(embedded);
|
|
543
|
+
if (!credentialSaid)
|
|
544
|
+
throw new ValidationError("Grant is missing its credential SAID.");
|
|
545
|
+
const [creder] = reger.cloneCred(credentialSaid);
|
|
546
|
+
return credentialPresentationSupportMessages(hby, reger, creder, recipient, gvrsn);
|
|
547
|
+
}
|
|
548
|
+
/** Load one accepted stored EXN by SAID. */
|
|
549
|
+
export function requireStoredExchange(hby, said) {
|
|
550
|
+
const stored = hby.db.exns.get([said]);
|
|
551
|
+
if (!stored) {
|
|
552
|
+
throw new ValidationError(`Exchange ${said} is not stored as accepted.`);
|
|
553
|
+
}
|
|
554
|
+
return stored;
|
|
555
|
+
}
|
|
556
|
+
/**
|
|
557
|
+
* Rebuild an accepted EXN with its signatures and path/proof payloads.
|
|
558
|
+
* epath stores complete counted groups; remove each source counter before the
|
|
559
|
+
* serializer supplies the selected output genus's counter. Retain the selected
|
|
560
|
+
* grant's actual child proofs; support reconstruction must not replace them.
|
|
561
|
+
*/
|
|
562
|
+
export function storedExchangeMessage(hby, serder, gvrsn = Vrsn_1_0) {
|
|
563
|
+
if (!serder.said) {
|
|
564
|
+
throw new ValidationError("Exchange message is missing a SAID.");
|
|
565
|
+
}
|
|
566
|
+
const cigars = hby.db.ecigs.get([serder.said]).map(([, cigar]) => cigar);
|
|
567
|
+
const sourceGenus = resolveAttachmentGvrsn(serder, hby.db.exchangeMeta.get([serder.said])?.gvrsn);
|
|
568
|
+
const pathed = hby.db.epath.get([serder.said]).map((text) => {
|
|
569
|
+
const raw = new TextEncoder().encode(text);
|
|
570
|
+
return raw.slice(new Counter({ qb64b: raw, version: sourceGenus }).fullSize);
|
|
571
|
+
});
|
|
572
|
+
return serializeMessage(serder, {
|
|
573
|
+
tsgs: rebuildStoredExchangeGroups(hby.db, serder.said),
|
|
574
|
+
cigars,
|
|
575
|
+
pathed,
|
|
576
|
+
pipelined: false,
|
|
577
|
+
gvrsn,
|
|
578
|
+
});
|
|
579
|
+
}
|
|
580
|
+
/**
|
|
581
|
+
* Send raw credential/IPEX bytes over the credential mailbox topic.
|
|
582
|
+
*
|
|
583
|
+
* @param postman Borrowed Poster; its delivery worker must run while this operation awaits outcomes.
|
|
584
|
+
* @param hab Local signing habitat; its state/store lifetime remains with the caller.
|
|
585
|
+
* @param dest Final recipient AID.
|
|
586
|
+
* @param msgs Complete signed credential/IPEX messages in required order.
|
|
587
|
+
* @returns Successful destination URLs; failed concrete outcomes throw.
|
|
588
|
+
*/
|
|
589
|
+
export function* sendCredentialBytes(postman, hab, dest, msgs) {
|
|
590
|
+
const sent = [];
|
|
591
|
+
for (const msg of msgs) {
|
|
592
|
+
const evt = postman.send({
|
|
593
|
+
src: hab.pre,
|
|
594
|
+
dest,
|
|
595
|
+
msg,
|
|
596
|
+
topic: CREDENTIAL_MAILBOX_TOPIC,
|
|
597
|
+
}, { notify: true });
|
|
598
|
+
const outcome = yield* postman.wait(evt);
|
|
599
|
+
if (outcome.kin === "failed")
|
|
600
|
+
throw outcome.error;
|
|
601
|
+
sent.push(...outcome.deliveries);
|
|
602
|
+
}
|
|
603
|
+
return sent;
|
|
604
|
+
}
|
|
605
|
+
/**
|
|
606
|
+
* Send an initial IPEX command's prepared batch through one stream admission.
|
|
607
|
+
*
|
|
608
|
+
* @param postman Borrowed Poster; an independently running worker owns delivery.
|
|
609
|
+
* @param hab Local source signer; bytes are already signed before admission.
|
|
610
|
+
* @param dest Resolved final recipient AID.
|
|
611
|
+
* @param msgs Finite ordered support and business messages sharing endpoint selection.
|
|
612
|
+
* @returns Actual delivered URLs; a failed concrete outcome throws its original error.
|
|
613
|
+
*/
|
|
614
|
+
export function* sendCredentialStream(postman, hab, dest, msgs) {
|
|
615
|
+
const evt = postman.sendStream({ src: hab.pre, dest, topic: CREDENTIAL_MAILBOX_TOPIC, msgs }, { notify: true });
|
|
616
|
+
const outcome = yield* postman.wait(evt);
|
|
617
|
+
if (outcome.kin === "failed")
|
|
618
|
+
throw outcome.error;
|
|
619
|
+
return outcome.deliveries;
|
|
620
|
+
}
|
|
621
|
+
function rebuildStoredExchangeGroups(db, said) {
|
|
622
|
+
const groups = [];
|
|
623
|
+
let currentKey = null;
|
|
624
|
+
let currentSigers = [];
|
|
625
|
+
const flush = () => {
|
|
626
|
+
if (!currentKey || currentSigers.length === 0) {
|
|
627
|
+
return;
|
|
628
|
+
}
|
|
629
|
+
groups.push(new TransIdxSigGroup(new Prefixer({ qb64: currentKey[0] }), seqnerFromSnh(currentKey[1]), new Diger({ qb64: currentKey[2] }), currentSigers));
|
|
630
|
+
currentSigers = [];
|
|
631
|
+
};
|
|
632
|
+
for (const [keys, siger] of db.esigs.getTopItemIter([said, ""])) {
|
|
633
|
+
const groupKey = keys.slice(1);
|
|
634
|
+
if (!groupKey[0] || !groupKey[1] || !groupKey[2]) {
|
|
635
|
+
continue;
|
|
636
|
+
}
|
|
637
|
+
if (currentKey
|
|
638
|
+
&& (currentKey[0] !== groupKey[0] || currentKey[1] !== groupKey[1] || currentKey[2] !== groupKey[2])) {
|
|
639
|
+
flush();
|
|
640
|
+
}
|
|
641
|
+
currentKey = [groupKey[0], groupKey[1], groupKey[2]];
|
|
642
|
+
currentSigers.push(siger);
|
|
643
|
+
}
|
|
644
|
+
flush();
|
|
645
|
+
return groups;
|
|
646
|
+
}
|
|
647
|
+
function seqnerFromSnh(snh) {
|
|
648
|
+
return new Seqner({ code: "0A", raw: hexToFixedBytes(snh, 16) });
|
|
649
|
+
}
|
|
650
|
+
function hexToFixedBytes(hex, size) {
|
|
651
|
+
const normalized = hex.length % 2 === 0 ? hex : `0${hex}`;
|
|
652
|
+
if (!/^[0-9a-f]+$/i.test(normalized)) {
|
|
653
|
+
throw new ValidationError(`Invalid hex ordinal ${hex}`);
|
|
654
|
+
}
|
|
655
|
+
if (normalized.length > size * 2) {
|
|
656
|
+
throw new ValidationError(`Hex ordinal ${hex} exceeds ${size} bytes.`);
|
|
657
|
+
}
|
|
658
|
+
const raw = new Uint8Array(size);
|
|
659
|
+
const padded = normalized.padStart(size * 2, "0");
|
|
660
|
+
for (let index = 0; index < size; index += 1) {
|
|
661
|
+
raw[index] = Number.parseInt(padded.slice(index * 2, (index * 2) + 2), 16);
|
|
662
|
+
}
|
|
663
|
+
return raw;
|
|
664
|
+
}
|