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,93 @@
|
|
|
1
|
+
import { ValidationError } from "../../core/errors.js";
|
|
2
|
+
import { acceptIpexExchange, ipexExchangeStatus, requireIpexPrior, requireIpexSender, } from "./ipex-conversation.js";
|
|
3
|
+
import { ipexCredentialAdmit, ipexCredentialGrant, processCredentialPresentationArtifacts, storedGrantArtifacts, validateAdmitGrant, } from "./ipex-credentialing.js";
|
|
4
|
+
import { requireStoredExchange, sendCredentialStream } from "./ipex-grouping.js";
|
|
5
|
+
/**
|
|
6
|
+
* Grant a stored single-signature credential: validate the optional agree,
|
|
7
|
+
* assemble the embedded artifacts and support messages, sign, accept locally
|
|
8
|
+
* and deliver support then grant as one stream. Granting a credential again
|
|
9
|
+
* without an agree authors another grant; an agree answers once.
|
|
10
|
+
*
|
|
11
|
+
* @throws ValidationError for a non-local sender, a refused prior, missing local
|
|
12
|
+
* credential evidence or a grant local state does not accept.
|
|
13
|
+
*/
|
|
14
|
+
export function* sendIpexGrant(deps, sender, { recipient, credential, message = "", agree, gvrsn, deliver = true }) {
|
|
15
|
+
requireIpexSender(deps.hby, sender);
|
|
16
|
+
if (agree)
|
|
17
|
+
requireIpexPrior(deps.hby, sender.pre, recipient, agree, "grant");
|
|
18
|
+
const built = ipexCredentialGrant({
|
|
19
|
+
hby: deps.hby,
|
|
20
|
+
hab: sender,
|
|
21
|
+
reger: deps.reger,
|
|
22
|
+
recipient,
|
|
23
|
+
credentialSaid: credential,
|
|
24
|
+
message,
|
|
25
|
+
options: { agree: agree ? deps.hby.db.exns.get([agree]) : null, gvrsn },
|
|
26
|
+
});
|
|
27
|
+
const genus = built.grant.gvrsn ?? gvrsn ?? built.grant.pvrsn;
|
|
28
|
+
yield* acceptIpexExchange(deps, built.grant, built.wire, genus, "Local IPEX grant was not accepted.", agree);
|
|
29
|
+
const deliveries = deliver
|
|
30
|
+
? yield* sendCredentialStream(deps.postman, sender, recipient, [...built.support, built.wire])
|
|
31
|
+
: [];
|
|
32
|
+
return { grant: built.grant, credential, support: built.support, wire: built.wire, deliveries };
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Validate a stored grant for admission by `holder` without signing: it is
|
|
36
|
+
* accepted, addressed to the holder, carries a credential and has no accepted
|
|
37
|
+
* response yet. Saving is not required here.
|
|
38
|
+
*
|
|
39
|
+
* @throws ValidationError when the grant is not stored, was already answered or is not addressed to `holder`.
|
|
40
|
+
*/
|
|
41
|
+
export function requireAdmittableGrant(deps, holder, grantSaid) {
|
|
42
|
+
const grant = requireStoredExchange(deps.hby, grantSaid);
|
|
43
|
+
const sender = grant.ked?.i;
|
|
44
|
+
if (typeof sender !== "string" || sender.length === 0) {
|
|
45
|
+
throw new ValidationError("Grant is missing sender AID.");
|
|
46
|
+
}
|
|
47
|
+
requireIpexPrior(deps.hby, holder.pre, sender, grant.said, "admit");
|
|
48
|
+
const credential = validateAdmitGrant(grant, holder.pre, deps.reger, false);
|
|
49
|
+
return { grant, recipient: sender, credential };
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* The holder's consent to a grant: validate the stored grant, sign an admit,
|
|
53
|
+
* accept it locally and deliver it to the grant's sender. A grant that already
|
|
54
|
+
* has an accepted response is refused, so a second admit never re-signs.
|
|
55
|
+
*
|
|
56
|
+
* @throws ValidationError as for {@link requireAdmittableGrant}, for a credential
|
|
57
|
+
* that is not saved when `requireSaved` holds, or for an admit local state does not accept.
|
|
58
|
+
*/
|
|
59
|
+
export function* sendIpexAdmit(deps, holder, grantSaid, { message = "", gvrsn, requireSaved = true, deliver = true } = {}) {
|
|
60
|
+
requireIpexSender(deps.hby, holder);
|
|
61
|
+
const { grant, recipient, credential } = requireAdmittableGrant(deps, holder, grantSaid);
|
|
62
|
+
const saved = !!deps.reger.saved.get([credential]);
|
|
63
|
+
const prepared = ipexCredentialAdmit({
|
|
64
|
+
hab: holder,
|
|
65
|
+
reger: deps.reger,
|
|
66
|
+
grant,
|
|
67
|
+
message,
|
|
68
|
+
options: { requireSaved, gvrsn },
|
|
69
|
+
});
|
|
70
|
+
const genus = prepared.admit.gvrsn ?? gvrsn ?? prepared.admit.pvrsn;
|
|
71
|
+
yield* acceptIpexExchange(deps, prepared.admit, prepared.wire, genus, "Local IPEX admit was not accepted.", grant.said);
|
|
72
|
+
const deliveries = deliver ? yield* sendCredentialStream(deps.postman, holder, recipient, [prepared.wire]) : [];
|
|
73
|
+
return { admit: prepared.admit, grant, credential, saved, wire: prepared.wire, deliveries };
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Import a stored grant's authenticated artifacts once, so the wallet can save
|
|
77
|
+
* its credential as evidence resolves. Idempotent: a credential that is already
|
|
78
|
+
* saved is not replayed. Signs nothing and does not wait; observe the outcome
|
|
79
|
+
* with `waitForIpexExchange(..., { until: "credential-saved" })` while the
|
|
80
|
+
* host's workers run.
|
|
81
|
+
*
|
|
82
|
+
* @param holder AID the grant must be addressed to.
|
|
83
|
+
* @returns The grant's status after the import.
|
|
84
|
+
* @throws ValidationError when the grant is not stored or not addressed to `holder`.
|
|
85
|
+
*/
|
|
86
|
+
export function* settleGrantCredential(deps, holder, grantSaid, { gvrsn } = {}) {
|
|
87
|
+
const grant = requireStoredExchange(deps.hby, grantSaid);
|
|
88
|
+
const credential = validateAdmitGrant(grant, holder, deps.reger, false);
|
|
89
|
+
if (!deps.reger.saved.get([credential])) {
|
|
90
|
+
yield* processCredentialPresentationArtifacts(deps.protocol, storedGrantArtifacts(deps.hby, grant, gvrsn));
|
|
91
|
+
}
|
|
92
|
+
return ipexExchangeStatus(deps, grantSaid);
|
|
93
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** Borrowed IPEX frame DAGs, negotiated disclosure paths and traversal policy. */
|
|
2
2
|
import { Compactor, makePather, SerderACDC } from "cesr-ts";
|
|
3
|
-
import {
|
|
3
|
+
import { walkAcdcGraph } from "../../acdc/chaining.js";
|
|
4
4
|
const nodeIlks = new Set([null, "acm", "ace", "act", "acg"]);
|
|
5
5
|
/** Empty UUID marks field-map metadata; fixed-field public credentials keep that slot empty too. */
|
|
6
6
|
export function isIpexMetadata(node) {
|
|
@@ -58,15 +58,15 @@ export function singleDagDisclosurePlan(value) {
|
|
|
58
58
|
return Array.isArray(value) && value.length === 1 && validDisclosurePlan(value[0]) ? value[0] : null;
|
|
59
59
|
}
|
|
60
60
|
/**
|
|
61
|
-
* Index unique disclosed credential
|
|
62
|
-
* Offers
|
|
61
|
+
* Index unique disclosed credential frames, then delegate the graph walk to `walkAcdcGraph`.
|
|
62
|
+
* Offers always walk open; Grants use the caller's walk policy. Nested ownership
|
|
63
63
|
* does not make these nodes independently accepted runtime messages.
|
|
64
64
|
*/
|
|
65
|
-
export function walkIpexGraph(origin, nests,
|
|
65
|
+
export function walkIpexGraph(origin, nests, walk) {
|
|
66
66
|
const nodes = new Map();
|
|
67
67
|
for (const [index, frame] of nests.entries()) {
|
|
68
68
|
const body = frame.body;
|
|
69
|
-
if (!(body instanceof SerderACDC) || !
|
|
69
|
+
if (!(body instanceof SerderACDC) || !nodeIlks.has(body.ilk)
|
|
70
70
|
|| !body.said || (index === 0 && body.said !== origin) || nodes.has(body.said))
|
|
71
71
|
return null;
|
|
72
72
|
// Descendants are not additional implicit evidence for this disclosed node.
|
|
@@ -74,71 +74,8 @@ export function walkIpexGraph(origin, nests, closed) {
|
|
|
74
74
|
return null;
|
|
75
75
|
nodes.set(body.said, frame);
|
|
76
76
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
const seen = new Set();
|
|
80
|
-
const order = [];
|
|
81
|
-
const dependencies = new Map();
|
|
82
|
-
const queue = [origin];
|
|
83
|
-
for (let index = 0; index < queue.length; index++) {
|
|
84
|
-
const said = queue[index];
|
|
85
|
-
if (seen.has(said))
|
|
86
|
-
continue;
|
|
87
|
-
seen.add(said);
|
|
88
|
-
order.push(said);
|
|
89
|
-
const farNodes = new Set();
|
|
90
|
-
dependencies.set(said, farNodes);
|
|
91
|
-
const edges = blocks(nodes.get(said).body.sad.e);
|
|
92
|
-
if (!edges)
|
|
93
|
-
return null;
|
|
94
|
-
const groups = [...edges];
|
|
95
|
-
for (let g = 0; g < groups.length; g++) {
|
|
96
|
-
const edge = groups[g];
|
|
97
|
-
const target = acdcEdgeTarget(edge);
|
|
98
|
-
if (target === false)
|
|
99
|
-
return null;
|
|
100
|
-
if (typeof target === "string") {
|
|
101
|
-
if (!nodes.has(target)) {
|
|
102
|
-
if (closed)
|
|
103
|
-
return null;
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
farNodes.add(target);
|
|
107
|
-
if (!seen.has(target))
|
|
108
|
-
queue.push(target);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
else {
|
|
112
|
-
if (!record(edge))
|
|
113
|
-
return null;
|
|
114
|
-
for (const [key, value] of Object.entries(edge)) {
|
|
115
|
-
if (acdcGroupLabels.has(key) || typeof value === "string")
|
|
116
|
-
continue;
|
|
117
|
-
groups.push(value);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
if (seen.size !== nodes.size)
|
|
123
|
-
return null;
|
|
124
|
-
const parents = new Map();
|
|
125
|
-
for (const [near, children] of dependencies) {
|
|
126
|
-
for (const far of children) {
|
|
127
|
-
if (!parents.has(far))
|
|
128
|
-
parents.set(far, new Set());
|
|
129
|
-
parents.get(far).add(near);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
const dependencyOrder = order.filter((said) => dependencies.get(said).size === 0);
|
|
133
|
-
for (let i = 0; i < dependencyOrder.length; i++) {
|
|
134
|
-
for (const near of parents.get(dependencyOrder[i]) ?? []) {
|
|
135
|
-
const children = dependencies.get(near);
|
|
136
|
-
children.delete(dependencyOrder[i]);
|
|
137
|
-
if (!children.size)
|
|
138
|
-
dependencyOrder.push(near);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
return dependencyOrder.length === nodes.size ? { nodes, order } : null;
|
|
77
|
+
const order = walkAcdcGraph(origin, nodes, walk);
|
|
78
|
+
return order ? { nodes, order, walk } : null;
|
|
142
79
|
}
|
|
143
80
|
/** Compare SAD values structurally while retaining list order; map insertion order is not semantic here. */
|
|
144
81
|
function equal(a, b) {
|
|
@@ -29,10 +29,11 @@ import { collectBytes } from "../transport/byte-source.js";
|
|
|
29
29
|
import { credentialGrantReady, credentialPresentationSupportMessages, credentialSaidFromGrant, validateAdmitGrant, } from "./ipex-credentialing.js";
|
|
30
30
|
import { walkIpexGraph } from "./ipex-graph.js";
|
|
31
31
|
import { authenticateIpexNode, issuedNodeVerdict } from "./ipex-node-authentication.js";
|
|
32
|
+
import { ipexGrantWalk } from "./ipex-v2.js";
|
|
32
33
|
import { IPEX_ADMIT_ROUTE, IPEX_GRANT_ROUTE, ipexConversationReady, ipexRecipient } from "./ipexing.js";
|
|
33
34
|
/** Authenticate the exact disclosed graph; only the existing evaluator's explicit true authorizes new use. */
|
|
34
|
-
function acdcV2GraphUse(hby, registry, origin, nests) {
|
|
35
|
-
const graph = walkIpexGraph(origin, nests,
|
|
35
|
+
function acdcV2GraphUse(hby, registry, origin, nests, walk) {
|
|
36
|
+
const graph = walkIpexGraph(origin, nests, walk);
|
|
36
37
|
if (!graph)
|
|
37
38
|
throw new ValidationError("ACDC v2 group graph is malformed or incomplete.");
|
|
38
39
|
const verdicts = new Map();
|
|
@@ -55,7 +56,7 @@ function acdcV2GrantUse(hby, exchanger, registry, said) {
|
|
|
55
56
|
if (!Array.isArray(origins) || origins.length !== 1 || typeof origins[0] !== "string") {
|
|
56
57
|
throw new ValidationError("ACDC v2 group Grant requires one origin.");
|
|
57
58
|
}
|
|
58
|
-
return acdcV2GraphUse(hby, registry, origins[0], loadNests(hby.db, said));
|
|
59
|
+
return acdcV2GraphUse(hby, registry, origins[0], loadNests(hby.db, said), ipexGrantWalk(exchanger));
|
|
59
60
|
}
|
|
60
61
|
/** Recheck current graph authorization at an accepted group's new delivery, output or consent action. */
|
|
61
62
|
export function requireAcdcV2GroupUse(hby, protocol, embedded) {
|
|
@@ -110,8 +111,10 @@ export function* prepareAcdcV2GroupIpex(hby, protocol, group, raw) {
|
|
|
110
111
|
if (!Array.isArray(origins) || origins.length !== 1 || typeof origins[0] !== "string") {
|
|
111
112
|
throw new ValidationError("ACDC v2 group Grant requires one origin.");
|
|
112
113
|
}
|
|
113
|
-
|
|
114
|
+
const walk = ipexGrantWalk(protocol.exc);
|
|
115
|
+
if (acdcV2GraphUse(hby, protocol.registry?.store ?? null, origins[0], frame.nests ?? [], walk) !== true) {
|
|
114
116
|
return null;
|
|
117
|
+
}
|
|
115
118
|
}
|
|
116
119
|
else if (embedded.route === IPEX_ADMIT_ROUTE) {
|
|
117
120
|
if (typeof embedded.sad.p !== "string"
|
|
@@ -133,20 +136,13 @@ export function* prepareAcdcV2GroupIpex(hby, protocol, group, raw) {
|
|
|
133
136
|
return wire;
|
|
134
137
|
}
|
|
135
138
|
/**
|
|
136
|
-
* Approve one
|
|
137
|
-
*
|
|
138
|
-
* @
|
|
139
|
-
* @param protocol Borrowed semantic owner; this approval creates its own byte-input context.
|
|
140
|
-
* @param postman Borrowed delivery owner; the caller runs and joins its worker.
|
|
141
|
-
* @param reger Explicit legacy store, required for grant approval/delivery and fresh admit approval.
|
|
142
|
-
* @param wrapper Accepted multisig exchange carrying the proposed IPEX child.
|
|
143
|
-
* @param options Approval/genus policy used for the existing group workflow.
|
|
144
|
-
* @returns Approval and current group/protocol completion information.
|
|
139
|
+
* Approve one stored multisig wrapper around an IPEX message locally: validate it, reuse or sign this member's
|
|
140
|
+
* contribution and accept it, without publishing or sending anything. The explicit consent of the library's group
|
|
141
|
+
* IPEX operations; {@link approveMultisigIpex} adds publication and the lead's delivery.
|
|
145
142
|
*/
|
|
146
|
-
export function*
|
|
143
|
+
export function* approveMultisigIpexLocally(hby, protocol, reger, wrapper) {
|
|
147
144
|
const { child, groupHab } = yield* loadIpexProposal(hby, wrapper);
|
|
148
145
|
const { event: embedded, genus } = child;
|
|
149
|
-
const embeddedSaid = embedded.said;
|
|
150
146
|
if (embedded.pvrsn.major === 1 && embedded.route === IPEX_GRANT_ROUTE && !reger) {
|
|
151
147
|
throw new ValidationError("VDR runtime did not open Reger.");
|
|
152
148
|
}
|
|
@@ -163,6 +159,23 @@ export function* approveMultisigIpex(hby, protocol, postman, reger, wrapper, opt
|
|
|
163
159
|
}
|
|
164
160
|
}
|
|
165
161
|
const approved = yield* approveIpexChild(hby, protocol, groupHab, child, wrapper, reger);
|
|
162
|
+
return { embedded, groupHab, genus, approved };
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Approve one pending multisig wrapper around an embedded IPEX message.
|
|
166
|
+
*
|
|
167
|
+
* @param hby Borrowed local identities and accepted-state stores.
|
|
168
|
+
* @param protocol Borrowed semantic owner; this approval creates its own byte-input context.
|
|
169
|
+
* @param postman Borrowed delivery owner; the caller runs and joins its worker.
|
|
170
|
+
* @param reger Explicit legacy store, required for grant approval/delivery and fresh admit approval.
|
|
171
|
+
* @param wrapper Accepted multisig exchange carrying the proposed IPEX child.
|
|
172
|
+
* @param options Approval/genus policy used for the existing group workflow.
|
|
173
|
+
* @returns Approval and current group/protocol completion information.
|
|
174
|
+
*/
|
|
175
|
+
export function* approveMultisigIpex(hby, protocol, postman, reger, wrapper, options = {}) {
|
|
176
|
+
const local = yield* approveMultisigIpexLocally(hby, protocol, reger, wrapper);
|
|
177
|
+
const { embedded, groupHab, genus, approved } = local;
|
|
178
|
+
const embeddedSaid = embedded.said;
|
|
166
179
|
if (!approved)
|
|
167
180
|
return { approved: null, accepted: protocol.exc.complete(embeddedSaid), messages: [], deliveries: [] };
|
|
168
181
|
const publication = options.publish
|
|
@@ -353,7 +366,7 @@ function* prepareGroupIpexMessages(hby, protocol, groupHab, embedded, childGvrsn
|
|
|
353
366
|
if (child.route === IPEX_GRANT_ROUTE) {
|
|
354
367
|
const origins = child.sad.a.o;
|
|
355
368
|
if (!Array.isArray(origins) || origins.length !== 1 || typeof origins[0] !== "string"
|
|
356
|
-
|| acdcV2GraphUse(hby, protocol.registry?.store ?? null, origins[0], childFrame.nests ?? []) !== true) {
|
|
369
|
+
|| acdcV2GraphUse(hby, protocol.registry?.store ?? null, origins[0], childFrame.nests ?? [], ipexGrantWalk(protocol.exc)) !== true) {
|
|
357
370
|
throw new ValidationError("ACDC v2 group graph is unavailable before proposal publication.");
|
|
358
371
|
}
|
|
359
372
|
}
|
|
@@ -662,3 +675,16 @@ function hexToFixedBytes(hex, size) {
|
|
|
662
675
|
}
|
|
663
676
|
return raw;
|
|
664
677
|
}
|
|
678
|
+
/** The stored `/multisig/exn` wrapper that carries the IPEX message `embeddedSaid`, if one is held. */
|
|
679
|
+
export function findStoredMultisigIpex(db, embeddedSaid) {
|
|
680
|
+
for (const [, wrapper] of db.exns.getTopItemIter()) {
|
|
681
|
+
if (wrapper.route === MULTISIG_EXN_ROUTE && storedMultisigIpexBody(db, wrapper)?.said === embeddedSaid) {
|
|
682
|
+
return wrapper;
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
return null;
|
|
686
|
+
}
|
|
687
|
+
/** Whether the local member of `group` already holds a verified contribution to `embedded` (a recorded approval). */
|
|
688
|
+
export function groupIpexApproved(hby, group, embedded) {
|
|
689
|
+
return !!localIpexContribution(hby.db, localGroupMember(hby, group).pre, embedded, rebuildStoredExchangeGroups(hby.db, embedded.said));
|
|
690
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { IPEX_V2_PREDECESSORS, isIpexVerb, nestedIpexRoute, } from "../../core/exchange/protocol-exchanging.js";
|
|
2
2
|
/** V2 IPEX route policy; v1 routing remains independently registered. */
|
|
3
3
|
import { Diger, ParserError, Prefixer, } from "cesr-ts";
|
|
4
|
-
import { evaluateChain } from "../../acdc/chaining.js";
|
|
4
|
+
import { DEFAULT_GRANT_WALK, evaluateChain } from "../../acdc/chaining.js";
|
|
5
5
|
import { validateUpdate, verifyRegistryAnchor, vet, vetBinds, vetBlind, vetBound, } from "../../acdc/regeventing.js";
|
|
6
6
|
import { validateSchema } from "../../acdc/scheming.js";
|
|
7
7
|
import { DatabaseOperationError } from "../../core/errors.js";
|
|
@@ -31,9 +31,11 @@ function missing(reason) {
|
|
|
31
31
|
* Authenticate each disclosed node independently before Exchanger persists an EXN.
|
|
32
32
|
* Registry evidence is caller-owned; notifier delivery follows durable acceptance.
|
|
33
33
|
* Presentation registries require the retained receiver receipt and node-local proofs.
|
|
34
|
+
* `grantWalk` selects how a Grant treats an undisclosed far node (`AcdcWalkPolicy`);
|
|
35
|
+
* a far node the disclosure plan selects but the Grant does not nest always refuses.
|
|
34
36
|
*/
|
|
35
37
|
export class IpexV2Handler {
|
|
36
|
-
constructor(resource, hby, notifier = null, registry = null) {
|
|
38
|
+
constructor(resource, hby, notifier = null, registry = null, grantWalk = DEFAULT_GRANT_WALK) {
|
|
37
39
|
Object.defineProperty(this, "resource", {
|
|
38
40
|
enumerable: true,
|
|
39
41
|
configurable: true,
|
|
@@ -58,6 +60,12 @@ export class IpexV2Handler {
|
|
|
58
60
|
writable: true,
|
|
59
61
|
value: registry
|
|
60
62
|
});
|
|
63
|
+
Object.defineProperty(this, "grantWalk", {
|
|
64
|
+
enumerable: true,
|
|
65
|
+
configurable: true,
|
|
66
|
+
writable: true,
|
|
67
|
+
value: grantWalk
|
|
68
|
+
});
|
|
61
69
|
Object.defineProperty(this, "protocolMajor", {
|
|
62
70
|
enumerable: true,
|
|
63
71
|
configurable: true,
|
|
@@ -266,7 +274,7 @@ export class IpexV2Handler {
|
|
|
266
274
|
if (verb === "offer" && nests.length) {
|
|
267
275
|
if (nests.some(hasIpexNodeAttachments))
|
|
268
276
|
return false;
|
|
269
|
-
const graph = walkIpexGraph(attrs.o[0], nests,
|
|
277
|
+
const graph = walkIpexGraph(attrs.o[0], nests, "open");
|
|
270
278
|
return graph ? this.nodeSchemas(graph) : false;
|
|
271
279
|
}
|
|
272
280
|
if (verb !== "grant")
|
|
@@ -287,7 +295,7 @@ export class IpexV2Handler {
|
|
|
287
295
|
if (!single(attrs.o, "string") || !this.validOrigin(attrs.o[0]) || !nests.length)
|
|
288
296
|
return false;
|
|
289
297
|
const origin = attrs.o[0];
|
|
290
|
-
const graph = walkIpexGraph(origin, nests,
|
|
298
|
+
const graph = walkIpexGraph(origin, nests, this.grantWalk);
|
|
291
299
|
if (!graph || [...graph.nodes.values()].some((node) => isIpexMetadata(node.body)))
|
|
292
300
|
return false;
|
|
293
301
|
if (!verifyIpexDisclosure(plan, origin, graph))
|
|
@@ -492,7 +500,7 @@ export class IpexV2Handler {
|
|
|
492
500
|
const nests = loadNests(this.hby.db, offerSaid);
|
|
493
501
|
if (!nests.length)
|
|
494
502
|
return missing(`Missing metadata ACDC for accepted Offer ${offerSaid}.`);
|
|
495
|
-
const offered = walkIpexGraph(offeredOrigin, nests,
|
|
503
|
+
const offered = walkIpexGraph(offeredOrigin, nests, "open");
|
|
496
504
|
if (!offered)
|
|
497
505
|
return false;
|
|
498
506
|
const metadata = offered.nodes.get(offeredOrigin).body;
|
|
@@ -690,3 +698,11 @@ export class IpexV2Handler {
|
|
|
690
698
|
return [[issuee, regid]];
|
|
691
699
|
}
|
|
692
700
|
}
|
|
701
|
+
/**
|
|
702
|
+
* The Grant walk policy of the exchanger's v2 Grant owner. Later use of an
|
|
703
|
+
* accepted Grant re-walks it under this policy so reuse agrees with admission.
|
|
704
|
+
*/
|
|
705
|
+
export function ipexGrantWalk(exchanger) {
|
|
706
|
+
const handler = exchanger.routeHandler("/ipex/grant", 2);
|
|
707
|
+
return handler instanceof IpexV2Handler ? handler.grantWalk : DEFAULT_GRANT_WALK;
|
|
708
|
+
}
|
|
@@ -111,7 +111,7 @@ export class IpexHandler {
|
|
|
111
111
|
export function loadIpexHandlers(hby, exchanger, options = {}) {
|
|
112
112
|
for (const route of IPEX_ROUTES) {
|
|
113
113
|
exchanger.addHandler(new IpexHandler(route, hby, options.notifier ?? null));
|
|
114
|
-
exchanger.addHandler(new IpexV2Handler(route, hby, options.notifier ?? null, options.registry ?? null));
|
|
114
|
+
exchanger.addHandler(new IpexV2Handler(route, hby, options.notifier ?? null, options.registry ?? null, options.grantWalk));
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
117
|
/** Apply for an ACDC. */
|