keri-ts 0.11.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -2
- package/esm/keri/npm/src/_dnt.polyfills.js +36 -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 +47 -40
- package/esm/keri/npm/src/acdc/regbasing.js +22 -22
- package/esm/keri/npm/src/acdc/regengine.js +88 -119
- package/esm/keri/npm/src/acdc/regeventing.js +163 -44
- package/esm/keri/npm/src/acdc/registering.js +99 -23
- package/esm/keri/npm/src/acdc/registraring.js +82 -46
- 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 +103 -105
- package/esm/keri/npm/src/acdc/unblinding.js +1042 -0
- package/esm/keri/npm/src/app/{authenticating.js → bootstrap/authenticating.js} +40 -39
- package/esm/keri/npm/src/app/bootstrap/bootstrapping.js +109 -0
- package/esm/keri/npm/src/app/bootstrap/oobi-replies.js +113 -0
- package/esm/keri/npm/src/app/{oobiery.js → bootstrap/oobiery.js} +211 -267
- 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 -45
- 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/delivery/reply-streams.js +230 -0
- package/esm/keri/npm/src/app/delivery/respondant.js +159 -0
- package/esm/keri/npm/src/app/delivery/stored-replies.js +53 -0
- 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/{challenging.js → identity/challenging.js} +13 -8
- package/esm/keri/npm/src/app/{configing.js → identity/configing.js} +4 -4
- package/esm/keri/npm/src/app/{delegating.js → identity/delegating.js} +118 -40
- package/esm/keri/npm/src/app/{endpoint-roleing.js → identity/endpoint-roleing.js} +43 -39
- package/esm/keri/npm/src/app/{habbing.js → identity/habbing.js} +258 -226
- 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-building.js → ipex/ipex-building.js} +53 -55
- package/esm/keri/npm/src/app/ipex/ipex-credentialing.js +359 -0
- package/esm/keri/npm/src/app/{ipex-graph.js → ipex/ipex-graph.js} +70 -124
- package/esm/keri/npm/src/app/ipex/ipex-grouping.js +664 -0
- package/esm/keri/npm/src/app/ipex/ipex-node-authentication.js +185 -0
- package/esm/keri/npm/src/app/ipex/ipex-v2.js +692 -0
- package/esm/keri/npm/src/app/{ipexing.js → ipex/ipexing.js} +59 -10
- 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} +146 -139
- 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} +117 -70
- 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/multisig/grouping.js +932 -0
- 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} +23 -50
- package/esm/keri/npm/src/app/notifications/signaling.js +177 -0
- package/esm/keri/npm/src/app/{parsering.js → protocol/parsering.js} +123 -53
- 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/queries/query-replies.js +151 -0
- 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/runtime/abortable.js +103 -0
- 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} +43 -21
- 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} +28 -78
- 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} +41 -5
- 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 -9
- package/esm/keri/npm/src/{app/cli → cli}/common/existing.js +9 -29
- 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 +71 -53
- package/esm/keri/npm/src/{app/cli → cli/endpoints}/ends.js +34 -31
- package/esm/keri/npm/src/{app/cli → cli/endpoints}/loc.js +22 -20
- package/esm/keri/npm/src/cli/endpoints/oobi-clean.js +134 -0
- package/esm/keri/npm/src/{app/cli → cli/endpoints}/oobi.js +37 -36
- package/esm/keri/npm/src/{app/cli → cli/identity}/aid.js +8 -7
- package/esm/keri/npm/src/cli/identity/challenge.js +181 -0
- package/esm/keri/npm/src/{app/cli → cli/identity}/delegate.js +88 -73
- 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/cli/identity/rotate.js +172 -0
- package/esm/keri/npm/src/cli/index.js +38 -0
- package/esm/keri/npm/src/{app/cli → cli/messaging}/exchange.js +24 -24
- package/esm/keri/npm/src/cli/messaging/multisig.js +569 -0
- 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/cli/tools/annotate.js +25 -0
- package/esm/keri/npm/src/{app/cli → cli/tools}/benchmark.js +18 -9
- package/esm/keri/npm/src/{app/cli → cli/tools}/db-dump.js +14 -27
- 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/deck.js +5 -44
- package/esm/keri/npm/src/core/dispatch.js +10 -2
- package/esm/keri/npm/src/core/errors.js +5 -10
- 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} +47 -4
- package/esm/keri/npm/src/core/genus-framing.js +44 -0
- package/esm/keri/npm/src/core/{eventing.js → kel/eventing.js} +209 -390
- package/esm/keri/npm/src/core/kel/kever-decisions.js +70 -0
- package/esm/keri/npm/src/core/{kever.js → kel/kever.js} +84 -167
- 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} +5 -15
- package/esm/keri/npm/src/core/{kram-signatures.js → mailbox/kram-signatures.js} +1 -1
- package/esm/keri/npm/src/core/mailbox/kram-staging.js +149 -0
- package/esm/keri/npm/src/core/{kram-time.js → mailbox/kram-time.js} +9 -15
- package/esm/keri/npm/src/core/mailbox/kraming.js +78 -0
- package/esm/keri/npm/src/core/protocol-eventing.js +6 -1
- package/esm/keri/npm/src/core/protocol-serialization.js +9 -34
- package/esm/keri/npm/src/core/protocol-vdr-eventing.js +10 -11
- package/esm/keri/npm/src/core/records.js +0 -19
- package/esm/keri/npm/src/core/routing.js +187 -199
- package/esm/keri/npm/src/db/baser-defaults.js +11 -0
- package/esm/keri/npm/src/db/basing.js +224 -401
- package/esm/keri/npm/src/db/core/keys.js +2 -2
- package/esm/keri/npm/src/db/core/lmdber.js +123 -149
- package/esm/keri/npm/src/db/core/path-manager.js +2 -4
- package/esm/keri/npm/src/db/escrowing.js +82 -200
- 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 -6
- package/esm/keri/npm/src/db/keeping.js +123 -6
- package/esm/keri/npm/src/db/{kram-factors.js → mailbox/kram-factors.js} +17 -50
- package/esm/keri/npm/src/db/{mailboxing.js → mailbox/mailboxing.js} +5 -8
- package/esm/keri/npm/src/db/reger.js +48 -69
- package/esm/keri/npm/src/db/{kel-replay.js → replay/kel-replay.js} +12 -24
- package/esm/keri/npm/src/db/{tel-replay.js → replay/tel-replay.js} +38 -36
- package/esm/keri/npm/src/db/{witness-replay.js → replay/witness-replay.js} +8 -14
- package/esm/keri/npm/src/db/subing.js +2 -11
- package/esm/keri/npm/src/did/keri/resolving.js +4 -18
- package/esm/keri/npm/src/did/webs/artifacts.js +21 -24
- package/esm/keri/npm/src/did/webs/designated-aliases.js +18 -48
- package/esm/keri/npm/src/did/webs/documenting.js +8 -8
- package/esm/keri/npm/src/did/webs/resolving.js +73 -74
- 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 +105 -74
- 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 -109
- package/esm/keri/npm/src/vdr/eventing.js +633 -251
- 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/vdr/tsn-query.js +15 -10
- package/esm/keri/npm/src/{app/version.js → version.js} +2 -2
- package/package.json +7 -21
- package/types/_dnt.polyfills.d.ts +55 -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 +19 -15
- package/types/acdc/observing.d.ts.map +1 -1
- package/types/acdc/regbasing.d.ts +8 -9
- package/types/acdc/regbasing.d.ts.map +1 -1
- package/types/acdc/regengine.d.ts +14 -28
- 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 +27 -11
- package/types/acdc/registering.d.ts.map +1 -1
- package/types/acdc/registraring.d.ts +22 -22
- 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 +3 -2
- 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/bootstrap/oobi-replies.d.ts +8 -0
- package/types/app/bootstrap/oobi-replies.d.ts.map +1 -0
- package/types/app/{oobiery.d.ts → bootstrap/oobiery.d.ts} +98 -27
- 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} +20 -9
- 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/delivery/stored-replies.d.ts +11 -0
- 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} +9 -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} +59 -17
- package/types/app/identity/delegating.d.ts.map +1 -0
- package/types/app/identity/endpoint-roleing.d.ts +54 -0
- package/types/app/identity/endpoint-roleing.d.ts.map +1 -0
- package/types/app/{habbing.d.ts → identity/habbing.d.ts} +86 -54
- 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-building.d.ts → ipex/ipex-building.d.ts} +5 -5
- package/types/app/ipex/ipex-building.d.ts.map +1 -0
- package/types/app/{ipex-credentialing.d.ts → ipex/ipex-credentialing.d.ts} +42 -10
- 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/ipex-node-authentication.d.ts +32 -0
- 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 -8
- 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 -43
- 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/multisig/grouping.d.ts +317 -0
- 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} +5 -6
- package/types/app/notifications/notifying.d.ts.map +1 -0
- package/types/app/notifications/signaling.d.ts +68 -0
- package/types/app/notifications/signaling.d.ts.map +1 -0
- package/types/app/protocol/parsering.d.ts +128 -0
- 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} +9 -33
- 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} +10 -3
- 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 -9
- package/types/cli/common/context.d.ts.map +1 -0
- package/types/{app/cli → cli}/common/existing.d.ts +2 -8
- 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 +3 -1
- 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 +4 -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/{app/cli → cli/tools}/db-dump.d.ts +0 -2
- 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 +146 -57
- package/types/core/cues.d.ts.map +1 -1
- package/types/core/deck.d.ts +2 -12
- package/types/core/deck.d.ts.map +1 -1
- package/types/core/dispatch.d.ts +7 -3
- package/types/core/dispatch.d.ts.map +1 -1
- package/types/core/errors.d.ts +4 -4
- package/types/core/errors.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} +18 -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} +37 -48
- package/types/core/kel/eventing.d.ts.map +1 -0
- package/types/core/{kever-decisions.d.ts → kel/kever-decisions.d.ts} +36 -22
- package/types/core/kel/kever-decisions.d.ts.map +1 -0
- package/types/core/{kever.d.ts → kel/kever.d.ts} +13 -47
- 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} +3 -3
- package/types/core/{kram-pruning.d.ts.map → mailbox/kram-pruning.d.ts.map} +1 -1
- 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/mailbox/kram-staging.d.ts +30 -0
- package/types/core/mailbox/kram-staging.d.ts.map +1 -0
- package/types/core/{kram-time.d.ts → mailbox/kram-time.d.ts} +5 -11
- package/types/core/mailbox/kram-time.d.ts.map +1 -0
- package/types/core/mailbox/kraming.d.ts +42 -0
- 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 +5 -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/protocol-vdr-eventing.d.ts +7 -5
- package/types/core/protocol-vdr-eventing.d.ts.map +1 -1
- package/types/core/records.d.ts +15 -50
- package/types/core/records.d.ts.map +1 -1
- package/types/core/routing.d.ts +76 -46
- 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 +70 -75
- package/types/db/basing.d.ts.map +1 -1
- package/types/db/core/keys.d.ts.map +1 -1
- package/types/db/core/lmdber.d.ts +21 -23
- package/types/db/core/lmdber.d.ts.map +1 -1
- package/types/db/core/path-manager.d.ts.map +1 -1
- package/types/db/escrowing.d.ts +12 -49
- 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 -6
- 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/koming.d.ts +1 -1
- package/types/db/koming.d.ts.map +1 -1
- package/types/db/{kram-factors.d.ts → mailbox/kram-factors.d.ts} +3 -5
- package/types/db/mailbox/kram-factors.d.ts.map +1 -0
- package/types/db/{mailboxing.d.ts → mailbox/mailboxing.d.ts} +3 -4
- package/types/db/mailbox/mailboxing.d.ts.map +1 -0
- package/types/db/reger.d.ts +10 -12
- package/types/db/reger.d.ts.map +1 -1
- package/types/db/{kel-replay.d.ts → replay/kel-replay.d.ts} +2 -6
- package/types/db/replay/kel-replay.d.ts.map +1 -0
- package/types/db/{tel-replay.d.ts → replay/tel-replay.d.ts} +13 -8
- package/types/db/replay/tel-replay.d.ts.map +1 -0
- package/types/db/{witness-replay.d.ts → replay/witness-replay.d.ts} +2 -3
- package/types/db/replay/witness-replay.d.ts.map +1 -0
- package/types/db/subing.d.ts +1 -5
- package/types/db/subing.d.ts.map +1 -1
- package/types/did/keri/resolving.d.ts +5 -10
- 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 +6 -5
- package/types/did/webs/designated-aliases.d.ts.map +1 -1
- package/types/did/webs/documenting.d.ts +6 -5
- package/types/did/webs/documenting.d.ts.map +1 -1
- package/types/did/webs/resolving.d.ts +13 -3
- 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 +109 -76
- 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 -27
- package/types/vdr/credentialing.d.ts.map +1 -1
- package/types/vdr/eventing.d.ts +66 -23
- 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 +9 -4
- 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/abortable.js +0 -27
- package/esm/keri/npm/src/app/agent-runtime.js +0 -638
- package/esm/keri/npm/src/app/cesr-egress.js +0 -308
- package/esm/keri/npm/src/app/cesr-output.js +0 -12
- package/esm/keri/npm/src/app/cli/annotate.js +0 -24
- package/esm/keri/npm/src/app/cli/challenge.js +0 -168
- 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 -187
- package/esm/keri/npm/src/app/cli/index.js +0 -36
- package/esm/keri/npm/src/app/cli/init.js +0 -155
- package/esm/keri/npm/src/app/cli/interact.js +0 -72
- package/esm/keri/npm/src/app/cli/ipex.js +0 -453
- package/esm/keri/npm/src/app/cli/multisig.js +0 -474
- package/esm/keri/npm/src/app/cli/query.js +0 -143
- package/esm/keri/npm/src/app/cli/rotate.js +0 -171
- package/esm/keri/npm/src/app/cli/vc.js +0 -284
- package/esm/keri/npm/src/app/cli/verifier.js +0 -96
- package/esm/keri/npm/src/app/credential-workflows.js +0 -431
- package/esm/keri/npm/src/app/cue-delivery.js +0 -171
- package/esm/keri/npm/src/app/cue-preparation.js +0 -124
- package/esm/keri/npm/src/app/cue-route.js +0 -64
- package/esm/keri/npm/src/app/cue-runtime.js +0 -104
- package/esm/keri/npm/src/app/direct-reply-delivery.js +0 -282
- package/esm/keri/npm/src/app/essr.js +0 -235
- package/esm/keri/npm/src/app/exchanging.js +0 -1219
- package/esm/keri/npm/src/app/forwarding.js +0 -1346
- package/esm/keri/npm/src/app/group-members.js +0 -37
- package/esm/keri/npm/src/app/grouping.js +0 -534
- package/esm/keri/npm/src/app/httping.js +0 -130
- package/esm/keri/npm/src/app/ipex-credentialing.js +0 -245
- package/esm/keri/npm/src/app/ipex-grouping.js +0 -317
- package/esm/keri/npm/src/app/ipex-v2.js +0 -542
- package/esm/keri/npm/src/app/mailbox-sse.js +0 -257
- package/esm/keri/npm/src/app/multisig-workflows.js +0 -537
- package/esm/keri/npm/src/app/oobi-replies.js +0 -194
- package/esm/keri/npm/src/app/query-replies.js +0 -181
- package/esm/keri/npm/src/app/querying.js +0 -1040
- package/esm/keri/npm/src/app/reactor.js +0 -517
- package/esm/keri/npm/src/app/reply-streams.js +0 -304
- package/esm/keri/npm/src/app/respondant.js +0 -173
- package/esm/keri/npm/src/app/runtime-deliveries.js +0 -510
- package/esm/keri/npm/src/app/runtime-services.js +0 -25
- package/esm/keri/npm/src/app/signaling.js +0 -388
- package/esm/keri/npm/src/app/stored-replies.js +0 -85
- package/esm/keri/npm/src/app/tcp-egress.js +0 -334
- package/esm/keri/npm/src/app/verifier-agent.js +0 -461
- package/esm/keri/npm/src/app/witnessing.js +0 -956
- package/esm/keri/npm/src/core/cue-admission.js +0 -419
- package/esm/keri/npm/src/core/index.js +0 -23
- package/esm/keri/npm/src/core/kever-decisions.js +0 -63
- package/esm/keri/npm/src/core/kram-handoff.js +0 -148
- package/esm/keri/npm/src/core/kram-staging.js +0 -211
- package/esm/keri/npm/src/core/kraming.js +0 -99
- package/esm/keri/npm/src/db/exchange-nests.js +0 -175
- package/esm/keri/npm/src/db/exchange-records.js +0 -7
- package/esm/keri/npm/src/db/kram-snapshots.js +0 -216
- package/esm/keri/npm/src/db/mailbox-inbox.js +0 -206
- package/esm/keri/npm/src/db/outboxing.js +0 -371
- package/esm/keri/npm/src/db/payload-archive.js +0 -402
- package/esm/keri/npm/src/db/payload-store.js +0 -416
- 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 -218
- package/esm/keri/npm/src/vdr/registry-tsn.js +0 -218
- package/types/app/abortable.d.ts +0 -11
- package/types/app/abortable.d.ts.map +0 -1
- package/types/app/agent-runtime.d.ts +0 -284
- 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 -48
- package/types/app/cesr-egress.d.ts.map +0 -1
- package/types/app/cesr-http.d.ts.map +0 -1
- package/types/app/cesr-output.d.ts +0 -5
- package/types/app/cesr-output.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 +0 -26
- 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 -118
- package/types/app/credential-workflows.d.ts.map +0 -1
- package/types/app/cue-delivery.d.ts +0 -30
- package/types/app/cue-delivery.d.ts.map +0 -1
- package/types/app/cue-preparation.d.ts +0 -25
- package/types/app/cue-preparation.d.ts.map +0 -1
- package/types/app/cue-route.d.ts +0 -19
- package/types/app/cue-route.d.ts.map +0 -1
- package/types/app/cue-runtime.d.ts +0 -46
- package/types/app/cue-runtime.d.ts.map +0 -1
- package/types/app/delegating.d.ts.map +0 -1
- package/types/app/direct-reply-delivery.d.ts +0 -38
- package/types/app/direct-reply-delivery.d.ts.map +0 -1
- package/types/app/endpoint-roleing.d.ts +0 -41
- package/types/app/endpoint-roleing.d.ts.map +0 -1
- package/types/app/essr.d.ts +0 -72
- package/types/app/essr.d.ts.map +0 -1
- package/types/app/exchanging.d.ts +0 -245
- package/types/app/exchanging.d.ts.map +0 -1
- package/types/app/forwarding.d.ts +0 -411
- 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 +0 -150
- 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 -42
- package/types/app/httping.d.ts.map +0 -1
- package/types/app/ipex-building.d.ts.map +0 -1
- package/types/app/ipex-credentialing.d.ts.map +0 -1
- package/types/app/ipex-graph.d.ts +0 -30
- package/types/app/ipex-graph.d.ts.map +0 -1
- package/types/app/ipex-grouping.d.ts +0 -51
- package/types/app/ipex-grouping.d.ts.map +0 -1
- package/types/app/ipex-v2.d.ts +0 -51
- 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 -159
- package/types/app/mailbox-director.d.ts.map +0 -1
- package/types/app/mailbox-sse.d.ts +0 -38
- 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 -59
- 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 +0 -18
- 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 +0 -106
- 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 -45
- package/types/app/query-replies.d.ts.map +0 -1
- package/types/app/querying.d.ts +0 -294
- package/types/app/querying.d.ts.map +0 -1
- package/types/app/reactor.d.ts +0 -171
- package/types/app/reactor.d.ts.map +0 -1
- package/types/app/reply-streams.d.ts +0 -51
- package/types/app/reply-streams.d.ts.map +0 -1
- package/types/app/respondant.d.ts +0 -48
- package/types/app/respondant.d.ts.map +0 -1
- package/types/app/runtime-deliveries.d.ts +0 -67
- package/types/app/runtime-deliveries.d.ts.map +0 -1
- package/types/app/runtime-services.d.ts +0 -29
- 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 +0 -96
- 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 +0 -18
- package/types/app/stored-replies.d.ts.map +0 -1
- package/types/app/tcp-egress.d.ts +0 -87
- package/types/app/tcp-egress.d.ts.map +0 -1
- package/types/app/verifier-agent.d.ts +0 -91
- 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 -227
- package/types/app/witnessing.d.ts.map +0 -1
- package/types/core/cue-admission.d.ts +0 -74
- package/types/core/cue-admission.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-handoff.d.ts +0 -45
- package/types/core/kram-handoff.d.ts.map +0 -1
- package/types/core/kram-policy.d.ts.map +0 -1
- package/types/core/kram-signatures.d.ts.map +0 -1
- package/types/core/kram-staging.d.ts +0 -36
- 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 +0 -46
- 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 -39
- package/types/db/exchange-nests.d.ts.map +0 -1
- package/types/db/exchange-records.d.ts +0 -35
- 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/kram-snapshots.d.ts +0 -23
- package/types/db/kram-snapshots.d.ts.map +0 -1
- package/types/db/mailbox-inbox.d.ts +0 -72
- package/types/db/mailbox-inbox.d.ts.map +0 -1
- package/types/db/mailboxing.d.ts.map +0 -1
- package/types/db/outboxing.d.ts +0 -182
- package/types/db/outboxing.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 -18
- package/types/vdr/credential-tsn.d.ts.map +0 -1
- package/types/vdr/registry-tsn.d.ts +0 -23
- 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/{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/{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}/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}/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
|
@@ -9,16 +9,34 @@
|
|
|
9
9
|
* - normal remote-processing outcomes are returned as typed decisions instead
|
|
10
10
|
* of being represented by Python control-flow exceptions.
|
|
11
11
|
*/
|
|
12
|
-
import { Dater, Diger, Ilks, Prefixer, SerderKERI, TraitDex, Verfer,
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import { Kever } from "../core/kever.js";
|
|
17
|
-
import {
|
|
12
|
+
import { Dater, Diger, Ilks, ParserError, Prefixer, SerderKERI, TraitDex, Verfer, } from "cesr-ts";
|
|
13
|
+
import { Deck } from "../core/deck.js";
|
|
14
|
+
import { DatabaseOperationError, ValidationError } from "../core/errors.js";
|
|
15
|
+
import { acceptEscrow, dropEscrow, keepEscrow } from "../core/kel/kever-decisions.js";
|
|
16
|
+
import { Kever } from "../core/kel/kever.js";
|
|
17
|
+
import { consoleLogger } from "../core/logger.js";
|
|
18
|
+
import { projectRegistrySeal, state as registryState, vcstate as credentialState, } from "../core/protocol-vdr-eventing.js";
|
|
19
|
+
import { acceptReplyDecision, unverifiedReplyDecision, } from "../core/routing.js";
|
|
18
20
|
import { dgKey } from "../db/core/keys.js";
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
+
import { encodeDateTimeToDater, makeNowIso8601, timestampMicros } from "../time/mod.js";
|
|
22
|
+
import { backerThreshold, resolveBackerState } from "./backer-state.js";
|
|
23
|
+
import { credentialRecord } from "./credential-tsn-record.js";
|
|
24
|
+
import { qualifiedPrefix, registryRecord } from "./registry-tsn-record.js";
|
|
25
|
+
import { verifyTelAnchor } from "./tel-anchor.js";
|
|
21
26
|
import { prepareTsnQuery } from "./tsn-query.js";
|
|
27
|
+
/** Carry an existing pending decision across Tever's constructor-only boundary. */
|
|
28
|
+
class PendingTelInception extends Error {
|
|
29
|
+
/** @param decision Recoverable inception outcome retained in its existing protocol escrow. */
|
|
30
|
+
constructor(decision) {
|
|
31
|
+
super(decision.reason);
|
|
32
|
+
Object.defineProperty(this, "decision", {
|
|
33
|
+
enumerable: true,
|
|
34
|
+
configurable: true,
|
|
35
|
+
writable: true,
|
|
36
|
+
value: decision
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}
|
|
22
40
|
function okSaid(serder) {
|
|
23
41
|
if (!serder.said) {
|
|
24
42
|
throw new ValidationError("TEL event missing SAID.");
|
|
@@ -110,6 +128,55 @@ function stringListField(data, field) {
|
|
|
110
128
|
const value = data[field];
|
|
111
129
|
return Array.isArray(value) && value.every((item) => typeof item === "string") ? [...value] : [];
|
|
112
130
|
}
|
|
131
|
+
/**
|
|
132
|
+
* Validate VCP identity, ordinal, backer policy and configuration without writes.
|
|
133
|
+
* Existing constructor overrides retain their KERIpy semantics: an explicit true
|
|
134
|
+
* or a signed configuration trait enables the corresponding registry policy.
|
|
135
|
+
*/
|
|
136
|
+
export function validateRegistryInception(serder, noBackers, estOnly) {
|
|
137
|
+
if (serder.ilk !== Ilks.vcp)
|
|
138
|
+
throw new ValidationError(`Expected vcp got ${String(serder.ilk)}.`);
|
|
139
|
+
const ked = okKed(serder);
|
|
140
|
+
const issuer = stringField(ked, "ii");
|
|
141
|
+
if (!issuer)
|
|
142
|
+
throw new ValidationError("Registry inception missing ii.");
|
|
143
|
+
const prefixer = new Prefixer({ qb64: okPre(serder) });
|
|
144
|
+
const sn = okSn(serder);
|
|
145
|
+
if (sn !== 0)
|
|
146
|
+
throw new ValidationError(`Invalid vcp sn=${sn}.`);
|
|
147
|
+
const baks = stringListField(ked, "b");
|
|
148
|
+
if (!unique(baks))
|
|
149
|
+
throw new ValidationError(`Invalid duplicate baks=${baks}.`);
|
|
150
|
+
const toad = backerThreshold(ked.bt);
|
|
151
|
+
if (toad === null)
|
|
152
|
+
throw new ValidationError("Invalid registry backer threshold.");
|
|
153
|
+
validateBackerThreshold(toad, baks);
|
|
154
|
+
const cnfg = stringListField(ked, "c");
|
|
155
|
+
const backerless = (noBackers ?? false) || cnfg.includes(TraitDex.NoBackers);
|
|
156
|
+
if (backerless && baks.length > 0)
|
|
157
|
+
throw new ValidationError("NoBackers registry may not configure baks.");
|
|
158
|
+
return {
|
|
159
|
+
issuer,
|
|
160
|
+
prefixer,
|
|
161
|
+
baks,
|
|
162
|
+
toad,
|
|
163
|
+
noBackers: backerless,
|
|
164
|
+
estOnly: (estOnly ?? false) || cnfg.includes(TraitDex.EstOnly),
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
/** Enforce the same exact quorum bounds for inception, rotation and endorsement admission. */
|
|
168
|
+
function validateBackerThreshold(toad, baks) {
|
|
169
|
+
if (!Number.isSafeInteger(toad) || toad < 0)
|
|
170
|
+
throw new ValidationError("Invalid registry backer threshold.");
|
|
171
|
+
if (baks.length === 0) {
|
|
172
|
+
if (toad !== 0)
|
|
173
|
+
throw new ValidationError(`Invalid toad=${toad} for empty backer set.`);
|
|
174
|
+
}
|
|
175
|
+
else if (toad < 1 || toad > baks.length) {
|
|
176
|
+
throw new ValidationError(`Invalid toad=${toad} for baks=${baks}.`);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/** Leave untrusted fields unknown until each lookup checks the fields it consumes. */
|
|
113
180
|
function sealRecord(value) {
|
|
114
181
|
return typeof value === "object" && value !== null && !Array.isArray(value) ? value : null;
|
|
115
182
|
}
|
|
@@ -123,9 +190,9 @@ function serderForTel(reger, pre, said) {
|
|
|
123
190
|
/**
|
|
124
191
|
* Registry transaction event verifier.
|
|
125
192
|
*
|
|
126
|
-
* `Tever`
|
|
127
|
-
*
|
|
128
|
-
* replay.
|
|
193
|
+
* `Tever` carries registry state and evaluates/writes one private admission
|
|
194
|
+
* candidate through `Reger`. Input policy is supplied for that admission rather
|
|
195
|
+
* than cached. `Tevery` owns transactions, accepted cache publication, cues and replay.
|
|
129
196
|
*/
|
|
130
197
|
export class Tever {
|
|
131
198
|
constructor(options) {
|
|
@@ -141,18 +208,6 @@ export class Tever {
|
|
|
141
208
|
writable: true,
|
|
142
209
|
value: void 0
|
|
143
210
|
});
|
|
144
|
-
Object.defineProperty(this, "local", {
|
|
145
|
-
enumerable: true,
|
|
146
|
-
configurable: true,
|
|
147
|
-
writable: true,
|
|
148
|
-
value: void 0
|
|
149
|
-
});
|
|
150
|
-
Object.defineProperty(this, "cues", {
|
|
151
|
-
enumerable: true,
|
|
152
|
-
configurable: true,
|
|
153
|
-
writable: true,
|
|
154
|
-
value: void 0
|
|
155
|
-
});
|
|
156
211
|
Object.defineProperty(this, "version", {
|
|
157
212
|
enumerable: true,
|
|
158
213
|
configurable: true,
|
|
@@ -233,8 +288,6 @@ export class Tever {
|
|
|
233
288
|
});
|
|
234
289
|
this.db = options.db;
|
|
235
290
|
this.reger = options.reger;
|
|
236
|
-
this.local = options.local ?? false;
|
|
237
|
-
this.cues = options.cues ?? new Deck();
|
|
238
291
|
if (options.rsr) {
|
|
239
292
|
this.version = { major: 1, minor: 0 };
|
|
240
293
|
this.reload(options.rsr);
|
|
@@ -248,8 +301,16 @@ export class Tever {
|
|
|
248
301
|
}
|
|
249
302
|
this.version = options.serder.pvrsn;
|
|
250
303
|
this.regk = options.regk ?? okPre(options.serder);
|
|
251
|
-
|
|
252
|
-
this.
|
|
304
|
+
const inception = validateRegistryInception(options.serder, options.noBackers, options.estOnly);
|
|
305
|
+
this.pre = inception.issuer;
|
|
306
|
+
this.prefixer = inception.prefixer;
|
|
307
|
+
this.sn = 0;
|
|
308
|
+
this.baks = inception.baks;
|
|
309
|
+
this.toad = inception.toad;
|
|
310
|
+
this.noBackers = inception.noBackers;
|
|
311
|
+
this.estOnly = inception.estOnly;
|
|
312
|
+
this.ilk = Ilks.vcp;
|
|
313
|
+
this.serder = options.serder;
|
|
253
314
|
const checked = this.valAnchorBigs({
|
|
254
315
|
serder: options.serder,
|
|
255
316
|
seqner: options.seqner ?? null,
|
|
@@ -257,9 +318,10 @@ export class Tever {
|
|
|
257
318
|
bigers: options.bigers ?? [],
|
|
258
319
|
toad: this.toad,
|
|
259
320
|
baks: this.baks,
|
|
321
|
+
local: options.local ?? false,
|
|
260
322
|
});
|
|
261
323
|
if (checked.kind !== "accept") {
|
|
262
|
-
throw new
|
|
324
|
+
throw new PendingTelInception(checked.decision);
|
|
263
325
|
}
|
|
264
326
|
this.logEvent({
|
|
265
327
|
pre: this.prefixer.qb64,
|
|
@@ -288,7 +350,10 @@ export class Tever {
|
|
|
288
350
|
this.prefixer = new Prefixer({ qb64: regk });
|
|
289
351
|
this.sn = parseInt(rsr.s ?? "0", 16);
|
|
290
352
|
this.ilk = (rsr.et ?? Ilks.vcp);
|
|
291
|
-
|
|
353
|
+
const toad = backerThreshold(rsr.bt);
|
|
354
|
+
if (toad === null)
|
|
355
|
+
throw new DatabaseOperationError("Stored registry backer threshold is invalid.");
|
|
356
|
+
this.toad = toad;
|
|
292
357
|
this.baks = [...(rsr.b ?? [])];
|
|
293
358
|
this.noBackers = (rsr.c ?? []).includes(TraitDex.NoBackers);
|
|
294
359
|
this.estOnly = (rsr.c ?? []).includes(TraitDex.EstOnly);
|
|
@@ -332,7 +397,7 @@ export class Tever {
|
|
|
332
397
|
const [number, diger] = anchor;
|
|
333
398
|
const eilk = this.noBackers ? (digs.length === 1 ? Ilks.iss : Ilks.rev) : (digs.length === 1 ? Ilks.bis : Ilks.brv);
|
|
334
399
|
const ked = okKed(serder);
|
|
335
|
-
const ra = this.noBackers ? {} :
|
|
400
|
+
const ra = this.noBackers ? {} : projectRegistrySeal(ked.ra);
|
|
336
401
|
return credentialState(vci, said, vcsn, this.regk, eilk, { s: Number(number.num), d: diger.qb64 }, {
|
|
337
402
|
ra,
|
|
338
403
|
dts: typeof ked.dt === "string" ? ked.dt : undefined,
|
|
@@ -343,9 +408,9 @@ export class Tever {
|
|
|
343
408
|
const count = this.reger.tels.cntOn(vci, 0);
|
|
344
409
|
return count === 0 ? null : count - 1;
|
|
345
410
|
}
|
|
346
|
-
/** Apply TEL input; the internal recorder preserves
|
|
347
|
-
update(args,
|
|
348
|
-
let
|
|
411
|
+
/** Apply TEL input; the internal recorder preserves publication failures through router catches. */
|
|
412
|
+
update(args, recordPublicationFailure) {
|
|
413
|
+
let publicationFailure;
|
|
349
414
|
try {
|
|
350
415
|
const serder = args.serder;
|
|
351
416
|
const ilk = telIlk(serder);
|
|
@@ -357,60 +422,21 @@ export class Tever {
|
|
|
357
422
|
return this.issue(serder, sn, args);
|
|
358
423
|
}
|
|
359
424
|
if (ilk === Ilks.rev || ilk === Ilks.brv) {
|
|
360
|
-
return this.revoke(serder, sn, args,
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
}
|
|
365
|
-
: undefined);
|
|
425
|
+
return this.revoke(serder, sn, args, (error) => {
|
|
426
|
+
publicationFailure = { error };
|
|
427
|
+
recordPublicationFailure?.(error);
|
|
428
|
+
});
|
|
366
429
|
}
|
|
367
430
|
return reject(`Unsupported TEL ilk=${ilk}.`, serder, this.regk);
|
|
368
431
|
}
|
|
369
432
|
catch (error) {
|
|
370
|
-
if (
|
|
433
|
+
if (publicationFailure && publicationFailure.error === error)
|
|
434
|
+
throw error;
|
|
435
|
+
if (!(error instanceof ValidationError) && !(error instanceof ParserError))
|
|
371
436
|
throw error;
|
|
372
437
|
return reject(error instanceof Error ? error.message : String(error), args.serder, this.regk);
|
|
373
438
|
}
|
|
374
439
|
}
|
|
375
|
-
incept(serder) {
|
|
376
|
-
const ked = okKed(serder);
|
|
377
|
-
const pre = stringField(ked, "ii");
|
|
378
|
-
if (!pre) {
|
|
379
|
-
throw new ValidationError("Registry inception missing ii.");
|
|
380
|
-
}
|
|
381
|
-
this.pre = pre;
|
|
382
|
-
this.prefixer = new Prefixer({ qb64: okPre(serder) });
|
|
383
|
-
this.sn = okSn(serder);
|
|
384
|
-
if (this.sn !== 0) {
|
|
385
|
-
throw new ValidationError(`Invalid vcp sn=${this.sn}.`);
|
|
386
|
-
}
|
|
387
|
-
this.cuts = [];
|
|
388
|
-
this.adds = [];
|
|
389
|
-
const baks = stringListField(ked, "b");
|
|
390
|
-
if (!unique(baks)) {
|
|
391
|
-
throw new ValidationError(`Invalid duplicate baks=${baks}.`);
|
|
392
|
-
}
|
|
393
|
-
this.baks = baks;
|
|
394
|
-
const toad = parseInt(stringField(ked, "bt") ?? "0", 16);
|
|
395
|
-
this.validateToad(toad, baks);
|
|
396
|
-
this.toad = toad;
|
|
397
|
-
this.ilk = Ilks.vcp;
|
|
398
|
-
this.serder = serder;
|
|
399
|
-
}
|
|
400
|
-
config(serder, noBackers, estOnly) {
|
|
401
|
-
const cnfg = stringListField(okKed(serder), "c");
|
|
402
|
-
this.noBackers = noBackers ?? false;
|
|
403
|
-
this.estOnly = estOnly ?? false;
|
|
404
|
-
if (cnfg.includes(TraitDex.NoBackers)) {
|
|
405
|
-
this.noBackers = true;
|
|
406
|
-
}
|
|
407
|
-
if (cnfg.includes(TraitDex.EstOnly)) {
|
|
408
|
-
this.estOnly = true;
|
|
409
|
-
}
|
|
410
|
-
if (this.noBackers && this.baks.length > 0) {
|
|
411
|
-
throw new ValidationError("NoBackers registry may not configure baks.");
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
440
|
updateRotation(serder, sn, args) {
|
|
415
441
|
if (this.noBackers) {
|
|
416
442
|
return reject("Backerless registry cannot rotate TEL backers.", serder, this.regk);
|
|
@@ -426,6 +452,7 @@ export class Tever {
|
|
|
426
452
|
bigers: args.wigers ?? [],
|
|
427
453
|
toad: rotated.toad,
|
|
428
454
|
baks: rotated.baks,
|
|
455
|
+
local: args.local ?? false,
|
|
429
456
|
});
|
|
430
457
|
if (checked.kind !== "accept") {
|
|
431
458
|
return checked.decision;
|
|
@@ -474,12 +501,16 @@ export class Tever {
|
|
|
474
501
|
}
|
|
475
502
|
const next = this.baks.filter((bak) => !cuts.includes(bak));
|
|
476
503
|
next.push(...adds);
|
|
477
|
-
const toad =
|
|
504
|
+
const toad = backerThreshold(ked.bt);
|
|
505
|
+
if (toad === null)
|
|
506
|
+
return reject("Invalid registry backer threshold.", serder, this.regk);
|
|
478
507
|
try {
|
|
479
|
-
|
|
508
|
+
validateBackerThreshold(toad, next);
|
|
480
509
|
}
|
|
481
510
|
catch (error) {
|
|
482
|
-
|
|
511
|
+
if (!(error instanceof ValidationError) && !(error instanceof ParserError))
|
|
512
|
+
throw error;
|
|
513
|
+
return reject(error.message, serder, this.regk);
|
|
483
514
|
}
|
|
484
515
|
return { kind: "rotated", toad, baks: next, cuts, adds };
|
|
485
516
|
}
|
|
@@ -508,10 +539,11 @@ export class Tever {
|
|
|
508
539
|
if (this.noBackers) {
|
|
509
540
|
return reject("Backer issue is invalid against backerless registry.", serder, this.regk);
|
|
510
541
|
}
|
|
511
|
-
const state = this.
|
|
512
|
-
if (state.kind === "reject")
|
|
513
|
-
return state;
|
|
514
|
-
|
|
542
|
+
const state = resolveBackerState(this.reger, this.regk, okKed(serder).ra);
|
|
543
|
+
if (state.kind === "reject")
|
|
544
|
+
return reject(state.reason, serder, this.regk);
|
|
545
|
+
if (state.kind === "missing")
|
|
546
|
+
return escrow("outOfOrder", state.reason, serder, this.regk);
|
|
515
547
|
const checked = this.valAnchorBigs({
|
|
516
548
|
serder,
|
|
517
549
|
seqner: args.seqner ?? null,
|
|
@@ -519,6 +551,7 @@ export class Tever {
|
|
|
519
551
|
bigers: args.wigers ?? [],
|
|
520
552
|
toad: state.toad,
|
|
521
553
|
baks: state.baks,
|
|
554
|
+
local: args.local ?? false,
|
|
522
555
|
});
|
|
523
556
|
if (checked.kind !== "accept") {
|
|
524
557
|
return checked.decision;
|
|
@@ -533,7 +566,7 @@ export class Tever {
|
|
|
533
566
|
});
|
|
534
567
|
return accept(serder, this.regk);
|
|
535
568
|
}
|
|
536
|
-
revoke(serder, sn, args,
|
|
569
|
+
revoke(serder, sn, args, recordPublicationFailure) {
|
|
537
570
|
const vci = okPre(serder);
|
|
538
571
|
const prior = digestForTel(this.reger, vci, sn - 1);
|
|
539
572
|
if (prior === null) {
|
|
@@ -553,16 +586,17 @@ export class Tever {
|
|
|
553
586
|
this.escrowALEvent(serder, args.seqner ?? null, args.saider ?? null);
|
|
554
587
|
return escrow("anchorless", "Missing KEL anchor for TEL revoke.", serder, this.regk);
|
|
555
588
|
}
|
|
556
|
-
this.logRevoked(serder, sn, args, undefined,
|
|
589
|
+
this.logRevoked(serder, sn, args, undefined, recordPublicationFailure);
|
|
557
590
|
return accept(serder, this.regk);
|
|
558
591
|
}
|
|
559
592
|
if (this.noBackers) {
|
|
560
593
|
return reject("Backer revoke is invalid against backerless registry.", serder, this.regk);
|
|
561
594
|
}
|
|
562
|
-
const state = this.
|
|
563
|
-
if (state.kind === "reject")
|
|
564
|
-
return state;
|
|
565
|
-
|
|
595
|
+
const state = resolveBackerState(this.reger, this.regk, okKed(serder).ra);
|
|
596
|
+
if (state.kind === "reject")
|
|
597
|
+
return reject(state.reason, serder, this.regk);
|
|
598
|
+
if (state.kind === "missing")
|
|
599
|
+
return escrow("outOfOrder", state.reason, serder, this.regk);
|
|
566
600
|
const checked = this.valAnchorBigs({
|
|
567
601
|
serder,
|
|
568
602
|
seqner: args.seqner ?? null,
|
|
@@ -570,66 +604,45 @@ export class Tever {
|
|
|
570
604
|
bigers: args.wigers ?? [],
|
|
571
605
|
toad: state.toad,
|
|
572
606
|
baks: state.baks,
|
|
607
|
+
local: args.local ?? false,
|
|
573
608
|
});
|
|
574
609
|
if (checked.kind !== "accept") {
|
|
575
610
|
return checked.decision;
|
|
576
611
|
}
|
|
577
|
-
this.logRevoked(serder, sn, args, checked.bigers,
|
|
612
|
+
this.logRevoked(serder, sn, args, checked.bigers, recordPublicationFailure);
|
|
578
613
|
return accept(serder, this.regk);
|
|
579
614
|
}
|
|
580
|
-
/**
|
|
581
|
-
logRevoked(serder, sn, args, bigers,
|
|
582
|
-
let prepared;
|
|
615
|
+
/** Persist accepted revocation evidence; Tevery publishes its cue after commit. */
|
|
616
|
+
logRevoked(serder, sn, args, bigers, recordPublicationFailure) {
|
|
583
617
|
try {
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
serder,
|
|
593
|
-
seqner: args.seqner ?? null,
|
|
594
|
-
saider: args.saider ?? null,
|
|
595
|
-
bigers,
|
|
596
|
-
});
|
|
597
|
-
if (prepared)
|
|
598
|
-
prepared.publish();
|
|
599
|
-
else
|
|
600
|
-
this.cues.push(cue);
|
|
601
|
-
}
|
|
602
|
-
finally {
|
|
603
|
-
prepared?.release();
|
|
604
|
-
}
|
|
618
|
+
this.logEvent({
|
|
619
|
+
pre: okPre(serder),
|
|
620
|
+
sn,
|
|
621
|
+
serder,
|
|
622
|
+
seqner: args.seqner ?? null,
|
|
623
|
+
saider: args.saider ?? null,
|
|
624
|
+
bigers,
|
|
625
|
+
});
|
|
605
626
|
}
|
|
606
627
|
catch (error) {
|
|
607
|
-
|
|
628
|
+
recordPublicationFailure?.(error);
|
|
608
629
|
throw error;
|
|
609
630
|
}
|
|
610
631
|
}
|
|
611
|
-
validateToad(toad, baks) {
|
|
612
|
-
if (baks.length === 0) {
|
|
613
|
-
if (toad !== 0) {
|
|
614
|
-
throw new ValidationError(`Invalid toad=${toad} for empty backer set.`);
|
|
615
|
-
}
|
|
616
|
-
}
|
|
617
|
-
else if (toad < 1 || toad > baks.length) {
|
|
618
|
-
throw new ValidationError(`Invalid toad=${toad} for baks=${baks}.`);
|
|
619
|
-
}
|
|
620
|
-
}
|
|
621
632
|
valAnchorBigs(args) {
|
|
622
633
|
const verfers = args.baks.map((bak) => new Verfer({ qb64: bak }));
|
|
623
|
-
const verified = Kever.verifyIndexedSignatures(args.serder.raw,
|
|
634
|
+
const verified = Kever.verifyIndexedSignatures(args.serder.raw,
|
|
635
|
+
// Every arrival and retry verifies the union against this exact historical cohort.
|
|
636
|
+
[...this.reger.tibs.get(dgKey(okPre(args.serder), okSaid(args.serder))), ...args.bigers], verfers).sigers;
|
|
624
637
|
if (!this.verifyAnchor(args.serder, args.seqner, args.saider)) {
|
|
625
638
|
this.escrowALEvent(args.serder, args.seqner, args.saider, verified, [...args.baks]);
|
|
626
639
|
const decision = escrow("anchorless", "Missing KEL anchor for TEL event.", args.serder, this.regk);
|
|
627
640
|
return { kind: "escrow", decision, reason: decision.reason };
|
|
628
641
|
}
|
|
629
|
-
if (!
|
|
630
|
-
|
|
642
|
+
if (!args.local && args.baks.length > 0) {
|
|
643
|
+
validateBackerThreshold(args.toad, args.baks);
|
|
631
644
|
if (verified.length < args.toad) {
|
|
632
|
-
this.escrowPWEvent(args.serder, args.seqner, args.saider, verified);
|
|
645
|
+
this.escrowPWEvent(args.serder, args.seqner, args.saider, verified, args.baks);
|
|
633
646
|
const decision = escrow("partialWitness", `TEL event does not satisfy backer threshold ${args.toad}.`, args.serder, this.regk);
|
|
634
647
|
return { kind: "escrow", decision, reason: decision.reason };
|
|
635
648
|
}
|
|
@@ -637,38 +650,19 @@ export class Tever {
|
|
|
637
650
|
return { kind: "accept", bigers: verified };
|
|
638
651
|
}
|
|
639
652
|
verifyAnchor(serder, seqner, saider) {
|
|
640
|
-
|
|
641
|
-
return false;
|
|
642
|
-
}
|
|
643
|
-
const anchorSaid = this.db.kels.getLast(this.pre, Number(seqner.num));
|
|
644
|
-
if (!anchorSaid || anchorSaid !== saider.qb64) {
|
|
645
|
-
return false;
|
|
646
|
-
}
|
|
647
|
-
const anchor = this.db.getEvtSerder(this.pre, anchorSaid);
|
|
648
|
-
if (!anchor || anchor.said !== saider.qb64) {
|
|
649
|
-
return false;
|
|
650
|
-
}
|
|
651
|
-
const anchorKed = okKed(anchor);
|
|
652
|
-
const seals = Array.isArray(anchorKed.a) ? anchorKed.a : [];
|
|
653
|
-
if (seals.length !== 1) {
|
|
654
|
-
return false;
|
|
655
|
-
}
|
|
656
|
-
const seal = sealRecord(seals[0]);
|
|
657
|
-
return seal?.i === serder.pre
|
|
658
|
-
&& seal?.s === serder.snh
|
|
659
|
-
&& seal?.d === serder.said;
|
|
653
|
+
return verifyTelAnchor(this.db, this.pre, serder, seqner, saider);
|
|
660
654
|
}
|
|
661
655
|
/** Retain partial-witness evidence with its qualified source ordinal. */
|
|
662
|
-
escrowPWEvent(serder, seqner, saider, bigers = []) {
|
|
656
|
+
escrowPWEvent(serder, seqner, saider, bigers = [], baks = []) {
|
|
663
657
|
const pre = okPre(serder);
|
|
664
658
|
const said = okSaid(serder);
|
|
665
659
|
const key = dgKey(pre, said);
|
|
666
660
|
if (seqner && saider) {
|
|
667
661
|
this.reger.ancs.put(key, [seqner, new Diger({ qb64: saider.qb64 })]);
|
|
668
662
|
}
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
663
|
+
this.reger.tibs.pin(key, [...bigers]);
|
|
664
|
+
this.reger.baks.rem(key);
|
|
665
|
+
this.reger.baks.put(key, [...baks]);
|
|
672
666
|
this.reger.tvts.put(key, serder.raw);
|
|
673
667
|
this.reger.twes.put(pre, okSn(serder), said);
|
|
674
668
|
}
|
|
@@ -680,9 +674,7 @@ export class Tever {
|
|
|
680
674
|
if (seqner && saider) {
|
|
681
675
|
this.reger.ancs.put(key, [seqner, new Diger({ qb64: saider.qb64 })]);
|
|
682
676
|
}
|
|
683
|
-
|
|
684
|
-
this.reger.tibs.pin(key, [...bigers]);
|
|
685
|
-
}
|
|
677
|
+
this.reger.tibs.pin(key, [...bigers]);
|
|
686
678
|
if (baks.length > 0) {
|
|
687
679
|
this.reger.baks.rem(key);
|
|
688
680
|
this.reger.baks.put(key, [...baks]);
|
|
@@ -690,21 +682,6 @@ export class Tever {
|
|
|
690
682
|
this.reger.tvts.put(key, serder.raw);
|
|
691
683
|
this.reger.taes.put(pre, okSn(serder), said);
|
|
692
684
|
}
|
|
693
|
-
getBackerState(ked, serder) {
|
|
694
|
-
const ra = sealRecord(ked.ra);
|
|
695
|
-
const regi = typeof ra?.i === "string" ? ra.i : null;
|
|
696
|
-
const regd = typeof ra?.d === "string" ? ra.d : null;
|
|
697
|
-
if (!regi || !regd || regi !== this.prefixer.qb64) {
|
|
698
|
-
return reject("Backer TEL event registry anchor mismatch.", serder, this.regk);
|
|
699
|
-
}
|
|
700
|
-
const rserder = serderForTel(this.reger, regi, regd);
|
|
701
|
-
if (!rserder) {
|
|
702
|
-
return reject("Backer TEL event references missing registry state.", serder, this.regk);
|
|
703
|
-
}
|
|
704
|
-
const toad = parseInt(stringField(okKed(rserder), "bt") ?? "0", 16);
|
|
705
|
-
const baks = this.reger.baks.get(dgKey(regi, regd));
|
|
706
|
-
return { kind: "backers", toad, baks };
|
|
707
|
-
}
|
|
708
685
|
/** Persist accepted TEL evidence and the exact qualified source seal. */
|
|
709
686
|
logEvent(args) {
|
|
710
687
|
const said = okSaid(args.serder);
|
|
@@ -714,9 +691,7 @@ export class Tever {
|
|
|
714
691
|
}
|
|
715
692
|
// Keep the qualified Number; widening it here would alter v2 replay evidence.
|
|
716
693
|
this.reger.ancs.put(key, [args.seqner, new Diger({ qb64: args.saider.qb64 })]);
|
|
717
|
-
|
|
718
|
-
this.reger.tibs.pin(key, [...args.bigers]);
|
|
719
|
-
}
|
|
694
|
+
this.reger.tibs.pin(key, [...(args.bigers ?? [])]);
|
|
720
695
|
if (args.baks && args.baks.length > 0) {
|
|
721
696
|
this.reger.baks.rem(key);
|
|
722
697
|
this.reger.baks.put(key, [...args.baks]);
|
|
@@ -727,14 +702,20 @@ export class Tever {
|
|
|
727
702
|
}
|
|
728
703
|
}
|
|
729
704
|
/**
|
|
730
|
-
* TEL event
|
|
705
|
+
* TEL event and transaction-state notice processor.
|
|
731
706
|
*
|
|
732
707
|
* `Tevery` owns registry-key routing, expected sequence checks, accepted
|
|
733
708
|
* `Tever` cache persistence, and replay of anchorless/out-of-order TEL
|
|
734
|
-
* escrows.
|
|
709
|
+
* escrows, plus TSN reply admission and dependency retries.
|
|
735
710
|
*/
|
|
736
711
|
export class Tevery {
|
|
737
712
|
constructor(options) {
|
|
713
|
+
Object.defineProperty(this, "rvy", {
|
|
714
|
+
enumerable: true,
|
|
715
|
+
configurable: true,
|
|
716
|
+
writable: true,
|
|
717
|
+
value: void 0
|
|
718
|
+
});
|
|
738
719
|
Object.defineProperty(this, "db", {
|
|
739
720
|
enumerable: true,
|
|
740
721
|
configurable: true,
|
|
@@ -765,6 +746,7 @@ export class Tevery {
|
|
|
765
746
|
writable: true,
|
|
766
747
|
value: void 0
|
|
767
748
|
});
|
|
749
|
+
this.rvy = options.rvy;
|
|
768
750
|
this.db = options.db;
|
|
769
751
|
this.reger = options.reger;
|
|
770
752
|
this.local = options.local ?? false;
|
|
@@ -787,79 +769,131 @@ export class Tevery {
|
|
|
787
769
|
this.tevers.set(state.i, new Tever({
|
|
788
770
|
db: this.db,
|
|
789
771
|
reger: this.reger,
|
|
790
|
-
local: this.local,
|
|
791
|
-
cues: this.cues,
|
|
792
772
|
rsr: state,
|
|
793
773
|
}));
|
|
794
774
|
this.registries.add(state.i);
|
|
795
775
|
}
|
|
796
776
|
}
|
|
777
|
+
/** Decide and persist under one owned writer, then publish accepted cache state and cues. */
|
|
797
778
|
processEvent(args) {
|
|
798
|
-
|
|
779
|
+
if (this.reger.inWriteTransaction) {
|
|
780
|
+
throw new Error("Tevery must own the TEL transaction; process events outside caller-owned writers");
|
|
781
|
+
}
|
|
782
|
+
let accepted;
|
|
783
|
+
let publicationFailure;
|
|
784
|
+
let decision;
|
|
799
785
|
try {
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
if (
|
|
807
|
-
|
|
786
|
+
decision = this.reger.env.transactionSync(() => {
|
|
787
|
+
const serder = args.serder;
|
|
788
|
+
const ilk = telIlk(serder);
|
|
789
|
+
const pre = okPre(serder);
|
|
790
|
+
const sn = okSn(serder);
|
|
791
|
+
const regk = Tevery.registryKey(serder);
|
|
792
|
+
if (!this.lax) {
|
|
793
|
+
if (this.local && !this.registries.has(regk)) {
|
|
794
|
+
return reject(`Nonlocal TEL event regk=${regk} in local mode.`, serder, regk);
|
|
795
|
+
}
|
|
796
|
+
if (!this.local && this.registries.has(regk)) {
|
|
797
|
+
return reject(`Local TEL event regk=${regk} in nonlocal mode.`, serder, regk);
|
|
798
|
+
}
|
|
808
799
|
}
|
|
809
|
-
|
|
810
|
-
|
|
800
|
+
// Work on a private candidate from accepted storage, never a shared cached state machine.
|
|
801
|
+
const stored = this.reger.states.get(regk);
|
|
802
|
+
const tever = stored ? new Tever({ db: this.db, reger: this.reger, rsr: stored }) : undefined;
|
|
803
|
+
if (!tever) {
|
|
804
|
+
if (ilk !== Ilks.vcp) {
|
|
805
|
+
this.escrowOOEvent(serder, args.seqner ?? null, args.saider ?? null, args.wigers ?? []);
|
|
806
|
+
return escrow("outOfOrder", "TEL event arrived before registry inception.", serder, regk);
|
|
807
|
+
}
|
|
808
|
+
try {
|
|
809
|
+
const next = new Tever({
|
|
810
|
+
serder,
|
|
811
|
+
seqner: args.seqner ?? null,
|
|
812
|
+
saider: args.saider ?? null,
|
|
813
|
+
bigers: args.wigers ?? [],
|
|
814
|
+
db: this.db,
|
|
815
|
+
reger: this.reger,
|
|
816
|
+
regk,
|
|
817
|
+
local: this.local,
|
|
818
|
+
});
|
|
819
|
+
this.reger.states.pin(regk, next.state());
|
|
820
|
+
accepted = next;
|
|
821
|
+
return accept(serder, regk);
|
|
822
|
+
}
|
|
823
|
+
catch (error) {
|
|
824
|
+
// Constructor admission persists missing evidence in its real protocol escrow.
|
|
825
|
+
if (error instanceof PendingTelInception)
|
|
826
|
+
return error.decision;
|
|
827
|
+
throw error;
|
|
828
|
+
}
|
|
811
829
|
}
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
if (
|
|
816
|
-
this.escrowOOEvent(serder, args.seqner ?? null, args.saider ?? null);
|
|
817
|
-
return escrow("outOfOrder",
|
|
830
|
+
if (ilk === Ilks.vcp)
|
|
831
|
+
return this.processAcceptedDuplicate(args, regk);
|
|
832
|
+
const expected = ilk === Ilks.vrt ? tever.sn + 1 : (tever.vcSn(pre) ?? -1) + 1;
|
|
833
|
+
if (sn > expected) {
|
|
834
|
+
this.escrowOOEvent(serder, args.seqner ?? null, args.saider ?? null, args.wigers ?? []);
|
|
835
|
+
return escrow("outOfOrder", `TEL event sn=${sn} expected=${expected}.`, serder, regk);
|
|
818
836
|
}
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
bigers: args.wigers ?? [],
|
|
824
|
-
db: this.db,
|
|
825
|
-
reger: this.reger,
|
|
826
|
-
regk,
|
|
827
|
-
local: this.local,
|
|
828
|
-
cues: this.cues,
|
|
837
|
+
if (sn < expected)
|
|
838
|
+
return this.processAcceptedDuplicate(args, regk);
|
|
839
|
+
const result = tever.update({ ...args, local: this.local }, (error) => {
|
|
840
|
+
publicationFailure = { error };
|
|
829
841
|
});
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
this.escrowOOEvent(serder, args.seqner ?? null, args.saider ?? null);
|
|
839
|
-
return escrow("outOfOrder", `TEL event sn=${sn} expected=${expected}.`, serder, regk);
|
|
840
|
-
}
|
|
841
|
-
if (sn < expected) {
|
|
842
|
-
return duplicate(`TEL event sn=${sn} older than expected=${expected}.`, serder, regk);
|
|
843
|
-
}
|
|
844
|
-
const decision = tever.update(args, (error) => {
|
|
845
|
-
cueFailure = { error };
|
|
842
|
+
if (result.kind === "escrow" && result.escrow === "outOfOrder") {
|
|
843
|
+
this.escrowOOEvent(serder, args.seqner ?? null, args.saider ?? null, args.wigers ?? []);
|
|
844
|
+
}
|
|
845
|
+
if (result.kind === "accept" && ilk === Ilks.vrt) {
|
|
846
|
+
this.reger.states.pin(regk, tever.state());
|
|
847
|
+
accepted = tever;
|
|
848
|
+
}
|
|
849
|
+
return result;
|
|
846
850
|
});
|
|
847
|
-
if (decision.kind === "accept" && ilk === Ilks.vrt) {
|
|
848
|
-
this.cacheTever(regk, tever);
|
|
849
|
-
}
|
|
850
|
-
return decision;
|
|
851
851
|
}
|
|
852
852
|
catch (error) {
|
|
853
|
-
if (
|
|
853
|
+
if (publicationFailure && publicationFailure.error === error)
|
|
854
|
+
throw error;
|
|
855
|
+
if (!(error instanceof ValidationError) && !(error instanceof ParserError))
|
|
854
856
|
throw error;
|
|
855
857
|
return reject(error instanceof Error ? error.message : String(error), args.serder);
|
|
856
858
|
}
|
|
859
|
+
if (accepted)
|
|
860
|
+
this.tevers.set(accepted.regk, accepted);
|
|
861
|
+
if (decision.kind === "accept" && (decision.ilk === Ilks.rev || decision.ilk === Ilks.brv)) {
|
|
862
|
+
// Keep publication outside semantic error conversion and after the writer has committed.
|
|
863
|
+
this.cues.push({ kin: "revoked", serder: args.serder });
|
|
864
|
+
}
|
|
865
|
+
return decision;
|
|
857
866
|
}
|
|
858
|
-
/**
|
|
867
|
+
/** Add valid late backer receipts to an exact accepted event without reapplying its business state. */
|
|
868
|
+
processAcceptedDuplicate(args, regk) {
|
|
869
|
+
const { serder } = args;
|
|
870
|
+
const pre = okPre(serder), sn = okSn(serder), said = okSaid(serder);
|
|
871
|
+
if (this.reger.tels.getOn(pre, sn)?.qb64 !== said) {
|
|
872
|
+
return reject("TEL event conflicts with the accepted coordinate.", serder, regk);
|
|
873
|
+
}
|
|
874
|
+
if (args.wigers?.length && serder.ilk !== Ilks.iss && serder.ilk !== Ilks.rev) {
|
|
875
|
+
const seal = serder.ilk === Ilks.vcp || serder.ilk === Ilks.vrt
|
|
876
|
+
? { i: pre, s: serder.snh, d: said }
|
|
877
|
+
: okKed(serder).ra;
|
|
878
|
+
const state = resolveBackerState(this.reger, regk, seal);
|
|
879
|
+
if (state.kind !== "backers") {
|
|
880
|
+
throw new DatabaseOperationError("Accepted TEL event has no accepted backer cohort.");
|
|
881
|
+
}
|
|
882
|
+
const key = dgKey(pre, said);
|
|
883
|
+
const verified = Kever.verifyIndexedSignatures(serder.raw, [...this.reger.tibs.get(key), ...args.wigers], state.baks.map((bak) => new Verfer({ qb64: bak }))).sigers;
|
|
884
|
+
this.reger.tibs.pin(key, verified);
|
|
885
|
+
}
|
|
886
|
+
return duplicate("TEL event already accepted.", serder, regk);
|
|
887
|
+
}
|
|
888
|
+
/**
|
|
889
|
+
* Serve legacy TEL replay or an ordered TSN pair with independent receiver verification.
|
|
859
890
|
* Actual 714 leaves query signature validation TODO. Requester material identifies the destination;
|
|
860
|
-
* optional KRAM and sender policy remain separate. Replay
|
|
891
|
+
* optional KRAM and sender policy remain separate. Replay uses the parsed request genus;
|
|
892
|
+
* direct callers default to the body-declared context and may select another genus explicitly.
|
|
893
|
+
*
|
|
894
|
+
* @param args TEL query body, authenticated source and nontransferable cigar evidence.
|
|
861
895
|
*/
|
|
862
|
-
processQuery({ serder, source, cigars }) {
|
|
896
|
+
processQuery({ serder, source, cigars, gvrsn }) {
|
|
863
897
|
if (serder.route === "tsn") {
|
|
864
898
|
const result = prepareTsnQuery({ serder, source, cigars }, this.tevers);
|
|
865
899
|
if (result.kind === "drop")
|
|
@@ -874,26 +908,336 @@ export class Tevery {
|
|
|
874
908
|
if (!dest)
|
|
875
909
|
return { kind: "drop", reason: "missingAuthentication" };
|
|
876
910
|
const query = serder.ked?.q;
|
|
877
|
-
if (!query || typeof query
|
|
878
|
-
|| typeof query.
|
|
911
|
+
if (!query || typeof query !== "object" || Array.isArray(query)
|
|
912
|
+
|| !("ri" in query) || typeof query.ri !== "string" || !query.ri
|
|
913
|
+
|| !("src" in query) || typeof query.src !== "string" || !query.src
|
|
914
|
+
|| !("i" in query) || typeof query.i !== "string")
|
|
879
915
|
return { kind: "drop", reason: "invalidQuery" };
|
|
880
|
-
const
|
|
881
|
-
const
|
|
882
|
-
const
|
|
883
|
-
|
|
916
|
+
const selected = gvrsn ?? serder.gvrsn ?? serder.pvrsn;
|
|
917
|
+
const settings = { gvrsn: selected, genusify: selected.major >= 2 };
|
|
918
|
+
const management = this.reger.replay(query.ri, settings);
|
|
919
|
+
const credential = query.i ? this.reger.replay(query.i, settings) : null;
|
|
920
|
+
if (!management && !credential)
|
|
884
921
|
return;
|
|
922
|
+
const messages = {
|
|
923
|
+
*[Symbol.iterator]() {
|
|
924
|
+
if (management)
|
|
925
|
+
yield* management;
|
|
926
|
+
if (credential)
|
|
927
|
+
yield* credential;
|
|
928
|
+
},
|
|
929
|
+
};
|
|
885
930
|
this.cues.push({
|
|
886
931
|
kin: "replay",
|
|
887
932
|
querySaid: serder.said ?? undefined,
|
|
888
933
|
src: query.src,
|
|
889
934
|
dest,
|
|
890
|
-
messages,
|
|
935
|
+
msgs: messages,
|
|
936
|
+
});
|
|
937
|
+
}
|
|
938
|
+
/** Register both semantic TSN routes against this processor, as KERIpy Tevery does. */
|
|
939
|
+
registerReplyRoutes(router) {
|
|
940
|
+
this.replyVerifier();
|
|
941
|
+
router.addRoute("/tsn/registry/{aid}", this, "RegistryTxnState");
|
|
942
|
+
router.addRoute("/tsn/credential/{aid}", this, "CredentialTxnState");
|
|
943
|
+
}
|
|
944
|
+
/** TEL-only processors have no implicit reply verifier or TSN capability. */
|
|
945
|
+
replyVerifier() {
|
|
946
|
+
if (!this.rvy)
|
|
947
|
+
throw new TypeError("Transaction-state notice processing requires Revery.");
|
|
948
|
+
return this.rvy;
|
|
949
|
+
}
|
|
950
|
+
/** Admit a registry TSN using independent attester proof, accepted trust and current TEL correspondence. */
|
|
951
|
+
processReplyRegistryTxnState({ serder, diger, route, aid, cigars = [], tsgs = [] }) {
|
|
952
|
+
const rvy = this.replyVerifier();
|
|
953
|
+
const record = registryRecord(serder.ked?.a);
|
|
954
|
+
const stamp = serder.ked?.dt;
|
|
955
|
+
if (!record || !qualifiedPrefix(aid) || typeof stamp !== "string" || timestampMicros(stamp) === null
|
|
956
|
+
|| route !== `/tsn/registry/${aid}`
|
|
957
|
+
|| serder.said !== diger.qb64 || !serder.verify()) {
|
|
958
|
+
return unverifiedReplyDecision("Invalid registry transaction-state notice.");
|
|
959
|
+
}
|
|
960
|
+
const regk = record.i, issuer = record.ii, sn = Number.parseInt(record.s, 16);
|
|
961
|
+
const previous = this.reger.txnsb.current([regk, aid]);
|
|
962
|
+
const disposeIncoming = () => {
|
|
963
|
+
if (previous?.qb64 !== diger.qb64)
|
|
964
|
+
rvy.removeReply(diger);
|
|
965
|
+
};
|
|
966
|
+
const reject = (reason) => {
|
|
967
|
+
disposeIncoming();
|
|
968
|
+
return unverifiedReplyDecision(reason);
|
|
969
|
+
};
|
|
970
|
+
const saved = this.reger.states.get(regk);
|
|
971
|
+
const stored = saved ? registryRecord(saved.asDict()) : null;
|
|
972
|
+
if (saved && !stored)
|
|
973
|
+
throw new Error("Corrupt stored registry state.");
|
|
974
|
+
if (stored && (stored.ii !== issuer || BigInt(`0x${stored.s}`) > BigInt(sn))) {
|
|
975
|
+
return reject("Mismatched issuer or stale registry state.");
|
|
976
|
+
}
|
|
977
|
+
const kever = this.db.getKever(issuer, { refresh: true });
|
|
978
|
+
let queryCues = [];
|
|
979
|
+
const escrow = (typ, query, proof) => {
|
|
980
|
+
const isNew = !this.reger.txnsb.hasStateNotice(typ, regk, aid, diger);
|
|
981
|
+
const cues = !isNew || !query
|
|
982
|
+
? []
|
|
983
|
+
: typ === "registry-mae"
|
|
984
|
+
? [{ kin: "query", pre: issuer, src: aid, route: "logs", q: {} }]
|
|
985
|
+
: [{ kin: "query", pre: issuer, src: aid, route: "tels", q: { ri: regk, i: "" } }];
|
|
986
|
+
if (proof)
|
|
987
|
+
rvy.writeReply(proof);
|
|
988
|
+
const added = this.reger.txnsb.escrowStateNotice({
|
|
989
|
+
typ,
|
|
990
|
+
pre: regk,
|
|
991
|
+
aid,
|
|
992
|
+
serder,
|
|
993
|
+
diger,
|
|
994
|
+
dater: new Dater({ qb64: encodeDateTimeToDater(stamp) }),
|
|
995
|
+
cigars,
|
|
996
|
+
tsgs,
|
|
997
|
+
});
|
|
998
|
+
if (added !== isNew)
|
|
999
|
+
throw new Error("Registry escrow membership changed before publication");
|
|
1000
|
+
// Broker now owns copied pending proof; retain prior accepted BADA evidence in Baser.
|
|
1001
|
+
disposeIncoming();
|
|
1002
|
+
if (queryCues.length)
|
|
1003
|
+
rvy.cues.extend(queryCues);
|
|
1004
|
+
if (cues.length)
|
|
1005
|
+
rvy.cues.extend(cues);
|
|
1006
|
+
return {
|
|
1007
|
+
kind: "unverified",
|
|
1008
|
+
reason: "dependencyPending",
|
|
1009
|
+
family: typ,
|
|
1010
|
+
message: "Registry state dependency unavailable.",
|
|
1011
|
+
};
|
|
1012
|
+
};
|
|
1013
|
+
if (!kever)
|
|
1014
|
+
return escrow("registry-mae", true);
|
|
1015
|
+
const watchers = new Set();
|
|
1016
|
+
for (const [, habitat] of this.db.getHabItemIter()) {
|
|
1017
|
+
for (const watcher of habitat.watchers ?? [])
|
|
1018
|
+
watchers.add(watcher);
|
|
1019
|
+
}
|
|
1020
|
+
const trusted = aid === issuer || watchers.has(aid)
|
|
1021
|
+
|| (!!stored && (stored.c.includes(TraitDex.NoBackers) ? kever.wits : stored.b).includes(aid));
|
|
1022
|
+
if (!trusted && stored)
|
|
1023
|
+
return reject("Untrusted registry state attester.");
|
|
1024
|
+
if (previous && (!this.db.sdts.get([previous.qb64]) || !this.db.rpys.get([previous.qb64]))) {
|
|
1025
|
+
throw new Error("Corrupt prior registry reply evidence.");
|
|
1026
|
+
}
|
|
1027
|
+
const proof = rvy.decideReply({
|
|
1028
|
+
serder,
|
|
1029
|
+
saider: diger,
|
|
1030
|
+
route,
|
|
1031
|
+
aid,
|
|
1032
|
+
cigars,
|
|
1033
|
+
tsgs,
|
|
1034
|
+
osaider: previous?.qb64 === diger.qb64 ? null : previous,
|
|
1035
|
+
retainPrevious: true,
|
|
1036
|
+
externalEscrow: true,
|
|
1037
|
+
});
|
|
1038
|
+
queryCues = proof.cues;
|
|
1039
|
+
if (proof.kind !== "accept") {
|
|
1040
|
+
if (proof.reason === "proofPending")
|
|
1041
|
+
return escrow("registry-mae", false, proof);
|
|
1042
|
+
rvy.writeReply(proof);
|
|
1043
|
+
if (queryCues.length)
|
|
1044
|
+
rvy.cues.extend(queryCues);
|
|
1045
|
+
return reject("Unverified registry state attester.");
|
|
1046
|
+
}
|
|
1047
|
+
const accepted = this.reger.tels.getOn(regk, sn);
|
|
1048
|
+
if (!accepted)
|
|
1049
|
+
return escrow("registry-ooo", true, proof);
|
|
1050
|
+
const raw = this.reger.tvts.get(dgKey(regk, accepted.qb64));
|
|
1051
|
+
if (!raw || !stored || stored.d !== accepted.qb64)
|
|
1052
|
+
throw new Error("Corrupt accepted registry TEL state.");
|
|
1053
|
+
const event = new SerderKERI({ raw });
|
|
1054
|
+
if (!event.verify() || event.said !== accepted.qb64 || event.pre !== regk || event.sn !== sn) {
|
|
1055
|
+
throw new Error("Corrupt accepted registry TEL body.");
|
|
1056
|
+
}
|
|
1057
|
+
if (!trusted || accepted.qb64 !== record.d)
|
|
1058
|
+
return reject("Registry state does not match accepted TEL.");
|
|
1059
|
+
// Receiver-generated record time is descriptive; configuration and state fields must agree.
|
|
1060
|
+
const fields = ["vn", "i", "s", "d", "ii", "et", "bt", "b", "c"];
|
|
1061
|
+
if (fields.some((key) => JSON.stringify(record[key]) !== JSON.stringify(stored[key]))) {
|
|
1062
|
+
return reject("Registry state metadata mismatch.");
|
|
1063
|
+
}
|
|
1064
|
+
const dater = new Dater({ qb64: encodeDateTimeToDater(stamp) });
|
|
1065
|
+
const cues = [{ kin: "txnStateSaved", record }];
|
|
1066
|
+
rvy.writeReply(proof);
|
|
1067
|
+
this.reger.txnsb.updateReply(aid, serder, diger, dater);
|
|
1068
|
+
if (previous?.qb64 !== diger.qb64)
|
|
1069
|
+
rvy.removeReply(previous);
|
|
1070
|
+
if (queryCues.length)
|
|
1071
|
+
rvy.cues.extend(queryCues);
|
|
1072
|
+
if (cues.length)
|
|
1073
|
+
rvy.cues.extend(cues);
|
|
1074
|
+
return acceptReplyDecision();
|
|
1075
|
+
}
|
|
1076
|
+
/** Admit a credential TSN against its own proof, registry dependency and current TEL/anchor commitments. */
|
|
1077
|
+
processReplyCredentialTxnState({ serder, diger, route, aid, cigars = [], tsgs = [] }) {
|
|
1078
|
+
const rvy = this.replyVerifier();
|
|
1079
|
+
const record = credentialRecord(serder.ked?.a);
|
|
1080
|
+
const stamp = serder.ked?.dt;
|
|
1081
|
+
if (!record || !qualifiedPrefix(aid) || typeof stamp !== "string" || timestampMicros(stamp) === null
|
|
1082
|
+
|| route !== `/tsn/credential/${aid}` || serder.said !== diger.qb64 || !serder.verify())
|
|
1083
|
+
return unverifiedReplyDecision("Invalid credential transaction-state notice.");
|
|
1084
|
+
const vci = record.i, regk = record.ri, sn = Number.parseInt(record.s, 16);
|
|
1085
|
+
const previous = this.reger.txnsb.current([vci, aid]);
|
|
1086
|
+
const disposeIncoming = () => {
|
|
1087
|
+
if (previous?.qb64 !== diger.qb64)
|
|
1088
|
+
rvy.removeReply(diger);
|
|
1089
|
+
};
|
|
1090
|
+
const reject = (reason) => {
|
|
1091
|
+
disposeIncoming();
|
|
1092
|
+
return unverifiedReplyDecision(reason);
|
|
1093
|
+
};
|
|
1094
|
+
const saved = this.reger.states.get(regk);
|
|
1095
|
+
const stored = saved ? registryRecord(saved.asDict()) : null;
|
|
1096
|
+
if (saved && !stored)
|
|
1097
|
+
throw new Error("Corrupt stored registry state.");
|
|
1098
|
+
const issuer = stored?.ii ?? aid;
|
|
1099
|
+
let queryCues = [];
|
|
1100
|
+
const escrow = (typ, query, proof) => {
|
|
1101
|
+
const isNew = !this.reger.txnsb.hasStateNotice(typ, vci, aid, diger);
|
|
1102
|
+
const cues = !isNew || !query
|
|
1103
|
+
? []
|
|
1104
|
+
: typ === "credential-mae"
|
|
1105
|
+
? [{ kin: "query", pre: issuer, src: aid, route: "logs", q: {} }]
|
|
1106
|
+
: [{
|
|
1107
|
+
kin: "query",
|
|
1108
|
+
pre: issuer,
|
|
1109
|
+
src: aid,
|
|
1110
|
+
route: "tels",
|
|
1111
|
+
q: { ri: regk, i: typ === "credential-mre" ? "" : vci },
|
|
1112
|
+
}];
|
|
1113
|
+
if (proof)
|
|
1114
|
+
rvy.writeReply(proof);
|
|
1115
|
+
const added = this.reger.txnsb.escrowStateNotice({
|
|
1116
|
+
typ,
|
|
1117
|
+
pre: vci,
|
|
1118
|
+
aid,
|
|
1119
|
+
serder,
|
|
1120
|
+
diger,
|
|
1121
|
+
dater: new Dater({ qb64: encodeDateTimeToDater(stamp) }),
|
|
1122
|
+
cigars,
|
|
1123
|
+
tsgs,
|
|
1124
|
+
});
|
|
1125
|
+
if (added !== isNew)
|
|
1126
|
+
throw new Error("Credential escrow membership changed before publication");
|
|
1127
|
+
disposeIncoming();
|
|
1128
|
+
if (queryCues.length)
|
|
1129
|
+
rvy.cues.extend(queryCues);
|
|
1130
|
+
if (cues.length)
|
|
1131
|
+
rvy.cues.extend(cues);
|
|
1132
|
+
return {
|
|
1133
|
+
kind: "unverified",
|
|
1134
|
+
reason: "dependencyPending",
|
|
1135
|
+
family: typ,
|
|
1136
|
+
message: "Credential state dependency unavailable.",
|
|
1137
|
+
};
|
|
1138
|
+
};
|
|
1139
|
+
const regsn = record.ra.s === undefined ? 0 : Number.parseInt(record.ra.s, 16);
|
|
1140
|
+
if (!stored || Number.parseInt(stored.s, 16) < regsn)
|
|
1141
|
+
return escrow("credential-mre", true);
|
|
1142
|
+
const tever = new Tever({ db: this.db, reger: this.reger, rsr: stored });
|
|
1143
|
+
if (!tever.serder.verify() || tever.serder.said !== stored.d
|
|
1144
|
+
|| this.reger.tels.getOn(regk, tever.sn)?.qb64 !== stored.d)
|
|
1145
|
+
throw new Error("Corrupt accepted registry TEL state.");
|
|
1146
|
+
const kever = this.db.getKever(issuer, { refresh: true });
|
|
1147
|
+
if (!kever)
|
|
1148
|
+
return escrow("credential-mae", true);
|
|
1149
|
+
const watchers = new Set();
|
|
1150
|
+
for (const [, habitat] of this.db.getHabItemIter()) {
|
|
1151
|
+
for (const watcher of habitat.watchers ?? [])
|
|
1152
|
+
watchers.add(watcher);
|
|
1153
|
+
}
|
|
1154
|
+
if (aid !== issuer && !watchers.has(aid)
|
|
1155
|
+
&& !(stored.c.includes(TraitDex.NoBackers) ? kever.wits : stored.b).includes(aid)) {
|
|
1156
|
+
return reject("Untrusted credential state attester.");
|
|
1157
|
+
}
|
|
1158
|
+
if (previous && (!this.db.sdts.get([previous.qb64]) || !this.db.rpys.get([previous.qb64]))) {
|
|
1159
|
+
throw new Error("Corrupt prior credential reply evidence.");
|
|
1160
|
+
}
|
|
1161
|
+
const proof = rvy.decideReply({
|
|
1162
|
+
serder,
|
|
1163
|
+
saider: diger,
|
|
1164
|
+
route,
|
|
1165
|
+
aid,
|
|
1166
|
+
cigars,
|
|
1167
|
+
tsgs,
|
|
1168
|
+
osaider: previous?.qb64 === diger.qb64 ? null : previous,
|
|
1169
|
+
retainPrevious: true,
|
|
1170
|
+
externalEscrow: true,
|
|
891
1171
|
});
|
|
1172
|
+
queryCues = proof.cues;
|
|
1173
|
+
if (proof.kind !== "accept") {
|
|
1174
|
+
if (proof.reason === "proofPending")
|
|
1175
|
+
return escrow("credential-mae", false, proof);
|
|
1176
|
+
rvy.writeReply(proof);
|
|
1177
|
+
if (queryCues.length)
|
|
1178
|
+
rvy.cues.extend(queryCues);
|
|
1179
|
+
return reject("Unverified credential state attester.");
|
|
1180
|
+
}
|
|
1181
|
+
const accepted = this.reger.tels.getOn(vci, sn);
|
|
1182
|
+
if (!accepted)
|
|
1183
|
+
return escrow("credential-ooo", true, proof);
|
|
1184
|
+
const current = tever.vcState(vci);
|
|
1185
|
+
const raw = this.reger.tvts.get(dgKey(vci, accepted.qb64));
|
|
1186
|
+
if (!raw || !current)
|
|
1187
|
+
throw new Error("Corrupt accepted credential TEL state.");
|
|
1188
|
+
const event = new SerderKERI({ raw });
|
|
1189
|
+
if (!event.verify() || event.pre !== vci || event.sn !== sn || event.said !== accepted.qb64) {
|
|
1190
|
+
throw new Error("Corrupt accepted credential TEL body.");
|
|
1191
|
+
}
|
|
1192
|
+
if (Tevery.registryKey(event) !== regk)
|
|
1193
|
+
return reject("Credential belongs to a different registry.");
|
|
1194
|
+
const fields = ["vn", "i", "s", "d", "ri", "dt", "et"];
|
|
1195
|
+
if (accepted.qb64 !== record.d || fields.some((key) => JSON.stringify(record[key]) !== JSON.stringify(current[key]))
|
|
1196
|
+
|| ["s", "d"].some((key) => record.a[key] !== current.a[key])
|
|
1197
|
+
|| ["i", "s", "d"].some((key) => record.ra[key] !== current.ra[key]))
|
|
1198
|
+
return reject("Credential state does not match current accepted TEL and anchors.");
|
|
1199
|
+
const cues = [{ kin: "txnStateSaved", record }];
|
|
1200
|
+
rvy.writeReply(proof);
|
|
1201
|
+
this.reger.txnsb.updateReply(aid, serder, diger, new Dater({ qb64: encodeDateTimeToDater(stamp) }));
|
|
1202
|
+
if (previous?.qb64 !== diger.qb64)
|
|
1203
|
+
rvy.removeReply(previous);
|
|
1204
|
+
if (queryCues.length)
|
|
1205
|
+
rvy.cues.extend(queryCues);
|
|
1206
|
+
if (cues.length)
|
|
1207
|
+
rvy.cues.extend(cues);
|
|
1208
|
+
return acceptReplyDecision();
|
|
892
1209
|
}
|
|
1210
|
+
/**
|
|
1211
|
+
* Retry TEL dependencies, then each complete captured TSN family horizon.
|
|
1212
|
+
* Pages bound materialization; new rows beyond the captured horizon wait for a
|
|
1213
|
+
* later sweep. The synchronous turn can outlast an asynchronous caller deadline.
|
|
1214
|
+
*/
|
|
893
1215
|
processEscrows() {
|
|
894
1216
|
this.processEscrowAnchorless();
|
|
895
1217
|
this.processEscrowOutOfOrders();
|
|
1218
|
+
this.retryDependencyEscrow("partialWitness", this.reger.twes);
|
|
1219
|
+
if (!this.rvy)
|
|
1220
|
+
return;
|
|
1221
|
+
for (const typ of ["registry-mae", "registry-ooo", "credential-mre", "credential-mae", "credential-ooo"]) {
|
|
1222
|
+
let done = false;
|
|
1223
|
+
while (!done) {
|
|
1224
|
+
const page = this.reger.txnsb.retryStateNotices(typ, (args) => {
|
|
1225
|
+
const decision = typ.startsWith("registry-")
|
|
1226
|
+
? this.processReplyRegistryTxnState(args)
|
|
1227
|
+
: this.processReplyCredentialTxnState(args);
|
|
1228
|
+
if (decision.kind === "accept")
|
|
1229
|
+
return acceptEscrow();
|
|
1230
|
+
if (decision.reason === "dependencyPending") {
|
|
1231
|
+
// The new family owns the retained evidence; removing this index is not rejection.
|
|
1232
|
+
return decision.family === typ ? keepEscrow("recoverableError") : acceptEscrow();
|
|
1233
|
+
}
|
|
1234
|
+
return dropEscrow("processingError", decision.message);
|
|
1235
|
+
});
|
|
1236
|
+
done = page.done;
|
|
1237
|
+
}
|
|
1238
|
+
}
|
|
896
1239
|
}
|
|
1240
|
+
/** Retry out-of-order TEL events; report terminal removal after its index write succeeds. */
|
|
897
1241
|
processEscrowOutOfOrders() {
|
|
898
1242
|
const entries = [...this.reger.oots.getAllItemIter()];
|
|
899
1243
|
for (const [keys, sn, dig] of entries) {
|
|
@@ -902,7 +1246,15 @@ export class Tevery {
|
|
|
902
1246
|
const raw = this.reger.tvts.get(key);
|
|
903
1247
|
const couple = this.reger.ancs.get(key);
|
|
904
1248
|
if (raw === null || couple === null) {
|
|
905
|
-
this.reger.oots.remOn(pre, sn, dig)
|
|
1249
|
+
if (this.reger.oots.remOn(pre, sn, dig)) {
|
|
1250
|
+
consoleLogger.warn("Tevery ejected out-of-order TEL event from escrow", {
|
|
1251
|
+
family: "outOfOrder",
|
|
1252
|
+
pre,
|
|
1253
|
+
sn,
|
|
1254
|
+
said: dig,
|
|
1255
|
+
reason: raw === null ? "missingEvent" : "missingSourceSeal",
|
|
1256
|
+
});
|
|
1257
|
+
}
|
|
906
1258
|
continue;
|
|
907
1259
|
}
|
|
908
1260
|
const [seqner, saider] = couple;
|
|
@@ -915,11 +1267,25 @@ export class Tevery {
|
|
|
915
1267
|
if (decision.kind === "escrow" && decision.escrow === "outOfOrder") {
|
|
916
1268
|
continue;
|
|
917
1269
|
}
|
|
918
|
-
this.reger.oots.remOn(pre, sn, dig);
|
|
1270
|
+
const removed = this.reger.oots.remOn(pre, sn, dig);
|
|
1271
|
+
if (removed && decision.kind === "reject") {
|
|
1272
|
+
consoleLogger.warn("Tevery ejected out-of-order TEL event from escrow", {
|
|
1273
|
+
family: "outOfOrder",
|
|
1274
|
+
pre,
|
|
1275
|
+
sn,
|
|
1276
|
+
said: dig,
|
|
1277
|
+
reason: decision.reason,
|
|
1278
|
+
});
|
|
1279
|
+
}
|
|
919
1280
|
}
|
|
920
1281
|
}
|
|
1282
|
+
/** Retry anchorless TEL events; missing source seals remain pending rather than being ejected. */
|
|
921
1283
|
processEscrowAnchorless() {
|
|
922
|
-
|
|
1284
|
+
this.retryDependencyEscrow("anchorless", this.reger.taes);
|
|
1285
|
+
}
|
|
1286
|
+
/** Retry each retained body with its accumulated proofs; commit before removing the old family index. */
|
|
1287
|
+
retryDependencyEscrow(family, table) {
|
|
1288
|
+
const entries = [...table.getAllItemIter()];
|
|
923
1289
|
for (const [keys, sn, dig] of entries) {
|
|
924
1290
|
const pre = keys[0] ?? "";
|
|
925
1291
|
const key = dgKey(pre, dig);
|
|
@@ -927,7 +1293,15 @@ export class Tevery {
|
|
|
927
1293
|
const couple = this.reger.ancs.get(key);
|
|
928
1294
|
if (raw === null || couple === null) {
|
|
929
1295
|
if (raw === null) {
|
|
930
|
-
|
|
1296
|
+
if (table.remOn(pre, sn, dig)) {
|
|
1297
|
+
consoleLogger.warn("Tevery ejected TEL dependency escrow", {
|
|
1298
|
+
family,
|
|
1299
|
+
pre,
|
|
1300
|
+
sn,
|
|
1301
|
+
said: dig,
|
|
1302
|
+
reason: "missingEvent",
|
|
1303
|
+
});
|
|
1304
|
+
}
|
|
931
1305
|
}
|
|
932
1306
|
continue;
|
|
933
1307
|
}
|
|
@@ -938,10 +1312,19 @@ export class Tevery {
|
|
|
938
1312
|
saider,
|
|
939
1313
|
wigers: this.reger.tibs.get(key),
|
|
940
1314
|
});
|
|
941
|
-
if (decision.kind === "escrow" && decision.escrow ===
|
|
1315
|
+
if (decision.kind === "escrow" && decision.escrow === family) {
|
|
942
1316
|
continue;
|
|
943
1317
|
}
|
|
944
|
-
|
|
1318
|
+
const removed = table.remOn(pre, sn, dig);
|
|
1319
|
+
if (removed && decision.kind === "reject") {
|
|
1320
|
+
consoleLogger.warn("Tevery ejected TEL dependency escrow", {
|
|
1321
|
+
family,
|
|
1322
|
+
pre,
|
|
1323
|
+
sn,
|
|
1324
|
+
said: dig,
|
|
1325
|
+
reason: decision.reason,
|
|
1326
|
+
});
|
|
1327
|
+
}
|
|
945
1328
|
}
|
|
946
1329
|
}
|
|
947
1330
|
static registryKey(serder) {
|
|
@@ -960,7 +1343,7 @@ export class Tevery {
|
|
|
960
1343
|
case Ilks.bis:
|
|
961
1344
|
case Ilks.brv: {
|
|
962
1345
|
const ra = sealRecord(okKed(serder).ra);
|
|
963
|
-
const regk = typeof ra
|
|
1346
|
+
const regk = ra && "i" in ra && typeof ra.i === "string" ? ra.i : null;
|
|
964
1347
|
if (!regk) {
|
|
965
1348
|
throw new ValidationError("Backer TEL event missing ra.i.");
|
|
966
1349
|
}
|
|
@@ -968,15 +1351,14 @@ export class Tevery {
|
|
|
968
1351
|
}
|
|
969
1352
|
}
|
|
970
1353
|
}
|
|
971
|
-
cacheTever(regk, tever) {
|
|
972
|
-
this.tevers.set(regk, tever);
|
|
973
|
-
this.reger.states.pin(regk, tever.state());
|
|
974
|
-
}
|
|
975
1354
|
/** Preserve the original source seal while waiting for earlier TEL events. */
|
|
976
|
-
escrowOOEvent(serder, seqner, saider) {
|
|
1355
|
+
escrowOOEvent(serder, seqner, saider, bigers = []) {
|
|
977
1356
|
const pre = okPre(serder);
|
|
978
1357
|
const said = okSaid(serder);
|
|
979
1358
|
const key = dgKey(pre, said);
|
|
1359
|
+
// The historical roster may be unavailable. Retain candidates, then verify
|
|
1360
|
+
// their union in valAnchorBigs before any threshold or acceptance decision.
|
|
1361
|
+
this.reger.tibs.put(key, bigers);
|
|
980
1362
|
this.reger.tvts.put(key, serder.raw);
|
|
981
1363
|
if (seqner && saider) {
|
|
982
1364
|
this.reger.ancs.put(key, [seqner, new Diger({ qb64: saider.qb64 })]);
|