keri-ts 2.1.0 → 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -2
- package/esm/keri/npm/src/acdc/authoring.js +195 -0
- package/esm/keri/npm/src/acdc/custody.js +187 -0
- package/esm/keri/npm/src/acdc/dhking.js +244 -32
- package/esm/keri/npm/src/acdc/regbasing.js +10 -0
- package/esm/keri/npm/src/acdc/salting.js +16 -1
- package/esm/keri/npm/src/acdc/scheming.js +93 -54
- package/esm/keri/npm/src/acdc/unblinding.js +118 -95
- 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 +4 -6
- 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 +68 -60
- 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/delivery/forwarding.js +16 -3
- package/esm/keri/npm/src/app/exchanges/exchanging.js +14 -4
- package/esm/keri/npm/src/app/identity/challenging.js +50 -0
- 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 +129 -6
- package/esm/keri/npm/src/app/identity/keeping.js +77 -4
- package/esm/keri/npm/src/app/ipex/group-ipex.js +341 -0
- package/esm/keri/npm/src/app/ipex/group-issuance.js +905 -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-grouping.js +50 -19
- package/esm/keri/npm/src/app/ipex/ipex-node-authentication.js +42 -18
- package/esm/keri/npm/src/app/ipex/issuance.js +896 -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 +408 -0
- package/esm/keri/npm/src/app/ipex/receive-issuance.js +86 -0
- package/esm/keri/npm/src/app/ipex/unblinding-workflow.js +667 -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 +10 -5
- package/esm/keri/npm/src/app/multisig/counseling.js +488 -0
- package/esm/keri/npm/src/app/multisig/group-members.js +18 -0
- package/esm/keri/npm/src/app/multisig/multisig-messaging.js +33 -6
- package/esm/keri/npm/src/app/multisig/multisig-workflows.js +98 -147
- 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/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 +9 -3
- package/esm/keri/npm/src/app/queries/query-workflows.js +98 -0
- package/esm/keri/npm/src/app/runtime/agent-runtime.js +106 -55
- 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/http-client.js +25 -6
- package/esm/keri/npm/src/app/witness/http-endpoints.js +4 -4
- package/esm/keri/npm/src/cli/common/event-completion.js +49 -0
- package/esm/keri/npm/src/cli/common/runtime-workers.js +23 -0
- package/esm/keri/npm/src/cli/credentials/ipex.js +164 -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.js +10 -13
- package/esm/keri/npm/src/cli/identity/challenge.js +8 -34
- package/esm/keri/npm/src/cli/identity/delegate.js +81 -258
- package/esm/keri/npm/src/cli/identity/incept.js +15 -32
- package/esm/keri/npm/src/cli/identity/interact.js +5 -17
- package/esm/keri/npm/src/cli/identity/rotate.js +8 -36
- package/esm/keri/npm/src/cli/index.js +3 -1
- package/esm/keri/npm/src/cli/messaging/group-join.js +83 -0
- package/esm/keri/npm/src/cli/messaging/group-wait.js +88 -0
- package/esm/keri/npm/src/cli/messaging/multisig.js +190 -285
- package/esm/keri/npm/src/cli/messaging/root-copy-lines.js +31 -0
- package/esm/keri/npm/src/core/kel/eventing.js +66 -10
- package/esm/keri/npm/src/core/mailbox/kram-policy.js +39 -6
- 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 +13 -0
- package/esm/keri/npm/src/db/basing.js +34 -2
- package/esm/keri/npm/src/db/core/indexeddb-persistence.js +221 -0
- package/esm/keri/npm/src/db/indexeddb.js +98 -0
- package/esm/keri/npm/src/db/keeping.js +11 -2
- package/esm/keri/npm/src/db/store-lock.js +150 -0
- 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.browser.js +2 -0
- package/esm/keri/npm/src/npm/index.browser.js +9 -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 +51 -4
- 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/tel-publication.js +16 -0
- package/esm/keri/npm/src/version.js +2 -2
- package/package.json +15 -2
- package/types/acdc/authoring.d.ts +54 -0
- package/types/acdc/authoring.d.ts.map +1 -0
- package/types/acdc/custody.d.ts +84 -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 +4 -0
- package/types/acdc/regbasing.d.ts.map +1 -1
- package/types/acdc/salting.d.ts +6 -1
- 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 +56 -44
- package/types/app/credentials/root-replicating.d.ts.map +1 -1
- 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/delivery/forwarding.d.ts +6 -0
- package/types/app/delivery/forwarding.d.ts.map +1 -1
- 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/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 +67 -2
- package/types/app/identity/habbing.d.ts.map +1 -1
- package/types/app/identity/keeping.d.ts +49 -3
- package/types/app/identity/keeping.d.ts.map +1 -1
- package/types/app/ipex/group-ipex.d.ts +254 -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-grouping.d.ts +18 -0
- package/types/app/ipex/ipex-grouping.d.ts.map +1 -1
- package/types/app/ipex/ipex-node-authentication.d.ts +9 -1
- package/types/app/ipex/ipex-node-authentication.d.ts.map +1 -1
- package/types/app/ipex/issuance.d.ts +445 -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 +300 -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 +257 -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 +3 -0
- 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 +11 -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-messaging.d.ts +23 -6
- package/types/app/multisig/multisig-messaging.d.ts.map +1 -1
- package/types/app/multisig/multisig-workflows.d.ts +91 -22
- 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/signaling.d.ts +3 -1
- package/types/app/notifications/signaling.d.ts.map +1 -1
- package/types/app/protocol/parsering.d.ts +13 -0
- package/types/app/protocol/parsering.d.ts.map +1 -1
- package/types/app/protocol/protocol-processing.d.ts +7 -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 +72 -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/http-client.d.ts.map +1 -1
- 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/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.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/interact.d.ts.map +1 -1
- package/types/cli/identity/rotate.d.ts.map +1 -1
- package/types/cli/index.d.ts +3 -1
- package/types/cli/index.d.ts.map +1 -1
- package/types/cli/messaging/group-join.d.ts +56 -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 +29 -5
- 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/core/cues.d.ts +11 -0
- package/types/core/cues.d.ts.map +1 -1
- package/types/core/kel/eventing.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/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 +8 -2
- package/types/db/basing.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/indexeddb.d.ts +37 -0
- package/types/db/indexeddb.d.ts.map +1 -0
- package/types/db/keeping.d.ts +5 -2
- package/types/db/keeping.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/npm/db-indexeddb.d.ts +4 -0
- package/types/npm/db-indexeddb.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 +42 -7
- package/types/runtime/index.d.ts.map +1 -1
- 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/cli/common/tel-completion.js +0 -24
- package/types/cli/common/tel-completion.d.ts +0 -8
- package/types/cli/common/tel-completion.d.ts.map +0 -1
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { type Operation } from "effection";
|
|
2
|
+
import type { Poster } from "../delivery/forwarding.js";
|
|
3
|
+
import { type GroupRoleResult } from "../identity/endpoint-roleing.js";
|
|
4
|
+
import type { Hab, Habery } from "../identity/habbing.js";
|
|
5
|
+
import type { ProtocolProcessor } from "../protocol/protocol-processing.js";
|
|
6
|
+
import type { Reactor } from "../protocol/reactor.js";
|
|
7
|
+
import { type RuntimeClock } from "../runtime/runtime-clock.js";
|
|
8
|
+
import type { WaitResult } from "../runtime/workflow-contract.js";
|
|
9
|
+
import type { HttpClient } from "../transport/http-client.js";
|
|
10
|
+
import type { KelPublisher } from "./kel-publisher.js";
|
|
11
|
+
import { type KelSubmission } from "./kel-submission.js";
|
|
12
|
+
/** Collaborators mailbox administration needs; nothing else is reachable from here. */
|
|
13
|
+
export interface MailboxAdminDeps {
|
|
14
|
+
/** Borrowed identities and accepted-state stores. */
|
|
15
|
+
readonly hby: Habery;
|
|
16
|
+
/** Borrowed HTTP implementation used for the provider admin request. */
|
|
17
|
+
readonly http: HttpClient;
|
|
18
|
+
/** Parser/dispatcher that accepts the signed reply into local state. */
|
|
19
|
+
readonly reactor: Reactor;
|
|
20
|
+
/** Escrow processing over the same database as `hby`. */
|
|
21
|
+
readonly protocol: ProtocolProcessor;
|
|
22
|
+
/**
|
|
23
|
+
* The runtime's KEL publisher, told once a mailbox role is accepted locally so the next tock derives what the
|
|
24
|
+
* mailbox is owed instead of waiting for the publisher's minute sweep.
|
|
25
|
+
*/
|
|
26
|
+
readonly publisher?: Pick<KelPublisher, "prompt">;
|
|
27
|
+
}
|
|
28
|
+
/** Accepted end-role state for one controller and mailbox. */
|
|
29
|
+
export interface MailboxStatus {
|
|
30
|
+
/** Mailbox AID the status describes. */
|
|
31
|
+
readonly mailbox: string;
|
|
32
|
+
/** `authorized` when the role is allowed, `revoked` when a cut is accepted, else `absent`. */
|
|
33
|
+
readonly state: "authorized" | "revoked" | "absent";
|
|
34
|
+
}
|
|
35
|
+
/** Finite provider response; non-success statuses are data for the caller. */
|
|
36
|
+
export interface MailboxAdminResponse {
|
|
37
|
+
readonly ok: boolean;
|
|
38
|
+
readonly status: number;
|
|
39
|
+
readonly body: string;
|
|
40
|
+
}
|
|
41
|
+
/** Derive the mailbox-admin URL relative to one hosted endpoint path. */
|
|
42
|
+
export declare function mailboxAdminUrl(url: string): string;
|
|
43
|
+
/**
|
|
44
|
+
* Preferred accepted URL of a mailbox endpoint.
|
|
45
|
+
*
|
|
46
|
+
* @throws ValidationError when no location reply has been accepted for it.
|
|
47
|
+
*/
|
|
48
|
+
export declare function requireMailboxEndpointUrl(hby: Habery, mailbox: string): string;
|
|
49
|
+
/** Read the accepted mailbox end-role state for `pre`; mutates nothing. */
|
|
50
|
+
export declare function mailboxStatus(hby: Habery, pre: string, mailbox: string): MailboxStatus;
|
|
51
|
+
/**
|
|
52
|
+
* Authorize `mailbox` for `hab`: sign (or reload) the mailbox end-role reply,
|
|
53
|
+
* post it to the provider and accept it locally.
|
|
54
|
+
*
|
|
55
|
+
* @throws ValidationError for a missing endpoint URL, a provider HTTP failure or a reply that local state does not accept.
|
|
56
|
+
*/
|
|
57
|
+
export declare function addMailbox(deps: MailboxAdminDeps, hab: Hab, mailbox: string): Operation<MailboxStatus>;
|
|
58
|
+
/**
|
|
59
|
+
* Revoke `mailbox` for `hab`: sign a mailbox end-role cut, post it to the
|
|
60
|
+
* provider and accept it locally. Single-signature controllers only.
|
|
61
|
+
*
|
|
62
|
+
* @throws ValidationError as for `addMailbox`.
|
|
63
|
+
*/
|
|
64
|
+
export declare function removeMailbox(deps: MailboxAdminDeps, hab: Hab, mailbox: string): Operation<MailboxStatus>;
|
|
65
|
+
/**
|
|
66
|
+
* Post one signed mailbox end-role reply to the provider, accept it locally and
|
|
67
|
+
* confirm the resulting state. Also the completion step of a group add whose
|
|
68
|
+
* role was already approved.
|
|
69
|
+
*
|
|
70
|
+
* @param allow True when the reply grants the role; false when it cuts it.
|
|
71
|
+
* @throws ValidationError when the reply is empty, the provider refuses it, or local state does not reflect it.
|
|
72
|
+
*/
|
|
73
|
+
export declare function completeMailboxAdmin(deps: MailboxAdminDeps, hab: Hab, mailbox: string, endpointUrl: string, rpy: Uint8Array, allow: boolean): Operation<MailboxStatus>;
|
|
74
|
+
/**
|
|
75
|
+
* Propose a group's mailbox authorization (`/end/role/add`) to the other members, who
|
|
76
|
+
* approve it with `approveGroupProposal`. Returns without waiting and sends nothing
|
|
77
|
+
* to the provider; {@link completeGroupMailbox} does that once the role is accepted.
|
|
78
|
+
* The caller runs the Poster's delivery for the duration.
|
|
79
|
+
*/
|
|
80
|
+
export declare function proposeGroupMailbox(hby: Habery, protocol: ProtocolProcessor, postman: Poster, group: Hab, mailbox: string): Operation<GroupRoleResult>;
|
|
81
|
+
/**
|
|
82
|
+
* Finish a group mailbox add whose end-role reply the members approved: post the
|
|
83
|
+
* accepted reply to the provider and confirm local state.
|
|
84
|
+
*
|
|
85
|
+
* @throws ValidationError while the group has not accepted the mailbox role, or as for `completeMailboxAdmin`.
|
|
86
|
+
*/
|
|
87
|
+
export declare function completeGroupMailbox(deps: MailboxAdminDeps, group: Hab, mailbox: string): Operation<MailboxStatus>;
|
|
88
|
+
/** Choices for `waitForMailboxState`. */
|
|
89
|
+
export interface MailboxWaitOptions {
|
|
90
|
+
/** State to wait for. */
|
|
91
|
+
want: "authorized" | "revoked";
|
|
92
|
+
/** Epoch milliseconds after which the wait returns `timed-out`. */
|
|
93
|
+
deadline: number;
|
|
94
|
+
/** Clock the deadline is read against; defaults to the system clock. */
|
|
95
|
+
clock?: RuntimeClock;
|
|
96
|
+
/** Elapsed milliseconds between reads. */
|
|
97
|
+
pollMs?: number;
|
|
98
|
+
}
|
|
99
|
+
/** Outcome of `waitForMailboxState`; a deadline is a value, not a throw. */
|
|
100
|
+
export type MailboxWaitResult = WaitResult<MailboxStatus, Record<never, never>>;
|
|
101
|
+
/**
|
|
102
|
+
* Observe `read` until it reports the wanted state or the deadline passes. It
|
|
103
|
+
* starts no workers: whoever owns the runtime makes the state change.
|
|
104
|
+
*/
|
|
105
|
+
export declare function waitForMailboxState(read: () => MailboxStatus, { want, deadline, clock, pollMs }: MailboxWaitOptions): Operation<MailboxWaitResult>;
|
|
106
|
+
/** Send finite administrative CESR bytes with `CESR-DESTINATION` selecting the hosted mailbox. */
|
|
107
|
+
export declare function postMailboxAdminCesr(http: HttpClient, url: string, mailbox: string, bytes: Uint8Array): Operation<MailboxAdminResponse>;
|
|
108
|
+
/**
|
|
109
|
+
* Send the legacy multipart form (`kel`, optional `delkel`, `rpy`). The platform
|
|
110
|
+
* encoder runs once so the generated boundary stays consistent with the body.
|
|
111
|
+
*/
|
|
112
|
+
export declare function postMailboxAdminMultipart(http: HttpClient, url: string, mailbox: string, submission: Pick<KelSubmission, "kel" | "delkel">, rpy: Uint8Array): Operation<MailboxAdminResponse>;
|
|
113
|
+
//# sourceMappingURL=mailbox-admin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mailbox-admin.d.ts","sourceRoot":"","sources":["../../../src/app/mailbox/mailbox-admin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/** Recipient mailbox polling: signed queries, awaited SSE intake and persisted cursor progression. */
|
|
2
2
|
import { type Operation } from "effection";
|
|
3
3
|
import type { Habery } from "../identity/habbing.js";
|
|
4
|
+
import { type DoerPacing } from "../runtime/doing.js";
|
|
4
5
|
import type { RuntimeClock } from "../runtime/runtime-clock.js";
|
|
5
6
|
import type { HttpClient } from "../transport/http-client.js";
|
|
6
7
|
import type { MailboxDirector } from "./mailbox-director.js";
|
|
@@ -12,7 +13,24 @@ interface MailboxPollerOptions {
|
|
|
12
13
|
* Optional millisecond header and poll-window overrides.
|
|
13
14
|
*/
|
|
14
15
|
timeouts?: Partial<MailboxPollingTimeoutPolicy>;
|
|
16
|
+
/** Told after each poll a mailbox served; the runtime re-arms a timed-out KEL publication with it. */
|
|
17
|
+
onPolled?: (pre: string, mailbox: string) => void;
|
|
18
|
+
/**
|
|
19
|
+
* Told when a mailbox answers 403 (it cannot authenticate the requester against the KEL it holds); the runtime
|
|
20
|
+
* has its KEL publisher post the KEL again. The worker then backs off.
|
|
21
|
+
*/
|
|
22
|
+
onUnauthorized?: (pre: string, mailbox: string) => void;
|
|
15
23
|
}
|
|
24
|
+
/** Tocks between the poller's full re-selection of workers: 160 tocks of 31.25 ms is five seconds. */
|
|
25
|
+
export declare const MAILBOX_POLLER_SWEEP_TOCKS = 160;
|
|
26
|
+
/**
|
|
27
|
+
* The production pacing of the mailbox poller. Between sweeps it re-selects workers only when the registered
|
|
28
|
+
* topics or the number of identifiers change, or for an identifier passed to {@link MailboxPoller.prompt} (the
|
|
29
|
+
* runtime prompts one when a mailbox end role is accepted). Endpoint changes other than an accepted mailbox end
|
|
30
|
+
* role (a rotated-in witness, a location accepted after its role, another process writing the same store) are
|
|
31
|
+
* therefore picked up within five seconds.
|
|
32
|
+
*/
|
|
33
|
+
export declare const MAILBOX_POLLER_PACING: Readonly<DoerPacing>;
|
|
16
34
|
/**
|
|
17
35
|
* Retrieve recipient messages from remote mailbox or witness endpoints over HTTP/SSE.
|
|
18
36
|
*
|
|
@@ -21,14 +39,22 @@ interface MailboxPollerOptions {
|
|
|
21
39
|
* A provider store in the same runtime is never scanned for local recipient input.
|
|
22
40
|
*/
|
|
23
41
|
export declare class MailboxPoller {
|
|
42
|
+
#private;
|
|
24
43
|
/**
|
|
25
44
|
* Default header acquisition (5 seconds) and absolute poll window (30 seconds).
|
|
26
45
|
*/
|
|
27
46
|
static readonly DefaultTimeoutPolicy: Readonly<MailboxPollingTimeoutPolicy>;
|
|
28
47
|
/**
|
|
29
|
-
*
|
|
48
|
+
* Default idle read window after the first complete event, in milliseconds.
|
|
30
49
|
*/
|
|
31
50
|
static readonly ReadIdleTimeoutMs = 500;
|
|
51
|
+
/**
|
|
52
|
+
* Wait after a poll that was not served (a refused status, a 403, no response headers, or an unreachable
|
|
53
|
+
* host), in milliseconds: it starts at `initialMs`, doubles with each consecutive failure up to `maxMs` and
|
|
54
|
+
* starts over after a served poll. Without a wait the worker would repeat the same signed request as fast as
|
|
55
|
+
* the loop turns.
|
|
56
|
+
*/
|
|
57
|
+
static readonly RefusalBackoff: Readonly<RefusalBackoffPolicy>;
|
|
32
58
|
/** Borrowed habitat collection used to select mailbox signers. */
|
|
33
59
|
readonly hby: Habery;
|
|
34
60
|
/** Shared provider topics and persisted remote cursors. */
|
|
@@ -39,6 +65,10 @@ export declare class MailboxPoller {
|
|
|
39
65
|
readonly http: HttpClient;
|
|
40
66
|
/** Borrowed clock for this owner's actual network deadlines. */
|
|
41
67
|
readonly clock: RuntimeClock;
|
|
68
|
+
/** Told after each poll a mailbox served. */
|
|
69
|
+
readonly onPolled: ((pre: string, mailbox: string) => void) | undefined;
|
|
70
|
+
/** Told when a mailbox answers 403. */
|
|
71
|
+
readonly onUnauthorized: ((pre: string, mailbox: string) => void) | undefined;
|
|
42
72
|
/**
|
|
43
73
|
* Bind polling inputs and dependencies without starting workers or acquiring stores.
|
|
44
74
|
*
|
|
@@ -64,13 +94,19 @@ export declare class MailboxPoller {
|
|
|
64
94
|
* @param onBatch Awaited endpoint-batch consumer; the durable event cursor advances only after it succeeds. Failure or cancellation leaves that event available for later retrieval.
|
|
65
95
|
* @throws Consumer/transport failures propagate; endpoint workers are joined on scope exit.
|
|
66
96
|
*/
|
|
67
|
-
pollDo(onBatch: (batch: MailboxPollBatch) => void | Operation<void>): Operation<never>;
|
|
97
|
+
pollDo(onBatch: (batch: MailboxPollBatch) => void | Operation<void>, pacing?: Readonly<DoerPacing>): Operation<never>;
|
|
98
|
+
/**
|
|
99
|
+
* Tell the poller `pre`'s mailbox roles or endpoints changed, so its workers are re-selected on the next tock
|
|
100
|
+
* instead of at the next sweep.
|
|
101
|
+
*/
|
|
102
|
+
prompt(pre: string): void;
|
|
68
103
|
/**
|
|
69
104
|
* Stream one remote response through its consumer before recording cursor progress.
|
|
70
105
|
*
|
|
71
106
|
* @param target Mailbox subject habitat plus the actual local signer (a member for groups).
|
|
72
107
|
* @param endpoint Selected remote endpoint AID and HTTP(S) URL.
|
|
73
108
|
* @param onBatch Awaited consumer; successful completion precedes durable cursor advancement.
|
|
109
|
+
* @returns How the poll ended; see {@link PollOutcome}.
|
|
74
110
|
*/
|
|
75
111
|
private pollRemoteEndpointOnce;
|
|
76
112
|
/**
|
|
@@ -85,7 +121,10 @@ export declare class MailboxPoller {
|
|
|
85
121
|
* Poll one remote endpoint continuously in the long-lived runtime shape.
|
|
86
122
|
*
|
|
87
123
|
* This keeps KERIpy's "one poller per endpoint" behavior while preserving
|
|
88
|
-
* `keri-ts`'s split between mailbox transport and runtime parser ownership.
|
|
124
|
+
* `keri-ts`'s split between mailbox transport and runtime parser ownership. Each poll ends in a
|
|
125
|
+
* {@link PollOutcome}; {@link nextPoll} maps it and the backoff state to the next action. A mailbox that is
|
|
126
|
+
* unreachable or refuses is retried on {@link MailboxPoller.RefusalBackoff}, never in a tight loop and never
|
|
127
|
+
* by failing the runtime. A 403 also prompts the KEL publisher, which owns posting the KEL.
|
|
89
128
|
*
|
|
90
129
|
* @param target Mailbox subject habitat plus the actual local signer (a member for groups).
|
|
91
130
|
* @param endpoint Selected remote endpoint AID and HTTP(S) URL.
|
|
@@ -95,6 +134,7 @@ export declare class MailboxPoller {
|
|
|
95
134
|
/**
|
|
96
135
|
* Select locally pollable subjects without substituting the group for its member signer.
|
|
97
136
|
*
|
|
137
|
+
* @param only When given, only these identifiers are considered.
|
|
98
138
|
* @returns Local subject/signing pairs; groups without an available local member are omitted.
|
|
99
139
|
*/
|
|
100
140
|
private remotePollTargets;
|
|
@@ -112,6 +152,17 @@ export interface MailboxPollingTimeoutPolicy {
|
|
|
112
152
|
requestOpenTimeoutMs: number;
|
|
113
153
|
/** Stop reading one mailbox SSE response after this long-poll window. */
|
|
114
154
|
maxPollDurationMs: number;
|
|
155
|
+
/** Stop reading one response this long after its last complete event. */
|
|
156
|
+
readIdleTimeoutMs: number;
|
|
157
|
+
/** First wait after a poll that was not served; it doubles per consecutive failure. */
|
|
158
|
+
refusalInitialMs: number;
|
|
159
|
+
/** Longest wait after a poll that was not served. */
|
|
160
|
+
refusalMaxMs: number;
|
|
161
|
+
}
|
|
162
|
+
/** Waits after polls that were not served, in milliseconds. */
|
|
163
|
+
export interface RefusalBackoffPolicy {
|
|
164
|
+
initialMs: number;
|
|
165
|
+
maxMs: number;
|
|
115
166
|
}
|
|
116
167
|
/** One remote mailbox batch, consumed before its provider cursor advances. */
|
|
117
168
|
export interface MailboxPollBatch {
|
|
@@ -145,5 +196,43 @@ export interface MailboxFetchTimeoutPolicy {
|
|
|
145
196
|
*/
|
|
146
197
|
readIdleTimeoutMs: number;
|
|
147
198
|
}
|
|
199
|
+
/**
|
|
200
|
+
* How one poll ended. `served` is the only outcome that resets the backoff; every other one is a reason to wait.
|
|
201
|
+
* - `served`: the mailbox answered 2xx and its events were consumed (possibly none).
|
|
202
|
+
* - `no-response`: no response headers within the open window.
|
|
203
|
+
* - `unreachable`: the connection failed before or while the response was read (refused, DNS, reset).
|
|
204
|
+
* - `unauthorized`: 403, the mailbox cannot authenticate the requester against the KEL it holds.
|
|
205
|
+
* - `refused`: any other non-success status.
|
|
206
|
+
*/
|
|
207
|
+
export type PollOutcome = "served" | "no-response" | "unreachable" | "unauthorized" | "refused";
|
|
208
|
+
/** What the worker carries between polls: the current backoff, zero after a served poll. */
|
|
209
|
+
export interface PollState {
|
|
210
|
+
readonly backoffMs: number;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* What the worker does next: poll again after a scheduler turn, wait, or (for a 403) prompt the publisher and
|
|
214
|
+
* then wait.
|
|
215
|
+
*/
|
|
216
|
+
export type PollAction = {
|
|
217
|
+
kind: "poll";
|
|
218
|
+
} | {
|
|
219
|
+
kind: "wait";
|
|
220
|
+
ms: number;
|
|
221
|
+
} | {
|
|
222
|
+
kind: "prompt-publisher";
|
|
223
|
+
ms: number;
|
|
224
|
+
};
|
|
225
|
+
/** Classify a non-success status: 403 is the mailbox not recognising the requester; anything else is a refusal. */
|
|
226
|
+
export declare function classifyPollRefusal(status: number): "unauthorized" | "refused";
|
|
227
|
+
/** Double the backoff (or start it) and wait that long. */
|
|
228
|
+
export declare function backOff(state: PollState, backoff?: Readonly<RefusalBackoffPolicy>): {
|
|
229
|
+
state: PollState;
|
|
230
|
+
action: PollAction;
|
|
231
|
+
};
|
|
232
|
+
/** The transition: where a poll's outcome leaves the worker, and what it does about it. */
|
|
233
|
+
export declare function nextPoll(state: PollState, outcome: PollOutcome, backoff?: Readonly<RefusalBackoffPolicy>): {
|
|
234
|
+
state: PollState;
|
|
235
|
+
action: PollAction;
|
|
236
|
+
};
|
|
148
237
|
export {};
|
|
149
238
|
//# sourceMappingURL=mailbox-poller.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mailbox-poller.d.ts","sourceRoot":"","sources":["../../../src/app/mailbox/mailbox-poller.ts"],"names":[],"mappings":"AAAA,sGAAsG;AACtG,OAAO,EAAQ,KAAK,SAAS,EAA4B,MAAM,WAAW,CAAC;AAC3E,OAAO,KAAK,EAAO,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"mailbox-poller.d.ts","sourceRoot":"","sources":["../../../src/app/mailbox/mailbox-poller.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
* layer serves both root and non-root mailbox/OOBI paths
|
|
17
17
|
*/
|
|
18
18
|
import type { Operation } from "effection";
|
|
19
|
+
import type { Baser } from "../../db/basing.js";
|
|
19
20
|
import { Mailboxer, type MailboxerOptions } from "../../db/mailbox/mailboxing.js";
|
|
20
21
|
import type { Hab, Habery } from "../identity/habbing.js";
|
|
21
22
|
/**
|
|
@@ -78,6 +79,8 @@ export declare function mailboxQueryTopics(hby: Habery, pre: string, witness: st
|
|
|
78
79
|
* @param idx Last successfully consumed provider ordinal.
|
|
79
80
|
*/
|
|
80
81
|
export declare function updateMailboxRemoteCursor(hby: Habery, pre: string, witness: string, topic: string, idx: number): void;
|
|
82
|
+
/** AIDs `pre` currently has an authorized mailbox role with, in stored order. */
|
|
83
|
+
export declare function authorizedMailboxes(db: Baser, pre: string): string[];
|
|
81
84
|
/**
|
|
82
85
|
* Enumerate authorized mailbox providers and the subject's current KEL witnesses.
|
|
83
86
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mailboxing.d.ts","sourceRoot":"","sources":["../../../src/app/mailbox/mailboxing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"mailboxing.d.ts","sourceRoot":"","sources":["../../../src/app/mailbox/mailboxing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { type Operation } from "effection";
|
|
2
|
+
import type { RotatedCue } from "../../core/cues.js";
|
|
3
|
+
import { type Anchorer, type AnchorQueryDeps } from "../identity/delegating.js";
|
|
4
|
+
import type { Hab, Habery } from "../identity/habbing.js";
|
|
5
|
+
import type { RetryPolicy } from "../runtime/retry-backoff.js";
|
|
6
|
+
import type { RuntimeClock } from "../runtime/runtime-clock.js";
|
|
7
|
+
import { type ChangeSink, type WaitResult } from "../runtime/workflow-contract.js";
|
|
8
|
+
import type { WitnessAuthMap } from "../witness/receipting.js";
|
|
9
|
+
/** Exact group event a Counselor tracks. */
|
|
10
|
+
export interface GroupEventRef {
|
|
11
|
+
pre: string;
|
|
12
|
+
sn: number;
|
|
13
|
+
said: string;
|
|
14
|
+
}
|
|
15
|
+
/** Counseling stage, in processing order. */
|
|
16
|
+
export type CounselStage = "signatures" | "delegation" | "witnesses";
|
|
17
|
+
/** Why a pending event cannot progress without outside help. */
|
|
18
|
+
export type CounselBlock = {
|
|
19
|
+
kind: "witnessAuth";
|
|
20
|
+
witnesses: string[];
|
|
21
|
+
} | {
|
|
22
|
+
kind: "witness";
|
|
23
|
+
reason: string;
|
|
24
|
+
} | {
|
|
25
|
+
kind: "delegatorUnknown";
|
|
26
|
+
delpre: string;
|
|
27
|
+
}
|
|
28
|
+
/** No Anchorer was supplied, so delegated events cannot progress. */
|
|
29
|
+
| {
|
|
30
|
+
kind: "notSupported";
|
|
31
|
+
feature: "delegation";
|
|
32
|
+
};
|
|
33
|
+
/** Status of one group event; a pure read of durable rows plus retry state. */
|
|
34
|
+
export type GroupEventStatus = {
|
|
35
|
+
state: "pending";
|
|
36
|
+
stage: CounselStage;
|
|
37
|
+
/** Whether this member is the event's witnesser; null before the event is accepted locally. */
|
|
38
|
+
elected: boolean | null;
|
|
39
|
+
/** Verified witness receipts held versus the event's own witness threshold. */
|
|
40
|
+
receipts: {
|
|
41
|
+
have: number;
|
|
42
|
+
need: number;
|
|
43
|
+
};
|
|
44
|
+
blocked?: CounselBlock;
|
|
45
|
+
} | {
|
|
46
|
+
state: "complete";
|
|
47
|
+
} | {
|
|
48
|
+
state: "superseded";
|
|
49
|
+
accepted: string;
|
|
50
|
+
} | {
|
|
51
|
+
state: "unknown";
|
|
52
|
+
};
|
|
53
|
+
/** Per-event inputs; kept in memory only. */
|
|
54
|
+
export interface CounselInputs {
|
|
55
|
+
/** Witness Authorization values for this event; a map replaces any earlier one. */
|
|
56
|
+
auths?: WitnessAuthMap;
|
|
57
|
+
/**
|
|
58
|
+
* How long a non-elected member only fetches receipts before it submits too.
|
|
59
|
+
* Zero makes every member submit. Default {@link DEFAULT_FALLBACK_AFTER_MS}.
|
|
60
|
+
*/
|
|
61
|
+
fallbackAfterMs?: number;
|
|
62
|
+
/**
|
|
63
|
+
* Local hab that sends the delegation request and queries the delegator's
|
|
64
|
+
* witness. Optional: the local group member sends when none is supplied, as
|
|
65
|
+
* in KERIpy. An explicit proxy wins. Memory only.
|
|
66
|
+
*/
|
|
67
|
+
proxy?: Hab;
|
|
68
|
+
}
|
|
69
|
+
/** Delegation collaborators; both are borrowed and run by the host. */
|
|
70
|
+
export interface GroupDelegation {
|
|
71
|
+
/** Existing delegation workflow owner; the Counselor only begins and observes it. */
|
|
72
|
+
anchorer: Pick<Anchorer, "begin" | "complete">;
|
|
73
|
+
/** Query producer for delegator-anchor discovery by members that do not publish. */
|
|
74
|
+
querying: AnchorQueryDeps["querying"];
|
|
75
|
+
}
|
|
76
|
+
/** Receipting collaborator; `Receiptor` fits. */
|
|
77
|
+
export interface GroupReceipting {
|
|
78
|
+
receipt(pre: string, options: {
|
|
79
|
+
sn: number;
|
|
80
|
+
auths: WitnessAuthMap;
|
|
81
|
+
}): Operation<unknown>;
|
|
82
|
+
get(pre: string, options: {
|
|
83
|
+
sn: number;
|
|
84
|
+
said: string;
|
|
85
|
+
}): Operation<boolean>;
|
|
86
|
+
}
|
|
87
|
+
/** Told when a group rotation completes, so its mailboxes are told; the runtime's `kelPublisher.rotated` fits. */
|
|
88
|
+
export interface GroupMailboxes {
|
|
89
|
+
rotated(cue: RotatedCue): void;
|
|
90
|
+
}
|
|
91
|
+
/** Grace before a non-elected member submits receipts itself. */
|
|
92
|
+
export declare const DEFAULT_FALLBACK_AFTER_MS = 60000;
|
|
93
|
+
/** First and longest wait between receipt attempts for one event. */
|
|
94
|
+
export declare const RECEIPT_BACKOFF_MS: {
|
|
95
|
+
readonly first: 1000;
|
|
96
|
+
readonly max: 30000;
|
|
97
|
+
};
|
|
98
|
+
/** The production receipt retry delays as a policy; only `baseMs` and `maxMs` apply, the Counselor never gives up. */
|
|
99
|
+
export declare const DEFAULT_RECEIPT_RETRY: Readonly<RetryPolicy>;
|
|
100
|
+
/** Counsels group events through signature and witness stages. */
|
|
101
|
+
export declare class Counselor {
|
|
102
|
+
private readonly hby;
|
|
103
|
+
private readonly receipting;
|
|
104
|
+
private readonly clock;
|
|
105
|
+
private readonly changes?;
|
|
106
|
+
private readonly delegation?;
|
|
107
|
+
private readonly mailboxes?;
|
|
108
|
+
private readonly receiptRetry;
|
|
109
|
+
private readonly runs;
|
|
110
|
+
/**
|
|
111
|
+
* @param hby Borrowed identities and stores; the Counselor opens nothing.
|
|
112
|
+
* @param receipting Submits or fetches witness receipts for accepted events.
|
|
113
|
+
* @param clock Time source for fallback and retry; only `now` is used.
|
|
114
|
+
* @param changes Optional sink told `{kind:"group", id:"<pre>:<sn>"}` after commits.
|
|
115
|
+
* @param delegation Anchorer and query port for delegated events; omit for non-delegated hosts.
|
|
116
|
+
* @param mailboxes Told when one of the group's rotations completes; the member runtime's publisher then tells
|
|
117
|
+
* the group's mailboxes the new key state, and several members doing so is harmless.
|
|
118
|
+
*/
|
|
119
|
+
constructor(hby: Habery, receipting: GroupReceipting, clock: Pick<RuntimeClock, "now">, changes?: ChangeSink | undefined, delegation?: GroupDelegation | undefined, mailboxes?: GroupMailboxes | undefined, receiptRetry?: Readonly<RetryPolicy>);
|
|
120
|
+
private readonly anchorQuery;
|
|
121
|
+
/**
|
|
122
|
+
* Begin counseling an event. Idempotent and safe before local acceptance.
|
|
123
|
+
*
|
|
124
|
+
* @returns True when a new `gpse` row was added; false when the event is
|
|
125
|
+
* already counseled or complete, or another SAID holds that sn.
|
|
126
|
+
* @throws ValidationError when `pre` is not a local group or the ref is malformed.
|
|
127
|
+
*/
|
|
128
|
+
start(event: GroupEventRef, inputs?: CounselInputs): boolean;
|
|
129
|
+
/**
|
|
130
|
+
* Replace in-memory inputs of a counseled event, for example witness auths or
|
|
131
|
+
* a proxy after a restart, and re-arm any attempt waiting out its backoff.
|
|
132
|
+
* Ignored for an event that is already complete or superseded.
|
|
133
|
+
*/
|
|
134
|
+
supply(event: GroupEventRef, inputs: CounselInputs): void;
|
|
135
|
+
/** Pure read of one event's state. */
|
|
136
|
+
status(event: GroupEventRef): GroupEventStatus;
|
|
137
|
+
/** Why a receipt attempt failed: missing auths for unreceipted witnesses, else the witness's own reason. */
|
|
138
|
+
private receiptBlock;
|
|
139
|
+
/** What keeps a delegated event in `gdee`, if anything the caller can fix. */
|
|
140
|
+
private delegationBlock;
|
|
141
|
+
private fallbackElapsed;
|
|
142
|
+
/** True when the event is complete, or another SAID holds its sn. */
|
|
143
|
+
private settled;
|
|
144
|
+
/** Events still counseled for `pre`, or for every prefix, in stage order. */
|
|
145
|
+
pending(pre?: string): Array<GroupEventRef & {
|
|
146
|
+
stage: CounselStage;
|
|
147
|
+
}>;
|
|
148
|
+
/** True once the exact event completed; drops its in-memory inputs. */
|
|
149
|
+
complete(event: GroupEventRef): boolean;
|
|
150
|
+
/**
|
|
151
|
+
* Stop counseling `pre`: remove its escrow rows, completion markers and
|
|
152
|
+
* in-memory inputs. Accepted KEL state is untouched.
|
|
153
|
+
*/
|
|
154
|
+
abandon(pre: string): void;
|
|
155
|
+
/** One pass over all stages, as KERIpy `processEscrows`. */
|
|
156
|
+
processOnce(): Operation<void>;
|
|
157
|
+
/** Move events accepted with their escrowed SAID on to delegation or witnesses. */
|
|
158
|
+
private processSignatures;
|
|
159
|
+
/**
|
|
160
|
+
* Delegated events: the publishing member drives the Anchorer, any other member
|
|
161
|
+
* watches for the delegator's anchor. Both wait for the delegator's KEL.
|
|
162
|
+
*/
|
|
163
|
+
private processDelegation;
|
|
164
|
+
/** Publishing duty: begin the Anchorer, keep receipts coming, and record completion. */
|
|
165
|
+
private publishDelegation;
|
|
166
|
+
/** Non-publishing duty: find the delegator's sealing event, pin it, and move on to receipts. */
|
|
167
|
+
private watchAnchor;
|
|
168
|
+
/** Record completion of a counseled event and drop its row from `table`. */
|
|
169
|
+
private finish;
|
|
170
|
+
/** Complete events whose own witness threshold is met; otherwise submit or fetch receipts. */
|
|
171
|
+
private processWitnesses;
|
|
172
|
+
/** One backed-off receipt attempt: submit when forced, elected or past the grace, else fetch. */
|
|
173
|
+
private pursueReceipts;
|
|
174
|
+
/** Remove a stale tuple when another SAID holds its sn; true when removed. */
|
|
175
|
+
private dropIfSuperseded;
|
|
176
|
+
/** Digest of the completed event at `(pre, sn)`, under either number width KERIpy writes. */
|
|
177
|
+
private completed;
|
|
178
|
+
/** Stage whose escrow holds exactly this event, if any. */
|
|
179
|
+
private stageOf;
|
|
180
|
+
private refOf;
|
|
181
|
+
private runKey;
|
|
182
|
+
/** Get or create the in-memory run for an event, applying supplied inputs. */
|
|
183
|
+
private retain;
|
|
184
|
+
}
|
|
185
|
+
/** Outcome of {@link waitForGroupEvent}; the status is the one read at return. */
|
|
186
|
+
export type GroupEventWait = WaitResult<GroupEventStatus>;
|
|
187
|
+
/**
|
|
188
|
+
* Observe `event` until it is no longer pending or the deadline passes. Starts
|
|
189
|
+
* no worker and makes no receipt call; progress comes from `processOnce`
|
|
190
|
+
* running elsewhere.
|
|
191
|
+
*/
|
|
192
|
+
export declare function waitForGroupEvent(counselor: Pick<Counselor, "status">, event: GroupEventRef, { timeoutMs, clock }: {
|
|
193
|
+
timeoutMs: number;
|
|
194
|
+
clock?: Pick<RuntimeClock, "now">;
|
|
195
|
+
}): Operation<GroupEventWait>;
|
|
196
|
+
//# sourceMappingURL=counseling.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"counseling.d.ts","sourceRoot":"","sources":["../../../src/app/multisig/counseling.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,6 +36,17 @@ export declare function groupWitnesserSelection(db: Baser, group: string, { sn,
|
|
|
36
36
|
* idempotent duties only; frozen operations recheck their earlier choice instead.
|
|
37
37
|
*/
|
|
38
38
|
export declare function groupElectedMember(hby: Habery, group: string, coordinator: GroupCoordinator): string | null;
|
|
39
|
+
/**
|
|
40
|
+
* True when the local member is the witnesser for the exact accepted group event
|
|
41
|
+
* `coordinator`, as KERIpy `_groupWitnesser`: the member's latest contribution to
|
|
42
|
+
* the governing establishment's keys holds the lowest verified signing index.
|
|
43
|
+
*
|
|
44
|
+
* Unlike `groupElectedMember` this does not require that member to be a current
|
|
45
|
+
* signing member, so a historical event keeps its witnesser after a later
|
|
46
|
+
* rotation. Like it, the answer depends on locally stored signatures and suits
|
|
47
|
+
* idempotent duties only.
|
|
48
|
+
*/
|
|
49
|
+
export declare function groupWitnesser(hby: Habery, group: string, coordinator: GroupCoordinator): boolean;
|
|
39
50
|
/** Return current group signing member AIDs in signing-index order. */
|
|
40
51
|
export declare function groupSigningMembers(hby: Habery, groupPre: string): string[];
|
|
41
52
|
/** Return the first locally available habitat from `members`, if any. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"group-members.d.ts","sourceRoot":"","sources":["../../../src/app/multisig/group-members.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAE1D,+DAA+D;AAC/D,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAE9D;AAED,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,CAOnE;AAED,4FAA4F;AAC5F,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,KAAK,EACT,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,SAAS,MAAM,EAAE,GACzB;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAe7D;AAED,gFAAgF;AAChF,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,KAAK,EACT,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,gBAAgB,GAC7B;IAAE,aAAa,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAkBxE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAM3G;AAED,uEAAuE;AACvE,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAO3E;AAED,yEAAyE;AACzE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,GAAG,GAAG,IAAI,CAQxF;AAED,6EAA6E;AAC7E,wBAAgB,aAAa,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAElE;AAED,wGAAwG;AACxG,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAMjF;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,KAAK,EACT,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,UAAU,EACpB,MAAM,EAAE,SAAS,gBAAgB,EAAE,GAClC,gBAAgB,GAAG,IAAI,CAczB;AAED,sFAAsF;AACtF,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,KAAK,EACT,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,GAC3B,oBAAoB,GAAG,IAAI,CAqC7B"}
|
|
1
|
+
{"version":3,"file":"group-members.d.ts","sourceRoot":"","sources":["../../../src/app/multisig/group-members.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAE1D,+DAA+D;AAC/D,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAE9D;AAED,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,CAOnE;AAED,4FAA4F;AAC5F,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,KAAK,EACT,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,SAAS,MAAM,EAAE,GACzB;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAe7D;AAED,gFAAgF;AAChF,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,KAAK,EACT,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,gBAAgB,GAC7B;IAAE,aAAa,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAkBxE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAM3G;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,GAAG,OAAO,CAMjG;AAED,uEAAuE;AACvE,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAO3E;AAED,yEAAyE;AACzE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,GAAG,GAAG,IAAI,CAQxF;AAED,6EAA6E;AAC7E,wBAAgB,aAAa,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAElE;AAED,wGAAwG;AACxG,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAMjF;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,KAAK,EACT,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,UAAU,EACpB,MAAM,EAAE,SAAS,gBAAgB,EAAE,GAClC,gBAAgB,GAAG,IAAI,CAczB;AAED,sFAAsF;AACtF,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,KAAK,EACT,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,GAC3B,oBAAoB,GAAG,IAAI,CAqC7B"}
|