keri-ts 2.0.1 → 2.2.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 +30 -2
- package/esm/keri/npm/src/acdc/authoring.js +195 -0
- package/esm/keri/npm/src/acdc/chaining.js +223 -89
- package/esm/keri/npm/src/acdc/custody.js +164 -0
- package/esm/keri/npm/src/acdc/dhking.js +244 -32
- package/esm/keri/npm/src/acdc/observing.js +2 -2
- package/esm/keri/npm/src/acdc/regbasing.js +30 -29
- package/esm/keri/npm/src/acdc/regengine.js +4 -6
- package/esm/keri/npm/src/acdc/registering.js +13 -10
- package/esm/keri/npm/src/acdc/registraring.js +4 -9
- package/esm/keri/npm/src/acdc/salting.js +143 -26
- package/esm/keri/npm/src/acdc/scheming.js +93 -54
- package/esm/keri/npm/src/acdc/unblinding.js +120 -99
- package/esm/keri/npm/src/app/bootstrap/authenticating.js +4 -6
- package/esm/keri/npm/src/app/bootstrap/oobi-resolving.js +41 -0
- package/esm/keri/npm/src/app/bootstrap/oobiery.js +5 -7
- package/esm/keri/npm/src/app/credentials/credential-revoking.js +1 -0
- package/esm/keri/npm/src/app/credentials/credential-workflows.js +2 -0
- package/esm/keri/npm/src/app/credentials/registry-settling.js +44 -0
- package/esm/keri/npm/src/app/credentials/root-replicating.js +131 -0
- package/esm/keri/npm/src/app/credentials/root-replicator.js +198 -0
- package/esm/keri/npm/src/app/credentials/tel-completion.js +36 -0
- package/esm/keri/npm/src/app/credentials/verifying.js +12 -3
- package/esm/keri/npm/src/app/delivery/forwarding.js +64 -9
- package/esm/keri/npm/src/app/exchanges/exchanging.js +24 -15
- package/esm/keri/npm/src/app/identity/challenging.js +50 -0
- package/esm/keri/npm/src/app/identity/configing.js +17 -43
- package/esm/keri/npm/src/app/identity/delegating.js +77 -77
- package/esm/keri/npm/src/app/identity/delegation-approval.js +333 -0
- package/esm/keri/npm/src/app/identity/event-completion.js +154 -0
- package/esm/keri/npm/src/app/identity/habbing.js +183 -41
- package/esm/keri/npm/src/app/identity/keeping.js +78 -5
- package/esm/keri/npm/src/app/identity/lmdb-habery.js +12 -0
- package/esm/keri/npm/src/app/ipex/group-ipex.js +327 -0
- package/esm/keri/npm/src/app/ipex/group-issuance.js +902 -0
- package/esm/keri/npm/src/app/ipex/ipex-admitting.js +120 -0
- package/esm/keri/npm/src/app/ipex/ipex-conversation.js +197 -0
- package/esm/keri/npm/src/app/ipex/ipex-discloser.js +591 -0
- package/esm/keri/npm/src/app/ipex/ipex-granting.js +93 -0
- package/esm/keri/npm/src/app/ipex/ipex-graph.js +7 -70
- package/esm/keri/npm/src/app/ipex/ipex-grouping.js +42 -16
- package/esm/keri/npm/src/app/ipex/ipex-v2.js +21 -5
- package/esm/keri/npm/src/app/ipex/ipexing.js +1 -1
- package/esm/keri/npm/src/app/ipex/issuance.js +888 -0
- package/esm/keri/npm/src/app/ipex/pending-presentations.js +46 -0
- package/esm/keri/npm/src/app/ipex/presentation-files.js +200 -0
- package/esm/keri/npm/src/app/ipex/presenting.js +401 -0
- package/esm/keri/npm/src/app/ipex/receive-issuance.js +86 -0
- package/esm/keri/npm/src/app/ipex/unblinding-workflow.js +660 -0
- package/esm/keri/npm/src/app/mailbox/ipex-arrival.js +103 -0
- package/esm/keri/npm/src/app/mailbox/kel-publisher.js +322 -0
- package/esm/keri/npm/src/app/mailbox/kel-publishing.js +65 -0
- package/esm/keri/npm/src/app/mailbox/kel-submission.js +24 -0
- package/esm/keri/npm/src/app/mailbox/mailbox-admin.js +208 -0
- package/esm/keri/npm/src/app/mailbox/mailbox-poller.js +212 -47
- package/esm/keri/npm/src/app/mailbox/mailboxing.js +15 -14
- package/esm/keri/npm/src/app/multisig/counseling.js +482 -0
- package/esm/keri/npm/src/app/multisig/group-members.js +32 -0
- package/esm/keri/npm/src/app/multisig/grouping.js +4 -3
- package/esm/keri/npm/src/app/multisig/multisig-workflows.js +101 -141
- package/esm/keri/npm/src/app/multisig/proposals.js +281 -0
- package/esm/keri/npm/src/app/multisig/proposing.js +122 -0
- package/esm/keri/npm/src/app/notifications/notifying.js +5 -9
- package/esm/keri/npm/src/app/notifications/signaling.js +5 -5
- package/esm/keri/npm/src/app/protocol/parsering.js +26 -1
- package/esm/keri/npm/src/app/protocol/protocol-processing.js +44 -6
- package/esm/keri/npm/src/app/queries/query-workflows.js +98 -0
- package/esm/keri/npm/src/app/queries/witness-inquisitor.js +2 -2
- package/esm/keri/npm/src/app/runtime/agent-runtime.js +113 -65
- package/esm/keri/npm/src/app/runtime/cue-runtime.js +3 -6
- package/esm/keri/npm/src/app/runtime/delivery-outbox.js +87 -0
- package/esm/keri/npm/src/app/runtime/doing.js +17 -0
- package/esm/keri/npm/src/app/runtime/ipex-auxiliaries.js +207 -0
- package/esm/keri/npm/src/app/runtime/operation-owners.js +151 -0
- package/esm/keri/npm/src/app/runtime/retry-backoff.js +93 -0
- package/esm/keri/npm/src/app/runtime/workflow-contract.js +80 -0
- package/esm/keri/npm/src/app/transport/byte-source.js +6 -42
- package/esm/keri/npm/src/app/transport/cesr-egress.js +77 -13
- package/esm/keri/npm/src/app/transport/file-bytes.js +41 -0
- package/esm/keri/npm/src/app/transport/http-client.js +25 -6
- package/esm/keri/npm/src/app/transport/http-messenger.js +14 -9
- package/esm/keri/npm/src/app/transport/message-source.js +1 -1
- package/esm/keri/npm/src/app/transport/messengering.js +3 -4
- package/esm/keri/npm/src/app/transport/node-http-client.js +21 -0
- package/esm/keri/npm/src/app/transport/tcp-dialer.js +14 -0
- package/esm/keri/npm/src/app/witness/http-endpoints.js +4 -4
- package/esm/keri/npm/src/app/witness/receipt-client.js +2 -2
- package/esm/keri/npm/src/cli/common/context.js +2 -2
- package/esm/keri/npm/src/cli/common/event-completion.js +49 -0
- package/esm/keri/npm/src/cli/common/existing.js +3 -5
- package/esm/keri/npm/src/cli/common/runtime-workers.js +23 -0
- package/esm/keri/npm/src/cli/credentials/ipex.js +159 -191
- package/esm/keri/npm/src/cli/credentials/vc.js +53 -72
- package/esm/keri/npm/src/cli/endpoints/did.js +12 -3
- package/esm/keri/npm/src/cli/endpoints/oobi-clean.js +4 -3
- package/esm/keri/npm/src/cli/endpoints/oobi.js +12 -15
- package/esm/keri/npm/src/cli/identity/challenge.js +9 -35
- package/esm/keri/npm/src/cli/identity/delegate.js +81 -258
- package/esm/keri/npm/src/cli/identity/incept.js +17 -34
- package/esm/keri/npm/src/cli/identity/init.js +4 -3
- package/esm/keri/npm/src/cli/identity/interact.js +7 -19
- package/esm/keri/npm/src/cli/identity/rotate.js +10 -38
- package/esm/keri/npm/src/cli/index.js +3 -1
- package/esm/keri/npm/src/cli/messaging/exchange.js +2 -2
- package/esm/keri/npm/src/cli/messaging/group-join.js +79 -0
- package/esm/keri/npm/src/cli/messaging/group-wait.js +88 -0
- package/esm/keri/npm/src/cli/messaging/multisig.js +187 -250
- package/esm/keri/npm/src/cli/messaging/root-copy-lines.js +31 -0
- package/esm/keri/npm/src/cli/tools/annotate.js +2 -1
- package/esm/keri/npm/src/cli/tools/benchmark.js +2 -1
- package/esm/keri/npm/src/cli/tools/db-dump.js +1 -4
- package/esm/keri/npm/src/core/bytes.js +9 -0
- package/esm/keri/npm/src/core/kel/delegation-ancestry.js +92 -0
- package/esm/keri/npm/src/core/kel/eventing.js +67 -12
- package/esm/keri/npm/src/core/kel/kever.js +11 -9
- package/esm/keri/npm/src/core/mailbox/kram-policy.js +41 -9
- package/esm/keri/npm/src/core/mailbox/kram-pruning.js +15 -22
- package/esm/keri/npm/src/core/mailbox/kram-staging.js +2 -2
- package/esm/keri/npm/src/core/mailbox/kraming.js +2 -0
- package/esm/keri/npm/src/core/records.js +23 -0
- package/esm/keri/npm/src/core/routing.js +15 -2
- package/esm/keri/npm/src/db/basing.js +183 -205
- package/esm/keri/npm/src/db/core/dber.js +1062 -0
- package/esm/keri/npm/src/db/core/index.js +4 -2
- package/esm/keri/npm/src/db/core/indexeddb-persistence.js +221 -0
- package/esm/keri/npm/src/db/core/lmdb-opener.js +30 -0
- package/esm/keri/npm/src/db/core/lmdber.js +199 -1067
- package/esm/keri/npm/src/db/core/memstore.js +532 -0
- package/esm/keri/npm/src/db/core/path-manager.js +109 -223
- package/esm/keri/npm/src/db/core/store-owner.js +104 -0
- package/esm/keri/npm/src/db/core/webdber.js +252 -0
- package/esm/keri/npm/src/db/escrowing.js +2 -2
- package/esm/keri/npm/src/db/exchange/exchange-nests.js +3 -2
- package/esm/keri/npm/src/db/indexeddb.js +98 -0
- package/esm/keri/npm/src/db/keeping.js +38 -123
- package/esm/keri/npm/src/db/koming.js +1 -1
- package/esm/keri/npm/src/db/lmdb-stores.js +68 -0
- package/esm/keri/npm/src/db/lmdb.js +6 -0
- package/esm/keri/npm/src/db/mailbox/mailboxing.js +12 -65
- package/esm/keri/npm/src/db/noting.js +11 -55
- package/esm/keri/npm/src/db/reger.js +43 -105
- package/esm/keri/npm/src/db/replay/witness-replay.js +2 -20
- package/esm/keri/npm/src/db/store-lock.js +150 -0
- package/esm/keri/npm/src/db/subing.js +1 -1
- package/esm/keri/npm/src/npm/db-indexeddb.browser.js +2 -0
- package/esm/keri/npm/src/npm/db-indexeddb.js +3 -0
- package/esm/keri/npm/src/npm/db-lmdb.js +3 -0
- package/esm/keri/npm/src/npm/db.browser.js +2 -0
- package/esm/keri/npm/src/npm/index.browser.js +9 -0
- package/esm/keri/npm/src/npm/runtime-node.js +3 -0
- package/esm/keri/npm/src/npm/runtime-web.browser.js +2 -0
- package/esm/keri/npm/src/npm/runtime-web.js +3 -0
- package/esm/keri/npm/src/npm/runtime.browser.js +2 -0
- package/esm/keri/npm/src/runtime/index.js +58 -12
- package/esm/keri/npm/src/runtime/node.js +14 -0
- package/esm/keri/npm/src/runtime/web/output-barrier.js +47 -0
- package/esm/keri/npm/src/runtime/web/persistent-storage.js +37 -0
- package/esm/keri/npm/src/runtime/web.js +10 -0
- package/esm/keri/npm/src/vdr/eventing.js +1 -1
- package/esm/keri/npm/src/vdr/tel-publication.js +19 -3
- package/esm/keri/npm/src/version.js +2 -2
- package/package.json +24 -4
- package/types/acdc/authoring.d.ts +54 -0
- package/types/acdc/authoring.d.ts.map +1 -0
- package/types/acdc/chaining.d.ts +56 -6
- package/types/acdc/chaining.d.ts.map +1 -1
- package/types/acdc/custody.d.ts +77 -0
- package/types/acdc/custody.d.ts.map +1 -0
- package/types/acdc/dhking.d.ts +94 -3
- package/types/acdc/dhking.d.ts.map +1 -1
- package/types/acdc/regbasing.d.ts +11 -6
- package/types/acdc/regbasing.d.ts.map +1 -1
- package/types/acdc/regengine.d.ts.map +1 -1
- package/types/acdc/registering.d.ts +8 -4
- package/types/acdc/registering.d.ts.map +1 -1
- package/types/acdc/registraring.d.ts.map +1 -1
- package/types/acdc/salting.d.ts +59 -7
- package/types/acdc/salting.d.ts.map +1 -1
- package/types/acdc/scheming.d.ts +2 -0
- package/types/acdc/scheming.d.ts.map +1 -1
- package/types/acdc/unblinding.d.ts +58 -19
- package/types/acdc/unblinding.d.ts.map +1 -1
- package/types/app/bootstrap/authenticating.d.ts +3 -1
- package/types/app/bootstrap/authenticating.d.ts.map +1 -1
- package/types/app/bootstrap/oobi-resolving.d.ts +92 -0
- package/types/app/bootstrap/oobi-resolving.d.ts.map +1 -0
- package/types/app/bootstrap/oobiery.d.ts +3 -1
- package/types/app/bootstrap/oobiery.d.ts.map +1 -1
- package/types/app/credentials/credential-revoking.d.ts +3 -0
- package/types/app/credentials/credential-revoking.d.ts.map +1 -1
- package/types/app/credentials/credential-workflows.d.ts +5 -0
- package/types/app/credentials/credential-workflows.d.ts.map +1 -1
- package/types/app/credentials/registry-settling.d.ts +85 -0
- package/types/app/credentials/registry-settling.d.ts.map +1 -0
- package/types/app/credentials/root-replicating.d.ts +97 -0
- package/types/app/credentials/root-replicating.d.ts.map +1 -0
- package/types/app/credentials/root-replicator.d.ts +105 -0
- package/types/app/credentials/root-replicator.d.ts.map +1 -0
- package/types/app/credentials/tel-completion.d.ts +55 -0
- package/types/app/credentials/tel-completion.d.ts.map +1 -0
- package/types/app/credentials/verifying.d.ts +2 -1
- package/types/app/credentials/verifying.d.ts.map +1 -1
- package/types/app/delivery/forwarding.d.ts +16 -0
- package/types/app/delivery/forwarding.d.ts.map +1 -1
- package/types/app/exchanges/exchanging.d.ts +2 -0
- package/types/app/exchanges/exchanging.d.ts.map +1 -1
- package/types/app/identity/challenging.d.ts +54 -0
- package/types/app/identity/challenging.d.ts.map +1 -1
- package/types/app/identity/configing.d.ts +7 -5
- package/types/app/identity/configing.d.ts.map +1 -1
- package/types/app/identity/delegating.d.ts +21 -4
- package/types/app/identity/delegating.d.ts.map +1 -1
- package/types/app/identity/delegation-approval.d.ts +228 -0
- package/types/app/identity/delegation-approval.d.ts.map +1 -0
- package/types/app/identity/event-completion.d.ts +151 -0
- package/types/app/identity/event-completion.d.ts.map +1 -0
- package/types/app/identity/habbing.d.ts +90 -7
- package/types/app/identity/habbing.d.ts.map +1 -1
- package/types/app/identity/keeping.d.ts +50 -4
- package/types/app/identity/keeping.d.ts.map +1 -1
- package/types/app/identity/lmdb-habery.d.ts +6 -0
- package/types/app/identity/lmdb-habery.d.ts.map +1 -0
- package/types/app/ipex/group-ipex.d.ts +247 -0
- package/types/app/ipex/group-ipex.d.ts.map +1 -0
- package/types/app/ipex/group-issuance.d.ts +281 -0
- package/types/app/ipex/group-issuance.d.ts.map +1 -0
- package/types/app/ipex/ipex-admitting.d.ts +47 -0
- package/types/app/ipex/ipex-admitting.d.ts.map +1 -0
- package/types/app/ipex/ipex-conversation.d.ts +195 -0
- package/types/app/ipex/ipex-conversation.d.ts.map +1 -0
- package/types/app/ipex/ipex-discloser.d.ts +156 -0
- package/types/app/ipex/ipex-discloser.d.ts.map +1 -0
- package/types/app/ipex/ipex-granting.d.ts +145 -0
- package/types/app/ipex/ipex-granting.d.ts.map +1 -0
- package/types/app/ipex/ipex-graph.d.ts +4 -4
- package/types/app/ipex/ipex-graph.d.ts.map +1 -1
- package/types/app/ipex/ipex-grouping.d.ts +18 -0
- package/types/app/ipex/ipex-grouping.d.ts.map +1 -1
- package/types/app/ipex/ipex-v2.d.ts +11 -2
- package/types/app/ipex/ipex-v2.d.ts.map +1 -1
- package/types/app/ipex/ipexing.d.ts +3 -0
- package/types/app/ipex/ipexing.d.ts.map +1 -1
- package/types/app/ipex/issuance.d.ts +443 -0
- package/types/app/ipex/issuance.d.ts.map +1 -0
- package/types/app/ipex/pending-presentations.d.ts +25 -0
- package/types/app/ipex/pending-presentations.d.ts.map +1 -0
- package/types/app/ipex/presentation-files.d.ts +47 -0
- package/types/app/ipex/presentation-files.d.ts.map +1 -0
- package/types/app/ipex/presenting.d.ts +298 -0
- package/types/app/ipex/presenting.d.ts.map +1 -0
- package/types/app/ipex/receive-issuance.d.ts +99 -0
- package/types/app/ipex/receive-issuance.d.ts.map +1 -0
- package/types/app/ipex/unblinding-workflow.d.ts +255 -0
- package/types/app/ipex/unblinding-workflow.d.ts.map +1 -0
- package/types/app/mailbox/ipex-arrival.d.ts +104 -0
- package/types/app/mailbox/ipex-arrival.d.ts.map +1 -0
- package/types/app/mailbox/kel-publisher.d.ts +141 -0
- package/types/app/mailbox/kel-publisher.d.ts.map +1 -0
- package/types/app/mailbox/kel-publishing.d.ts +70 -0
- package/types/app/mailbox/kel-publishing.d.ts.map +1 -0
- package/types/app/mailbox/kel-submission.d.ts +18 -0
- package/types/app/mailbox/kel-submission.d.ts.map +1 -0
- package/types/app/mailbox/mailbox-admin.d.ts +113 -0
- package/types/app/mailbox/mailbox-admin.d.ts.map +1 -0
- package/types/app/mailbox/mailbox-poller.d.ts +92 -3
- package/types/app/mailbox/mailbox-poller.d.ts.map +1 -1
- package/types/app/mailbox/mailboxing.d.ts +4 -1
- package/types/app/mailbox/mailboxing.d.ts.map +1 -1
- package/types/app/multisig/counseling.d.ts +196 -0
- package/types/app/multisig/counseling.d.ts.map +1 -0
- package/types/app/multisig/group-members.d.ts +20 -0
- package/types/app/multisig/group-members.d.ts.map +1 -1
- package/types/app/multisig/grouping.d.ts +39 -20
- package/types/app/multisig/grouping.d.ts.map +1 -1
- package/types/app/multisig/multisig-workflows.d.ts +93 -23
- package/types/app/multisig/multisig-workflows.d.ts.map +1 -1
- package/types/app/multisig/proposals.d.ts +129 -0
- package/types/app/multisig/proposals.d.ts.map +1 -0
- package/types/app/multisig/proposing.d.ts +125 -0
- package/types/app/multisig/proposing.d.ts.map +1 -0
- package/types/app/notifications/notifying.d.ts +1 -1
- package/types/app/notifications/notifying.d.ts.map +1 -1
- package/types/app/notifications/signaling.d.ts +3 -1
- package/types/app/notifications/signaling.d.ts.map +1 -1
- package/types/app/protocol/parsering.d.ts +16 -1
- package/types/app/protocol/parsering.d.ts.map +1 -1
- package/types/app/protocol/protocol-processing.d.ts +9 -1
- package/types/app/protocol/protocol-processing.d.ts.map +1 -1
- package/types/app/queries/query-workflows.d.ts +98 -0
- package/types/app/queries/query-workflows.d.ts.map +1 -0
- package/types/app/runtime/agent-runtime.d.ts +79 -25
- package/types/app/runtime/agent-runtime.d.ts.map +1 -1
- package/types/app/runtime/cue-runtime.d.ts +2 -1
- package/types/app/runtime/cue-runtime.d.ts.map +1 -1
- package/types/app/runtime/delivery-outbox.d.ts +68 -0
- package/types/app/runtime/delivery-outbox.d.ts.map +1 -0
- package/types/app/runtime/doing.d.ts +27 -0
- package/types/app/runtime/doing.d.ts.map +1 -0
- package/types/app/runtime/ipex-auxiliaries.d.ts +74 -0
- package/types/app/runtime/ipex-auxiliaries.d.ts.map +1 -0
- package/types/app/runtime/operation-owners.d.ts +137 -0
- package/types/app/runtime/operation-owners.d.ts.map +1 -0
- package/types/app/runtime/retry-backoff.d.ts +49 -0
- package/types/app/runtime/retry-backoff.d.ts.map +1 -0
- package/types/app/runtime/workflow-contract.d.ts +79 -0
- package/types/app/runtime/workflow-contract.d.ts.map +1 -0
- package/types/app/transport/byte-source.d.ts +13 -10
- package/types/app/transport/byte-source.d.ts.map +1 -1
- package/types/app/transport/cesr-egress.d.ts +21 -7
- package/types/app/transport/cesr-egress.d.ts.map +1 -1
- package/types/app/transport/file-bytes.d.ts +11 -0
- package/types/app/transport/file-bytes.d.ts.map +1 -0
- package/types/app/transport/http-client.d.ts +3 -0
- package/types/app/transport/http-client.d.ts.map +1 -1
- package/types/app/transport/http-messenger.d.ts +15 -10
- package/types/app/transport/http-messenger.d.ts.map +1 -1
- package/types/app/transport/message-source.d.ts +1 -1
- package/types/app/transport/messengering.d.ts +2 -2
- package/types/app/transport/messengering.d.ts.map +1 -1
- package/types/app/transport/node-http-client.d.ts +10 -0
- package/types/app/transport/node-http-client.d.ts.map +1 -0
- package/types/app/transport/tcp-dialer.d.ts +21 -0
- package/types/app/transport/tcp-dialer.d.ts.map +1 -0
- package/types/cli/common/event-completion.d.ts +26 -0
- package/types/cli/common/event-completion.d.ts.map +1 -0
- package/types/cli/common/existing.d.ts.map +1 -1
- package/types/cli/common/runtime-workers.d.ts +23 -0
- package/types/cli/common/runtime-workers.d.ts.map +1 -0
- package/types/cli/credentials/ipex.d.ts.map +1 -1
- package/types/cli/credentials/vc.d.ts +1 -1
- package/types/cli/credentials/vc.d.ts.map +1 -1
- package/types/cli/endpoints/did.d.ts.map +1 -1
- package/types/cli/endpoints/oobi-clean.d.ts.map +1 -1
- package/types/cli/endpoints/oobi.d.ts +3 -1
- package/types/cli/endpoints/oobi.d.ts.map +1 -1
- package/types/cli/identity/challenge.d.ts +1 -1
- package/types/cli/identity/challenge.d.ts.map +1 -1
- package/types/cli/identity/delegate.d.ts +14 -1
- package/types/cli/identity/delegate.d.ts.map +1 -1
- package/types/cli/identity/incept.d.ts.map +1 -1
- package/types/cli/identity/init.d.ts.map +1 -1
- package/types/cli/identity/interact.d.ts.map +1 -1
- package/types/cli/identity/rotate.d.ts.map +1 -1
- package/types/cli/index.d.ts +4 -2
- package/types/cli/index.d.ts.map +1 -1
- package/types/cli/messaging/group-join.d.ts +53 -0
- package/types/cli/messaging/group-join.d.ts.map +1 -0
- package/types/cli/messaging/group-wait.d.ts +34 -0
- package/types/cli/messaging/group-wait.d.ts.map +1 -0
- package/types/cli/messaging/multisig.d.ts +36 -4
- package/types/cli/messaging/multisig.d.ts.map +1 -1
- package/types/cli/messaging/root-copy-lines.d.ts +39 -0
- package/types/cli/messaging/root-copy-lines.d.ts.map +1 -0
- package/types/cli/tools/annotate.d.ts.map +1 -1
- package/types/cli/tools/benchmark.d.ts.map +1 -1
- package/types/cli/tools/db-dump.d.ts.map +1 -1
- package/types/core/bytes.d.ts +2 -0
- package/types/core/bytes.d.ts.map +1 -1
- package/types/core/cues.d.ts +11 -0
- package/types/core/cues.d.ts.map +1 -1
- package/types/core/kel/delegation-ancestry.d.ts +41 -0
- package/types/core/kel/delegation-ancestry.d.ts.map +1 -0
- package/types/core/kel/eventing.d.ts.map +1 -1
- package/types/core/kel/kever.d.ts +5 -4
- package/types/core/kel/kever.d.ts.map +1 -1
- package/types/core/mailbox/kram-policy.d.ts +14 -0
- package/types/core/mailbox/kram-policy.d.ts.map +1 -1
- package/types/core/mailbox/kram-pruning.d.ts +1 -3
- package/types/core/mailbox/kram-pruning.d.ts.map +1 -1
- package/types/core/mailbox/kraming.d.ts +1 -1
- package/types/core/mailbox/kraming.d.ts.map +1 -1
- package/types/core/records.d.ts +61 -0
- package/types/core/records.d.ts.map +1 -1
- package/types/core/routing.d.ts +6 -0
- package/types/core/routing.d.ts.map +1 -1
- package/types/db/basing.d.ts +22 -25
- package/types/db/basing.d.ts.map +1 -1
- package/types/db/core/dber.d.ts +505 -0
- package/types/db/core/dber.d.ts.map +1 -0
- package/types/db/core/index.d.ts +4 -2
- package/types/db/core/index.d.ts.map +1 -1
- package/types/db/core/indexeddb-persistence.d.ts +59 -0
- package/types/db/core/indexeddb-persistence.d.ts.map +1 -0
- package/types/db/core/lmdb-opener.d.ts +17 -0
- package/types/db/core/lmdb-opener.d.ts.map +1 -0
- package/types/db/core/lmdber.d.ts +60 -383
- package/types/db/core/lmdber.d.ts.map +1 -1
- package/types/db/core/memstore.d.ts +129 -0
- package/types/db/core/memstore.d.ts.map +1 -0
- package/types/db/core/path-manager.d.ts +22 -45
- package/types/db/core/path-manager.d.ts.map +1 -1
- package/types/db/core/store-owner.d.ts +59 -0
- package/types/db/core/store-owner.d.ts.map +1 -0
- package/types/db/core/webdber.d.ts +127 -0
- package/types/db/core/webdber.d.ts.map +1 -0
- package/types/db/escrowing.d.ts +3 -3
- package/types/db/escrowing.d.ts.map +1 -1
- package/types/db/exchange/exchange-nests.d.ts.map +1 -1
- package/types/db/indexeddb.d.ts +37 -0
- package/types/db/indexeddb.d.ts.map +1 -0
- package/types/db/keeping.d.ts +14 -25
- package/types/db/keeping.d.ts.map +1 -1
- package/types/db/koming.d.ts +7 -8
- package/types/db/koming.d.ts.map +1 -1
- package/types/db/lmdb-stores.d.ts +45 -0
- package/types/db/lmdb-stores.d.ts.map +1 -0
- package/types/db/lmdb.d.ts +7 -0
- package/types/db/lmdb.d.ts.map +1 -0
- package/types/db/mailbox/mailboxing.d.ts +7 -21
- package/types/db/mailbox/mailboxing.d.ts.map +1 -1
- package/types/db/noting.d.ts +7 -12
- package/types/db/noting.d.ts.map +1 -1
- package/types/db/reger.d.ts +7 -11
- package/types/db/reger.d.ts.map +1 -1
- package/types/db/replay/witness-replay.d.ts +0 -2
- package/types/db/replay/witness-replay.d.ts.map +1 -1
- package/types/db/store-lock.d.ts +72 -0
- package/types/db/store-lock.d.ts.map +1 -0
- package/types/db/subing.d.ts +24 -25
- package/types/db/subing.d.ts.map +1 -1
- package/types/npm/db-indexeddb.d.ts +4 -0
- package/types/npm/db-indexeddb.d.ts.map +1 -0
- package/types/npm/db-lmdb.d.ts +4 -0
- package/types/npm/db-lmdb.d.ts.map +1 -0
- package/types/npm/runtime-node.d.ts +4 -0
- package/types/npm/runtime-node.d.ts.map +1 -0
- package/types/npm/runtime-web.d.ts +4 -0
- package/types/npm/runtime-web.d.ts.map +1 -0
- package/types/runtime/index.d.ts +48 -14
- package/types/runtime/index.d.ts.map +1 -1
- package/types/runtime/node.d.ts +15 -0
- package/types/runtime/node.d.ts.map +1 -0
- package/types/runtime/web/output-barrier.d.ts +30 -0
- package/types/runtime/web/output-barrier.d.ts.map +1 -0
- package/types/runtime/web/persistent-storage.d.ts +36 -0
- package/types/runtime/web/persistent-storage.d.ts.map +1 -0
- package/types/runtime/web.d.ts +11 -0
- package/types/runtime/web.d.ts.map +1 -0
- package/types/vdr/tel-publication.d.ts +6 -0
- package/types/vdr/tel-publication.d.ts.map +1 -1
- package/types/version.d.ts +2 -2
- package/esm/keri/npm/src/acdc/relating.js +0 -59
- package/esm/keri/npm/src/cli/common/tel-completion.js +0 -24
- package/esm/keri/npm/src/db/baser-defaults.js +0 -11
- package/types/acdc/relating.d.ts +0 -21
- package/types/acdc/relating.d.ts.map +0 -1
- package/types/cli/common/tel-completion.d.ts +0 -8
- package/types/cli/common/tel-completion.d.ts.map +0 -1
- package/types/db/baser-defaults.d.ts +0 -5
- package/types/db/baser-defaults.d.ts.map +0 -1
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { call, race, sleep, spawn } from "effection";
|
|
2
|
+
import { ValidationError } from "../../core/errors.js";
|
|
3
|
+
import { isLocalGroupHab } from "../multisig/group-members.js";
|
|
4
|
+
import { AnchorQuerier, KeyStateNoticer } from "./querying.js";
|
|
5
|
+
/** One elapsed deadline covers query sending and independently received evidence. */
|
|
6
|
+
export const QUERY_TIMEOUT_MS = 10_000;
|
|
7
|
+
/** Reject group habs: a query must be signed by one member, not by a group needing more signatures. */
|
|
8
|
+
export function requireQueryRequester(hby, hab) {
|
|
9
|
+
if (isLocalGroupHab(hby, hab)) {
|
|
10
|
+
throw new ValidationError("Query --alias must select a member requester, not a group requiring additional signatures.");
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
/** Durable anchor status (`scope: "durable"`): the accepted KEL of `prefix` already holds the exact seal. */
|
|
14
|
+
export function anchorQueryStatus(deps, prefix, anchor) {
|
|
15
|
+
return deps.hby.db.fetchLastSealingEventByEventSeal(prefix, anchor)
|
|
16
|
+
? { state: "completed", scope: "durable" }
|
|
17
|
+
: { state: "active", phase: "awaitingEvidence", scope: "durable" };
|
|
18
|
+
}
|
|
19
|
+
/** Start a key-state query in the caller's scope. */
|
|
20
|
+
export function* beginKeyStateQuery(deps, target) {
|
|
21
|
+
requireQueryRequester(deps.hby, target.hab);
|
|
22
|
+
const workflow = new KeyStateNoticer(deps.hby.db, deps.querying, target.prefix, deps.cues, {
|
|
23
|
+
signer: target.hab.pre,
|
|
24
|
+
});
|
|
25
|
+
return yield* startQuery(deps, target.prefix, workflow);
|
|
26
|
+
}
|
|
27
|
+
/** Start an anchor query in the caller's scope. */
|
|
28
|
+
export function* beginAnchorQuery(deps, target) {
|
|
29
|
+
requireQueryRequester(deps.hby, target.hab);
|
|
30
|
+
const workflow = new AnchorQuerier(deps.hby.db, deps.querying, target.prefix, target.anchor, {
|
|
31
|
+
signer: target.hab.pre,
|
|
32
|
+
});
|
|
33
|
+
return yield* startQuery(deps, target.prefix, workflow);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Query current key state for `prefix` and wait for accepted evidence.
|
|
37
|
+
*
|
|
38
|
+
* @returns `settled` (status `completed`), or `timed-out`; a timeout is not permission to treat
|
|
39
|
+
* stale local state as success. Workflow failures propagate.
|
|
40
|
+
*/
|
|
41
|
+
export function* queryKeyState(deps, target, options = {}) {
|
|
42
|
+
return yield* beginThenWait(beginKeyStateQuery(deps, target), options);
|
|
43
|
+
}
|
|
44
|
+
/** Query for an accepted KEL event holding the exact seal `target.anchor`; see {@link queryKeyState}. */
|
|
45
|
+
export function* queryAnchor(deps, target, options = {}) {
|
|
46
|
+
return yield* beginThenWait(beginAnchorQuery(deps, target), options);
|
|
47
|
+
}
|
|
48
|
+
/** Spawn the workflow in the caller's scope. */
|
|
49
|
+
function* startQuery(deps, prefix, workflow) {
|
|
50
|
+
let completed = false;
|
|
51
|
+
const status = () => completed
|
|
52
|
+
? { state: "completed", scope: "process" }
|
|
53
|
+
: { state: "active", phase: "awaitingEvidence", scope: "process" };
|
|
54
|
+
const observing = yield* spawn(function* () {
|
|
55
|
+
yield* workflow.queryDo();
|
|
56
|
+
completed = true;
|
|
57
|
+
});
|
|
58
|
+
deps.changes?.push({ kind: "query", id: prefix });
|
|
59
|
+
return {
|
|
60
|
+
prefix,
|
|
61
|
+
status,
|
|
62
|
+
*wait(options = {}) {
|
|
63
|
+
const outcome = yield* waitForQuery(observing, status, options.timeoutMs ?? QUERY_TIMEOUT_MS);
|
|
64
|
+
if (outcome.outcome === "settled")
|
|
65
|
+
deps.changes?.push({ kind: "query", id: prefix });
|
|
66
|
+
return outcome;
|
|
67
|
+
},
|
|
68
|
+
halt: () => observing.halt(),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Observe completion within the window without transferring task ownership.
|
|
73
|
+
* The race cancels only its observation when the timer wins; the run's `halt`
|
|
74
|
+
* joins the original task.
|
|
75
|
+
*/
|
|
76
|
+
function* waitForQuery(observing, status, timeoutMs) {
|
|
77
|
+
const done = yield* race([
|
|
78
|
+
call(function* () {
|
|
79
|
+
yield* observing;
|
|
80
|
+
return true;
|
|
81
|
+
}),
|
|
82
|
+
call(function* () {
|
|
83
|
+
yield* sleep(timeoutMs);
|
|
84
|
+
return false;
|
|
85
|
+
}),
|
|
86
|
+
]);
|
|
87
|
+
return done ? { outcome: "settled", status: status() } : { outcome: "timed-out", status: status(), timeoutMs };
|
|
88
|
+
}
|
|
89
|
+
/** begin + wait, halting the run on every exit path. */
|
|
90
|
+
function* beginThenWait(begin, options) {
|
|
91
|
+
const run = yield* begin;
|
|
92
|
+
try {
|
|
93
|
+
return yield* run.wait(options);
|
|
94
|
+
}
|
|
95
|
+
finally {
|
|
96
|
+
yield* run.halt();
|
|
97
|
+
}
|
|
98
|
+
}
|
|
@@ -19,7 +19,7 @@ import { introduce } from "../delivery/introducing.js";
|
|
|
19
19
|
import { runtimeTurn } from "../runtime/runtime-turn.js";
|
|
20
20
|
import { CesrHttpRefusal } from "../transport/cesr-egress.js";
|
|
21
21
|
import { HTTPMessenger } from "../transport/http-messenger.js";
|
|
22
|
-
import {
|
|
22
|
+
import { requireTcpDialer } from "../transport/tcp-dialer.js";
|
|
23
23
|
import { TransportError } from "../transport/transport-error.js";
|
|
24
24
|
/** First eligible role used by KERIpy WitnessInquisitor before random endpoint selection. */
|
|
25
25
|
const QUERY_ROLE_PRIORITY = [Roles.controller, Roles.agent, Roles.witness];
|
|
@@ -309,7 +309,7 @@ export class WitnessInquisitor {
|
|
|
309
309
|
// Only this attempt owns signed bytes; failed attempts are never automatically resubmitted.
|
|
310
310
|
const http = this.http, clock = this.clock;
|
|
311
311
|
if (new URL(delivery.url).protocol === "tcp:") {
|
|
312
|
-
yield*
|
|
312
|
+
yield* requireTcpDialer(http).messenger(delivery.url, clock, this.protocol).send(delivery.body, {
|
|
313
313
|
signal: controller.signal,
|
|
314
314
|
replies: true,
|
|
315
315
|
local: true,
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import { WireParseError } from "cesr-ts";
|
|
2
2
|
import { call, resource, spawn, suspend } from "effection";
|
|
3
|
-
import { Dhke } from "../../acdc/dhking.js";
|
|
4
3
|
import { RegistryObserver } from "../../acdc/observing.js";
|
|
5
4
|
import { createRegery as createAcdcRegery } from "../../acdc/registraring.js";
|
|
6
5
|
import { RegistryRoot } from "../../acdc/salting.js";
|
|
7
|
-
import { Unblind } from "../../acdc/unblinding.js";
|
|
8
6
|
import { Deck } from "../../core/deck.js";
|
|
9
|
-
import { DatabaseNotOpenError
|
|
7
|
+
import { DatabaseNotOpenError } from "../../core/errors.js";
|
|
10
8
|
import { Kevery } from "../../core/kel/eventing.js";
|
|
11
9
|
import { Kramer } from "../../core/mailbox/kraming.js";
|
|
12
10
|
import { CREDENTIAL_MAILBOX_TOPIC, DELEGATE_MAILBOX_TOPIC, RECEIPT_MAILBOX_TOPIC, REPLAY_MAILBOX_TOPIC, REPLY_MAILBOX_TOPIC, } from "../../core/mailbox/mailbox-topics.js";
|
|
11
|
+
import { Roles } from "../../core/roles.js";
|
|
13
12
|
import { Revery } from "../../core/routing.js";
|
|
13
|
+
import { openOwner } from "../../db/core/store-owner.js";
|
|
14
14
|
import { Mailboxer } from "../../db/mailbox/mailboxing.js";
|
|
15
15
|
import { Noter } from "../../db/noting.js";
|
|
16
|
-
import {
|
|
16
|
+
import { Reger } from "../../db/reger.js";
|
|
17
17
|
import { Regery as VdrRegery } from "../../vdr/credentialing.js";
|
|
18
18
|
import { Tevery } from "../../vdr/eventing.js";
|
|
19
19
|
import { Authenticator } from "../bootstrap/authenticating.js";
|
|
@@ -27,10 +27,12 @@ import { loadChallengeHandlers } from "../identity/challenging.js";
|
|
|
27
27
|
import { Anchorer, loadDelegationHandlers } from "../identity/delegating.js";
|
|
28
28
|
import { loadIpexHandlers } from "../ipex/ipexing.js";
|
|
29
29
|
import { ForwardHandler } from "../mailbox/forward-handler.js";
|
|
30
|
+
import { KEL_PUBLISHER_PACING, KelPublisher, kelPublisherDo } from "../mailbox/kel-publisher.js";
|
|
30
31
|
import { MailboxDirector } from "../mailbox/mailbox-director.js";
|
|
31
|
-
import { MailboxPoller } from "../mailbox/mailbox-poller.js";
|
|
32
|
+
import { MAILBOX_POLLER_PACING, MailboxPoller, } from "../mailbox/mailbox-poller.js";
|
|
32
33
|
import { mailboxerOptionsForHabery } from "../mailbox/mailboxing.js";
|
|
33
34
|
import { mailboxTopicForRoute } from "../mailbox/topic-routing.js";
|
|
35
|
+
import { Counselor } from "../multisig/counseling.js";
|
|
34
36
|
import { loadMultisigHandlers } from "../multisig/grouping.js";
|
|
35
37
|
import { noterOptionsForHabery, Notifier } from "../notifications/notifying.js";
|
|
36
38
|
import { Signaler } from "../notifications/signaling.js";
|
|
@@ -40,7 +42,11 @@ import { QueryReplies } from "../queries/query-replies.js";
|
|
|
40
42
|
import { WitnessInquisitor } from "../queries/witness-inquisitor.js";
|
|
41
43
|
import { Receiptor } from "../witness/receipting.js";
|
|
42
44
|
import { cueDo } from "./cue-runtime.js";
|
|
43
|
-
import {
|
|
45
|
+
import { doEvery, PROTOCOL_PACING } from "./doing.js";
|
|
46
|
+
import { IpexAuxiliaries } from "./ipex-auxiliaries.js";
|
|
47
|
+
import { composeOwners, operationOwnersDo, OWNER_PACING, } from "./operation-owners.js";
|
|
48
|
+
import { signalerChangeSink } from "./workflow-contract.js";
|
|
49
|
+
import { observeUntil } from "./workflow-contract.js";
|
|
44
50
|
/**
|
|
45
51
|
* Create the shared runtime composition root used by CLI commands and
|
|
46
52
|
* `tufa agent`.
|
|
@@ -58,15 +64,6 @@ import { runtimeTurn } from "./runtime-turn.js";
|
|
|
58
64
|
* @throws Dependency mismatch/acquisition errors propagate after owned resource cleanup.
|
|
59
65
|
*/
|
|
60
66
|
export function* createAgentRuntime(hby, http, clock, options = {}) {
|
|
61
|
-
const selected = options.ipexAuxiliary;
|
|
62
|
-
if (selected) {
|
|
63
|
-
if (options.kram?.enabled !== true) {
|
|
64
|
-
throw new ValidationError("IPEX auxiliary runtime requires explicitly enabled KRAM");
|
|
65
|
-
}
|
|
66
|
-
if (!selected.hab.pre || hby.habs.get(selected.hab.pre) !== selected.hab) {
|
|
67
|
-
throw new ValidationError("IPEX auxiliary runtime requires its actual local habitat");
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
67
|
const injectedSignaler = options.signaler ?? options.notifier?.signaler;
|
|
71
68
|
if ((options.notifier && options.notifier.signator !== hby.signator)
|
|
72
69
|
|| (options.noter && options.notifier && options.noter !== options.notifier.noter)
|
|
@@ -101,8 +98,6 @@ export function* createAgentRuntime(hby, http, clock, options = {}) {
|
|
|
101
98
|
const acdc = options.acdc ?? (!hby.readonly ? (yield* openAcdcRegeryForHabery(hby)) : null);
|
|
102
99
|
const ownsAcdcRegery = options.acdc === undefined && acdc !== null;
|
|
103
100
|
const acdcRegery = acdc;
|
|
104
|
-
if (selected && !acdc)
|
|
105
|
-
throw new ValidationError("IPEX auxiliary runtime requires a v2 registry");
|
|
106
101
|
// Acquire after stores, before processors/consumers: reverse teardown joins consumers, clears cues, closes stores.
|
|
107
102
|
const cues = yield* resource(function* (provide) {
|
|
108
103
|
const owned = new Deck();
|
|
@@ -134,25 +129,21 @@ export function* createAgentRuntime(hby, http, clock, options = {}) {
|
|
|
134
129
|
const kvy = new Kevery(hby.db, { cues: protocolCues, rvy: revery, messagePolicy: options.messagePolicy, kramer });
|
|
135
130
|
const exc = new Exchanger(hby, { cues: protocolCues, now });
|
|
136
131
|
const registry = acdc ? new RegistryObserver(hby.db, acdc.store) : null;
|
|
137
|
-
|
|
132
|
+
// Every runtime with a v2 registry store owns the per-identifier DH and Unblind owners: one dispatch path.
|
|
133
|
+
const ipex = registry
|
|
138
134
|
? yield* resource(function* (provide) {
|
|
139
|
-
const
|
|
140
|
-
? { kind: "dhke", owner: new Dhke({ hab: selected.hab, exc, registryStore: registry.store, rvy: revery, now }) }
|
|
141
|
-
: {
|
|
142
|
-
kind: "unblind",
|
|
143
|
-
owner: new Unblind({ hab: selected.hab, exc, registry, states: selected.states, rvy: revery, now }),
|
|
144
|
-
};
|
|
135
|
+
const owners = new IpexAuxiliaries(exc, registry, revery, now, options.kram?.enabled === true);
|
|
145
136
|
try {
|
|
146
|
-
revery.rtr
|
|
147
|
-
yield* provide(
|
|
137
|
+
owners.registerReplyRoutes(revery.rtr);
|
|
138
|
+
yield* provide(owners);
|
|
148
139
|
}
|
|
149
140
|
finally {
|
|
150
|
-
|
|
141
|
+
owners.close();
|
|
151
142
|
}
|
|
152
143
|
})
|
|
153
144
|
: null;
|
|
154
145
|
const replies = new QueryReplies(cues);
|
|
155
|
-
const protocol = new ProtocolProcessor(kvy, revery, exc, vdr?.tvy ?? null, vdr?.vry ?? null, registry, protocolCues, cues, replies,
|
|
146
|
+
const protocol = new ProtocolProcessor(kvy, revery, exc, vdr?.tvy ?? null, vdr?.vry ?? null, registry, protocolCues, cues, replies, ipex ?? undefined);
|
|
156
147
|
const reactor = new Reactor(protocol);
|
|
157
148
|
loadChallengeHandlers(hby.db, exc);
|
|
158
149
|
loadDelegationHandlers(hby, exc, notifier);
|
|
@@ -161,9 +152,12 @@ export function* createAgentRuntime(hby, http, clock, options = {}) {
|
|
|
161
152
|
loadIpexHandlers(hby, exc, {
|
|
162
153
|
notifier,
|
|
163
154
|
registry: acdc?.store ?? null,
|
|
155
|
+
grantWalk: options.grantWalk,
|
|
164
156
|
});
|
|
165
157
|
// Construction adopts stored copies an earlier handler-less Exchanger left unescrowed.
|
|
166
|
-
const registryRoot = options.registryRoots !== "refuse" && acdc
|
|
158
|
+
const registryRoot = options.registryRoots !== "refuse" && acdc
|
|
159
|
+
? new RegistryRoot(hby, acdc, notifier, options.operationStores?.changes ?? (signaler ? signalerChangeSink(signaler) : undefined))
|
|
160
|
+
: null;
|
|
167
161
|
if (registryRoot)
|
|
168
162
|
exc.addHandler(registryRoot);
|
|
169
163
|
const mailboxDirector = yield* resource(function* (provide) {
|
|
@@ -202,7 +196,25 @@ export function* createAgentRuntime(hby, http, clock, options = {}) {
|
|
|
202
196
|
// Copies ride the credential topic; the refuser adds no mailbox topic of its own.
|
|
203
197
|
if (options.registryRoots === "refuse")
|
|
204
198
|
exc.addHandler(new RouteRefuser(RegistryRoot.Route));
|
|
205
|
-
const
|
|
199
|
+
const kelPublisher = new KelPublisher({
|
|
200
|
+
hby,
|
|
201
|
+
http,
|
|
202
|
+
clock,
|
|
203
|
+
changes: signaler ? signalerChangeSink(signaler) : undefined,
|
|
204
|
+
retry: options.kelPublishRetry,
|
|
205
|
+
});
|
|
206
|
+
const mailboxPoller = new MailboxPoller(hby, mailboxDirector, http, clock, {
|
|
207
|
+
onPolled: (pre, mailbox) => kelPublisher.prompt(pre, mailbox),
|
|
208
|
+
onUnauthorized: (pre, mailbox) => kelPublisher.repair(pre, mailbox),
|
|
209
|
+
timeouts: options.mailboxPolling,
|
|
210
|
+
});
|
|
211
|
+
// A mailbox role accepted from a reply (a group member's approved add, an OOBI) is acted on at the next tock.
|
|
212
|
+
revery.onEndRole = (cid, role) => {
|
|
213
|
+
if (role !== Roles.mailbox)
|
|
214
|
+
return;
|
|
215
|
+
kelPublisher.prompt(cid);
|
|
216
|
+
mailboxPoller.prompt(cid);
|
|
217
|
+
};
|
|
206
218
|
for (const topic of [
|
|
207
219
|
DELEGATE_MAILBOX_TOPIC,
|
|
208
220
|
CREDENTIAL_MAILBOX_TOPIC,
|
|
@@ -222,6 +234,36 @@ export function* createAgentRuntime(hby, http, clock, options = {}) {
|
|
|
222
234
|
}
|
|
223
235
|
});
|
|
224
236
|
const delegating = new Anchorer(hby, postman, querying, protocol, http, clock);
|
|
237
|
+
// Group receipting reaches TCP-only witnesses as `WitnessReceiptor` does, as KERIpy's Counselor does.
|
|
238
|
+
const groupReceiptor = new Receiptor(hby, protocol, http, clock);
|
|
239
|
+
const counselor = new Counselor(hby, {
|
|
240
|
+
receipt: (pre, options) => groupReceiptor.receipt(pre, { ...options, allowTcp: true }),
|
|
241
|
+
get: (pre, options) => groupReceiptor.get(pre, options),
|
|
242
|
+
}, clock, signaler ? signalerChangeSink(signaler) : undefined, { anchorer: delegating, querying }, {
|
|
243
|
+
rotated: (cue) => {
|
|
244
|
+
kelPublisher.rotated.push(cue);
|
|
245
|
+
owned?.rootReplicator?.prompt(cue.pre);
|
|
246
|
+
},
|
|
247
|
+
}, options.counselorReceiptRetry);
|
|
248
|
+
const owned = acdc && ipex
|
|
249
|
+
? composeOwners({
|
|
250
|
+
hby,
|
|
251
|
+
acdc,
|
|
252
|
+
exc,
|
|
253
|
+
protocol,
|
|
254
|
+
reactor,
|
|
255
|
+
postman,
|
|
256
|
+
receiptor: new Receiptor(hby, protocol, http, clock),
|
|
257
|
+
ipex,
|
|
258
|
+
clock,
|
|
259
|
+
registryRoot,
|
|
260
|
+
mux,
|
|
261
|
+
counselor,
|
|
262
|
+
retry: options.operationRetry,
|
|
263
|
+
queryResendMs: options.issuanceQueryResendMs,
|
|
264
|
+
changes: signaler ? signalerChangeSink(signaler) : undefined,
|
|
265
|
+
}, options.operationStores)
|
|
266
|
+
: null;
|
|
225
267
|
const oobiery = new Oobiery(hby, protocol, revery, http, cues);
|
|
226
268
|
oobiery.registerReplyRoutes(revery.rtr);
|
|
227
269
|
const authenticator = new Authenticator(hby, http);
|
|
@@ -237,7 +279,9 @@ export function* createAgentRuntime(hby, http, clock, options = {}) {
|
|
|
237
279
|
replies,
|
|
238
280
|
exc,
|
|
239
281
|
mux,
|
|
240
|
-
|
|
282
|
+
ipex,
|
|
283
|
+
operations: owned?.operations ?? null,
|
|
284
|
+
rootReplicator: owned?.rootReplicator ?? null,
|
|
241
285
|
oobiery,
|
|
242
286
|
authenticator,
|
|
243
287
|
mailboxDirector,
|
|
@@ -245,6 +289,12 @@ export function* createAgentRuntime(hby, http, clock, options = {}) {
|
|
|
245
289
|
mailboxPoller,
|
|
246
290
|
postman,
|
|
247
291
|
delegating,
|
|
292
|
+
counselor,
|
|
293
|
+
kelPublisher,
|
|
294
|
+
ownerPacing: options.ownerPacing ?? OWNER_PACING,
|
|
295
|
+
publisherPacing: options.publisherPacing ?? KEL_PUBLISHER_PACING,
|
|
296
|
+
protocolPacing: options.protocolPacing ?? PROTOCOL_PACING,
|
|
297
|
+
pollerPacing: options.pollerPacing ?? MAILBOX_POLLER_PACING,
|
|
248
298
|
querying,
|
|
249
299
|
replyStreams,
|
|
250
300
|
vdr,
|
|
@@ -262,7 +312,7 @@ export function* createAgentRuntime(hby, http, clock, options = {}) {
|
|
|
262
312
|
const failures = [];
|
|
263
313
|
const cleanup = [
|
|
264
314
|
function* () {
|
|
265
|
-
|
|
315
|
+
ipex?.close();
|
|
266
316
|
},
|
|
267
317
|
function* () {
|
|
268
318
|
yield* querying.close();
|
|
@@ -324,7 +374,7 @@ export function* createAgentRuntime(hby, http, clock, options = {}) {
|
|
|
324
374
|
function* openRuntimeNoter(hby) {
|
|
325
375
|
return yield* resource(function* (provide) {
|
|
326
376
|
const options = noterOptionsForHabery(hby);
|
|
327
|
-
const store = new Noter(options);
|
|
377
|
+
const store = new Noter(hby.opener.create(Noter.Family, options));
|
|
328
378
|
try {
|
|
329
379
|
if (!(yield* store.reopen(options)))
|
|
330
380
|
throw new DatabaseNotOpenError("Failed to open runtime Noter");
|
|
@@ -344,7 +394,7 @@ function* openRuntimeNoter(hby) {
|
|
|
344
394
|
function* openRuntimeMailboxer(hby) {
|
|
345
395
|
return yield* resource(function* (provide) {
|
|
346
396
|
const options = mailboxerOptionsForHabery(hby);
|
|
347
|
-
const store = new Mailboxer(options);
|
|
397
|
+
const store = new Mailboxer(hby.opener.create(Mailboxer.Family, options));
|
|
348
398
|
try {
|
|
349
399
|
if (!(yield* store.reopen(options)))
|
|
350
400
|
throw new DatabaseNotOpenError("Failed to open runtime Mailboxer");
|
|
@@ -380,13 +430,8 @@ function* openAcdcRegeryForHabery(hby) {
|
|
|
380
430
|
*/
|
|
381
431
|
function* openRegerForHabery(hby) {
|
|
382
432
|
return yield* resource(function* (provide) {
|
|
383
|
-
const
|
|
384
|
-
|
|
385
|
-
base: hby.base,
|
|
386
|
-
temp: hby.temp,
|
|
387
|
-
headDirPath: hby.headDirPath,
|
|
388
|
-
compat: hby.compat,
|
|
389
|
-
}));
|
|
433
|
+
const identity = { name: hby.name, base: hby.base, temp: hby.temp };
|
|
434
|
+
const store = yield* openOwner(new Reger(hby.opener.create(Reger.Family, identity)), "Reger", identity);
|
|
390
435
|
try {
|
|
391
436
|
yield* provide(store);
|
|
392
437
|
}
|
|
@@ -488,6 +533,7 @@ export function runtimePendingState(runtime) {
|
|
|
488
533
|
delegationPending: runtime.hby.db.dpwe.cnt() > 0
|
|
489
534
|
|| runtime.hby.db.dune.cnt() > 0
|
|
490
535
|
|| runtime.hby.db.dpub.cnt() > 0,
|
|
536
|
+
groupPending: runtime.hby.db.gpse.cnt() > 0 || runtime.hby.db.gdee.cnt() > 0 || runtime.hby.db.gpwe.cnt() > 0,
|
|
491
537
|
queriesPending: runtime.querying.hasPendingWork(),
|
|
492
538
|
deliveriesPending: runtime.querying.hasPendingDelivery || runtime.postman.hasPending,
|
|
493
539
|
};
|
|
@@ -509,6 +555,9 @@ export function runtimeHasPendingWork(runtime) {
|
|
|
509
555
|
}
|
|
510
556
|
/**
|
|
511
557
|
* Return true once OOBI acceptance and its ingress/query dependencies settle.
|
|
558
|
+
* This is a whole-runtime drain predicate: any unrelated pending cue, query,
|
|
559
|
+
* delegation or OOBI keeps it false. A command or request that asked for one
|
|
560
|
+
* OOBI must wait with `waitForOobi` (`app/bootstrap/oobi-resolving.ts`) instead.
|
|
512
561
|
* Background receipt delivery is not remote acknowledgement of OOBI acceptance;
|
|
513
562
|
* static OOBI servers may refuse unsolicited posts. Runtime close still joins I/O.
|
|
514
563
|
*
|
|
@@ -539,14 +588,10 @@ export function* runAgentRuntimeUntil(runtime, done, options) {
|
|
|
539
588
|
if (done())
|
|
540
589
|
return;
|
|
541
590
|
const { timeoutMs, ...workerOptions } = options;
|
|
542
|
-
const deadline = Date.now() + timeoutMs;
|
|
543
591
|
const worker = yield* spawn(() => runAgentRuntime(runtime, workerOptions));
|
|
544
592
|
try {
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
throw new Error(`Runtime did not converge within ${timeoutMs}ms.`);
|
|
548
|
-
yield* runtimeTurn();
|
|
549
|
-
}
|
|
593
|
+
if (!(yield* observeUntil(done, { timeoutMs })))
|
|
594
|
+
throw new Error(`Runtime did not converge within ${timeoutMs}ms.`);
|
|
550
595
|
}
|
|
551
596
|
finally {
|
|
552
597
|
yield* worker.halt();
|
|
@@ -575,52 +620,55 @@ export { runtimeTurn } from "./runtime-turn.js";
|
|
|
575
620
|
*/
|
|
576
621
|
export function* runAgentRuntime(runtime, options = {}) {
|
|
577
622
|
runtime.querying.configure({ hab: options.hab });
|
|
623
|
+
const pacing = runtime.protocolPacing;
|
|
578
624
|
const telReceiptor = runtime.vdr ? new Receiptor(runtime.hby, runtime.protocol, runtime.http, runtime.clock) : null;
|
|
579
625
|
const tasks = [
|
|
580
626
|
yield* spawn(() => runtime.querying.deliverDo()),
|
|
581
627
|
yield* spawn(() => runtime.postman.deliverDo()),
|
|
582
628
|
...(runtime.vdr && telReceiptor
|
|
583
629
|
? [
|
|
584
|
-
yield* spawn(
|
|
585
|
-
while (true) {
|
|
586
|
-
yield* publishPendingTel(runtime.hby, runtime.vdr.publication, telReceiptor, runtime.http, runtime.clock);
|
|
587
|
-
yield* runtimeTurn();
|
|
588
|
-
}
|
|
589
|
-
}),
|
|
630
|
+
yield* spawn(() => doEvery(runtime.clock, pacing.tockMs, () => publishPendingTel(runtime.hby, runtime.vdr.publication, telReceiptor, runtime.http, runtime.clock))),
|
|
590
631
|
]
|
|
591
632
|
: []),
|
|
592
633
|
yield* spawn(function* () {
|
|
593
|
-
yield* cueDo(runtime, options);
|
|
634
|
+
yield* cueDo(runtime, options, pacing);
|
|
594
635
|
}),
|
|
595
636
|
yield* spawn(function* () {
|
|
596
|
-
yield* runtime.protocol.escrowDo();
|
|
637
|
+
yield* runtime.protocol.escrowDo(runtime.clock);
|
|
597
638
|
}),
|
|
598
639
|
yield* spawn(function* () {
|
|
599
|
-
yield* runtime.oobiery.oobiDo();
|
|
640
|
+
yield* runtime.oobiery.oobiDo(runtime.clock, pacing);
|
|
600
641
|
}),
|
|
601
642
|
yield* spawn(function* () {
|
|
602
|
-
yield* runtime.authenticator.authDo();
|
|
643
|
+
yield* runtime.authenticator.authDo(runtime.clock, pacing);
|
|
603
644
|
}),
|
|
604
645
|
...(runtime.signaler
|
|
605
646
|
? [
|
|
606
647
|
yield* spawn(function* () {
|
|
607
|
-
yield* runtime.signaler.signalDo();
|
|
648
|
+
yield* runtime.signaler.signalDo(runtime.clock, pacing);
|
|
608
649
|
}),
|
|
609
650
|
]
|
|
610
651
|
: []),
|
|
611
652
|
...(options.pollMailbox ?? true
|
|
612
653
|
? [
|
|
613
654
|
yield* spawn(function* () {
|
|
614
|
-
yield* runtime.mailboxPoller.pollDo((batch) => settleMailboxPollBatch(runtime, batch));
|
|
655
|
+
yield* runtime.mailboxPoller.pollDo((batch) => settleMailboxPollBatch(runtime, batch), runtime.pollerPacing);
|
|
615
656
|
}),
|
|
616
657
|
]
|
|
617
658
|
: []),
|
|
618
|
-
yield* spawn(
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
659
|
+
yield* spawn(() => doEvery(runtime.clock, pacing.tockMs, () => runtime.delegating.processAllOnce())),
|
|
660
|
+
yield* spawn(() => doEvery(runtime.clock, pacing.tockMs, () => runtime.counselor.processOnce())),
|
|
661
|
+
yield* spawn(() => kelPublisherDo(runtime.kelPublisher, runtime.clock, runtime.publisherPacing)),
|
|
662
|
+
...(runtime.operations && runtime.ipex
|
|
663
|
+
? [
|
|
664
|
+
yield* spawn(() => operationOwnersDo({
|
|
665
|
+
operations: runtime.operations,
|
|
666
|
+
rootReplicator: runtime.rootReplicator,
|
|
667
|
+
ipex: runtime.ipex,
|
|
668
|
+
clock: runtime.clock,
|
|
669
|
+
}, runtime.ownerPacing)),
|
|
670
|
+
]
|
|
671
|
+
: []),
|
|
624
672
|
];
|
|
625
673
|
try {
|
|
626
674
|
return yield* suspend();
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { doEvery, PROTOCOL_PACING } from "./doing.js";
|
|
2
2
|
/**
|
|
3
3
|
* Use an explicitly selected or sole local habitat; never guess among hosted identities.
|
|
4
4
|
*
|
|
@@ -53,9 +53,6 @@ export function* processCuesOnce(runtime, { hab, queryCues } = {}) {
|
|
|
53
53
|
* @param runtime Borrowed composed runtime containing the actual cue consumers.
|
|
54
54
|
* @param options Explicit signer and optional command-owned query cue destination.
|
|
55
55
|
*/
|
|
56
|
-
export function* cueDo(runtime, options = {}) {
|
|
57
|
-
|
|
58
|
-
yield* processCuesOnce(runtime, options);
|
|
59
|
-
yield* runtimeTurn();
|
|
60
|
-
}
|
|
56
|
+
export function* cueDo(runtime, options = {}, pacing = PROTOCOL_PACING) {
|
|
57
|
+
return yield* doEvery(runtime.clock, pacing.tockMs, () => processCuesOnce(runtime, options));
|
|
61
58
|
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { DEFAULT_RETRY_POLICY, RetryBackoff } from "./retry-backoff.js";
|
|
2
|
+
/** Flatten an error and its `cause` chain to one line of text, so a reader sees the transport's own reason. */
|
|
3
|
+
export function describeFailure(error) {
|
|
4
|
+
const parts = [];
|
|
5
|
+
for (let e = error, depth = 0; e !== undefined && e !== null && depth < 8; depth++) {
|
|
6
|
+
parts.push(e instanceof Error ? (e.message || e.name) : String(e));
|
|
7
|
+
e = e instanceof Error ? e.cause : undefined;
|
|
8
|
+
}
|
|
9
|
+
return parts.join(" <- ");
|
|
10
|
+
}
|
|
11
|
+
/** The queue and its retry state for one live operation. */
|
|
12
|
+
export class DeliveryOutbox {
|
|
13
|
+
constructor(policy = DEFAULT_RETRY_POLICY) {
|
|
14
|
+
Object.defineProperty(this, "queue", {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
configurable: true,
|
|
17
|
+
writable: true,
|
|
18
|
+
value: []
|
|
19
|
+
});
|
|
20
|
+
Object.defineProperty(this, "backoff", {
|
|
21
|
+
enumerable: true,
|
|
22
|
+
configurable: true,
|
|
23
|
+
writable: true,
|
|
24
|
+
value: void 0
|
|
25
|
+
});
|
|
26
|
+
/** Destinations the transport reported for everything delivered so far. */
|
|
27
|
+
Object.defineProperty(this, "delivered", {
|
|
28
|
+
enumerable: true,
|
|
29
|
+
configurable: true,
|
|
30
|
+
writable: true,
|
|
31
|
+
value: []
|
|
32
|
+
});
|
|
33
|
+
this.backoff = new RetryBackoff(policy);
|
|
34
|
+
}
|
|
35
|
+
/** Messages still waiting. */
|
|
36
|
+
get length() {
|
|
37
|
+
return this.queue.length;
|
|
38
|
+
}
|
|
39
|
+
/** Consecutive delivery failures of the head message. */
|
|
40
|
+
get attempts() {
|
|
41
|
+
return this.backoff.attempts;
|
|
42
|
+
}
|
|
43
|
+
/** The latest delivery error, or null. */
|
|
44
|
+
get lastError() {
|
|
45
|
+
return this.backoff.last;
|
|
46
|
+
}
|
|
47
|
+
/** The retry state of the head message, or null while nothing is failing. */
|
|
48
|
+
get failure() {
|
|
49
|
+
return this.backoff.attempts === 0
|
|
50
|
+
? null
|
|
51
|
+
: {
|
|
52
|
+
attempts: this.backoff.attempts,
|
|
53
|
+
reason: describeFailure(this.backoff.last),
|
|
54
|
+
retryAt: new Date(this.backoff.next).toISOString(),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/** Queue a message behind the others. */
|
|
58
|
+
enqueue(message) {
|
|
59
|
+
this.queue.push(message);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Deliver the queued messages in order. A failure keeps the message and schedules a retry; it throws only when
|
|
63
|
+
* `boundMs` is given and failures have lasted that long.
|
|
64
|
+
*
|
|
65
|
+
* @returns True when the queue is empty, false while a message waits for its retry.
|
|
66
|
+
*/
|
|
67
|
+
*drain(transport, clock, boundMs) {
|
|
68
|
+
while (this.queue.length) {
|
|
69
|
+
const now = clock.now();
|
|
70
|
+
if (!this.backoff.due(now))
|
|
71
|
+
return false;
|
|
72
|
+
try {
|
|
73
|
+
const { src, dest, msg, topic } = this.queue[0];
|
|
74
|
+
this.delivered.push(...yield* transport.deliver({ src, dest, msg: typeof msg === "function" ? msg() : msg, topic }));
|
|
75
|
+
this.queue.shift();
|
|
76
|
+
this.backoff.succeeded();
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
this.backoff.failed(now, error);
|
|
80
|
+
if (boundMs !== undefined && this.backoff.exhausted(now, boundMs))
|
|
81
|
+
throw error;
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { waitOnClock } from "./workflow-contract.js";
|
|
2
|
+
/** Milliseconds between passes of the protocol-facing background loops: KERIpy's Doist cycle, as the escrow loop uses. */
|
|
3
|
+
export const PROTOCOL_TOCK_MS = 31.25;
|
|
4
|
+
/** Tocks between full sweeps of a loop that has one: 1920 tocks of 31.25 ms is a minute. */
|
|
5
|
+
export const PROTOCOL_SWEEP_TOCKS = 1920;
|
|
6
|
+
/** The production pacing of the protocol-facing background loops. */
|
|
7
|
+
export const PROTOCOL_PACING = Object.freeze({
|
|
8
|
+
tockMs: PROTOCOL_TOCK_MS,
|
|
9
|
+
sweepTocks: PROTOCOL_SWEEP_TOCKS,
|
|
10
|
+
});
|
|
11
|
+
/** Run `pass` forever: pass 0, wait `tockMs` on `clock`, pass 1, and so on. A thrown error ends the doer. */
|
|
12
|
+
export function* doEvery(clock, tockMs, pass) {
|
|
13
|
+
for (let tock = 0;; tock++) {
|
|
14
|
+
yield* pass(tock);
|
|
15
|
+
yield* waitOnClock(clock, tockMs);
|
|
16
|
+
}
|
|
17
|
+
}
|