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,936 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Mailbox-first forwarding and polling support.
|
|
3
|
-
*
|
|
4
|
-
* KERIpy correspondence:
|
|
5
|
-
* - ports the conceptual roles of `Poster`, `StreamPoster`, `ForwardHandler`,
|
|
6
|
-
* and mailbox polling/query handling from `keri.app.forwarding` and
|
|
7
|
-
* `keri.app.indirecting`
|
|
8
|
-
*
|
|
9
|
-
* Current `keri-ts` difference:
|
|
10
|
-
* - delivery and polling are synchronous Effection operations instead of HIO
|
|
11
|
-
* doers
|
|
12
|
-
* - HTTP posting honors both KERIpy header mode and the Tufa-only body mode
|
|
13
|
-
*/
|
|
14
|
-
import { attachmentPayload, collectPayload, concatBytes, Counter, Diger, framePayload, MtrDex, nestedPayload, parseBytes, parsePather, SerderACDC, SerderKERI, Vrsn_2_0, } from "cesr-ts";
|
|
15
|
-
import { call, spawn } from "effection";
|
|
16
|
-
import { ValidationError } from "../core/errors.js";
|
|
17
|
-
import { CREDENTIAL_MAILBOX_TOPIC, DELEGATE_MAILBOX_TOPIC, OOBI_MAILBOX_TOPIC } from "../core/mailbox-topics.js";
|
|
18
|
-
import { exchange } from "../core/protocol-exchanging.js";
|
|
19
|
-
import { Roles } from "../core/roles.js";
|
|
20
|
-
import { dgKey } from "../db/core/keys.js";
|
|
21
|
-
import { abortable } from "./abortable.js";
|
|
22
|
-
import { chunkBytes } from "./byte-source.js";
|
|
23
|
-
import { attemptPostCesr, postCesr } from "./cesr-egress.js";
|
|
24
|
-
import { buildCesrRequest } from "./cesr-http.js";
|
|
25
|
-
import { closeResponseBody, fetchResponseHandleOrNull } from "./httping.js";
|
|
26
|
-
import { consumeMailboxSse } from "./mailbox-sse.js";
|
|
27
|
-
import { directDeliveryEndpoints, firstSortedEndpoint, mailboxDeliveryEndpoints, mailboxPollEndpoints, mailboxTopicKey, } from "./mailboxing.js";
|
|
28
|
-
import { Organizer } from "./organizing.js";
|
|
29
|
-
import { defaultRuntimeServices } from "./runtime-services.js";
|
|
30
|
-
import { runtimeTurn } from "./runtime-turn.js";
|
|
31
|
-
import { converseCesrTcp } from "./tcp-conversation.js";
|
|
32
|
-
import { sendCesrTcp } from "./tcp-egress.js";
|
|
33
|
-
/** Deliver prepared wire; explicit receiver lends same-socket intake, otherwise TCP drains output only. */
|
|
34
|
-
export function* sendPreparedCesrTarget(target, services, signal, receiver) {
|
|
35
|
-
if (target.kind === "tcp") {
|
|
36
|
-
if (receiver) {
|
|
37
|
-
yield* converseCesrTcp(target.url, target.message, {
|
|
38
|
-
clock: services.clock,
|
|
39
|
-
signal,
|
|
40
|
-
replies: { reactor: receiver.reactor, local: true },
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
else
|
|
44
|
-
yield* sendCesrTcp(target.url, target.message, { clock: services.clock, signal });
|
|
45
|
-
}
|
|
46
|
-
else if (target.kind === "http") {
|
|
47
|
-
yield* postCesrMessage(target.url, target.message, target.bodyMode, target.destination, services, signal);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
/** Preserve selected endpoint and signed bytes; TCP has no HTTP body framing mode. */
|
|
51
|
-
function remoteCesrTarget(endpoint, message, bodyMode) {
|
|
52
|
-
const base = { url: endpoint.url, destination: endpoint.eid, message };
|
|
53
|
-
return new URL(endpoint.url).protocol === "tcp:" ? { ...base, kind: "tcp" } : { ...base, kind: "http", bodyMode };
|
|
54
|
-
}
|
|
55
|
-
/** Join a prepared target attempt; local completion or peer refusal never implies protocol acceptance. */
|
|
56
|
-
export function* attemptPreparedCesrTarget(target, services, signal, receiver) {
|
|
57
|
-
if (target.kind === "http") {
|
|
58
|
-
const result = yield* attemptPostCesr(target.url, (signal) => chunkBytes(target.message, { signal }), {
|
|
59
|
-
bodyMode: target.bodyMode,
|
|
60
|
-
destination: target.destination,
|
|
61
|
-
services,
|
|
62
|
-
signal,
|
|
63
|
-
});
|
|
64
|
-
signal?.throwIfAborted();
|
|
65
|
-
if (result.kind === "complete")
|
|
66
|
-
return "complete";
|
|
67
|
-
return "refused";
|
|
68
|
-
}
|
|
69
|
-
if (target.kind === "stored") {
|
|
70
|
-
signal?.throwIfAborted();
|
|
71
|
-
return "complete";
|
|
72
|
-
}
|
|
73
|
-
receiver
|
|
74
|
-
? yield* converseCesrTcp(target.url, target.message, {
|
|
75
|
-
clock: services.clock,
|
|
76
|
-
signal,
|
|
77
|
-
replies: { ...receiver, local: true },
|
|
78
|
-
})
|
|
79
|
-
: yield* sendCesrTcp(target.url, target.message, { clock: services.clock, signal });
|
|
80
|
-
signal?.throwIfAborted();
|
|
81
|
-
return "complete";
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Mailbox-first postman for outbound EXN transport.
|
|
85
|
-
*
|
|
86
|
-
* Responsibilities:
|
|
87
|
-
* - resolve recipient aliases against organizer/contact state
|
|
88
|
-
* - route to all currently authorized recipient mailbox endpoints when present
|
|
89
|
-
* - fall back to direct controller/agent endpoints, then one witness endpoint,
|
|
90
|
-
* when no mailbox exists
|
|
91
|
-
*/
|
|
92
|
-
export class Poster {
|
|
93
|
-
constructor(hby, options = {}) {
|
|
94
|
-
Object.defineProperty(this, "hby", {
|
|
95
|
-
enumerable: true,
|
|
96
|
-
configurable: true,
|
|
97
|
-
writable: true,
|
|
98
|
-
value: void 0
|
|
99
|
-
});
|
|
100
|
-
Object.defineProperty(this, "mailboxer", {
|
|
101
|
-
enumerable: true,
|
|
102
|
-
configurable: true,
|
|
103
|
-
writable: true,
|
|
104
|
-
value: void 0
|
|
105
|
-
});
|
|
106
|
-
Object.defineProperty(this, "organizer", {
|
|
107
|
-
enumerable: true,
|
|
108
|
-
configurable: true,
|
|
109
|
-
writable: true,
|
|
110
|
-
value: void 0
|
|
111
|
-
});
|
|
112
|
-
Object.defineProperty(this, "services", {
|
|
113
|
-
enumerable: true,
|
|
114
|
-
configurable: true,
|
|
115
|
-
writable: true,
|
|
116
|
-
value: void 0
|
|
117
|
-
});
|
|
118
|
-
const { mailboxer, services = defaultRuntimeServices } = options;
|
|
119
|
-
this.hby = hby;
|
|
120
|
-
this.mailboxer = mailboxer ?? null;
|
|
121
|
-
this.organizer = new Organizer(hby);
|
|
122
|
-
this.services = services;
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Resolve one CLI or user recipient input into the actual destination prefix.
|
|
126
|
-
*
|
|
127
|
-
* Resolution order matches the mailbox CLI mental model:
|
|
128
|
-
* - exact known prefix wins
|
|
129
|
-
* - otherwise exact organizer alias lookup is required
|
|
130
|
-
*/
|
|
131
|
-
resolveRecipient(recipient) {
|
|
132
|
-
if (this.hby.db.getKever(recipient)) {
|
|
133
|
-
return recipient;
|
|
134
|
-
}
|
|
135
|
-
const matches = this.organizer.findExact("alias", recipient);
|
|
136
|
-
if (matches.length === 0) {
|
|
137
|
-
throw new ValidationError(`no contact found with alias '${recipient}'`);
|
|
138
|
-
}
|
|
139
|
-
if (matches.length > 1) {
|
|
140
|
-
throw new ValidationError(`multiple contacts match alias '${recipient}', use prefix instead`);
|
|
141
|
-
}
|
|
142
|
-
return matches[0].id;
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* Send one EXN through the mailbox-first delivery policy.
|
|
146
|
-
*
|
|
147
|
-
* Default policy:
|
|
148
|
-
* - if recipient mailboxes exist, broadcast to all mailbox endpoints
|
|
149
|
-
* - if no mailbox exists, send directly to controller/agent endpoints
|
|
150
|
-
* - if no direct endpoints exist, fall back to one witness endpoint
|
|
151
|
-
* - all mailbox targets are attempted; any failure is reported to the caller
|
|
152
|
-
*
|
|
153
|
-
* Current `keri-ts` difference:
|
|
154
|
-
* - KERIpy `Poster` is queue/doer based
|
|
155
|
-
* - here the caller drives one explicit operation and gets a structured
|
|
156
|
-
* result back immediately
|
|
157
|
-
* - optional receiver lends same-socket TCP intake; standalone TCP is transmit-only
|
|
158
|
-
* - public callers own synchronous route/signing preparation and wire retention
|
|
159
|
-
*/
|
|
160
|
-
*sendExchange(hab, args, receiver) {
|
|
161
|
-
const recipient = this.resolveRecipient(args.recipient);
|
|
162
|
-
const topic = args.topic ?? defaultTopicForRoute(args.route);
|
|
163
|
-
if (topic.length === 0) {
|
|
164
|
-
throw new ValidationError(`Unable to derive mailbox topic from route ${args.route}.`);
|
|
165
|
-
}
|
|
166
|
-
const embedded = args.embeds ?? {};
|
|
167
|
-
const exchangeRecipient = args.exchangeRecipient === null ? undefined : args.exchangeRecipient ?? recipient;
|
|
168
|
-
const [serder, attachments] = exchange(args.route, args.payload, {
|
|
169
|
-
sender: hab.pre,
|
|
170
|
-
recipient: exchangeRecipient,
|
|
171
|
-
modifiers: args.modifiers,
|
|
172
|
-
stamp: args.date,
|
|
173
|
-
dig: args.dig,
|
|
174
|
-
embeds: Object.keys(embedded).length > 0 ? embedded : undefined,
|
|
175
|
-
});
|
|
176
|
-
const message = concatBytes(hab.endorse(serder, { pipelined: false }), attachments);
|
|
177
|
-
return yield* this.sendPreparedExchange(hab, {
|
|
178
|
-
recipient,
|
|
179
|
-
serder,
|
|
180
|
-
message,
|
|
181
|
-
topic,
|
|
182
|
-
delivery: args.delivery,
|
|
183
|
-
}, receiver);
|
|
184
|
-
}
|
|
185
|
-
/** Deliver the owner's signed exchange unchanged; recipient is already resolved and bytes remain borrowed through cleanup. */
|
|
186
|
-
*sendPreparedExchange(hab, { recipient, serder, message, topic, delivery = "auto" }, receiver) {
|
|
187
|
-
const deliveries = [];
|
|
188
|
-
const mailboxEndpoints = delivery === "direct" ? [] : mailboxDeliveryEndpoints(hab, recipient);
|
|
189
|
-
if (mailboxEndpoints.length > 0) {
|
|
190
|
-
const failed = new Map();
|
|
191
|
-
for (const endpoint of mailboxEndpoints) {
|
|
192
|
-
try {
|
|
193
|
-
yield* this.deliverMailboxTarget(hab, recipient, topic, message, endpoint, receiver);
|
|
194
|
-
deliveries.push(endpoint.url);
|
|
195
|
-
}
|
|
196
|
-
catch (error) {
|
|
197
|
-
failed.set(endpoint.eid, error instanceof Error ? error.message : String(error));
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
if (failed.size > 0) {
|
|
201
|
-
throw new ValidationError(`Exchange delivery failed for ${recipient}: ${[...failed.values()].join("; ")}; completed: ${deliveries.join(", ") || "none"}`);
|
|
202
|
-
}
|
|
203
|
-
return { serder, deliveries };
|
|
204
|
-
}
|
|
205
|
-
const directEndpoints = directDeliveryEndpoints(hab, recipient);
|
|
206
|
-
if (directEndpoints.length > 0) {
|
|
207
|
-
for (const endpoint of directEndpoints) {
|
|
208
|
-
yield* sendPreparedCesrTarget(remoteCesrTarget(endpoint, message, this.hby.cesrBodyMode), this.services, undefined, receiver);
|
|
209
|
-
deliveries.push(endpoint.url);
|
|
210
|
-
}
|
|
211
|
-
return { serder, deliveries };
|
|
212
|
-
}
|
|
213
|
-
if (delivery !== "direct") {
|
|
214
|
-
const witnessEndpoint = firstSortedEndpoint(hab.endsFor(recipient)[Roles.witness]);
|
|
215
|
-
if (witnessEndpoint) {
|
|
216
|
-
yield* this.deliverWitnessTarget(hab, recipient, topic, message, witnessEndpoint, receiver);
|
|
217
|
-
deliveries.push(witnessEndpoint.url);
|
|
218
|
-
return { serder, deliveries };
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
throw new ValidationError(`No end roles for ${recipient} to send evt=${serder.said ?? "<unknown>"}`);
|
|
222
|
-
}
|
|
223
|
-
/**
|
|
224
|
-
* Send one raw CESR message through the same mailbox-first transport policy.
|
|
225
|
-
*
|
|
226
|
-
* This is used by delegation workflows where correctness depends on the
|
|
227
|
-
* actual KEL bytes reaching the delegator or delegate, not on an EXN wrapper.
|
|
228
|
-
* Optional Reactor lends TCP intake; caller owns preparation/retention before transport.
|
|
229
|
-
*/
|
|
230
|
-
*sendBytes(hab, args, reactor) {
|
|
231
|
-
const route = this.resolveBytesRoute(hab, args);
|
|
232
|
-
const deliveries = [];
|
|
233
|
-
const failed = new Map();
|
|
234
|
-
for (let index = 0; index < route.targets.length; index++) {
|
|
235
|
-
const endpoint = route.targets[index];
|
|
236
|
-
try {
|
|
237
|
-
const target = yield* this.prepareBytesTarget(hab, route, index, args.message);
|
|
238
|
-
yield* sendPreparedCesrTarget(target, this.services, undefined, reactor ? { reactor } : undefined);
|
|
239
|
-
deliveries.push(endpoint.url);
|
|
240
|
-
}
|
|
241
|
-
catch (error) {
|
|
242
|
-
if (route.kind !== "mailbox")
|
|
243
|
-
throw error;
|
|
244
|
-
failed.set(endpoint.eid, error instanceof Error ? error.message : String(error));
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
if (failed.size > 0) {
|
|
248
|
-
throw new ValidationError(`CESR delivery failed for ${route.recipient}: ${[...failed.values()].join("; ")}; completed: ${deliveries.join(", ") || "none"}`);
|
|
249
|
-
}
|
|
250
|
-
return { deliveries };
|
|
251
|
-
}
|
|
252
|
-
/** Snapshot mailbox/direct/witness policy without opening transport or reading message bytes. */
|
|
253
|
-
resolveBytesRoute(hab, args) {
|
|
254
|
-
const recipient = this.resolveRecipient(args.recipient);
|
|
255
|
-
const route = this.findBytesRoute(hab, { ...args, recipient, recipientIsPrefix: true });
|
|
256
|
-
if (!route)
|
|
257
|
-
throw new ValidationError(`No end roles for ${recipient} to send raw CESR payload.`);
|
|
258
|
-
return route;
|
|
259
|
-
}
|
|
260
|
-
/** Same policy; parsed-prefix lookup bypasses aliases, absence is explicit, other failures propagate. */
|
|
261
|
-
findBytesRoute(hab, args) {
|
|
262
|
-
const recipient = args.recipientIsPrefix ? args.recipient : this.resolveRecipient(args.recipient);
|
|
263
|
-
const topic = args.topic ?? "";
|
|
264
|
-
const delivery = args.delivery ?? "auto";
|
|
265
|
-
const base = { sender: hab.pre, recipient, topic, bodyMode: this.hby.cesrBodyMode };
|
|
266
|
-
const mailboxes = delivery === "direct" ? [] : mailboxDeliveryEndpoints(hab, recipient);
|
|
267
|
-
if (mailboxes.length > 0) {
|
|
268
|
-
if (!topic)
|
|
269
|
-
throw new ValidationError(`Mailbox delivery requires an explicit topic for ${recipient}.`);
|
|
270
|
-
return { ...base, kind: "mailbox", targets: mailboxes };
|
|
271
|
-
}
|
|
272
|
-
if (delivery !== "direct" && topic && this.mailboxer && this.hby.db.prefixes.has(hab.pre)
|
|
273
|
-
&& this.hby.db.ends.get([recipient, Roles.mailbox, hab.pre])?.allowed) {
|
|
274
|
-
return { ...base, kind: "local", targets: [{ eid: hab.pre, url: `local-mailbox:${hab.pre}` }] };
|
|
275
|
-
}
|
|
276
|
-
const direct = directDeliveryEndpoints(hab, recipient);
|
|
277
|
-
if (direct.length > 0)
|
|
278
|
-
return { ...base, kind: "direct", targets: direct };
|
|
279
|
-
if (delivery !== "direct") {
|
|
280
|
-
if (!topic) {
|
|
281
|
-
throw new ValidationError(`Witness fallback delivery requires an explicit topic for ${recipient}.`);
|
|
282
|
-
}
|
|
283
|
-
const witness = firstSortedEndpoint(hab.endsFor(recipient)[Roles.witness]);
|
|
284
|
-
if (witness)
|
|
285
|
-
return { ...base, kind: "witness", targets: [witness] };
|
|
286
|
-
}
|
|
287
|
-
return null;
|
|
288
|
-
}
|
|
289
|
-
/** Prepare a target using the supplied wire and selected endpoint. */
|
|
290
|
-
*prepareBytesTarget(hab, route, index, message) {
|
|
291
|
-
if (hab.pre !== route.sender)
|
|
292
|
-
throw new Error("CESR route belongs to another sender");
|
|
293
|
-
const endpoint = route.targets[index];
|
|
294
|
-
if (!Number.isSafeInteger(index) || !endpoint)
|
|
295
|
-
throw new RangeError("Invalid CESR delivery target");
|
|
296
|
-
if (route.kind !== "direct") {
|
|
297
|
-
const forwarded = yield* this.prepareForwardedTarget(hab, route.recipient, route.topic, message, endpoint);
|
|
298
|
-
return forwarded.kind === "http" ? { ...forwarded, bodyMode: route.bodyMode } : forwarded;
|
|
299
|
-
}
|
|
300
|
-
return remoteCesrTarget(endpoint, message, route.bodyMode);
|
|
301
|
-
}
|
|
302
|
-
/**
|
|
303
|
-
* Deliver one message to one mailbox endpoint.
|
|
304
|
-
*
|
|
305
|
-
* Delivery modes:
|
|
306
|
-
* - if the mailbox AID is local to this habery, store directly in
|
|
307
|
-
* `Mailboxer`
|
|
308
|
-
* - otherwise wrap in `/fwd` and post to the remote mailbox URL
|
|
309
|
-
*/
|
|
310
|
-
*deliverMailboxTarget(hab, recipient, topic, message, endpoint, receiver) {
|
|
311
|
-
yield* this.deliverForwardedTarget(hab, recipient, topic, message, endpoint, receiver);
|
|
312
|
-
}
|
|
313
|
-
/**
|
|
314
|
-
* Deliver one message using the recipient's witness as a store-and-forward
|
|
315
|
-
* fallback when no mailbox or direct endpoint exists.
|
|
316
|
-
*/
|
|
317
|
-
*deliverWitnessTarget(hab, recipient, topic, message, endpoint, receiver) {
|
|
318
|
-
yield* this.deliverForwardedTarget(hab, recipient, topic, message, endpoint, receiver);
|
|
319
|
-
}
|
|
320
|
-
/**
|
|
321
|
-
* Deliver one `/fwd`-wrapped payload to a mailbox or witness endpoint.
|
|
322
|
-
*
|
|
323
|
-
* Local hosted targets store directly in `Mailboxer`; remote targets receive
|
|
324
|
-
* KERIpy-style introduction material ahead of the forwarded payload.
|
|
325
|
-
*/
|
|
326
|
-
*deliverForwardedTarget(hab, recipient, topic, message, endpoint, receiver) {
|
|
327
|
-
const target = yield* this.prepareForwardedTarget(hab, recipient, topic, message, endpoint);
|
|
328
|
-
yield* sendPreparedCesrTarget(target, this.services, undefined, receiver);
|
|
329
|
-
}
|
|
330
|
-
/** Prepare complete signed wire and its introduction before opening transport. */
|
|
331
|
-
*prepareForwardedTarget(hab, recipient, topic, message, endpoint) {
|
|
332
|
-
if (this.hby.db.prefixes.has(endpoint.eid)) {
|
|
333
|
-
const stored = this.requireMailboxer().storeMsg(mailboxTopicKey(recipient, topic), mailboxReplyPayload(hab, recipient, topic, message));
|
|
334
|
-
if (!stored)
|
|
335
|
-
throw new Error("Mailbox publication did not complete");
|
|
336
|
-
return { kind: "stored" };
|
|
337
|
-
}
|
|
338
|
-
const forwarded = yield* buildForwardedDelivery(hab, { recipient, topic, message });
|
|
339
|
-
const intro = introduce(hab, endpoint.eid);
|
|
340
|
-
return remoteCesrTarget(endpoint, concatBytes(intro, forwarded), this.hby.cesrBodyMode);
|
|
341
|
-
}
|
|
342
|
-
/** Require provider mailbox storage for local mailbox-target delivery. */
|
|
343
|
-
requireMailboxer() {
|
|
344
|
-
if (!this.mailboxer) {
|
|
345
|
-
throw new ValidationError("Local mailbox delivery requires provider mailbox storage.");
|
|
346
|
-
}
|
|
347
|
-
return this.mailboxer;
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
/**
|
|
351
|
-
* Accepted `/fwd` route handler that stores embedded payloads in mailbox topics.
|
|
352
|
-
*
|
|
353
|
-
* This is the `keri-ts` mailbox-storage analogue to KERIpy's `ForwardHandler`.
|
|
354
|
-
*
|
|
355
|
-
* Authorization rule:
|
|
356
|
-
* - the request-scoped mailbox AID passed with this message must currently be
|
|
357
|
-
* authorized for the addressed recipient
|
|
358
|
-
*/
|
|
359
|
-
export class ForwardHandler {
|
|
360
|
-
constructor(mailboxDirector) {
|
|
361
|
-
Object.defineProperty(this, "resource", {
|
|
362
|
-
enumerable: true,
|
|
363
|
-
configurable: true,
|
|
364
|
-
writable: true,
|
|
365
|
-
value: ForwardHandler.resource
|
|
366
|
-
});
|
|
367
|
-
/** This route binds a single v2 child body; recipient processors authenticate its evidence. */
|
|
368
|
-
Object.defineProperty(this, "acceptsNests", {
|
|
369
|
-
enumerable: true,
|
|
370
|
-
configurable: true,
|
|
371
|
-
writable: true,
|
|
372
|
-
value: true
|
|
373
|
-
});
|
|
374
|
-
Object.defineProperty(this, "mailboxDirector", {
|
|
375
|
-
enumerable: true,
|
|
376
|
-
configurable: true,
|
|
377
|
-
writable: true,
|
|
378
|
-
value: void 0
|
|
379
|
-
});
|
|
380
|
-
this.mailboxDirector = mailboxDirector;
|
|
381
|
-
}
|
|
382
|
-
/**
|
|
383
|
-
* Verify that the embedded exchange has the mailbox modifiers and one
|
|
384
|
-
* extractable forwarded payload.
|
|
385
|
-
*/
|
|
386
|
-
verify(args) {
|
|
387
|
-
const modifiers = args.serder.ked?.q;
|
|
388
|
-
if (typeof modifiers?.pre !== "string" || typeof modifiers?.topic !== "string")
|
|
389
|
-
return false;
|
|
390
|
-
if (args.serder.pvrsn.major < 2) {
|
|
391
|
-
return !args.nests?.length && extractForwardedMessage(args.serder, args.attachments) !== null;
|
|
392
|
-
}
|
|
393
|
-
if (args.nests?.length !== 1)
|
|
394
|
-
return false;
|
|
395
|
-
const signed = args.serder.a?.evt;
|
|
396
|
-
const child = args.nests[0].body;
|
|
397
|
-
if (typeof signed !== "string" || !(child instanceof SerderKERI || child instanceof SerderACDC))
|
|
398
|
-
return false;
|
|
399
|
-
try {
|
|
400
|
-
return child.verify() && new Diger({ qb64: signed }).verify(child.raw);
|
|
401
|
-
}
|
|
402
|
-
catch {
|
|
403
|
-
return false;
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
/**
|
|
407
|
-
* Store one forwarded payload when the receiving host is allowed to act as
|
|
408
|
-
* the recipient's async correspondence store.
|
|
409
|
-
*
|
|
410
|
-
* Accepted host shapes:
|
|
411
|
-
* - explicit mailbox provider authorized in `ends.`
|
|
412
|
-
* - recipient witness host from the accepted KEL witness set
|
|
413
|
-
* - recipient agent host authorized in `ends.`
|
|
414
|
-
*
|
|
415
|
-
* Controller endpoints stay excluded here because they are direct
|
|
416
|
-
* correspondence destinations, not store-and-forward hosts.
|
|
417
|
-
*/
|
|
418
|
-
handle(args) {
|
|
419
|
-
const modifiers = args.serder.ked?.q;
|
|
420
|
-
const recipient = typeof modifiers?.pre === "string" ? modifiers.pre : null;
|
|
421
|
-
const topic = typeof modifiers?.topic === "string" ? modifiers.topic : null;
|
|
422
|
-
const child = args.serder.pvrsn.major >= 2 ? args.nests?.[0] : undefined;
|
|
423
|
-
const forwarded = child ? null : extractForwardedMessage(args.serder, args.attachments);
|
|
424
|
-
const mailboxAid = args.mailboxAid;
|
|
425
|
-
if (!recipient || !topic || (!child && !forwarded)) {
|
|
426
|
-
return;
|
|
427
|
-
}
|
|
428
|
-
const hby = this.mailboxDirector.hby;
|
|
429
|
-
const recipientKever = hby.db.getKever(recipient);
|
|
430
|
-
if (!recipientKever) {
|
|
431
|
-
return;
|
|
432
|
-
}
|
|
433
|
-
if (mailboxAid) {
|
|
434
|
-
if (!hostCanStoreForwardRecipient(hby, recipient, recipientKever, mailboxAid)) {
|
|
435
|
-
return;
|
|
436
|
-
}
|
|
437
|
-
}
|
|
438
|
-
else if (!hasLocalStoreForwardHost(hby, recipient, recipientKever)) {
|
|
439
|
-
return;
|
|
440
|
-
}
|
|
441
|
-
if (child) {
|
|
442
|
-
// Mailbox LMDB accepts a finite row; collect one child, never the whole exchange stream.
|
|
443
|
-
return abortable(async (signal) => {
|
|
444
|
-
const wire = await collectPayload(nestedPayload(child, Vrsn_2_0), signal);
|
|
445
|
-
signal.throwIfAborted();
|
|
446
|
-
this.mailboxDirector.publish(recipient, topic, wire);
|
|
447
|
-
});
|
|
448
|
-
}
|
|
449
|
-
this.mailboxDirector.publish(recipient, topic, forwarded);
|
|
450
|
-
}
|
|
451
|
-
}
|
|
452
|
-
Object.defineProperty(ForwardHandler, "resource", {
|
|
453
|
-
enumerable: true,
|
|
454
|
-
configurable: true,
|
|
455
|
-
writable: true,
|
|
456
|
-
value: "/fwd"
|
|
457
|
-
});
|
|
458
|
-
function hostCanStoreForwardRecipient(hby, recipient, recipientKever, hostAid) {
|
|
459
|
-
// A local host may store forwarded traffic only when it is an authorized
|
|
460
|
-
// witness/mailbox/agent for the recipient. This keeps mailbox storage from
|
|
461
|
-
// becoming a generic unauthenticated relay.
|
|
462
|
-
if (recipientKever.wits.includes(hostAid)) {
|
|
463
|
-
return true;
|
|
464
|
-
}
|
|
465
|
-
for (const role of [Roles.mailbox, Roles.agent]) {
|
|
466
|
-
const end = hby.db.ends.get([recipient, role, hostAid]);
|
|
467
|
-
if (end?.allowed || end?.enabled) {
|
|
468
|
-
return true;
|
|
469
|
-
}
|
|
470
|
-
}
|
|
471
|
-
return false;
|
|
472
|
-
}
|
|
473
|
-
function hasLocalStoreForwardHost(hby, recipient, recipientKever) {
|
|
474
|
-
// Check all local prefixes because a multi-role runtime can host a mailbox
|
|
475
|
-
// AID that is distinct from the controller currently processing the EXN.
|
|
476
|
-
for (const hostAid of hby.db.prefixes) {
|
|
477
|
-
if (hostCanStoreForwardRecipient(hby, recipient, recipientKever, hostAid)) {
|
|
478
|
-
return true;
|
|
479
|
-
}
|
|
480
|
-
}
|
|
481
|
-
return false;
|
|
482
|
-
}
|
|
483
|
-
/**
|
|
484
|
-
* Local/remote mailbox consumer for forwarded EXN topics.
|
|
485
|
-
*
|
|
486
|
-
* Current scope:
|
|
487
|
-
* - replays locally stored mailbox topics for local habitat prefixes
|
|
488
|
-
* - polls configured remote mailbox or witness endpoints with `mbx` queries
|
|
489
|
-
* - lends retrieved records to the composed consumer; protocol intake stays outside
|
|
490
|
-
*/
|
|
491
|
-
export class MailboxPoller {
|
|
492
|
-
constructor(hby, mailboxDirector, options = {}) {
|
|
493
|
-
Object.defineProperty(this, "hby", {
|
|
494
|
-
enumerable: true,
|
|
495
|
-
configurable: true,
|
|
496
|
-
writable: true,
|
|
497
|
-
value: void 0
|
|
498
|
-
});
|
|
499
|
-
Object.defineProperty(this, "mailboxDirector", {
|
|
500
|
-
enumerable: true,
|
|
501
|
-
configurable: true,
|
|
502
|
-
writable: true,
|
|
503
|
-
value: void 0
|
|
504
|
-
});
|
|
505
|
-
Object.defineProperty(this, "timeoutPolicy", {
|
|
506
|
-
enumerable: true,
|
|
507
|
-
configurable: true,
|
|
508
|
-
writable: true,
|
|
509
|
-
value: void 0
|
|
510
|
-
});
|
|
511
|
-
Object.defineProperty(this, "services", {
|
|
512
|
-
enumerable: true,
|
|
513
|
-
configurable: true,
|
|
514
|
-
writable: true,
|
|
515
|
-
value: void 0
|
|
516
|
-
});
|
|
517
|
-
Object.defineProperty(this, "pollTransport", {
|
|
518
|
-
enumerable: true,
|
|
519
|
-
configurable: true,
|
|
520
|
-
writable: true,
|
|
521
|
-
value: void 0
|
|
522
|
-
});
|
|
523
|
-
Object.defineProperty(this, "localCursors", {
|
|
524
|
-
enumerable: true,
|
|
525
|
-
configurable: true,
|
|
526
|
-
writable: true,
|
|
527
|
-
value: new Map()
|
|
528
|
-
});
|
|
529
|
-
const { timeouts, services = defaultRuntimeServices, pollTransport = defaultMailboxPollTransport, } = options;
|
|
530
|
-
this.hby = hby;
|
|
531
|
-
this.mailboxDirector = mailboxDirector;
|
|
532
|
-
this.timeoutPolicy = normalizeMailboxPollingTimeoutPolicy(timeouts);
|
|
533
|
-
this.services = services;
|
|
534
|
-
this.pollTransport = pollTransport;
|
|
535
|
-
}
|
|
536
|
-
/** Register one mailbox topic that this poller should retrieve. */
|
|
537
|
-
registerTopic(topic) {
|
|
538
|
-
this.mailboxDirector.registerTopic(topic);
|
|
539
|
-
}
|
|
540
|
-
/**
|
|
541
|
-
* Poll forever, streaming typed batches into one sink.
|
|
542
|
-
*
|
|
543
|
-
* Each remote endpoint progresses independently, and awaits the consumer before
|
|
544
|
-
* reading the next event or advancing its persisted cursor.
|
|
545
|
-
*/
|
|
546
|
-
*pollDo(onBatch) {
|
|
547
|
-
const remoteWorkers = new Map();
|
|
548
|
-
try {
|
|
549
|
-
while (true) {
|
|
550
|
-
const topics = this.mailboxDirector.registeredTopics();
|
|
551
|
-
yield* this.syncRemoteWorkers(remoteWorkers, onBatch, topics);
|
|
552
|
-
if (topics.length > 0) {
|
|
553
|
-
for (const pre of this.hby.prefixes) {
|
|
554
|
-
const local = this.readLocalMailbox(pre, topics);
|
|
555
|
-
if (local.length > 0) {
|
|
556
|
-
yield* call(() => onBatch({ source: "local", pre, messages: local }));
|
|
557
|
-
}
|
|
558
|
-
}
|
|
559
|
-
}
|
|
560
|
-
yield* runtimeTurn();
|
|
561
|
-
}
|
|
562
|
-
}
|
|
563
|
-
finally {
|
|
564
|
-
for (const task of [...remoteWorkers.values()].reverse()) {
|
|
565
|
-
yield* task.halt();
|
|
566
|
-
}
|
|
567
|
-
}
|
|
568
|
-
}
|
|
569
|
-
/**
|
|
570
|
-
* Read locally stored mailbox traffic from the shared `Mailboxer`.
|
|
571
|
-
*
|
|
572
|
-
* Local cursors are in-memory only because they are scoped to the current
|
|
573
|
-
* runtime process, unlike remote mailbox progress tracked in `tops.`.
|
|
574
|
-
*/
|
|
575
|
-
readLocalMailbox(pre, topics) {
|
|
576
|
-
if (!this.mailboxDirector.hasMailboxStore()) {
|
|
577
|
-
return [];
|
|
578
|
-
}
|
|
579
|
-
const cursor = this.localCursor(pre);
|
|
580
|
-
const messages = [];
|
|
581
|
-
for (const topic of topics) {
|
|
582
|
-
for (const item of this.mailboxDirector.topicIter(pre, topic, cursor[topic] ?? 0)) {
|
|
583
|
-
cursor[topic] = item.idx + 1;
|
|
584
|
-
messages.push(item.msg);
|
|
585
|
-
}
|
|
586
|
-
}
|
|
587
|
-
return messages;
|
|
588
|
-
}
|
|
589
|
-
/** Return the in-memory local mailbox cursor map for one local prefix. */
|
|
590
|
-
localCursor(pre) {
|
|
591
|
-
const current = this.localCursors.get(pre);
|
|
592
|
-
if (current) {
|
|
593
|
-
return current;
|
|
594
|
-
}
|
|
595
|
-
const created = {};
|
|
596
|
-
this.localCursors.set(pre, created);
|
|
597
|
-
return created;
|
|
598
|
-
}
|
|
599
|
-
/** Stream one remote response through its consumer before recording cursor progress. */
|
|
600
|
-
*pollRemoteEndpointOnce(target, endpoint, onBatch) {
|
|
601
|
-
const cursor = this.mailboxDirector.remoteQueryCursor(target.targetPre, endpoint.eid);
|
|
602
|
-
// deno-lint-ignore no-this-alias -- Generator callbacks have no lexical this.
|
|
603
|
-
const self = this;
|
|
604
|
-
yield* this.pollTransport.poll({
|
|
605
|
-
hab: target.signerHab,
|
|
606
|
-
targetPre: target.targetPre,
|
|
607
|
-
endpoint,
|
|
608
|
-
topics: cursor,
|
|
609
|
-
bodyMode: this.hby.cesrBodyMode,
|
|
610
|
-
timeouts: mailboxFetchTimeoutPolicy(this.timeoutPolicy),
|
|
611
|
-
services: this.services,
|
|
612
|
-
}, function* (message) {
|
|
613
|
-
yield* call(() => onBatch({ source: "remote", pre: target.targetPre, eid: endpoint.eid, messages: [message.msg] }));
|
|
614
|
-
self.mailboxDirector.updateRemoteCursor(target.targetPre, endpoint.eid, message.topic, message.idx);
|
|
615
|
-
});
|
|
616
|
-
}
|
|
617
|
-
/** Keep one long-lived worker running for each currently configured remote endpoint. */
|
|
618
|
-
*syncRemoteWorkers(remoteWorkers, onBatch, topics) {
|
|
619
|
-
const active = new Set();
|
|
620
|
-
if (topics.length > 0) {
|
|
621
|
-
for (const target of this.remotePollTargets()) {
|
|
622
|
-
for (const endpoint of mailboxPollEndpoints(this.hby, target.hab)) {
|
|
623
|
-
const workerKey = `${target.targetPre}:${endpoint.key}`;
|
|
624
|
-
active.add(workerKey);
|
|
625
|
-
if (remoteWorkers.has(workerKey)) {
|
|
626
|
-
continue;
|
|
627
|
-
}
|
|
628
|
-
const task = yield* spawn(() => this.remoteEndpointWorker(target, endpoint, onBatch));
|
|
629
|
-
remoteWorkers.set(workerKey, task);
|
|
630
|
-
}
|
|
631
|
-
}
|
|
632
|
-
}
|
|
633
|
-
for (const [workerKey, task] of [...remoteWorkers.entries()]) {
|
|
634
|
-
if (active.has(workerKey)) {
|
|
635
|
-
continue;
|
|
636
|
-
}
|
|
637
|
-
yield* task.halt();
|
|
638
|
-
remoteWorkers.delete(workerKey);
|
|
639
|
-
}
|
|
640
|
-
}
|
|
641
|
-
/**
|
|
642
|
-
* Poll one remote endpoint continuously in the long-lived runtime shape.
|
|
643
|
-
*
|
|
644
|
-
* This keeps KERIpy's "one poller per endpoint" behavior while preserving
|
|
645
|
-
* `keri-ts`'s split between mailbox transport and runtime parser ownership.
|
|
646
|
-
*/
|
|
647
|
-
*remoteEndpointWorker(target, endpoint, onBatch) {
|
|
648
|
-
while (true) {
|
|
649
|
-
yield* this.pollRemoteEndpointOnce(target, endpoint, onBatch);
|
|
650
|
-
yield* runtimeTurn();
|
|
651
|
-
}
|
|
652
|
-
}
|
|
653
|
-
remotePollTargets() {
|
|
654
|
-
const targets = [];
|
|
655
|
-
for (const hab of this.hby.habs.values()) {
|
|
656
|
-
const signerHab = this.pollSignerHab(hab);
|
|
657
|
-
if (!signerHab) {
|
|
658
|
-
continue;
|
|
659
|
-
}
|
|
660
|
-
targets.push({ hab, targetPre: hab.pre, signerHab });
|
|
661
|
-
}
|
|
662
|
-
return targets;
|
|
663
|
-
}
|
|
664
|
-
pollSignerHab(hab) {
|
|
665
|
-
if (!this.hby.db.groups.has(hab.pre)) {
|
|
666
|
-
return hab;
|
|
667
|
-
}
|
|
668
|
-
const mid = this.hby.db.getHab(hab.pre)?.mid;
|
|
669
|
-
if (!mid) {
|
|
670
|
-
return null;
|
|
671
|
-
}
|
|
672
|
-
return this.hby.habs.get(mid) ?? null;
|
|
673
|
-
}
|
|
674
|
-
}
|
|
675
|
-
Object.defineProperty(MailboxPoller, "DefaultTimeoutPolicy", {
|
|
676
|
-
enumerable: true,
|
|
677
|
-
configurable: true,
|
|
678
|
-
writable: true,
|
|
679
|
-
value: Object.freeze({
|
|
680
|
-
requestOpenTimeoutMs: 5_000,
|
|
681
|
-
maxPollDurationMs: 30_000,
|
|
682
|
-
})
|
|
683
|
-
});
|
|
684
|
-
Object.defineProperty(MailboxPoller, "ReadIdleTimeoutMs", {
|
|
685
|
-
enumerable: true,
|
|
686
|
-
configurable: true,
|
|
687
|
-
writable: true,
|
|
688
|
-
value: 500
|
|
689
|
-
});
|
|
690
|
-
/**
|
|
691
|
-
* Build a signed legacy embed or v2 nested `/fwd` envelope for one complete message.
|
|
692
|
-
*
|
|
693
|
-
* The caller is responsible for any surrounding introduction or end-role
|
|
694
|
-
* material that should travel with the forwarded request.
|
|
695
|
-
*/
|
|
696
|
-
function* buildForwardedDelivery(hab, args) {
|
|
697
|
-
const frames = parseBytes(args.message);
|
|
698
|
-
if (frames.length !== 1)
|
|
699
|
-
throw new ValidationError("Forwarding requires one complete CESR message.");
|
|
700
|
-
const child = frames[0];
|
|
701
|
-
if (child.body.pvrsn.major >= 2 || (child.gvrsn?.major ?? 1) >= 2) {
|
|
702
|
-
const [serder] = exchange("/fwd", {
|
|
703
|
-
evt: new Diger({ code: MtrDex.Blake3_256, raw: Diger.digest(child.body.raw, MtrDex.Blake3_256) }).qb64,
|
|
704
|
-
}, {
|
|
705
|
-
sender: hab.pre,
|
|
706
|
-
modifiers: { pre: args.recipient, topic: transportMailboxTopic(args.topic) },
|
|
707
|
-
pvrsn: Vrsn_2_0,
|
|
708
|
-
});
|
|
709
|
-
// Capture the signer before the codec reader yields; child proofs remain independent.
|
|
710
|
-
const [outer] = parseBytes(hab.endorse(serder, { pipelined: false, gvrsn: Vrsn_2_0, genusify: true }));
|
|
711
|
-
return yield* abortable((signal) => collectPayload(framePayload({ ...outer, nests: [child] }), signal));
|
|
712
|
-
}
|
|
713
|
-
const message = concatBytes(child.body.raw, yield* abortable((signal) => collectPayload(attachmentPayload(child), signal)));
|
|
714
|
-
const [serder, attachments] = exchange("/fwd", {}, {
|
|
715
|
-
sender: hab.pre,
|
|
716
|
-
modifiers: { pre: args.recipient, topic: transportMailboxTopic(args.topic) },
|
|
717
|
-
embeds: { evt: message },
|
|
718
|
-
});
|
|
719
|
-
const endorsed = hab.endorse(serder, { pipelined: false });
|
|
720
|
-
return concatBytes(endorsed, attachments);
|
|
721
|
-
}
|
|
722
|
-
/**
|
|
723
|
-
* Include the sender's latest KEL before locally stored `/reply` payloads.
|
|
724
|
-
*
|
|
725
|
-
* KERIpy's `Revery` escrows transferable replies whose signer establishment
|
|
726
|
-
* event is unknown. Python KLI does not route that escrow's follow-up query cue
|
|
727
|
-
* during the bounded `kli query` command, so a local mailbox host must provide
|
|
728
|
-
* the verification context with the reply itself for rotated `/ksn` replies.
|
|
729
|
-
*/
|
|
730
|
-
function mailboxReplyPayload(hab, recipient, topic, message) {
|
|
731
|
-
if (topic !== "/reply" && topic !== "reply") {
|
|
732
|
-
return message;
|
|
733
|
-
}
|
|
734
|
-
const introduction = introduce(hab, recipient);
|
|
735
|
-
return introduction.length === 0 ? message : concatBytes(introduction, message);
|
|
736
|
-
}
|
|
737
|
-
/**
|
|
738
|
-
* Borrow a Hab/store for lazy introduction output, preserving target KEL, oldest
|
|
739
|
-
* delegator first, then endpoint/location replies. Capture begins on iteration.
|
|
740
|
-
* No source is opened when a witness/receipt already makes introduction unnecessary.
|
|
741
|
-
* Native proof/key copies and the large-history transport caller remain separately qualified.
|
|
742
|
-
*/
|
|
743
|
-
export function introductionMessages(hab, remote) {
|
|
744
|
-
const endpoints = hab.replyEndRoleMessages(hab.pre);
|
|
745
|
-
return {
|
|
746
|
-
*[Symbol.iterator]() {
|
|
747
|
-
const kever = hab.kever;
|
|
748
|
-
if (!kever || kever.wits.includes(remote))
|
|
749
|
-
return;
|
|
750
|
-
const latestSaid = kever.serder.said;
|
|
751
|
-
if (!latestSaid || remoteAlreadyReceiptedLatestEvent(hab, remote, latestSaid))
|
|
752
|
-
return;
|
|
753
|
-
const captured = hab.db.replay(hab.pre);
|
|
754
|
-
if (captured)
|
|
755
|
-
yield* captured;
|
|
756
|
-
yield* endpoints;
|
|
757
|
-
},
|
|
758
|
-
};
|
|
759
|
-
}
|
|
760
|
-
/** Collect the introduction required by the existing finite query/forwarding path. */
|
|
761
|
-
export function introduce(hab, remote) {
|
|
762
|
-
return concatBytes(...introductionMessages(hab, remote));
|
|
763
|
-
}
|
|
764
|
-
function remoteAlreadyReceiptedLatestEvent(hab, remote, said) {
|
|
765
|
-
const keys = [
|
|
766
|
-
dgKey(hab.pre, said),
|
|
767
|
-
dgKey(remote, said),
|
|
768
|
-
];
|
|
769
|
-
for (const key of keys) {
|
|
770
|
-
if (hab.db.vrcs.get(key).some(([prefixer]) => prefixer.qb64 === remote)) {
|
|
771
|
-
return true;
|
|
772
|
-
}
|
|
773
|
-
if (hab.db.rcts.get(key).some(([prefixer]) => prefixer.qb64.startsWith(remote))) {
|
|
774
|
-
return true;
|
|
775
|
-
}
|
|
776
|
-
}
|
|
777
|
-
return false;
|
|
778
|
-
}
|
|
779
|
-
/** Derive the default mailbox topic from the first non-empty route segment. */
|
|
780
|
-
function defaultTopicForRoute(route) {
|
|
781
|
-
if (route.startsWith("/delegate")) {
|
|
782
|
-
return DELEGATE_MAILBOX_TOPIC;
|
|
783
|
-
}
|
|
784
|
-
if (route === "/oobis") {
|
|
785
|
-
return OOBI_MAILBOX_TOPIC;
|
|
786
|
-
}
|
|
787
|
-
if (route.startsWith("/ipex/")) {
|
|
788
|
-
return CREDENTIAL_MAILBOX_TOPIC;
|
|
789
|
-
}
|
|
790
|
-
const trimmed = route.replace(/^\/+/, "");
|
|
791
|
-
return trimmed.split("/")[0] ?? "";
|
|
792
|
-
}
|
|
793
|
-
/** KERIpy pollers query protocol mailbox topics with a leading slash. */
|
|
794
|
-
function pollMailboxTopic(topic) {
|
|
795
|
-
if (topic.length === 0 || topic.startsWith("/")) {
|
|
796
|
-
return topic;
|
|
797
|
-
}
|
|
798
|
-
return `/${topic}`;
|
|
799
|
-
}
|
|
800
|
-
/** KERIpy `/fwd` modifiers use the bare topic name, e.g. `multisig`. */
|
|
801
|
-
function transportMailboxTopic(topic) {
|
|
802
|
-
return topic.replace(/^\/+/, "");
|
|
803
|
-
}
|
|
804
|
-
/**
|
|
805
|
-
* Public helper for deriving mailbox topic defaults from one EXN route.
|
|
806
|
-
*
|
|
807
|
-
* This stays exported because CLI and runtime call sites both need one shared
|
|
808
|
-
* answer for "which mailbox topic should this route land in by default?"
|
|
809
|
-
*/
|
|
810
|
-
export function mailboxTopicForRoute(route) {
|
|
811
|
-
return pollMailboxTopic(defaultTopicForRoute(route));
|
|
812
|
-
}
|
|
813
|
-
function extractForwardedMessage(serder, attachments) {
|
|
814
|
-
const embeds = serder.ked?.e;
|
|
815
|
-
const evt = embeds?.evt;
|
|
816
|
-
if (!evt || typeof evt !== "object" || Array.isArray(evt)) {
|
|
817
|
-
return null;
|
|
818
|
-
}
|
|
819
|
-
// Rebuild the embedded event from SAD plus only the attachment material
|
|
820
|
-
// pathed to `/e/evt`; other pathed groups belong to the outer `/fwd` message.
|
|
821
|
-
const embedded = embeddedSerderRaw(evt);
|
|
822
|
-
const messageParts = [embedded];
|
|
823
|
-
for (const attachment of attachments) {
|
|
824
|
-
const atc = forwardedAttachmentForPath(attachment.raw, "/e/evt");
|
|
825
|
-
if (atc) {
|
|
826
|
-
messageParts.push(atc);
|
|
827
|
-
}
|
|
828
|
-
}
|
|
829
|
-
return concatBytes(...messageParts);
|
|
830
|
-
}
|
|
831
|
-
function embeddedSerderRaw(sad) {
|
|
832
|
-
const version = typeof sad.v === "string" ? sad.v : "";
|
|
833
|
-
if (version.startsWith("ACDC")) {
|
|
834
|
-
return new SerderACDC({ sad, verify: false }).raw;
|
|
835
|
-
}
|
|
836
|
-
return new SerderKERI({ sad }).raw;
|
|
837
|
-
}
|
|
838
|
-
/**
|
|
839
|
-
* Extract the forwarded attachment bytes for the embedded `/e/evt` path.
|
|
840
|
-
*
|
|
841
|
-
* Forwarded attachment groups can carry multiple pathed attachments, so the
|
|
842
|
-
* path filter keeps mailbox reconstruction focused on the embedded event.
|
|
843
|
-
*/
|
|
844
|
-
function forwardedAttachmentForPath(raw, path) {
|
|
845
|
-
if (raw.length === 0) {
|
|
846
|
-
return null;
|
|
847
|
-
}
|
|
848
|
-
const counter = new Counter({ qb64b: raw });
|
|
849
|
-
const offset = counter.fullSize;
|
|
850
|
-
const pather = parsePather(raw.slice(offset), "txt");
|
|
851
|
-
if (pather.path !== path) {
|
|
852
|
-
return null;
|
|
853
|
-
}
|
|
854
|
-
return raw.slice(offset + pather.fullSize);
|
|
855
|
-
}
|
|
856
|
-
const defaultMailboxPollTransport = {
|
|
857
|
-
*poll(args, consume) {
|
|
858
|
-
// A completed long poll releases its HTTP resource before the next poll begins.
|
|
859
|
-
return yield* call(() => fetchMailboxMessages(args.hab, args.targetPre, args.endpoint.eid, args.endpoint.url, args.topics, args.bodyMode, args.timeouts, args.services, consume));
|
|
860
|
-
},
|
|
861
|
-
};
|
|
862
|
-
/**
|
|
863
|
-
* Query one remote mailbox endpoint and parse any returned mailbox SSE events.
|
|
864
|
-
*
|
|
865
|
-
* The query cursor values are "next wanted" ordinals, matching `mbx`
|
|
866
|
-
* semantics.
|
|
867
|
-
*/
|
|
868
|
-
function* fetchMailboxMessages(hab, targetPre, src, url, topics, bodyMode, timeouts, services, consume) {
|
|
869
|
-
const query = hab.query(targetPre, src, { route: "mbx", q: { topics } });
|
|
870
|
-
const handle = yield* fetchMailboxQueryResponse(url, query, bodyMode, src, timeouts.requestOpenTimeoutMs, services);
|
|
871
|
-
if (!handle) {
|
|
872
|
-
return;
|
|
873
|
-
}
|
|
874
|
-
const { response, controller } = handle;
|
|
875
|
-
if (!response.ok) {
|
|
876
|
-
yield* closeResponseBody(response);
|
|
877
|
-
return;
|
|
878
|
-
}
|
|
879
|
-
yield* consumeMailboxSse(response, controller, consume, {
|
|
880
|
-
idleTimeoutMs: timeouts.readIdleTimeoutMs,
|
|
881
|
-
maxDurationMs: timeouts.maxReadDurationMs,
|
|
882
|
-
services,
|
|
883
|
-
});
|
|
884
|
-
}
|
|
885
|
-
/**
|
|
886
|
-
* Issue one mailbox `mbx` poll request and return the live response handle.
|
|
887
|
-
*
|
|
888
|
-
* The helper owns only the request lifecycle:
|
|
889
|
-
* - build one CESR-over-HTTP mailbox query request
|
|
890
|
-
* - apply the pre-response timeout policy
|
|
891
|
-
* - return `null` when that timeout expires before any response arrives
|
|
892
|
-
*
|
|
893
|
-
* Message parsing and SSE body policy remain with `fetchMailboxMessages(...)`.
|
|
894
|
-
*/
|
|
895
|
-
function* fetchMailboxQueryResponse(url, query, bodyMode, destination, timeoutMs, services = defaultRuntimeServices) {
|
|
896
|
-
const request = buildCesrRequest(query, {
|
|
897
|
-
bodyMode,
|
|
898
|
-
destination,
|
|
899
|
-
});
|
|
900
|
-
return yield* fetchResponseHandleOrNull(url, {
|
|
901
|
-
method: "POST",
|
|
902
|
-
headers: request.headers,
|
|
903
|
-
body: request.body,
|
|
904
|
-
}, { timeoutMs, services });
|
|
905
|
-
}
|
|
906
|
-
function normalizeMailboxPollingTimeoutPolicy(overrides) {
|
|
907
|
-
const defaults = MailboxPoller.DefaultTimeoutPolicy;
|
|
908
|
-
return Object.freeze({
|
|
909
|
-
requestOpenTimeoutMs: positiveTimeoutMs(overrides?.requestOpenTimeoutMs, defaults.requestOpenTimeoutMs),
|
|
910
|
-
maxPollDurationMs: positiveTimeoutMs(overrides?.maxPollDurationMs, defaults.maxPollDurationMs),
|
|
911
|
-
});
|
|
912
|
-
}
|
|
913
|
-
function mailboxFetchTimeoutPolicy(timeouts) {
|
|
914
|
-
return {
|
|
915
|
-
requestOpenTimeoutMs: timeouts.requestOpenTimeoutMs,
|
|
916
|
-
maxReadDurationMs: timeouts.maxPollDurationMs,
|
|
917
|
-
readIdleTimeoutMs: MailboxPoller.ReadIdleTimeoutMs,
|
|
918
|
-
};
|
|
919
|
-
}
|
|
920
|
-
function positiveTimeoutMs(value, fallback) {
|
|
921
|
-
return typeof value === "number" && Number.isFinite(value) && value > 0 ? Math.floor(value) : fallback;
|
|
922
|
-
}
|
|
923
|
-
/** Post finite mailbox/EXN caller bytes through the shared progressive, scope-owned sender. */
|
|
924
|
-
export function* postCesrMessage(url, body, bodyMode, destination, services = defaultRuntimeServices, signal) {
|
|
925
|
-
yield* postCesr(url, (signal) => chunkBytes(body, { signal }), {
|
|
926
|
-
bodyMode,
|
|
927
|
-
destination,
|
|
928
|
-
services,
|
|
929
|
-
signal,
|
|
930
|
-
});
|
|
931
|
-
}
|
|
932
|
-
/** Shared EXN send helper used by CLI commands that want KERIpy-style behavior. */
|
|
933
|
-
export function* sendExchangeMessage(hby, hab, args) {
|
|
934
|
-
const poster = new Poster(hby);
|
|
935
|
-
return yield* poster.sendExchange(hab, args);
|
|
936
|
-
}
|