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,1001 +0,0 @@
|
|
|
1
|
-
import { b, Cigar, Dater, DeserializeError, Diger, essrChunks, essrRaw, essrWire, framePayload, NumberPrimitive, Prefixer, Saider, Seqner, ShortageError, UnknownCodeError, } from "cesr-ts";
|
|
2
|
-
import { call, resource } from "effection";
|
|
3
|
-
import { resolveAttachmentGvrsn } from "../core/attachment-countering.js";
|
|
4
|
-
import { Deck } from "../core/deck.js";
|
|
5
|
-
import { PathedMaterialGroup, TransIdxSigGroup } from "../core/dispatch.js";
|
|
6
|
-
import { ValidationError } from "../core/errors.js";
|
|
7
|
-
import { verifyExchangeProofs } from "../core/exchange-proofing.js";
|
|
8
|
-
import { Kever } from "../core/kever.js";
|
|
9
|
-
import { exchange as exchangeMessage, supportsNestedExchange } from "../core/protocol-exchanging.js";
|
|
10
|
-
import { messageAttachmentGroups, serializeMessage } from "../core/protocol-serialization.js";
|
|
11
|
-
import { Roles } from "../core/roles.js";
|
|
12
|
-
import { hasNests, loadNests, publishNests, stageNests } from "../db/exchange-nests.js";
|
|
13
|
-
import { encodeDateTimeToDater, makeNowIso8601, timestampMicros } from "../time/mod.js";
|
|
14
|
-
import { abortable } from "./abortable.js";
|
|
15
|
-
import { chunkBytes } from "./byte-source.js";
|
|
16
|
-
import { postCesr } from "./cesr-egress.js";
|
|
17
|
-
const textDecoder = new TextDecoder();
|
|
18
|
-
const EXCHANGE_ESCROW_TIMEOUT_MS = 10_000;
|
|
19
|
-
/** CESR syntax failures identify malformed evidence; I/O, limits, and hashing failures do not. */
|
|
20
|
-
function malformedEssr(error) {
|
|
21
|
-
return error instanceof DeserializeError || error instanceof ShortageError || error instanceof UnknownCodeError;
|
|
22
|
-
}
|
|
23
|
-
/** Private persisted receipt corruption is an invariant failure, never a remote refusal. */
|
|
24
|
-
function storedReceiverTime(record) {
|
|
25
|
-
const time = record?.receiverTime;
|
|
26
|
-
if (time !== undefined && timestampMicros(time) === null)
|
|
27
|
-
throw new Error("Corrupt exchange receiver receipt");
|
|
28
|
-
return time;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Peer-to-peer `exn` processor for one `Habery`.
|
|
32
|
-
*
|
|
33
|
-
* Responsibilities:
|
|
34
|
-
* - verify exchange-message signatures against accepted sender state
|
|
35
|
-
* - persist accepted exchange artifacts in the dedicated exchange stores
|
|
36
|
-
* - escrow partially verifiable exchange traffic in `epse.` / `epsd.`
|
|
37
|
-
* - dispatch accepted messages to route-specific handlers such as challenge
|
|
38
|
-
*
|
|
39
|
-
* TypeScript design rule:
|
|
40
|
-
* - use typed `accept` / `escrow` / `reject` outcomes instead of KERIpy's
|
|
41
|
-
* exception-only control flow for ordinary branch results
|
|
42
|
-
*/
|
|
43
|
-
export class Exchanger {
|
|
44
|
-
/** Bind route handlers, cues and the escrow clock to one habitat database. */
|
|
45
|
-
constructor(hby, { handlers = [], cues, now = Date.now } = {}) {
|
|
46
|
-
Object.defineProperty(this, "hby", {
|
|
47
|
-
enumerable: true,
|
|
48
|
-
configurable: true,
|
|
49
|
-
writable: true,
|
|
50
|
-
value: void 0
|
|
51
|
-
});
|
|
52
|
-
Object.defineProperty(this, "cues", {
|
|
53
|
-
enumerable: true,
|
|
54
|
-
configurable: true,
|
|
55
|
-
writable: true,
|
|
56
|
-
value: void 0
|
|
57
|
-
});
|
|
58
|
-
Object.defineProperty(this, "routes", {
|
|
59
|
-
enumerable: true,
|
|
60
|
-
configurable: true,
|
|
61
|
-
writable: true,
|
|
62
|
-
value: new Map()
|
|
63
|
-
});
|
|
64
|
-
Object.defineProperty(this, "versionedRoutes", {
|
|
65
|
-
enumerable: true,
|
|
66
|
-
configurable: true,
|
|
67
|
-
writable: true,
|
|
68
|
-
value: new Map()
|
|
69
|
-
});
|
|
70
|
-
/** Serialize admissions so payload recovery cannot race this owner's unfinished publication. */
|
|
71
|
-
Object.defineProperty(this, "processing", {
|
|
72
|
-
enumerable: true,
|
|
73
|
-
configurable: true,
|
|
74
|
-
writable: true,
|
|
75
|
-
value: false
|
|
76
|
-
});
|
|
77
|
-
/** Borrow the runtime clock for escrow deadlines and retries. */
|
|
78
|
-
Object.defineProperty(this, "now", {
|
|
79
|
-
enumerable: true,
|
|
80
|
-
configurable: true,
|
|
81
|
-
writable: true,
|
|
82
|
-
value: void 0
|
|
83
|
-
});
|
|
84
|
-
this.now = now;
|
|
85
|
-
this.hby = hby;
|
|
86
|
-
this.cues = cues ?? new Deck();
|
|
87
|
-
for (const handler of handlers) {
|
|
88
|
-
this.addHandler(handler);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
/** Register one route handler for accepted exchange messages. */
|
|
92
|
-
addHandler(handler) {
|
|
93
|
-
if (handler.protocolMajor !== undefined) {
|
|
94
|
-
if (!Number.isSafeInteger(handler.protocolMajor) || handler.protocolMajor < 1) {
|
|
95
|
-
throw new ValidationError("Exchange protocol major must be a positive integer.");
|
|
96
|
-
}
|
|
97
|
-
const versions = this.versionedRoutes.get(handler.resource) ?? new Map();
|
|
98
|
-
if (versions.has(handler.protocolMajor)) {
|
|
99
|
-
throw new ValidationError(`Exchange route ${handler.resource} v${handler.protocolMajor} is already registered.`);
|
|
100
|
-
}
|
|
101
|
-
versions.set(handler.protocolMajor, handler);
|
|
102
|
-
this.versionedRoutes.set(handler.resource, versions);
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
if (this.routes.has(handler.resource)) {
|
|
106
|
-
throw new ValidationError(`Exchange route ${handler.resource} is already registered.`);
|
|
107
|
-
}
|
|
108
|
-
this.routes.set(handler.resource, handler);
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Verify, persist, and dispatch one inbound `exn`.
|
|
112
|
-
*
|
|
113
|
-
* Accepted messages are durably logged before any route-specific side
|
|
114
|
-
* effects run so later reopen and verification paths can reuse the same
|
|
115
|
-
* stored evidence.
|
|
116
|
-
*/
|
|
117
|
-
processEvent(args) {
|
|
118
|
-
return call(() => this.admit(args));
|
|
119
|
-
}
|
|
120
|
-
/** Hold one exchange mutation until its child I/O and payload cleanup have finished. */
|
|
121
|
-
admission() {
|
|
122
|
-
return resource(function* (provide) {
|
|
123
|
-
if (this.processing)
|
|
124
|
-
throw new ValidationError("Exchanger has an active admission.");
|
|
125
|
-
this.processing = true;
|
|
126
|
-
try {
|
|
127
|
-
yield* provide(undefined);
|
|
128
|
-
}
|
|
129
|
-
finally {
|
|
130
|
-
this.processing = false;
|
|
131
|
-
}
|
|
132
|
-
}.bind(this));
|
|
133
|
-
}
|
|
134
|
-
/** Isolate admission cleanup so cancelling it cannot resume the caller after delegation. */
|
|
135
|
-
*admit(args) {
|
|
136
|
-
const said = args.serder.said ?? "<unknown>";
|
|
137
|
-
/** Keep normal remote admission failures in the decision channel. */
|
|
138
|
-
const reject = (reason) => ({ kind: "reject", reason, said });
|
|
139
|
-
let nestStage;
|
|
140
|
-
let nests = args.nests ?? [];
|
|
141
|
-
// Resources unwind in reverse order: I/O, payload cleanup, then admission release.
|
|
142
|
-
yield* this.admission();
|
|
143
|
-
yield* resource(function* (provide) {
|
|
144
|
-
try {
|
|
145
|
-
yield* provide(undefined);
|
|
146
|
-
}
|
|
147
|
-
finally {
|
|
148
|
-
if (nestStage)
|
|
149
|
-
this.hby.db.enstStaging.rem([nestStage]);
|
|
150
|
-
}
|
|
151
|
-
}.bind(this));
|
|
152
|
-
if (args.serder.ilk !== "exn")
|
|
153
|
-
return reject(`Unsupported exchange ilk ${args.serder.ilk}.`);
|
|
154
|
-
const sender = args.serder.pre;
|
|
155
|
-
if (!sender || !args.serder.said)
|
|
156
|
-
return reject("Exchange message is missing sender or SAID.");
|
|
157
|
-
const route = args.serder.route ?? "";
|
|
158
|
-
const handler = this.versionedRoutes.get(route)?.get(args.serder.pvrsn.major) ?? this.routes.get(route);
|
|
159
|
-
const resolved = this.resolveProofs(args);
|
|
160
|
-
const authentication = yield* this.authenticate(args.serder, resolved, handler);
|
|
161
|
-
if (authentication.kind === "reject")
|
|
162
|
-
return authentication;
|
|
163
|
-
let pending = authentication.kind === "escrow"
|
|
164
|
-
? { kind: authentication.kind, said, reason: authentication.reason }
|
|
165
|
-
: undefined;
|
|
166
|
-
const senderQuery = authentication.kind === "escrow" ? authentication.query : undefined;
|
|
167
|
-
let needsProof = false;
|
|
168
|
-
let missingSchema;
|
|
169
|
-
let newEscrow = false;
|
|
170
|
-
const approved = authentication.kind === "verified" ? authentication : undefined;
|
|
171
|
-
const retainedFactors = approved?.retained ?? resolved;
|
|
172
|
-
const previous = this.hby.db.exchangeMeta.get([said]);
|
|
173
|
-
const priorReceipt = storedReceiverTime(previous);
|
|
174
|
-
const incomingReceipt = args.receiverTime;
|
|
175
|
-
if (incomingReceipt !== undefined && timestampMicros(incomingReceipt) === null) {
|
|
176
|
-
throw new Error("Invalid exchange receiver time");
|
|
177
|
-
}
|
|
178
|
-
const receiverTime = priorReceipt ?? incomingReceipt;
|
|
179
|
-
const retained = yield* abortable((signal) => this.hby.db.getEssrs(said, signal));
|
|
180
|
-
const existing = previous?.essr ? retained : null;
|
|
181
|
-
// First durable evidence retains its original token boundaries and multiplicity.
|
|
182
|
-
const essrs = retained ?? args.essrs;
|
|
183
|
-
if (typeof args.serder.a === "string") {
|
|
184
|
-
let diger;
|
|
185
|
-
// Commitment construction is synchronous syntax work; payload verification owns asynchronous reads.
|
|
186
|
-
try {
|
|
187
|
-
diger = new Diger({ qb64: args.serder.a });
|
|
188
|
-
}
|
|
189
|
-
catch (error) {
|
|
190
|
-
if (!malformedEssr(error))
|
|
191
|
-
throw error;
|
|
192
|
-
return reject(`Invalid exchange ESSR payload: ${error instanceof Error ? error.message : String(error)}`);
|
|
193
|
-
}
|
|
194
|
-
try {
|
|
195
|
-
if (!essrs || !(yield* abortable((signal) => diger.verifyStream(essrRaw(essrs).open(signal))))) {
|
|
196
|
-
return reject("Exchange ESSR payload digest does not match its signed commitment.");
|
|
197
|
-
}
|
|
198
|
-
if (retained && args.essrs
|
|
199
|
-
&& !(yield* abortable((signal) => diger.verifyStream(essrRaw(args.essrs).open(signal))))) {
|
|
200
|
-
return reject("Duplicate ESSR payload digest does not match its signed commitment.");
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
catch (error) {
|
|
204
|
-
if (!malformedEssr(error))
|
|
205
|
-
throw error;
|
|
206
|
-
return reject(`Invalid exchange ESSR payload: ${error instanceof Error ? error.message : String(error)}`);
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
const attachments = normalizeAttachments(args.ptds ?? []);
|
|
210
|
-
let retainedNests = hasNests(this.hby.db, said);
|
|
211
|
-
if (args.nests?.length || retainedNests) {
|
|
212
|
-
// Recover only nested work; ordinary flat exchanges need no file archive.
|
|
213
|
-
yield* abortable((signal) => this.hby.db.openPayloads(signal));
|
|
214
|
-
retainedNests = hasNests(this.hby.db, said);
|
|
215
|
-
}
|
|
216
|
-
if ((args.nests?.length || retainedNests)
|
|
217
|
-
&& (!handler?.acceptsNests || !supportsNestedExchange(args.serder.route ?? "", args.serder.pvrsn.major))) {
|
|
218
|
-
return reject("Nested exchange route is not implemented.");
|
|
219
|
-
}
|
|
220
|
-
if (retainedNests && !args.nests?.length) {
|
|
221
|
-
// Signature-only retries reopen the durable evidence; fresh parsed children stay hydrated.
|
|
222
|
-
nests = loadNests(this.hby.db, said);
|
|
223
|
-
}
|
|
224
|
-
const mailboxAid = args.mailboxAid ?? previous?.mailboxAid ?? null;
|
|
225
|
-
if (approved && handler?.verify) {
|
|
226
|
-
const verification = handler.verify({
|
|
227
|
-
serder: args.serder,
|
|
228
|
-
attachments,
|
|
229
|
-
essrs,
|
|
230
|
-
nests,
|
|
231
|
-
mailboxAid,
|
|
232
|
-
receiverTime,
|
|
233
|
-
...(handler.acceptsSscs && approved.sscs.length ? { sscs: approved.sscs } : {}),
|
|
234
|
-
...(handler.acceptsEvidence ? { evidence: approved.supplemental } : {}),
|
|
235
|
-
});
|
|
236
|
-
const verified = typeof verification === "object" && Symbol.iterator in verification
|
|
237
|
-
? yield* verification
|
|
238
|
-
: verification;
|
|
239
|
-
if (verified === false)
|
|
240
|
-
return reject(`Exchange route ${args.serder.route ?? ""} failed handler verification.`);
|
|
241
|
-
if (typeof verified === "object") {
|
|
242
|
-
pending = { ...verified, said };
|
|
243
|
-
missingSchema = verified.schema;
|
|
244
|
-
if (missingSchema !== undefined && new Diger({ qb64: missingSchema }).qb64 !== missingSchema) {
|
|
245
|
-
throw new ValidationError("Route missing-schema dependency must be a complete SAID.");
|
|
246
|
-
}
|
|
247
|
-
needsProof = missingSchema === undefined;
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
// An already accepted exchange cannot be downgraded by an incomplete duplicate.
|
|
251
|
-
if (pending && this.complete(said)) {
|
|
252
|
-
return pending;
|
|
253
|
-
}
|
|
254
|
-
if (args.nests?.length) {
|
|
255
|
-
nestStage = crypto.randomUUID();
|
|
256
|
-
yield* abortable((signal) => stageNests(this.hby.db, nestStage, nests, signal));
|
|
257
|
-
}
|
|
258
|
-
/** Publish ordinary evidence and private provenance in the archive transaction. */
|
|
259
|
-
const commit = () => {
|
|
260
|
-
if (storedReceiverTime(this.hby.db.exchangeMeta.get([said])) !== priorReceipt) {
|
|
261
|
-
throw new Error("Exchange receiver receipt changed during admission");
|
|
262
|
-
}
|
|
263
|
-
if (nestStage)
|
|
264
|
-
publishNests(this.hby.db, said, nestStage);
|
|
265
|
-
if (!pending && approved) {
|
|
266
|
-
this.clearEscrow(said, true);
|
|
267
|
-
this.logAcceptedEvent({
|
|
268
|
-
serder: args.serder,
|
|
269
|
-
...approved.retained,
|
|
270
|
-
supplemental: approved.supplemental,
|
|
271
|
-
ptds: args.ptds ?? [],
|
|
272
|
-
});
|
|
273
|
-
}
|
|
274
|
-
else {
|
|
275
|
-
newEscrow = missingSchema === undefined
|
|
276
|
-
? this.escrowPartialSigned(args.serder, retainedFactors, args.ptds ?? [])
|
|
277
|
-
: this.escrowMissingSchema(args.serder, missingSchema, retainedFactors, args.ptds ?? []);
|
|
278
|
-
}
|
|
279
|
-
if (essrs && !retained) {
|
|
280
|
-
this.hby.db.essrs.rem([said]);
|
|
281
|
-
for (const texter of essrs) {
|
|
282
|
-
this.hby.db.essrs.add([said], texter);
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
this.hby.db.exchangeMeta.pin([said], {
|
|
286
|
-
mailboxAid,
|
|
287
|
-
...(receiverTime !== undefined ? { receiverTime } : {}),
|
|
288
|
-
...((existing ?? essrs)
|
|
289
|
-
? {
|
|
290
|
-
essr: {
|
|
291
|
-
gvrsn: previous?.essr?.gvrsn ?? args.gvrsn ?? args.serder.gvrsn ?? args.serder.pvrsn,
|
|
292
|
-
},
|
|
293
|
-
}
|
|
294
|
-
: {}),
|
|
295
|
-
});
|
|
296
|
-
};
|
|
297
|
-
let stored = existing ?? essrs;
|
|
298
|
-
if (essrs && !existing) {
|
|
299
|
-
const wire = essrs;
|
|
300
|
-
stored = yield* abortable(async (signal) => {
|
|
301
|
-
await (await this.hby.db.openPayloads(signal)).publish(`essr/${said}`, essrWire(wire), commit, signal);
|
|
302
|
-
return (await this.hby.db.getEssrs(said, signal));
|
|
303
|
-
});
|
|
304
|
-
}
|
|
305
|
-
else {
|
|
306
|
-
yield* abortable(async (signal) => {
|
|
307
|
-
signal.throwIfAborted();
|
|
308
|
-
this.hby.db.env.transactionSync(commit);
|
|
309
|
-
await this.hby.db.env.flushed;
|
|
310
|
-
});
|
|
311
|
-
}
|
|
312
|
-
if (pending) {
|
|
313
|
-
if (newEscrow) {
|
|
314
|
-
if (senderQuery)
|
|
315
|
-
this.cueMissingStates([senderQuery]);
|
|
316
|
-
if (needsProof)
|
|
317
|
-
this.cues.push({ kin: "proof", said });
|
|
318
|
-
if (missingSchema)
|
|
319
|
-
this.cues.push({ kin: "query", q: { r: "schema", said: missingSchema } });
|
|
320
|
-
}
|
|
321
|
-
return pending;
|
|
322
|
-
}
|
|
323
|
-
if (handler) {
|
|
324
|
-
yield* call(() => handler.handle({
|
|
325
|
-
serder: args.serder,
|
|
326
|
-
attachments,
|
|
327
|
-
essrs: stored ?? undefined,
|
|
328
|
-
nests,
|
|
329
|
-
mailboxAid,
|
|
330
|
-
receiverTime,
|
|
331
|
-
...(handler.acceptsSscs && approved?.sscs.length ? { sscs: approved.sscs } : {}),
|
|
332
|
-
}));
|
|
333
|
-
}
|
|
334
|
-
return { kind: "accept", said };
|
|
335
|
-
}
|
|
336
|
-
/** Retry escrows using their persisted payload references and mailbox provenance. */
|
|
337
|
-
processEscrows() {
|
|
338
|
-
return call(() => this.retryEscrows());
|
|
339
|
-
}
|
|
340
|
-
/** Retry each bounded escrow inside one structured child scope. */
|
|
341
|
-
*retryEscrows() {
|
|
342
|
-
if (this.processing)
|
|
343
|
-
throw new ValidationError("Exchanger has an active admission.");
|
|
344
|
-
yield* this.retryEscrowType(false);
|
|
345
|
-
if (this.hby.db.emse)
|
|
346
|
-
yield* this.retryEscrowType(true);
|
|
347
|
-
}
|
|
348
|
-
/** Close each bounded cursor before replay; newly discovered dependencies wait for the next finite pass. */
|
|
349
|
-
*retryEscrowType(schema) {
|
|
350
|
-
const table = schema ? this.hby.db.emse : this.hby.db.epse;
|
|
351
|
-
let end;
|
|
352
|
-
// Capture a finite key horizon without retaining bodies or holding a cursor across mutations.
|
|
353
|
-
for (const key of table.sdb.getKeys({ reverse: true, limit: 1 })) {
|
|
354
|
-
end = b(`${textDecoder.decode(key)}\0`);
|
|
355
|
-
}
|
|
356
|
-
if (!end) {
|
|
357
|
-
return;
|
|
358
|
-
}
|
|
359
|
-
let start;
|
|
360
|
-
for (;;) {
|
|
361
|
-
let physical;
|
|
362
|
-
for (const key of table.sdb.getKeys({ start, end, limit: 1 })) {
|
|
363
|
-
physical = textDecoder.decode(key);
|
|
364
|
-
}
|
|
365
|
-
if (!physical)
|
|
366
|
-
break;
|
|
367
|
-
const keys = physical.split("."), said = keys[0];
|
|
368
|
-
// Skip every schema branch for this EXN, including dependencies inserted by the replay below.
|
|
369
|
-
start = b(schema ? `${said}/` : `${physical}\0`);
|
|
370
|
-
const serder = table.get(keys);
|
|
371
|
-
if (!serder || serder.said !== said || keys.length !== (schema ? 2 : 1)) {
|
|
372
|
-
throw new Error("Corrupt exchange escrow key or body.");
|
|
373
|
-
}
|
|
374
|
-
if (schema && new Diger({ qb64: keys[1] }).qb64 !== keys[1])
|
|
375
|
-
throw new Error("Corrupt schema escrow dependency.");
|
|
376
|
-
if (this.complete(said)) {
|
|
377
|
-
yield* call(() => this.dropEscrow(said));
|
|
378
|
-
continue;
|
|
379
|
-
}
|
|
380
|
-
const deadline = this.hby.db.emsd?.get([said]);
|
|
381
|
-
const absolute = deadline && timestampMicros(deadline.dts);
|
|
382
|
-
if (deadline && absolute === null)
|
|
383
|
-
throw new Error("Corrupt missing-schema deadline.");
|
|
384
|
-
const dater = schema ? deadline : this.hby.db.epsd.get([said]);
|
|
385
|
-
const date = dater && timestampMicros(dater.dts);
|
|
386
|
-
if (date === null || date === undefined) {
|
|
387
|
-
if (schema)
|
|
388
|
-
throw new Error("Corrupt missing-schema deadline.");
|
|
389
|
-
yield* call(() => this.dropEscrow(said));
|
|
390
|
-
continue;
|
|
391
|
-
}
|
|
392
|
-
const now = this.nowMicros();
|
|
393
|
-
if (now > date + (schema ? 0n : BigInt(EXCHANGE_ESCROW_TIMEOUT_MS) * 1000n)
|
|
394
|
-
|| absolute !== null && absolute !== undefined && now > absolute) {
|
|
395
|
-
yield* call(() => this.dropEscrow(said));
|
|
396
|
-
continue;
|
|
397
|
-
}
|
|
398
|
-
const decision = yield* this.processEvent({
|
|
399
|
-
serder,
|
|
400
|
-
tsgs: this.rebuildEscrowedGroups(said),
|
|
401
|
-
cigars: this.storedCigars(said),
|
|
402
|
-
sourceSeals: this.storedSeals(said),
|
|
403
|
-
ptds: this.hby.db.epath.get([said]).map((text) => PathedMaterialGroup.fromRaw(new TextEncoder().encode(text))),
|
|
404
|
-
mailboxAid: this.hby.db.exchangeMeta.get([said])?.mailboxAid,
|
|
405
|
-
});
|
|
406
|
-
if (decision.kind === "reject" && !decision.preserveEscrow)
|
|
407
|
-
yield* call(() => this.dropEscrow(said));
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
/** Own accepted-evidence replay and its actual payload readers through completion or cancellation. */
|
|
411
|
-
async *replay(said, signal) {
|
|
412
|
-
signal?.throwIfAborted();
|
|
413
|
-
const serder = this.hby.db.exns.get([said]);
|
|
414
|
-
if (!serder)
|
|
415
|
-
throw new ValidationError("Cannot replay an unaccepted exchange.");
|
|
416
|
-
const essrs = await this.hby.db.getEssrs(said, signal);
|
|
417
|
-
signal?.throwIfAborted();
|
|
418
|
-
const gvrsn = resolveAttachmentGvrsn(serder, this.hby.db.exchangeMeta.get([said])?.essr?.gvrsn);
|
|
419
|
-
const args = {
|
|
420
|
-
serder,
|
|
421
|
-
tsgs: this.rebuildEscrowedGroups(said),
|
|
422
|
-
cigars: this.storedCigars(said),
|
|
423
|
-
sourceSeals: this.storedSeals(said),
|
|
424
|
-
ptds: this.hby.db.epath.get([said]).map((text) => PathedMaterialGroup.fromRaw(new TextEncoder().encode(text))),
|
|
425
|
-
};
|
|
426
|
-
const verified = verifyExchangeProofs(this.hby.db, serder, args);
|
|
427
|
-
if (verified.invalid || verified.missing.length || !(verified.tsgs.some((group) => group.pre === serder.pre)
|
|
428
|
-
|| verified.cigars.some((cigar) => cigar.verfer?.qb64 === serder.pre)
|
|
429
|
-
|| verified.sourceSeals.some((seal) => seal.i.qb64 === serder.pre)))
|
|
430
|
-
throw new ValidationError("Invalid stored exchange authentication or evidence.");
|
|
431
|
-
const evidence = { ...verified, pathed: args.ptds.map((group) => group.raw) };
|
|
432
|
-
const nested = hasNests(this.hby.db, said);
|
|
433
|
-
{
|
|
434
|
-
const groups = nested ? messageAttachmentGroups(evidence, gvrsn) : [];
|
|
435
|
-
const nests = nested ? loadNests(this.hby.db, said) : [];
|
|
436
|
-
if (nests.length) {
|
|
437
|
-
// Reuse the stored Serder and hydrated endorsements; the shared encoder builds real leaf groups.
|
|
438
|
-
const parent = {
|
|
439
|
-
body: serder,
|
|
440
|
-
attachments: groups,
|
|
441
|
-
gvrsn,
|
|
442
|
-
nests,
|
|
443
|
-
essrs: essrs ?? undefined,
|
|
444
|
-
};
|
|
445
|
-
yield* framePayload(parent).open(signal);
|
|
446
|
-
}
|
|
447
|
-
else {
|
|
448
|
-
signal?.throwIfAborted();
|
|
449
|
-
yield serializeMessage(serder, { ...evidence, gvrsn, genusify: gvrsn.major >= 2 });
|
|
450
|
-
if (essrs) {
|
|
451
|
-
for (const chunk of essrChunks(essrs, { gvrsn })) {
|
|
452
|
-
signal?.throwIfAborted();
|
|
453
|
-
yield chunk;
|
|
454
|
-
}
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
}
|
|
458
|
-
}
|
|
459
|
-
/** Return true once the named exchange SAID is durably stored as accepted. */
|
|
460
|
-
complete(said) {
|
|
461
|
-
return this.hby.db.exns.get([said])?.said === said;
|
|
462
|
-
}
|
|
463
|
-
/**
|
|
464
|
-
* Return true when this local habitat is elected to externally send an EXN.
|
|
465
|
-
*
|
|
466
|
-
* KERIpy uses the lowest collected group-signature index as the lead for a
|
|
467
|
-
* completed multisig business EXN. Single-sig habitats are always the lead.
|
|
468
|
-
*/
|
|
469
|
-
lead(hab, said) {
|
|
470
|
-
const record = this.hby.db.getHab(hab.pre);
|
|
471
|
-
if (!record?.mid) {
|
|
472
|
-
return true;
|
|
473
|
-
}
|
|
474
|
-
const groupKever = hab.kever;
|
|
475
|
-
const member = this.hby.habs.get(record.mid);
|
|
476
|
-
const memberKever = member?.kever ?? this.hby.db.getKever(record.mid);
|
|
477
|
-
const memberKey = memberKever?.verfers[0]?.qb64;
|
|
478
|
-
if (!groupKever || !memberKey) {
|
|
479
|
-
return false;
|
|
480
|
-
}
|
|
481
|
-
const indices = [];
|
|
482
|
-
for (const [keys, siger] of this.hby.db.esigs.getTopItemIter([said, ""])) {
|
|
483
|
-
if (keys[0] === said && keys[1] === hab.pre) {
|
|
484
|
-
indices.push(siger.index);
|
|
485
|
-
}
|
|
486
|
-
}
|
|
487
|
-
if (indices.length === 0) {
|
|
488
|
-
return false;
|
|
489
|
-
}
|
|
490
|
-
const leadKey = groupKever.verfers[Math.min(...indices)]?.qb64;
|
|
491
|
-
return leadKey === memberKey;
|
|
492
|
-
}
|
|
493
|
-
/** Freeze last-establishment groups and expand sender-implied seals before durable admission. */
|
|
494
|
-
resolveProofs(args) {
|
|
495
|
-
const result = {
|
|
496
|
-
tsgs: [...(args.tsgs ?? [])],
|
|
497
|
-
cigars: [...(args.cigars ?? [])],
|
|
498
|
-
sourceSeals: [
|
|
499
|
-
...(args.sscs ?? []).map((seal) => ({ ...seal, i: new Prefixer({ qb64: args.serder.pre }) })),
|
|
500
|
-
...(args.sourceSeals ?? []),
|
|
501
|
-
],
|
|
502
|
-
missing: (args.unresolvedLast ?? []).map((prefix) => ({ pre: prefix.qb64, sn: null })),
|
|
503
|
-
};
|
|
504
|
-
for (const group of args.lsgs ?? []) {
|
|
505
|
-
const kever = this.hby.db.getKever(group.pre);
|
|
506
|
-
if (!kever) {
|
|
507
|
-
result.missing.push({ pre: group.pre, sn: null });
|
|
508
|
-
continue;
|
|
509
|
-
}
|
|
510
|
-
result.tsgs.push(new TransIdxSigGroup(group.prefixer, NumberPrimitive.fromNum(BigInt(kever.lastEst.s)), new Diger({ qb64: kever.lastEst.d }), group.sigers));
|
|
511
|
-
}
|
|
512
|
-
return result;
|
|
513
|
-
}
|
|
514
|
-
/** Match sender-factor precedence and let the registered route select supplemental evidence. */
|
|
515
|
-
*authenticate(serder, resolved, handler) {
|
|
516
|
-
const said = serder.said;
|
|
517
|
-
const sender = serder.pre;
|
|
518
|
-
const senderTsgs = aggregateTransIdxSigGroups(resolved.tsgs.filter((group) => group.pre === sender));
|
|
519
|
-
const extraTsgs = aggregateTransIdxSigGroups(resolved.tsgs.filter((group) => group.pre !== sender));
|
|
520
|
-
const cigars = senderTsgs.length && !handler?.verifyEvidence ? [] : resolved.cigars;
|
|
521
|
-
const senderCigars = cigars.filter((cigar) => cigar.verfer?.qb64 === sender);
|
|
522
|
-
const extraCigars = cigars.filter((cigar) => cigar.verfer?.qb64 !== sender);
|
|
523
|
-
this.cueMissingStates(resolved.missing);
|
|
524
|
-
if (resolved.missing.length && (!handler?.acceptsMissingEvidence || resolved.missing.some((m) => m.pre === sender))) {
|
|
525
|
-
// An unresolved last-establishment reference has no historical coordinate to persist.
|
|
526
|
-
// Sender intake recovery belongs to the consolidated processMsg/KRAM boundary.
|
|
527
|
-
return {
|
|
528
|
-
kind: "reject",
|
|
529
|
-
said,
|
|
530
|
-
preserveEscrow: true,
|
|
531
|
-
reason: "Unresolved last-establishment evidence requires key state and retransmission.",
|
|
532
|
-
};
|
|
533
|
-
}
|
|
534
|
-
const sealed = verifyExchangeProofs(this.hby.db, serder, {
|
|
535
|
-
sourceSeals: resolved.sourceSeals.filter((seal) => seal.i.qb64 === sender),
|
|
536
|
-
});
|
|
537
|
-
if (sealed.missing.length) {
|
|
538
|
-
this.cueMissingStates(sealed.missing);
|
|
539
|
-
return {
|
|
540
|
-
kind: handler?.acceptsSscs ? "escrow" : "reject",
|
|
541
|
-
...(!handler?.acceptsSscs ? { preserveEscrow: true } : {}),
|
|
542
|
-
said,
|
|
543
|
-
reason: "Missing sender source-seal KEL evidence.",
|
|
544
|
-
};
|
|
545
|
-
}
|
|
546
|
-
let tsgs;
|
|
547
|
-
let validCigars;
|
|
548
|
-
if (sealed.sourceSeals.length) {
|
|
549
|
-
// A valid sender seal wins; invalid optional sender signatures cannot undo its authentication.
|
|
550
|
-
tsgs = verifyExchangeProofs(this.hby.db, serder, { tsgs: senderTsgs }).tsgs;
|
|
551
|
-
validCigars = [];
|
|
552
|
-
}
|
|
553
|
-
else {
|
|
554
|
-
if (!handler?.verifyEvidence && !senderTsgs.length && !senderCigars.length
|
|
555
|
-
&& (extraTsgs.length || extraCigars.length)) {
|
|
556
|
-
return {
|
|
557
|
-
kind: "reject",
|
|
558
|
-
said,
|
|
559
|
-
preserveEscrow: true,
|
|
560
|
-
reason: "Exchange has foreign proofs without sender authentication.",
|
|
561
|
-
};
|
|
562
|
-
}
|
|
563
|
-
const signatures = this.verifySignatures({ serder, sender, tsgs: senderTsgs, cigars: senderCigars });
|
|
564
|
-
if (signatures.kind !== "verified") {
|
|
565
|
-
return signatures;
|
|
566
|
-
}
|
|
567
|
-
tsgs = signatures.tsgs;
|
|
568
|
-
validCigars = signatures.cigars;
|
|
569
|
-
}
|
|
570
|
-
if (!handler?.verifyEvidence && (extraTsgs.length || extraCigars.length)) {
|
|
571
|
-
return {
|
|
572
|
-
kind: "reject",
|
|
573
|
-
said,
|
|
574
|
-
preserveEscrow: true,
|
|
575
|
-
reason: "Exchange route does not accept supplemental endorsements.",
|
|
576
|
-
};
|
|
577
|
-
}
|
|
578
|
-
let supplemental = { tsgs: [], cigars: [], sourceSeals: [] };
|
|
579
|
-
if (handler?.verifyEvidence) {
|
|
580
|
-
const { invalid, missing, ...factors } = verifyExchangeProofs(this.hby.db, serder, {
|
|
581
|
-
tsgs: extraTsgs,
|
|
582
|
-
cigars: extraCigars,
|
|
583
|
-
sourceSeals: resolved.sourceSeals.filter((seal) => seal.i.qb64 !== sender),
|
|
584
|
-
});
|
|
585
|
-
// Each reference helper invocation deduplicates its own coordinate list. Do not
|
|
586
|
-
// re-query unresolved last groups when passing them on to the selection hook.
|
|
587
|
-
this.cueMissingStates(missing);
|
|
588
|
-
if (missing.length && !handler.acceptsMissingEvidence) {
|
|
589
|
-
return { kind: "reject", said, preserveEscrow: true, reason: "Missing supplemental proof key state." };
|
|
590
|
-
}
|
|
591
|
-
const selection = handler.verifyEvidence({
|
|
592
|
-
serder,
|
|
593
|
-
factors,
|
|
594
|
-
invalid,
|
|
595
|
-
...(handler.acceptsMissingEvidence ? { missing: [...resolved.missing, ...missing] } : {}),
|
|
596
|
-
});
|
|
597
|
-
const selected = selection && Symbol.iterator in selection ? yield* selection : selection;
|
|
598
|
-
if (!selected)
|
|
599
|
-
return { kind: "reject", said, reason: "Route rejected supplemental exchange proofs." };
|
|
600
|
-
supplemental = {
|
|
601
|
-
tsgs: selected.tsgs ?? [],
|
|
602
|
-
cigars: selected.cigars ?? [],
|
|
603
|
-
sourceSeals: selected.sourceSeals ?? [],
|
|
604
|
-
};
|
|
605
|
-
}
|
|
606
|
-
return {
|
|
607
|
-
kind: "verified",
|
|
608
|
-
supplemental,
|
|
609
|
-
sscs: sealed.sourceSeals.map(({ s, d }) => ({ s, d })),
|
|
610
|
-
retained: {
|
|
611
|
-
tsgs: [...tsgs, ...supplemental.tsgs],
|
|
612
|
-
cigars: [...validCigars, ...supplemental.cigars],
|
|
613
|
-
sourceSeals: [...sealed.sourceSeals, ...supplemental.sourceSeals],
|
|
614
|
-
},
|
|
615
|
-
};
|
|
616
|
-
}
|
|
617
|
-
/** Match _cueMissingKeyState's coordinate deduplication within this invocation. */
|
|
618
|
-
cueMissingStates(missing) {
|
|
619
|
-
const seen = new Set();
|
|
620
|
-
for (const { pre, sn } of missing) {
|
|
621
|
-
const key = `${pre}:${sn ?? ""}`;
|
|
622
|
-
if (seen.has(key)) {
|
|
623
|
-
continue;
|
|
624
|
-
}
|
|
625
|
-
seen.add(key);
|
|
626
|
-
this.cues.push({
|
|
627
|
-
kin: "query",
|
|
628
|
-
pre,
|
|
629
|
-
route: "logs",
|
|
630
|
-
q: sn === null ? {} : { s: sn.toString(16) },
|
|
631
|
-
});
|
|
632
|
-
}
|
|
633
|
-
}
|
|
634
|
-
/** Reattach the persisted verifier to each nontransferable signature before replay or retry. */
|
|
635
|
-
storedCigars(said) {
|
|
636
|
-
return this.hby.db.ecigs.get([said]).map(([verfer, cigar]) => new Cigar(cigar, verfer));
|
|
637
|
-
}
|
|
638
|
-
/** Restore source triples without losing the anchoring AID or its historical ordinal. */
|
|
639
|
-
storedSeals(said) {
|
|
640
|
-
const seals = [];
|
|
641
|
-
for (const [keys, [s, d]] of this.hby.db.ests.getTopItemIter([said, ""])) {
|
|
642
|
-
seals.push({ i: new Prefixer({ qb64: keys[1] }), s, d });
|
|
643
|
-
}
|
|
644
|
-
return seals;
|
|
645
|
-
}
|
|
646
|
-
/** Classify sender endorsements without publishing exchange or payload ownership. */
|
|
647
|
-
verifySignatures(args) {
|
|
648
|
-
if (args.tsgs.length > 0) {
|
|
649
|
-
const verifiedGroups = [];
|
|
650
|
-
const grouped = args.tsgs;
|
|
651
|
-
for (const tsg of grouped) {
|
|
652
|
-
if (tsg.pre !== args.sender) {
|
|
653
|
-
return {
|
|
654
|
-
kind: "reject",
|
|
655
|
-
reason: `Exchange signer ${tsg.pre} does not match sender ${args.sender}.`,
|
|
656
|
-
said: args.serder.said ?? "<unknown>",
|
|
657
|
-
};
|
|
658
|
-
}
|
|
659
|
-
if (tsg.sn > BigInt(Number.MAX_SAFE_INTEGER)) {
|
|
660
|
-
return { kind: "reject", reason: "Sender ordinal exceeds runtime range.", said: args.serder.said };
|
|
661
|
-
}
|
|
662
|
-
const estSaid = this.hby.db.kels.getLast(tsg.pre, Number(tsg.sn));
|
|
663
|
-
const estEvent = estSaid ? this.hby.db.getEvtSerder(tsg.pre, estSaid) : null;
|
|
664
|
-
if (!estSaid || !estEvent) {
|
|
665
|
-
return {
|
|
666
|
-
kind: "escrow",
|
|
667
|
-
query: { pre: tsg.pre, sn: tsg.sn },
|
|
668
|
-
reason: `Missing accepted establishment state for ${tsg.pre}:${tsg.said}.`,
|
|
669
|
-
said: args.serder.said ?? "<unknown>",
|
|
670
|
-
};
|
|
671
|
-
}
|
|
672
|
-
if (estSaid !== tsg.said || !estEvent.estive || !tsg.prefixer.transferable) {
|
|
673
|
-
return { kind: "reject", reason: "Invalid sender establishment reference.", said: args.serder.said };
|
|
674
|
-
}
|
|
675
|
-
const tholder = estEvent.tholder;
|
|
676
|
-
if (!tholder || estEvent.verfers.length < tholder.size) {
|
|
677
|
-
return {
|
|
678
|
-
kind: "reject",
|
|
679
|
-
reason: `Invalid threshold material for exchange signer ${tsg.pre}.`,
|
|
680
|
-
said: args.serder.said ?? "<unknown>",
|
|
681
|
-
};
|
|
682
|
-
}
|
|
683
|
-
const verified = Kever.verifyIndexedSignatures(args.serder.raw, tsg.sigers, estEvent.verfers);
|
|
684
|
-
if (!tholder.satisfy(verified.indices)) {
|
|
685
|
-
return {
|
|
686
|
-
kind: "escrow",
|
|
687
|
-
query: { pre: tsg.pre, sn: tsg.sn },
|
|
688
|
-
reason: `Exchange ${args.serder.said ?? "<unknown>"} does not yet satisfy sender threshold.`,
|
|
689
|
-
said: args.serder.said ?? "<unknown>",
|
|
690
|
-
};
|
|
691
|
-
}
|
|
692
|
-
verifiedGroups.push(new TransIdxSigGroup(tsg.prefixer, tsg.seqner, tsg.diger, verified.sigers));
|
|
693
|
-
}
|
|
694
|
-
return { kind: "verified", tsgs: verifiedGroups, cigars: [] };
|
|
695
|
-
}
|
|
696
|
-
if (args.cigars.length > 0) {
|
|
697
|
-
const verifiedCigars = [];
|
|
698
|
-
for (const cigar of args.cigars) {
|
|
699
|
-
if (!cigar.verfer) {
|
|
700
|
-
return {
|
|
701
|
-
kind: "reject",
|
|
702
|
-
reason: "Exchange cigar is missing verifier context.",
|
|
703
|
-
said: args.serder.said ?? "<unknown>",
|
|
704
|
-
};
|
|
705
|
-
}
|
|
706
|
-
if (cigar.verfer.qb64 !== args.sender) {
|
|
707
|
-
return {
|
|
708
|
-
kind: "reject",
|
|
709
|
-
reason: `Exchange cigar signer ${cigar.verfer.qb64} does not match sender ${args.sender}.`,
|
|
710
|
-
said: args.serder.said ?? "<unknown>",
|
|
711
|
-
};
|
|
712
|
-
}
|
|
713
|
-
if (cigar.verfer.transferable || !cigar.verfer.verify(cigar.raw, args.serder.raw)) {
|
|
714
|
-
return {
|
|
715
|
-
kind: "reject",
|
|
716
|
-
preserveEscrow: true,
|
|
717
|
-
reason: `Exchange cigar failed verification for ${args.sender}.`,
|
|
718
|
-
said: args.serder.said ?? "<unknown>",
|
|
719
|
-
};
|
|
720
|
-
}
|
|
721
|
-
verifiedCigars.push(cigar);
|
|
722
|
-
}
|
|
723
|
-
return { kind: "verified", tsgs: [], cigars: verifiedCigars };
|
|
724
|
-
}
|
|
725
|
-
return {
|
|
726
|
-
kind: "escrow",
|
|
727
|
-
reason: "Exchange message has no signatures yet.",
|
|
728
|
-
said: args.serder.said ?? "<unknown>",
|
|
729
|
-
};
|
|
730
|
-
}
|
|
731
|
-
/** Retain incomplete endorsements and the original expiration clock for retry. */
|
|
732
|
-
escrowPartialSigned(serder, factors, ptds) {
|
|
733
|
-
const said = serder.said;
|
|
734
|
-
if (!said) {
|
|
735
|
-
throw new ValidationError("Cannot escrow an exchange without a SAID.");
|
|
736
|
-
}
|
|
737
|
-
if (this.complete(said)) {
|
|
738
|
-
return false;
|
|
739
|
-
}
|
|
740
|
-
this.storeEscrowEvidence(serder, factors, ptds);
|
|
741
|
-
this.hby.db.emse?.trim([said]);
|
|
742
|
-
// Preserve first admission time so repeated retries cannot keep stale wire alive forever.
|
|
743
|
-
this.hby.db.epsd.put([said], new Dater({ qb64: encodeDateTimeToDater(makeNowIso8601(new Date(this.now()))) }));
|
|
744
|
-
return this.hby.db.epse.put([said], serder);
|
|
745
|
-
}
|
|
746
|
-
/** Persist the same independently authenticated evidence for signature and schema dependencies. */
|
|
747
|
-
storeEscrowEvidence(serder, factors, ptds) {
|
|
748
|
-
const said = serder.said;
|
|
749
|
-
for (const tsg of factors.tsgs) {
|
|
750
|
-
const quadKey = [said, tsg.pre, tsg.sn.toString(16).padStart(32, "0"), tsg.said];
|
|
751
|
-
for (const siger of tsg.sigers) {
|
|
752
|
-
this.hby.db.esigs.add(quadKey, siger);
|
|
753
|
-
}
|
|
754
|
-
}
|
|
755
|
-
for (const cigar of factors.cigars) {
|
|
756
|
-
if (cigar.verfer) {
|
|
757
|
-
this.hby.db.ecigs.add([said], [cigar.verfer, cigar]);
|
|
758
|
-
}
|
|
759
|
-
}
|
|
760
|
-
for (const seal of factors.sourceSeals)
|
|
761
|
-
this.hby.db.ests.add([said, seal.i.qb64], [seal.s, seal.d]);
|
|
762
|
-
this.hby.db.epath.pin([said], ptds.map((group) => textDecoder.decode(group.raw)));
|
|
763
|
-
}
|
|
764
|
-
/** One absolute deadline spans sequential schema dependencies; receiver receipt is not the TMSC opener. */
|
|
765
|
-
escrowMissingSchema(serder, schema, factors, ptds) {
|
|
766
|
-
const { emse, emsd } = this.hby.db, said = serder.said;
|
|
767
|
-
if (!emse || !emsd)
|
|
768
|
-
throw new ValidationError("Missing-schema storage is unavailable on this readonly layout.");
|
|
769
|
-
if (this.complete(said)) {
|
|
770
|
-
return false;
|
|
771
|
-
}
|
|
772
|
-
const prior = emsd.get([said]);
|
|
773
|
-
if (prior && timestampMicros(prior.dts) === null)
|
|
774
|
-
throw new Error("Corrupt missing-schema deadline.");
|
|
775
|
-
if (!prior) {
|
|
776
|
-
const xid = serder.sad.x;
|
|
777
|
-
const cache = typeof xid === "string" && xid ? this.hby.db.tmsc.get([serder.pre, xid, said]) : null;
|
|
778
|
-
const opener = cache && timestampMicros(cache.xdt);
|
|
779
|
-
if (cache && (opener === null || opener === undefined || !Number.isSafeInteger(cache.pxl) || cache.pxl < 0)) {
|
|
780
|
-
throw new Error("Corrupt missing-schema transaction lifetime.");
|
|
781
|
-
}
|
|
782
|
-
const expiry = cache ? opener + BigInt(cache.pxl) * 1000n : this.nowMicros() + 20000000n;
|
|
783
|
-
const remainder = (expiry % 1000n + 1000n) % 1000n;
|
|
784
|
-
const text = makeNowIso8601(new Date(Number((expiry - remainder) / 1000n)))
|
|
785
|
-
.replace(/\d{6}\+/, ((expiry % 1000000n + 1000000n) % 1000000n).toString().padStart(6, "0") + "+");
|
|
786
|
-
if (timestampMicros(text) !== expiry)
|
|
787
|
-
throw new Error("Missing-schema deadline exceeds supported date range.");
|
|
788
|
-
emsd.put([said], new Dater({ qb64: encodeDateTimeToDater(text) }));
|
|
789
|
-
}
|
|
790
|
-
this.storeEscrowEvidence(serder, factors, ptds);
|
|
791
|
-
this.hby.db.epse.rem([said]);
|
|
792
|
-
this.hby.db.epsd.rem([said]);
|
|
793
|
-
const stored = emse.get([said, schema]) === null;
|
|
794
|
-
emse.trim([said]);
|
|
795
|
-
emse.put([said, schema], serder);
|
|
796
|
-
return stored;
|
|
797
|
-
}
|
|
798
|
-
/** Trusted clock failures remain infrastructure errors rather than expiring remote work. */
|
|
799
|
-
nowMicros() {
|
|
800
|
-
const now = new Date(this.now()).getTime();
|
|
801
|
-
if (!Number.isFinite(now))
|
|
802
|
-
throw new Error("Invalid exchange receiver clock.");
|
|
803
|
-
return BigInt(now) * 1000n;
|
|
804
|
-
}
|
|
805
|
-
/** Persist protocol evidence inside the admission transaction before route handling. */
|
|
806
|
-
logAcceptedEvent(args) {
|
|
807
|
-
const said = args.serder.said;
|
|
808
|
-
if (!said) {
|
|
809
|
-
throw new ValidationError("Cannot log an exchange without a SAID.");
|
|
810
|
-
}
|
|
811
|
-
for (const tsg of args.tsgs) {
|
|
812
|
-
const quadKey = [said, tsg.pre, tsg.sn.toString(16).padStart(32, "0"), tsg.said];
|
|
813
|
-
for (const siger of tsg.sigers) {
|
|
814
|
-
this.hby.db.esigs.add(quadKey, siger);
|
|
815
|
-
}
|
|
816
|
-
}
|
|
817
|
-
for (const cigar of args.cigars) {
|
|
818
|
-
if (!cigar.verfer) {
|
|
819
|
-
throw new ValidationError("Cannot log a cigar without verifier context.");
|
|
820
|
-
}
|
|
821
|
-
this.hby.db.ecigs.add([said], [cigar.verfer, cigar]);
|
|
822
|
-
}
|
|
823
|
-
this.hby.db.epath.pin([said], args.ptds.map((group) => textDecoder.decode(group.raw)));
|
|
824
|
-
for (const seal of args.sourceSeals)
|
|
825
|
-
this.hby.db.ests.add([said, seal.i.qb64], [seal.s, seal.d]);
|
|
826
|
-
const endorsers = new Set([
|
|
827
|
-
...args.supplemental.tsgs.map((group) => group.pre),
|
|
828
|
-
...args.supplemental.cigars.map((cigar) => cigar.verfer.qb64),
|
|
829
|
-
...args.supplemental.sourceSeals.map((seal) => seal.i.qb64),
|
|
830
|
-
]);
|
|
831
|
-
for (const pre of endorsers)
|
|
832
|
-
this.hby.db.eidx.add([pre], new Diger({ qb64: said }));
|
|
833
|
-
const prior = args.serder.ked?.p;
|
|
834
|
-
if (typeof prior === "string" && prior.length > 0) {
|
|
835
|
-
this.hby.db.erpy.pin([prior], new Saider({ qb64: said }));
|
|
836
|
-
}
|
|
837
|
-
this.hby.db.exns.pin([said], args.serder);
|
|
838
|
-
}
|
|
839
|
-
rebuildEscrowedGroups(said) {
|
|
840
|
-
const groups = [];
|
|
841
|
-
let currentKey = null;
|
|
842
|
-
let currentSigers = [];
|
|
843
|
-
const flush = () => {
|
|
844
|
-
if (!currentKey || currentSigers.length === 0) {
|
|
845
|
-
return;
|
|
846
|
-
}
|
|
847
|
-
groups.push(new TransIdxSigGroup(new Prefixer({ qb64: currentKey[0] }), seqnerFromSnh(currentKey[1]), new Diger({ qb64: currentKey[2] }), currentSigers));
|
|
848
|
-
currentSigers = [];
|
|
849
|
-
};
|
|
850
|
-
for (const [keys, siger] of this.hby.db.esigs.getTopItemIter([said, ""])) {
|
|
851
|
-
const groupKey = keys.slice(1);
|
|
852
|
-
if (!groupKey[0] || !groupKey[1] || !groupKey[2]) {
|
|
853
|
-
continue;
|
|
854
|
-
}
|
|
855
|
-
if (currentKey
|
|
856
|
-
&& (currentKey[0] !== groupKey[0]
|
|
857
|
-
|| currentKey[1] !== groupKey[1]
|
|
858
|
-
|| currentKey[2] !== groupKey[2])) {
|
|
859
|
-
flush();
|
|
860
|
-
}
|
|
861
|
-
currentKey = [groupKey[0], groupKey[1], groupKey[2]];
|
|
862
|
-
currentSigers.push(siger);
|
|
863
|
-
}
|
|
864
|
-
flush();
|
|
865
|
-
return groups;
|
|
866
|
-
}
|
|
867
|
-
/** Clear pending metadata, preserving wire evidence during the acceptance transaction. */
|
|
868
|
-
clearEscrow(said, keepEvidence = false) {
|
|
869
|
-
this.hby.db.epse.rem([said]);
|
|
870
|
-
this.hby.db.epsd.rem([said]);
|
|
871
|
-
this.hby.db.emse?.trim([said]);
|
|
872
|
-
this.hby.db.emsd?.rem([said]);
|
|
873
|
-
this.hby.db.esigs.trim([said, ""], { topive: false });
|
|
874
|
-
this.hby.db.ecigs.rem([said]);
|
|
875
|
-
this.hby.db.ests.trim([said, ""], { topive: false });
|
|
876
|
-
this.hby.db.epath.rem([said]);
|
|
877
|
-
if (!keepEvidence) {
|
|
878
|
-
this.hby.db.essrs.rem([said]);
|
|
879
|
-
this.hby.db.enst.rem([said]);
|
|
880
|
-
this.hby.db.exchangeMeta.rem([said]);
|
|
881
|
-
}
|
|
882
|
-
}
|
|
883
|
-
/** Remove pending ownership only; accepted wire evidence always remains retained. */
|
|
884
|
-
*dropEscrow(said) {
|
|
885
|
-
yield* this.admission();
|
|
886
|
-
if (this.complete(said)) {
|
|
887
|
-
this.hby.db.epse.rem([said]);
|
|
888
|
-
this.hby.db.epsd.rem([said]);
|
|
889
|
-
this.hby.db.emse?.trim([said]);
|
|
890
|
-
this.hby.db.emsd?.rem([said]);
|
|
891
|
-
return;
|
|
892
|
-
}
|
|
893
|
-
if (this.hby.db.exchangeMeta.get([said])?.essr) {
|
|
894
|
-
yield* abortable(async (signal) => {
|
|
895
|
-
await (await this.hby.db.openPayloads(signal)).remove(`essr/${said}`, () => this.clearEscrow(said), signal);
|
|
896
|
-
});
|
|
897
|
-
}
|
|
898
|
-
else
|
|
899
|
-
this.hby.db.env.transactionSync(() => this.clearEscrow(said));
|
|
900
|
-
}
|
|
901
|
-
}
|
|
902
|
-
/**
|
|
903
|
-
* Create and deliver one signed exchange message through the selected
|
|
904
|
-
* controller-to-controller transport path.
|
|
905
|
-
*/
|
|
906
|
-
export function* sendSignedExchangeMessage(hab, args) {
|
|
907
|
-
const url = resolveExchangeTransportUrl(hab, args.recipient, args.transport ?? "auto");
|
|
908
|
-
if (!url) {
|
|
909
|
-
throw new ValidationError(`No ${args.transport ?? "auto"} exchange endpoint is available for ${args.recipient}.`);
|
|
910
|
-
}
|
|
911
|
-
const [serder] = exchangeMessage(args.route, args.payload, {
|
|
912
|
-
sender: hab.pre,
|
|
913
|
-
recipient: args.recipient,
|
|
914
|
-
modifiers: args.modifiers,
|
|
915
|
-
stamp: args.date,
|
|
916
|
-
dig: args.dig,
|
|
917
|
-
});
|
|
918
|
-
const message = hab.endorse(serder, { pipelined: false });
|
|
919
|
-
yield* postCesr(url, (signal) => chunkBytes(message, { signal }), {
|
|
920
|
-
bodyMode: "header",
|
|
921
|
-
destination: args.recipient,
|
|
922
|
-
});
|
|
923
|
-
return { serder, url };
|
|
924
|
-
}
|
|
925
|
-
/**
|
|
926
|
-
* Choose the remote URL that should receive one outbound exchange message.
|
|
927
|
-
*
|
|
928
|
-
* Current transport policy:
|
|
929
|
-
* - `direct` sends to the recipient controller location
|
|
930
|
-
* - `indirect` sends to an authorized mailbox endpoint, then falls back to
|
|
931
|
-
* agent endpoints when no mailbox URL is available
|
|
932
|
-
* - `auto` prefers direct delivery because this codebase has not yet landed
|
|
933
|
-
* full witness-forwarding mailbox orchestration
|
|
934
|
-
*/
|
|
935
|
-
export function resolveExchangeTransportUrl(hab, recipient, transport) {
|
|
936
|
-
const directUrl = preferredUrl(hab.fetchUrls(recipient));
|
|
937
|
-
const ends = hab.endsFor(recipient);
|
|
938
|
-
const mailboxUrl = preferredRoleUrl(ends[Roles.mailbox]);
|
|
939
|
-
const agentUrl = preferredRoleUrl(ends[Roles.agent]);
|
|
940
|
-
switch (transport) {
|
|
941
|
-
case "direct":
|
|
942
|
-
return directUrl;
|
|
943
|
-
case "indirect":
|
|
944
|
-
return mailboxUrl ?? agentUrl;
|
|
945
|
-
case "auto":
|
|
946
|
-
default:
|
|
947
|
-
return directUrl ?? mailboxUrl ?? agentUrl;
|
|
948
|
-
}
|
|
949
|
-
}
|
|
950
|
-
function preferredRoleUrl(roleUrls) {
|
|
951
|
-
if (!roleUrls) {
|
|
952
|
-
return null;
|
|
953
|
-
}
|
|
954
|
-
for (const urls of Object.values(roleUrls)) {
|
|
955
|
-
const preferred = preferredUrl(urls);
|
|
956
|
-
if (preferred) {
|
|
957
|
-
return preferred;
|
|
958
|
-
}
|
|
959
|
-
}
|
|
960
|
-
return null;
|
|
961
|
-
}
|
|
962
|
-
function preferredUrl(urls) {
|
|
963
|
-
return urls.https ?? urls.http ?? Object.values(urls)[0] ?? null;
|
|
964
|
-
}
|
|
965
|
-
function normalizeAttachments(ptds) {
|
|
966
|
-
return ptds.map((group) => ({
|
|
967
|
-
raw: group.raw.slice(),
|
|
968
|
-
text: textDecoder.decode(group.raw),
|
|
969
|
-
}));
|
|
970
|
-
}
|
|
971
|
-
function hexToFixedBytes(hex, size) {
|
|
972
|
-
const normalized = hex.length % 2 === 0 ? hex : `0${hex}`;
|
|
973
|
-
if (!/^[0-9a-f]+$/i.test(normalized)) {
|
|
974
|
-
throw new Error(`Invalid hex ordinal ${hex}`);
|
|
975
|
-
}
|
|
976
|
-
if (normalized.length > size * 2) {
|
|
977
|
-
throw new Error(`Hex ordinal ${hex} exceeds ${size} bytes.`);
|
|
978
|
-
}
|
|
979
|
-
const raw = new Uint8Array(size);
|
|
980
|
-
const padded = normalized.padStart(size * 2, "0");
|
|
981
|
-
for (let i = 0; i < size; i++) {
|
|
982
|
-
raw[i] = Number.parseInt(padded.slice(i * 2, (i * 2) + 2), 16);
|
|
983
|
-
}
|
|
984
|
-
return raw;
|
|
985
|
-
}
|
|
986
|
-
function seqnerFromSnh(snh) {
|
|
987
|
-
return new Seqner({ code: "0A", raw: hexToFixedBytes(snh, 16) });
|
|
988
|
-
}
|
|
989
|
-
function aggregateTransIdxSigGroups(groups) {
|
|
990
|
-
const aggregated = new Map();
|
|
991
|
-
for (const group of groups) {
|
|
992
|
-
const key = `${group.pre}\0${group.sn}\0${group.said}`;
|
|
993
|
-
const existing = aggregated.get(key);
|
|
994
|
-
if (!existing) {
|
|
995
|
-
aggregated.set(key, group);
|
|
996
|
-
continue;
|
|
997
|
-
}
|
|
998
|
-
aggregated.set(key, new TransIdxSigGroup(existing.prefixer, existing.seqner, existing.diger, [...existing.sigers, ...group.sigers]));
|
|
999
|
-
}
|
|
1000
|
-
return [...aggregated.values()];
|
|
1001
|
-
}
|