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
|
@@ -1,914 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Witness host and controller-side receipting helpers.
|
|
3
|
-
*
|
|
4
|
-
* This module ports the missing operational slice around already-landed
|
|
5
|
-
* receipt-core behavior:
|
|
6
|
-
* - witness receipt/query decision helpers
|
|
7
|
-
* - witness-local ingress processing
|
|
8
|
-
* - synchronous witness receipt endpoints
|
|
9
|
-
* - controller-side witness submission, catchup, and receipt fanout
|
|
10
|
-
*
|
|
11
|
-
* Architectural rules:
|
|
12
|
-
* - normal receipt/escrow decisions stay in `Kevery` and friends
|
|
13
|
-
* - parser/router ownership stays inside the shared runtime/parser seams
|
|
14
|
-
* - concrete listener ownership lives in `tufa`; this module stays on the
|
|
15
|
-
* protocol/runtime side of that boundary
|
|
16
|
-
*/
|
|
17
|
-
import { concatBytes, Counter, CtrDexV1, Ilks, parse, parseBytes } from "cesr-ts";
|
|
18
|
-
import { action, call, ensure } from "effection";
|
|
19
|
-
import { ValidationError } from "../core/errors.js";
|
|
20
|
-
import { receipt as receiptEvent, reply as replyEvent } from "../core/protocol-eventing.js";
|
|
21
|
-
import { Schemes } from "../core/schemes.js";
|
|
22
|
-
import { dgKey } from "../db/core/keys.js";
|
|
23
|
-
import { abortable, rethrowCleanupFailure } from "./abortable.js";
|
|
24
|
-
import { chunkBytes, collectBytes, streamBytes } from "./byte-source.js";
|
|
25
|
-
import { postCesr } from "./cesr-egress.js";
|
|
26
|
-
import { buildCesrRequest, CESR_CONTENT_TYPE, inspectCesrRequest, KERIPY_CESR_JSON_CONTENT_TYPE } from "./cesr-http.js";
|
|
27
|
-
import { acceptedEventReplayMessage } from "./habbing.js";
|
|
28
|
-
import { closeResponseBody, fetchResponseHandle } from "./httping.js";
|
|
29
|
-
import { envelopeFromFrame } from "./parsering.js";
|
|
30
|
-
import { Reactor } from "./reactor.js";
|
|
31
|
-
import { defaultRuntimeServices } from "./runtime-services.js";
|
|
32
|
-
import { converseCesrTcp } from "./tcp-conversation.js";
|
|
33
|
-
import { sendCesrTcp } from "./tcp-egress.js";
|
|
34
|
-
const WitnessReceiptPollAttempts = 20;
|
|
35
|
-
const WitnessReceiptPollDelayMs = 100;
|
|
36
|
-
const KERI_V1 = Object.freeze({ major: 1, minor: 0 });
|
|
37
|
-
const KERIPY_CONTENT_TYPE_ERROR = "content type";
|
|
38
|
-
const WITNESS_HTTP_CONTENT_TYPES = [
|
|
39
|
-
CESR_CONTENT_TYPE,
|
|
40
|
-
KERIPY_CESR_JSON_CONTENT_TYPE,
|
|
41
|
-
];
|
|
42
|
-
/** Build one attached `rct` message carrying detached receipt material. */
|
|
43
|
-
function buildDetachedReceiptMessage(serder, { wigers = [], cigars = [] }) {
|
|
44
|
-
if (wigers.length === 0 && cigars.length === 0) {
|
|
45
|
-
return serder.raw;
|
|
46
|
-
}
|
|
47
|
-
const attachments = [];
|
|
48
|
-
if (wigers.length > 0) {
|
|
49
|
-
attachments.push(new Counter({
|
|
50
|
-
code: CtrDexV1.WitnessIdxSigs,
|
|
51
|
-
count: wigers.length,
|
|
52
|
-
version: KERI_V1,
|
|
53
|
-
}).qb64b, ...wigers.map((wiger) => wiger.qb64b));
|
|
54
|
-
}
|
|
55
|
-
if (cigars.length > 0) {
|
|
56
|
-
attachments.push(new Counter({
|
|
57
|
-
code: CtrDexV1.NonTransReceiptCouples,
|
|
58
|
-
count: cigars.length,
|
|
59
|
-
version: KERI_V1,
|
|
60
|
-
}).qb64b, ...cigars.flatMap((cigar) => {
|
|
61
|
-
const verfer = cigar.verfer;
|
|
62
|
-
if (!verfer) {
|
|
63
|
-
throw new ValidationError("Detached non-transferable receipt is missing verifier context.");
|
|
64
|
-
}
|
|
65
|
-
return [verfer.qb64b, cigar.qb64b];
|
|
66
|
-
}));
|
|
67
|
-
}
|
|
68
|
-
const atc = concatBytes(...attachments);
|
|
69
|
-
if (atc.length % 4 !== 0) {
|
|
70
|
-
throw new ValidationError("Witness receipt attachment group is not quadlet aligned.");
|
|
71
|
-
}
|
|
72
|
-
return concatBytes(serder.raw, new Counter({
|
|
73
|
-
code: CtrDexV1.AttachmentGroup,
|
|
74
|
-
count: atc.length / 4,
|
|
75
|
-
version: KERI_V1,
|
|
76
|
-
}).qb64b, atc);
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Build one KERIpy-style endpoint `rct` message without an attachment-group
|
|
80
|
-
* wrapper.
|
|
81
|
-
*
|
|
82
|
-
* KERIpy's witness `/receipts` endpoints return `rct + counter + material`
|
|
83
|
-
* directly. KLI's receiptor depends on that exact shape when it re-fans the
|
|
84
|
-
* returned receipt material out to the other witnesses.
|
|
85
|
-
*/
|
|
86
|
-
function buildEndpointDetachedReceiptMessage(serder, { wigers = [], cigars = [] }) {
|
|
87
|
-
const parts = [serder.raw];
|
|
88
|
-
if (wigers.length > 0) {
|
|
89
|
-
parts.push(new Counter({
|
|
90
|
-
code: CtrDexV1.WitnessIdxSigs,
|
|
91
|
-
count: wigers.length,
|
|
92
|
-
version: KERI_V1,
|
|
93
|
-
}).qb64b, ...wigers.map((wiger) => wiger.qb64b));
|
|
94
|
-
}
|
|
95
|
-
if (cigars.length > 0) {
|
|
96
|
-
parts.push(new Counter({
|
|
97
|
-
code: CtrDexV1.NonTransReceiptCouples,
|
|
98
|
-
count: cigars.length,
|
|
99
|
-
version: KERI_V1,
|
|
100
|
-
}).qb64b, ...cigars.flatMap((cigar) => {
|
|
101
|
-
const verfer = cigar.verfer;
|
|
102
|
-
if (!verfer) {
|
|
103
|
-
throw new ValidationError("Endpoint receipt couple is missing verifier context.");
|
|
104
|
-
}
|
|
105
|
-
return [verfer.qb64b, cigar.qb64b];
|
|
106
|
-
}));
|
|
107
|
-
}
|
|
108
|
-
return concatBytes(...parts);
|
|
109
|
-
}
|
|
110
|
-
/** Build one attached `rct` message carrying witness indexed signatures. */
|
|
111
|
-
function buildWitnessReceiptMessage(serder, wigers) {
|
|
112
|
-
return buildEndpointDetachedReceiptMessage(serder, { wigers });
|
|
113
|
-
}
|
|
114
|
-
/** Inspect one complete receipt; hydrated proof values have no asynchronous lifetime. */
|
|
115
|
-
function inspectReceiptMessage(bytes) {
|
|
116
|
-
const frames = parseBytes(bytes);
|
|
117
|
-
if (frames.length !== 1)
|
|
118
|
-
throw new ValidationError("Expected one witness receipt message.");
|
|
119
|
-
const envelope = envelopeFromFrame(frames[0], false);
|
|
120
|
-
return { serder: envelope.serder, wigers: envelope.wigers, cigars: envelope.cigars };
|
|
121
|
-
}
|
|
122
|
-
/** Receipt endpoints return one finite proof; cancellation joins the reader before leaving this operation. */
|
|
123
|
-
function* readResponseBytes(response) {
|
|
124
|
-
return yield* abortable((signal) => collectBytes(streamBytes(response.body, { signal })));
|
|
125
|
-
}
|
|
126
|
-
/** Sleep for one short polling interval while staying cancellable. */
|
|
127
|
-
function* sleepMs(ms) {
|
|
128
|
-
yield* action((resolve) => {
|
|
129
|
-
const timeoutId = setTimeout(() => resolve(undefined), ms);
|
|
130
|
-
return () => clearTimeout(timeoutId);
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
/** Return the active wire-message habitat or `null` when selection is ambiguous. */
|
|
134
|
-
function cueHab(runtime, serviceHab) {
|
|
135
|
-
if (serviceHab) {
|
|
136
|
-
return serviceHab;
|
|
137
|
-
}
|
|
138
|
-
const habitats = runtime.hby.habs.values();
|
|
139
|
-
const first = habitats.next();
|
|
140
|
-
return first.done || !habitats.next().done ? null : first.value;
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* Consume a finite runtime cue pass outside Reactor, using the selected habitat.
|
|
144
|
-
*
|
|
145
|
-
* The host keeps mailbox side effects here so synchronous HTTP/TCP route
|
|
146
|
-
* handlers can inspect witness/receipt wire emissions before the outer runtime
|
|
147
|
-
* loop sees them. Returned snapshots copy the initial cue pass; streaming source
|
|
148
|
-
* callbacks consume each emission without collecting the complete response.
|
|
149
|
-
*/
|
|
150
|
-
export function* drainWitnessCues(runtime, serviceHab, cues, { deliver = true } = {}) {
|
|
151
|
-
return yield* finiteWitnessEmissions((consume) => consumeWitnessCues(runtime, serviceHab, cues, deliver, consume));
|
|
152
|
-
}
|
|
153
|
-
/** Copy finite wrapper output and close each actual replay iterator before returning. */
|
|
154
|
-
function finiteWitnessEmissions(process) {
|
|
155
|
-
return call(function* () {
|
|
156
|
-
const emissions = [];
|
|
157
|
-
yield* process(function* (emission) {
|
|
158
|
-
const messages = [];
|
|
159
|
-
const source = emission.messages[Symbol.iterator]();
|
|
160
|
-
let failure;
|
|
161
|
-
try {
|
|
162
|
-
while (true) {
|
|
163
|
-
const next = source.next();
|
|
164
|
-
if (next.done)
|
|
165
|
-
break;
|
|
166
|
-
const message = next.value;
|
|
167
|
-
if (!(message instanceof Uint8Array))
|
|
168
|
-
throw new TypeError("Witness output must be binary");
|
|
169
|
-
messages.push(new Uint8Array(message));
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
catch (error) {
|
|
173
|
-
failure = { error };
|
|
174
|
-
}
|
|
175
|
-
try {
|
|
176
|
-
source.return?.();
|
|
177
|
-
}
|
|
178
|
-
catch (error) {
|
|
179
|
-
if (failure && failure.error !== error) {
|
|
180
|
-
throw new AggregateError([failure.error, error], "Witness output cleanup failed");
|
|
181
|
-
}
|
|
182
|
-
throw error;
|
|
183
|
-
}
|
|
184
|
-
if (failure)
|
|
185
|
-
throw failure.error;
|
|
186
|
-
emissions.push({
|
|
187
|
-
...emission,
|
|
188
|
-
messages,
|
|
189
|
-
cue: emission.cue.kin === "replay" ? { ...emission.cue, messages } : emission.cue,
|
|
190
|
-
});
|
|
191
|
-
});
|
|
192
|
-
return emissions;
|
|
193
|
-
});
|
|
194
|
-
}
|
|
195
|
-
/** Transfer a finite source pass, borrowing emissions only through joined callback cleanup outside Reactor. */
|
|
196
|
-
function* consumeWitnessCues(runtime, serviceHab, cues, deliver, consume) {
|
|
197
|
-
if (cues !== runtime.cues)
|
|
198
|
-
throw new RangeError("Witness cue drain requires the runtime source deck");
|
|
199
|
-
const hab = cueHab(runtime, serviceHab);
|
|
200
|
-
if (!hab) {
|
|
201
|
-
return;
|
|
202
|
-
}
|
|
203
|
-
const count = cues.length;
|
|
204
|
-
for (let index = 0; index < count; index++) {
|
|
205
|
-
const more = yield* call(function* () {
|
|
206
|
-
let emission, prepared = false;
|
|
207
|
-
if (deliver) {
|
|
208
|
-
prepared = !cues.empty;
|
|
209
|
-
const cue = cues.peekHead();
|
|
210
|
-
if (cue) {
|
|
211
|
-
if (cue.kin === "query") {
|
|
212
|
-
runtime.querying.enqueueCue(cue, hab);
|
|
213
|
-
runtime.querying.observeCue(cue);
|
|
214
|
-
}
|
|
215
|
-
else
|
|
216
|
-
emission = hab.interpretCue(cue);
|
|
217
|
-
if (emission?.kind === "wire")
|
|
218
|
-
runtime.respondant.enqueueEmission(hab, emission);
|
|
219
|
-
else if (emission?.kind === "transport" && emission.cue.kin === "stream") {
|
|
220
|
-
runtime.mailboxDirector.retainQueryCue(emission.cue);
|
|
221
|
-
}
|
|
222
|
-
cues.pull();
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
else {
|
|
226
|
-
const cue = cues.peekHead();
|
|
227
|
-
if (cue) {
|
|
228
|
-
emission = hab.interpretCue(cue);
|
|
229
|
-
cues.pull();
|
|
230
|
-
prepared = true;
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
if (emission)
|
|
234
|
-
runtime.querying.observeCue(emission.cue);
|
|
235
|
-
if (!prepared) {
|
|
236
|
-
return false;
|
|
237
|
-
}
|
|
238
|
-
if (emission && consume)
|
|
239
|
-
yield* consume(emission);
|
|
240
|
-
return true;
|
|
241
|
-
});
|
|
242
|
-
if (deliver) {
|
|
243
|
-
yield* runtime.querying.deliverOnce();
|
|
244
|
-
yield* runtime.respondant.process();
|
|
245
|
-
}
|
|
246
|
-
if (!more)
|
|
247
|
-
break;
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
/**
|
|
251
|
-
* Own one witness input and settle each frame before requesting more input.
|
|
252
|
-
* Consume emissions individually, without retaining an aggregate result. The callback
|
|
253
|
-
* borrows emission iterators outside Reactor until consumption and cleanup finish.
|
|
254
|
-
* Source abort and cleanup belong to this input scope.
|
|
255
|
-
* Queued delivery and the callback share one interpretation until both finish.
|
|
256
|
-
*/
|
|
257
|
-
export function* processWitnessIngressSource(runtime, serviceHab, source, { local = false, deliver = true } = {}, consume) {
|
|
258
|
-
yield* call(function* () {
|
|
259
|
-
const controller = new AbortController();
|
|
260
|
-
const signal = controller.signal;
|
|
261
|
-
try {
|
|
262
|
-
signal.throwIfAborted();
|
|
263
|
-
const frames = parse(source(signal));
|
|
264
|
-
let pending;
|
|
265
|
-
// The earlier resource joins the read after processing children stop.
|
|
266
|
-
yield* ensure(function* () {
|
|
267
|
-
try {
|
|
268
|
-
if (pending) {
|
|
269
|
-
try {
|
|
270
|
-
yield* call(() => pending);
|
|
271
|
-
}
|
|
272
|
-
catch (error) {
|
|
273
|
-
rethrowCleanupFailure(error, signal);
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
finally {
|
|
278
|
-
yield* call(() => frames.return());
|
|
279
|
-
}
|
|
280
|
-
});
|
|
281
|
-
while (true) {
|
|
282
|
-
signal.throwIfAborted();
|
|
283
|
-
pending = frames.next();
|
|
284
|
-
let result;
|
|
285
|
-
try {
|
|
286
|
-
result = yield* call(() => pending);
|
|
287
|
-
}
|
|
288
|
-
catch (error) {
|
|
289
|
-
pending = undefined;
|
|
290
|
-
throw error;
|
|
291
|
-
}
|
|
292
|
-
pending = undefined;
|
|
293
|
-
signal.throwIfAborted();
|
|
294
|
-
if (result.done)
|
|
295
|
-
break;
|
|
296
|
-
const frame = result.value;
|
|
297
|
-
yield* runtime.reactor.dispatch(frame, { local, escrows: true });
|
|
298
|
-
yield* consumeWitnessCues(runtime, serviceHab, runtime.cues, deliver, consume);
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
finally {
|
|
302
|
-
controller.abort();
|
|
303
|
-
}
|
|
304
|
-
});
|
|
305
|
-
}
|
|
306
|
-
/**
|
|
307
|
-
* Parse and settle one inbound witness-host payload.
|
|
308
|
-
*
|
|
309
|
-
* This is the witness-host counterpart to generic runtime ingress.
|
|
310
|
-
*
|
|
311
|
-
* Responsibilities:
|
|
312
|
-
* - settle one inbound CESR payload with the correct witness-local semantics
|
|
313
|
-
* - immediately drain the resulting cues through the hosted witness habitat
|
|
314
|
-
* - return those cue emissions so the caller can make any request-scoped
|
|
315
|
-
* response decision
|
|
316
|
-
*
|
|
317
|
-
* Returned snapshots contain finite wire arrays. Source callbacks instead borrow
|
|
318
|
-
* each emission's iterator through consumption and cleanup.
|
|
319
|
-
*
|
|
320
|
-
* `local=true` is the crucial switch for the witness receipt path: accepted
|
|
321
|
-
* events that list the hosted witness emit `witness` cues instead of ordinary
|
|
322
|
-
* `receipt` cues.
|
|
323
|
-
*
|
|
324
|
-
* Durable routing rule:
|
|
325
|
-
* - TCP witness ingress, witness `/receipts`, and ordinary HTTP root ingress
|
|
326
|
-
* that targets the hosted witness AID should all reach this seam when the
|
|
327
|
-
* host is acting as that witness
|
|
328
|
-
* - generic runtime ingress should remain separate for mailbox streaming,
|
|
329
|
-
* `/ksn` replay publication, and other non-witness-root policies
|
|
330
|
-
*/
|
|
331
|
-
export function* processWitnessIngress(runtime, serviceHab, bytes, options = {}) {
|
|
332
|
-
return yield* finiteWitnessEmissions((consume) => processWitnessIngressSource(runtime, serviceHab, (signal) => chunkBytes(bytes, { signal }), options, consume));
|
|
333
|
-
}
|
|
334
|
-
/** Authorize the hosted witness against the accepted event, retaining pending dependencies in escrow. */
|
|
335
|
-
function witnessReceiptEligibility(serviceHab, serder) {
|
|
336
|
-
const pre = serder.pre;
|
|
337
|
-
const said = serder.said;
|
|
338
|
-
if (!pre || said === null) {
|
|
339
|
-
return {
|
|
340
|
-
kind: "reject",
|
|
341
|
-
message: "Receipted event must expose pre, sn, and said.",
|
|
342
|
-
};
|
|
343
|
-
}
|
|
344
|
-
const acceptedSaid = serder.sn === null ? null : serviceHab.db.kels.getLast(pre, serder.sn);
|
|
345
|
-
if (!acceptedSaid)
|
|
346
|
-
return { kind: "escrow" };
|
|
347
|
-
if (acceptedSaid !== said)
|
|
348
|
-
return { kind: "reject", message: "Receipted event is not the accepted KEL event." };
|
|
349
|
-
const witnesses = serviceHab.db.acceptedEventWitnesses(serder);
|
|
350
|
-
if (!witnesses)
|
|
351
|
-
return { kind: "escrow" };
|
|
352
|
-
if (!witnesses.includes(serviceHab.pre)) {
|
|
353
|
-
return {
|
|
354
|
-
kind: "reject",
|
|
355
|
-
message: `${serviceHab.pre} is not an authorized witness for ${pre}:${said}: wits=${JSON.stringify(witnesses)}.`,
|
|
356
|
-
};
|
|
357
|
-
}
|
|
358
|
-
return { kind: "accept", accepted: serder };
|
|
359
|
-
}
|
|
360
|
-
/** Handle the synchronous witness receipt POST policy. */
|
|
361
|
-
export function* witnessReceiptPost(runtime, serviceHab, bytes) {
|
|
362
|
-
const serder = inspectCesrRequest(bytes);
|
|
363
|
-
if (!serder) {
|
|
364
|
-
return { kind: "reject", status: 400, message: "Invalid CESR request" };
|
|
365
|
-
}
|
|
366
|
-
if (serder.ilk !== Ilks.icp
|
|
367
|
-
&& serder.ilk !== Ilks.rot
|
|
368
|
-
&& serder.ilk !== Ilks.ixn
|
|
369
|
-
&& serder.ilk !== Ilks.dip
|
|
370
|
-
&& serder.ilk !== Ilks.drt) {
|
|
371
|
-
return {
|
|
372
|
-
kind: "reject",
|
|
373
|
-
status: 400,
|
|
374
|
-
message: `invalid event type (${serder.ilk}) for receipting`,
|
|
375
|
-
};
|
|
376
|
-
}
|
|
377
|
-
yield* processWitnessIngress(runtime, serviceHab, bytes, {
|
|
378
|
-
local: true,
|
|
379
|
-
deliver: false,
|
|
380
|
-
});
|
|
381
|
-
const eligibility = witnessReceiptEligibility(serviceHab, serder);
|
|
382
|
-
if (eligibility.kind === "reject") {
|
|
383
|
-
return { kind: "reject", status: 400, message: eligibility.message };
|
|
384
|
-
}
|
|
385
|
-
if (eligibility.kind === "escrow") {
|
|
386
|
-
return { kind: "escrow", status: 202 };
|
|
387
|
-
}
|
|
388
|
-
const inspected = inspectReceiptMessage(serviceHab.receipt(eligibility.accepted));
|
|
389
|
-
const body = buildEndpointDetachedReceiptMessage(inspected.serder, {
|
|
390
|
-
wigers: inspected.wigers,
|
|
391
|
-
cigars: inspected.cigars,
|
|
392
|
-
});
|
|
393
|
-
return { kind: "accepted", status: 200, body };
|
|
394
|
-
}
|
|
395
|
-
/** Handle `GET /receipts` witness retrieval. */
|
|
396
|
-
export function witnessReceiptGet(serviceHab, query) {
|
|
397
|
-
const pre = query.pre ?? null;
|
|
398
|
-
if (!pre) {
|
|
399
|
-
return {
|
|
400
|
-
kind: "reject",
|
|
401
|
-
status: 400,
|
|
402
|
-
message: "query param 'pre' is required",
|
|
403
|
-
};
|
|
404
|
-
}
|
|
405
|
-
let said = query.said ?? null;
|
|
406
|
-
if (query.sn === null && !said) {
|
|
407
|
-
return {
|
|
408
|
-
kind: "reject",
|
|
409
|
-
status: 400,
|
|
410
|
-
message: "either 'sn' or 'said' query param is required",
|
|
411
|
-
};
|
|
412
|
-
}
|
|
413
|
-
if (query.sn !== null && query.sn !== undefined) {
|
|
414
|
-
said = serviceHab.db.kels.getLast(pre, query.sn);
|
|
415
|
-
}
|
|
416
|
-
if (!said) {
|
|
417
|
-
return {
|
|
418
|
-
kind: "reject",
|
|
419
|
-
status: 404,
|
|
420
|
-
message: `event for ${pre} at ${String(query.sn ?? "")} (${String(said)}) not found`,
|
|
421
|
-
};
|
|
422
|
-
}
|
|
423
|
-
const serder = serviceHab.db.getEvtSerder(pre, said);
|
|
424
|
-
if (!serder) {
|
|
425
|
-
return {
|
|
426
|
-
kind: "reject",
|
|
427
|
-
status: 404,
|
|
428
|
-
message: `Missing event for dig=${said}.`,
|
|
429
|
-
};
|
|
430
|
-
}
|
|
431
|
-
const wits = serviceHab.db.acceptedEventWitnesses(serder);
|
|
432
|
-
if (!wits || !wits.includes(serviceHab.pre)) {
|
|
433
|
-
return {
|
|
434
|
-
kind: "reject",
|
|
435
|
-
status: 400,
|
|
436
|
-
message: `${serviceHab.pre} is not a valid witness for ${pre} event at ${serder.sn}.`,
|
|
437
|
-
};
|
|
438
|
-
}
|
|
439
|
-
const reserder = receiptEvent(pre, serder.sn ?? 0, said);
|
|
440
|
-
const body = buildWitnessReceiptMessage(reserder, serviceHab.db.wigs.get(dgKey(pre, said)));
|
|
441
|
-
return { kind: "accepted", status: 200, body };
|
|
442
|
-
}
|
|
443
|
-
/** Handle `GET /query` witness log replay. */
|
|
444
|
-
export function witnessQueryGet(serviceHab, query) {
|
|
445
|
-
const typ = query.typ ?? null;
|
|
446
|
-
if (!typ) {
|
|
447
|
-
return {
|
|
448
|
-
kind: "reject",
|
|
449
|
-
status: 400,
|
|
450
|
-
message: "'typ' query param is required",
|
|
451
|
-
};
|
|
452
|
-
}
|
|
453
|
-
if (typ === "kel") {
|
|
454
|
-
const pre = query.pre ?? null;
|
|
455
|
-
if (!pre) {
|
|
456
|
-
return {
|
|
457
|
-
kind: "reject",
|
|
458
|
-
status: 400,
|
|
459
|
-
message: "'pre' query param is required",
|
|
460
|
-
};
|
|
461
|
-
}
|
|
462
|
-
if (query.sn !== null && query.sn !== undefined) {
|
|
463
|
-
const first = serviceHab.db.kels.getLast(pre, query.sn);
|
|
464
|
-
if (!first) {
|
|
465
|
-
return {
|
|
466
|
-
kind: "reject",
|
|
467
|
-
status: 400,
|
|
468
|
-
message: `non-existent event at seq-num ${query.sn}`,
|
|
469
|
-
};
|
|
470
|
-
}
|
|
471
|
-
}
|
|
472
|
-
return {
|
|
473
|
-
kind: "accepted",
|
|
474
|
-
status: 200,
|
|
475
|
-
messages: serviceHab.db.witnessReplay(pre, query.sn ?? null) ?? [],
|
|
476
|
-
};
|
|
477
|
-
}
|
|
478
|
-
if (typ === "tel") {
|
|
479
|
-
return {
|
|
480
|
-
kind: "reject",
|
|
481
|
-
status: 501,
|
|
482
|
-
message: "TEL witness query replay is not yet available in tufa.",
|
|
483
|
-
};
|
|
484
|
-
}
|
|
485
|
-
return {
|
|
486
|
-
kind: "reject",
|
|
487
|
-
status: 400,
|
|
488
|
-
message: "unknown query type.",
|
|
489
|
-
};
|
|
490
|
-
}
|
|
491
|
-
/** Return the full advertised scheme map for one witness endpoint. */
|
|
492
|
-
function witnessUrls(hab, witness) {
|
|
493
|
-
return hab.fetchUrls(witness);
|
|
494
|
-
}
|
|
495
|
-
/** Resolve the HTTP or HTTPS witness endpoint when available. */
|
|
496
|
-
function witnessHttpUrl(hab, witness) {
|
|
497
|
-
const urls = witnessUrls(hab, witness);
|
|
498
|
-
return urls[Schemes.https] ?? urls[Schemes.http] ?? null;
|
|
499
|
-
}
|
|
500
|
-
/** Resolve the TCP witness endpoint when available. */
|
|
501
|
-
function witnessTcpUrl(hab, witness) {
|
|
502
|
-
const urls = witnessUrls(hab, witness);
|
|
503
|
-
return urls[Schemes.tcp] ?? null;
|
|
504
|
-
}
|
|
505
|
-
/** Choose the generic witness transport URL: HTTP first, TCP fallback second. */
|
|
506
|
-
function preferredWitnessTransportUrl(hab, witness) {
|
|
507
|
-
return witnessHttpUrl(hab, witness) ?? witnessTcpUrl(hab, witness);
|
|
508
|
-
}
|
|
509
|
-
/** Build one `loc/scheme` replay bundle for witness introductions. */
|
|
510
|
-
function witnessSchemeReplies(hab, eids) {
|
|
511
|
-
const replies = eids
|
|
512
|
-
.map((eid) => hab.loadLocScheme(eid))
|
|
513
|
-
.filter((msg) => msg.length > 0);
|
|
514
|
-
return replies.length === 0 ? new Uint8Array() : concatBytes(...replies);
|
|
515
|
-
}
|
|
516
|
-
/**
|
|
517
|
-
* Send via HTTP first; an explicit Reactor processes same-socket TCP replies.
|
|
518
|
-
* Without a Reactor TCP reports local transmission only. Actual socket/parser
|
|
519
|
-
* cleanup finishes before this borrowed protocol processor can be released.
|
|
520
|
-
*/
|
|
521
|
-
export function* sendWitnessMessage(hab, witness, bytes, auth, services, reactor) {
|
|
522
|
-
const url = preferredWitnessTransportUrl(hab, witness);
|
|
523
|
-
if (!url) {
|
|
524
|
-
throw new ValidationError(`Unable to find a valid endpoint for witness ${witness}.`);
|
|
525
|
-
}
|
|
526
|
-
const parsed = new URL(url);
|
|
527
|
-
if (parsed.protocol === "tcp:") {
|
|
528
|
-
yield* call(function* () {
|
|
529
|
-
if (reactor) {
|
|
530
|
-
yield* converseCesrTcp(url, bytes, {
|
|
531
|
-
clock: services?.clock,
|
|
532
|
-
replies: { reactor, local: true },
|
|
533
|
-
});
|
|
534
|
-
}
|
|
535
|
-
else {
|
|
536
|
-
yield* sendCesrTcp(url, bytes, { clock: services?.clock });
|
|
537
|
-
}
|
|
538
|
-
});
|
|
539
|
-
return;
|
|
540
|
-
}
|
|
541
|
-
yield* postCesr(url, (signal) => chunkBytes(bytes, { signal }), {
|
|
542
|
-
bodyMode: "header",
|
|
543
|
-
destination: witness,
|
|
544
|
-
headers: auth ? { Authorization: auth } : undefined,
|
|
545
|
-
services: services ?? defaultRuntimeServices,
|
|
546
|
-
});
|
|
547
|
-
}
|
|
548
|
-
function isKeripyContentTypeRejection(status, contentType, responseText) {
|
|
549
|
-
return status === 406
|
|
550
|
-
&& contentType === CESR_CONTENT_TYPE
|
|
551
|
-
&& responseText.toLowerCase().includes(KERIPY_CONTENT_TYPE_ERROR);
|
|
552
|
-
}
|
|
553
|
-
/** Poll one witness `GET /receipts` endpoint until the receipt becomes available. */
|
|
554
|
-
function* pollWitnessReceipt(hab, witness, pre, sn, said) {
|
|
555
|
-
const httpUrl = witnessHttpUrl(hab, witness);
|
|
556
|
-
if (!httpUrl) {
|
|
557
|
-
return {
|
|
558
|
-
kind: "reject",
|
|
559
|
-
status: 400,
|
|
560
|
-
message: `Witness ${witness} does not advertise an HTTP(S) endpoint for receipt polling.`,
|
|
561
|
-
};
|
|
562
|
-
}
|
|
563
|
-
for (let attempt = 0; attempt < WitnessReceiptPollAttempts; attempt += 1) {
|
|
564
|
-
const response = yield* call(() => getWitnessReceiptEndpoint(hab, witness, {
|
|
565
|
-
pre,
|
|
566
|
-
sn,
|
|
567
|
-
said,
|
|
568
|
-
}));
|
|
569
|
-
if (response.kind === "accepted") {
|
|
570
|
-
return response;
|
|
571
|
-
}
|
|
572
|
-
if (response.kind === "reject" && response.status !== 404) {
|
|
573
|
-
return response;
|
|
574
|
-
}
|
|
575
|
-
yield* sleepMs(WitnessReceiptPollDelayMs);
|
|
576
|
-
}
|
|
577
|
-
return {
|
|
578
|
-
kind: "reject",
|
|
579
|
-
status: 408,
|
|
580
|
-
message: `Timed out waiting for witness receipt from ${witness}.`,
|
|
581
|
-
};
|
|
582
|
-
}
|
|
583
|
-
/** Request one witness receipt via `POST /receipts`. */
|
|
584
|
-
function* postWitnessReceiptEndpoint(hab, witness, message, auth) {
|
|
585
|
-
const url = witnessHttpUrl(hab, witness);
|
|
586
|
-
if (!url) {
|
|
587
|
-
return {
|
|
588
|
-
kind: "reject",
|
|
589
|
-
status: 400,
|
|
590
|
-
message: `Witness ${witness} does not advertise an HTTP(S) receipt endpoint.`,
|
|
591
|
-
};
|
|
592
|
-
}
|
|
593
|
-
const responseUrl = new URL(url);
|
|
594
|
-
responseUrl.pathname = `${responseUrl.pathname.replace(/\/+$/, "") || ""}/receipts`;
|
|
595
|
-
let lastStatus = 0;
|
|
596
|
-
let lastText = "";
|
|
597
|
-
for (const contentType of WITNESS_HTTP_CONTENT_TYPES) {
|
|
598
|
-
const request = buildCesrRequest(message, {
|
|
599
|
-
contentType,
|
|
600
|
-
destination: witness,
|
|
601
|
-
});
|
|
602
|
-
const { response } = yield* fetchResponseHandle(responseUrl.toString(), {
|
|
603
|
-
method: "POST",
|
|
604
|
-
headers: {
|
|
605
|
-
...request.headers,
|
|
606
|
-
...(auth ? { Authorization: auth } : {}),
|
|
607
|
-
},
|
|
608
|
-
body: request.body,
|
|
609
|
-
});
|
|
610
|
-
if (response.status === 202) {
|
|
611
|
-
yield* closeResponseBody(response);
|
|
612
|
-
return { kind: "escrow", status: 202 };
|
|
613
|
-
}
|
|
614
|
-
if (response.status === 200) {
|
|
615
|
-
const body = yield* readResponseBytes(response);
|
|
616
|
-
const inspected = inspectReceiptMessage(body);
|
|
617
|
-
return {
|
|
618
|
-
kind: "accepted",
|
|
619
|
-
status: 200,
|
|
620
|
-
body,
|
|
621
|
-
wigers: inspected.wigers,
|
|
622
|
-
cigars: inspected.cigars,
|
|
623
|
-
};
|
|
624
|
-
}
|
|
625
|
-
const body = yield* readResponseBytes(response);
|
|
626
|
-
lastStatus = response.status;
|
|
627
|
-
lastText = new TextDecoder().decode(body);
|
|
628
|
-
if (isKeripyContentTypeRejection(response.status, contentType, lastText)) {
|
|
629
|
-
continue;
|
|
630
|
-
}
|
|
631
|
-
return { kind: "reject", status: response.status, message: lastText };
|
|
632
|
-
}
|
|
633
|
-
return {
|
|
634
|
-
kind: "reject",
|
|
635
|
-
status: lastStatus,
|
|
636
|
-
message: lastText,
|
|
637
|
-
};
|
|
638
|
-
}
|
|
639
|
-
/** Request one stored witness receipt via `GET /receipts`. */
|
|
640
|
-
function* getWitnessReceiptEndpoint(hab, witness, query) {
|
|
641
|
-
const url = witnessHttpUrl(hab, witness);
|
|
642
|
-
if (!url) {
|
|
643
|
-
return {
|
|
644
|
-
kind: "reject",
|
|
645
|
-
status: 400,
|
|
646
|
-
message: `Witness ${witness} does not advertise an HTTP(S) receipt endpoint.`,
|
|
647
|
-
};
|
|
648
|
-
}
|
|
649
|
-
const endpoint = new URL(url);
|
|
650
|
-
endpoint.pathname = `${endpoint.pathname.replace(/\/+$/, "") || ""}/receipts`;
|
|
651
|
-
endpoint.searchParams.set("pre", query.pre);
|
|
652
|
-
if (query.sn !== undefined) {
|
|
653
|
-
endpoint.searchParams.set("sn", String(query.sn));
|
|
654
|
-
}
|
|
655
|
-
if (query.said) {
|
|
656
|
-
endpoint.searchParams.set("said", query.said);
|
|
657
|
-
}
|
|
658
|
-
const { response } = yield* fetchResponseHandle(endpoint.toString(), {
|
|
659
|
-
method: "GET",
|
|
660
|
-
});
|
|
661
|
-
if (response.status !== 200) {
|
|
662
|
-
const body = yield* readResponseBytes(response);
|
|
663
|
-
return {
|
|
664
|
-
kind: "reject",
|
|
665
|
-
status: response.status,
|
|
666
|
-
message: new TextDecoder().decode(body),
|
|
667
|
-
};
|
|
668
|
-
}
|
|
669
|
-
const body = yield* readResponseBytes(response);
|
|
670
|
-
const inspected = inspectReceiptMessage(body);
|
|
671
|
-
return {
|
|
672
|
-
kind: "accepted",
|
|
673
|
-
status: 200,
|
|
674
|
-
body,
|
|
675
|
-
wigers: inspected.wigers,
|
|
676
|
-
cigars: inspected.cigars,
|
|
677
|
-
};
|
|
678
|
-
}
|
|
679
|
-
/**
|
|
680
|
-
* Controller-side synchronous witness receipt orchestration.
|
|
681
|
-
*
|
|
682
|
-
* Responsibilities:
|
|
683
|
-
* - publish through HTTP receipt endpoints (generic submission opts into TCP reply intake)
|
|
684
|
-
* - catch up newly added witnesses before receipting
|
|
685
|
-
* - persist returned receipts locally through the protocol processor
|
|
686
|
-
* - fan witness receipts out to the complementary witnesses
|
|
687
|
-
*/
|
|
688
|
-
export class Receiptor {
|
|
689
|
-
/** Borrow the protocol processor or create one over the caller's existing Habery; no stores or workers are opened. */
|
|
690
|
-
constructor(hby, { reactor, services = defaultRuntimeServices } = {}) {
|
|
691
|
-
Object.defineProperty(this, "hby", {
|
|
692
|
-
enumerable: true,
|
|
693
|
-
configurable: true,
|
|
694
|
-
writable: true,
|
|
695
|
-
value: void 0
|
|
696
|
-
});
|
|
697
|
-
Object.defineProperty(this, "reactor", {
|
|
698
|
-
enumerable: true,
|
|
699
|
-
configurable: true,
|
|
700
|
-
writable: true,
|
|
701
|
-
value: void 0
|
|
702
|
-
});
|
|
703
|
-
Object.defineProperty(this, "services", {
|
|
704
|
-
enumerable: true,
|
|
705
|
-
configurable: true,
|
|
706
|
-
writable: true,
|
|
707
|
-
value: void 0
|
|
708
|
-
});
|
|
709
|
-
if (reactor && reactor.hby !== hby)
|
|
710
|
-
throw new RangeError("Receiptor Reactor must own the same Habery");
|
|
711
|
-
this.hby = hby;
|
|
712
|
-
this.reactor = reactor ?? new Reactor(hby);
|
|
713
|
-
this.services = services;
|
|
714
|
-
}
|
|
715
|
-
/** Submit the latest or specified event to all witnesses and gather receipts. */
|
|
716
|
-
*receipt(pre, { sn, auths = {}, allowTcp = false } = {}) {
|
|
717
|
-
return yield* call(() => this.receiptOnce(pre, { sn, auths }, allowTcp));
|
|
718
|
-
}
|
|
719
|
-
/** One scoped attempt joins actual receipt HTTP/TCP work before returning. */
|
|
720
|
-
*receiptOnce(pre, { sn, auths }, allowTcp) {
|
|
721
|
-
const hab = this.hby.habs.get(pre) ?? null;
|
|
722
|
-
if (!hab) {
|
|
723
|
-
throw new ValidationError(`${pre} not a valid local AID.`);
|
|
724
|
-
}
|
|
725
|
-
const kever = hab.kever;
|
|
726
|
-
if (!kever) {
|
|
727
|
-
throw new ValidationError(`Missing accepted key state for ${pre}.`);
|
|
728
|
-
}
|
|
729
|
-
const eventSn = sn ?? kever.sn;
|
|
730
|
-
const { serder, message } = acceptedEventReplayMessage(this.hby, pre, eventSn);
|
|
731
|
-
const witnesses = this.hby.db.acceptedEventWitnesses(serder);
|
|
732
|
-
if (witnesses.length === 0) {
|
|
733
|
-
return { witnesses: [], statuses: {} };
|
|
734
|
-
}
|
|
735
|
-
if (serder.ilk === Ilks.rot || serder.ilk === Ilks.drt) {
|
|
736
|
-
for (const witness of serder.adds) {
|
|
737
|
-
yield* this.catchup(pre, witness);
|
|
738
|
-
}
|
|
739
|
-
}
|
|
740
|
-
const receiptGroups = new Map();
|
|
741
|
-
const statuses = {};
|
|
742
|
-
const said = serder.said;
|
|
743
|
-
if (!said) {
|
|
744
|
-
throw new ValidationError("Local event must expose a SAID before witness receipting.");
|
|
745
|
-
}
|
|
746
|
-
for (const witness of witnesses) {
|
|
747
|
-
if (kever.delegated) {
|
|
748
|
-
for (const dmsg of this.hby.db.cloneDelegation(kever)) {
|
|
749
|
-
yield* sendWitnessMessage(hab, witness, dmsg, undefined, this.services, this.reactor);
|
|
750
|
-
}
|
|
751
|
-
}
|
|
752
|
-
if (allowTcp && !witnessHttpUrl(hab, witness) && witnessTcpUrl(hab, witness)) {
|
|
753
|
-
yield* sendWitnessMessage(hab, witness, message, undefined, this.services, this.reactor);
|
|
754
|
-
statuses[witness] = 200;
|
|
755
|
-
}
|
|
756
|
-
else {
|
|
757
|
-
// A single receipt attempt owns its response until parsing and collection finish.
|
|
758
|
-
let response = yield* call(() => postWitnessReceiptEndpoint(hab, witness, message, auths[witness]));
|
|
759
|
-
if (response.kind === "escrow") {
|
|
760
|
-
response = yield* pollWitnessReceipt(hab, witness, pre, eventSn, said);
|
|
761
|
-
}
|
|
762
|
-
statuses[witness] = response.status;
|
|
763
|
-
if (response.kind !== "accepted") {
|
|
764
|
-
const detail = response.kind === "reject" ? response.message : "receipt remained escrowed";
|
|
765
|
-
throw new ValidationError(`Witness ${witness} failed to receipt ${pre}:${eventSn.toString(16)}: ${detail}`);
|
|
766
|
-
}
|
|
767
|
-
yield* this.reactor.processBytes(response.body, { local: false });
|
|
768
|
-
yield* this.reactor.processEscrowsOnce();
|
|
769
|
-
}
|
|
770
|
-
// HTTP status and socket drain are transport facts; only accepted witness proof counts.
|
|
771
|
-
const index = witnesses.indexOf(witness);
|
|
772
|
-
const wigers = this.hby.db.wigs.get(dgKey(pre, said)).filter((siger) => siger.index === index);
|
|
773
|
-
if (wigers.length === 0) {
|
|
774
|
-
throw new ValidationError(`Witness ${witness} did not receipt ${pre}:${eventSn.toString(16)}.`);
|
|
775
|
-
}
|
|
776
|
-
receiptGroups.set(witness, wigers);
|
|
777
|
-
}
|
|
778
|
-
for (const witness of witnesses) {
|
|
779
|
-
const otherWigers = [...receiptGroups.entries()]
|
|
780
|
-
.flatMap(([current, wigers]) => current === witness ? [] : [...wigers]);
|
|
781
|
-
if (otherWigers.length === 0) {
|
|
782
|
-
continue;
|
|
783
|
-
}
|
|
784
|
-
const introWitnesses = witnesses.filter((current) => current !== witness && receiptGroups.has(current));
|
|
785
|
-
const parts = [];
|
|
786
|
-
if (serder.ilk === Ilks.icp
|
|
787
|
-
|| serder.ilk === Ilks.dip
|
|
788
|
-
|| ((serder.ilk === Ilks.rot || serder.ilk === Ilks.drt)
|
|
789
|
-
&& serder.adds.includes(witness))) {
|
|
790
|
-
const schemes = witnessSchemeReplies(hab, introWitnesses);
|
|
791
|
-
if (schemes.length > 0) {
|
|
792
|
-
parts.push(schemes);
|
|
793
|
-
}
|
|
794
|
-
}
|
|
795
|
-
parts.push(buildDetachedReceiptMessage(receiptEvent(pre, eventSn, said), { wigers: otherWigers }));
|
|
796
|
-
yield* sendWitnessMessage(hab, witness, concatBytes(...parts), undefined, this.services, this.reactor);
|
|
797
|
-
}
|
|
798
|
-
return { witnesses, statuses };
|
|
799
|
-
}
|
|
800
|
-
/** Query a stored witness receipt and apply it to local state when found. */
|
|
801
|
-
*get(pre, { sn, said } = {}) {
|
|
802
|
-
const hab = this.hby.habs.get(pre) ?? null;
|
|
803
|
-
if (!hab) {
|
|
804
|
-
throw new ValidationError(`${pre} not a valid local AID.`);
|
|
805
|
-
}
|
|
806
|
-
const kever = hab.kever;
|
|
807
|
-
if (!kever) {
|
|
808
|
-
throw new ValidationError(`Missing accepted key state for ${pre}.`);
|
|
809
|
-
}
|
|
810
|
-
const eventSn = sn ?? kever.sn;
|
|
811
|
-
const knownSaid = this.hby.db.kels.getLast(pre, eventSn);
|
|
812
|
-
const known = knownSaid ? this.hby.db.getEvtSerder(pre, knownSaid) : null;
|
|
813
|
-
const witnesses = known ? this.hby.db.acceptedEventWitnesses(known) : kever.wits;
|
|
814
|
-
const witness = [...witnesses].sort()[0];
|
|
815
|
-
if (!witness) {
|
|
816
|
-
return false;
|
|
817
|
-
}
|
|
818
|
-
const response = yield* call(() => getWitnessReceiptEndpoint(hab, witness, { pre, sn: eventSn, said }));
|
|
819
|
-
if (response.kind !== "accepted") {
|
|
820
|
-
return false;
|
|
821
|
-
}
|
|
822
|
-
yield* this.reactor.processBytes(response.body, { local: false });
|
|
823
|
-
yield* this.reactor.processEscrowsOnce();
|
|
824
|
-
const expectedSaid = this.hby.db.kels.getLast(pre, eventSn);
|
|
825
|
-
const accepted = expectedSaid ? this.hby.db.getEvtSerder(pre, expectedSaid) : null;
|
|
826
|
-
const index = accepted ? this.hby.db.acceptedEventWitnesses(accepted)?.indexOf(witness) : -1;
|
|
827
|
-
return !!expectedSaid && (said === undefined || said === expectedSaid)
|
|
828
|
-
&& this.hby.db.wigs.get(dgKey(pre, expectedSaid)).some((siger) => siger.index === index);
|
|
829
|
-
}
|
|
830
|
-
/** Catch one witness up through the same protocol processor used for receipt intake. */
|
|
831
|
-
*catchup(pre, witness) {
|
|
832
|
-
const hab = this.hby.habs.get(pre) ?? null;
|
|
833
|
-
if (!hab) {
|
|
834
|
-
throw new ValidationError(`${pre} not a valid local AID.`);
|
|
835
|
-
}
|
|
836
|
-
const kever = hab.kever;
|
|
837
|
-
if (kever?.delegated) {
|
|
838
|
-
for (const msg of this.hby.db.cloneDelegation(kever)) {
|
|
839
|
-
yield* sendWitnessMessage(hab, witness, msg, undefined, this.services, this.reactor);
|
|
840
|
-
}
|
|
841
|
-
}
|
|
842
|
-
for (const msg of this.hby.db.clonePreIter(pre)) {
|
|
843
|
-
yield* sendWitnessMessage(hab, witness, msg, undefined, this.services, this.reactor);
|
|
844
|
-
}
|
|
845
|
-
}
|
|
846
|
-
}
|
|
847
|
-
/**
|
|
848
|
-
* Higher-level full witness submission helper.
|
|
849
|
-
*
|
|
850
|
-
* HTTP uses finite receipt endpoints; TCP uses same-socket local reply intake
|
|
851
|
-
* and requires the requested witness signature to be persisted before fanout.
|
|
852
|
-
*/
|
|
853
|
-
export class WitnessReceiptor {
|
|
854
|
-
constructor(hby, { force = false, reactor, services } = {}) {
|
|
855
|
-
Object.defineProperty(this, "receiptor", {
|
|
856
|
-
enumerable: true,
|
|
857
|
-
configurable: true,
|
|
858
|
-
writable: true,
|
|
859
|
-
value: void 0
|
|
860
|
-
});
|
|
861
|
-
Object.defineProperty(this, "hby", {
|
|
862
|
-
enumerable: true,
|
|
863
|
-
configurable: true,
|
|
864
|
-
writable: true,
|
|
865
|
-
value: void 0
|
|
866
|
-
});
|
|
867
|
-
Object.defineProperty(this, "force", {
|
|
868
|
-
enumerable: true,
|
|
869
|
-
configurable: true,
|
|
870
|
-
writable: true,
|
|
871
|
-
value: void 0
|
|
872
|
-
});
|
|
873
|
-
this.hby = hby;
|
|
874
|
-
this.force = force;
|
|
875
|
-
this.receiptor = new Receiptor(hby, { reactor, services });
|
|
876
|
-
}
|
|
877
|
-
/** Ensure the current event reaches full witness receipt convergence. */
|
|
878
|
-
*submit(pre, { sn, auths = {} } = {}) {
|
|
879
|
-
const hab = this.hby.habs.get(pre) ?? null;
|
|
880
|
-
if (!hab) {
|
|
881
|
-
throw new ValidationError(`${pre} not a valid local AID.`);
|
|
882
|
-
}
|
|
883
|
-
const kever = hab.kever;
|
|
884
|
-
if (!kever) {
|
|
885
|
-
throw new ValidationError(`Missing accepted key state for ${pre}.`);
|
|
886
|
-
}
|
|
887
|
-
const eventSn = sn ?? kever.sn;
|
|
888
|
-
const { serder } = acceptedEventReplayMessage(this.hby, pre, eventSn);
|
|
889
|
-
const witnesses = this.hby.db.acceptedEventWitnesses(serder);
|
|
890
|
-
const currentWitnessCount = this.hby.db.wigs.get(dgKey(pre, serder.said)).length;
|
|
891
|
-
if (!this.force && currentWitnessCount >= witnesses.length) {
|
|
892
|
-
const statuses = Object.fromEntries(witnesses.map((witness) => [witness, 200]));
|
|
893
|
-
return { witnesses, statuses };
|
|
894
|
-
}
|
|
895
|
-
return yield* this.receiptor.receipt(pre, { sn: eventSn, auths, allowTcp: true });
|
|
896
|
-
}
|
|
897
|
-
}
|
|
898
|
-
/** Return an actual signed KERI reply; unknown or incompletely witnessed state is not advertised. */
|
|
899
|
-
export function witnessKeyStateGet(serviceHab, query) {
|
|
900
|
-
if (!query.destination || query.destination !== serviceHab.pre) {
|
|
901
|
-
return { kind: "reject", status: 400, message: "Recognized CESR destination required" };
|
|
902
|
-
}
|
|
903
|
-
if (!query.pre)
|
|
904
|
-
return { kind: "reject", status: 400, message: "'pre' query param is required" };
|
|
905
|
-
const kever = serviceHab.db.getKever(query.pre, { refresh: true });
|
|
906
|
-
if (!kever || !serviceHab.db.fullyWitnessed(kever.serder)) {
|
|
907
|
-
return { kind: "reject", status: 404, message: "Fully witnessed key state not found" };
|
|
908
|
-
}
|
|
909
|
-
return {
|
|
910
|
-
kind: "accepted",
|
|
911
|
-
status: 200,
|
|
912
|
-
body: serviceHab.endorse(replyEvent(`/ksn/${serviceHab.pre}`, kever.state().asDict())),
|
|
913
|
-
};
|
|
914
|
-
}
|