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.
Files changed (450) hide show
  1. package/README.md +30 -2
  2. package/esm/keri/npm/src/acdc/authoring.js +195 -0
  3. package/esm/keri/npm/src/acdc/chaining.js +223 -89
  4. package/esm/keri/npm/src/acdc/custody.js +164 -0
  5. package/esm/keri/npm/src/acdc/dhking.js +244 -32
  6. package/esm/keri/npm/src/acdc/observing.js +2 -2
  7. package/esm/keri/npm/src/acdc/regbasing.js +30 -29
  8. package/esm/keri/npm/src/acdc/regengine.js +4 -6
  9. package/esm/keri/npm/src/acdc/registering.js +13 -10
  10. package/esm/keri/npm/src/acdc/registraring.js +4 -9
  11. package/esm/keri/npm/src/acdc/salting.js +143 -26
  12. package/esm/keri/npm/src/acdc/scheming.js +93 -54
  13. package/esm/keri/npm/src/acdc/unblinding.js +120 -99
  14. package/esm/keri/npm/src/app/bootstrap/authenticating.js +4 -6
  15. package/esm/keri/npm/src/app/bootstrap/oobi-resolving.js +41 -0
  16. package/esm/keri/npm/src/app/bootstrap/oobiery.js +5 -7
  17. package/esm/keri/npm/src/app/credentials/credential-revoking.js +1 -0
  18. package/esm/keri/npm/src/app/credentials/credential-workflows.js +2 -0
  19. package/esm/keri/npm/src/app/credentials/registry-settling.js +44 -0
  20. package/esm/keri/npm/src/app/credentials/root-replicating.js +131 -0
  21. package/esm/keri/npm/src/app/credentials/root-replicator.js +198 -0
  22. package/esm/keri/npm/src/app/credentials/tel-completion.js +36 -0
  23. package/esm/keri/npm/src/app/credentials/verifying.js +12 -3
  24. package/esm/keri/npm/src/app/delivery/forwarding.js +64 -9
  25. package/esm/keri/npm/src/app/exchanges/exchanging.js +24 -15
  26. package/esm/keri/npm/src/app/identity/challenging.js +50 -0
  27. package/esm/keri/npm/src/app/identity/configing.js +17 -43
  28. package/esm/keri/npm/src/app/identity/delegating.js +77 -77
  29. package/esm/keri/npm/src/app/identity/delegation-approval.js +333 -0
  30. package/esm/keri/npm/src/app/identity/event-completion.js +154 -0
  31. package/esm/keri/npm/src/app/identity/habbing.js +183 -41
  32. package/esm/keri/npm/src/app/identity/keeping.js +78 -5
  33. package/esm/keri/npm/src/app/identity/lmdb-habery.js +12 -0
  34. package/esm/keri/npm/src/app/ipex/group-ipex.js +327 -0
  35. package/esm/keri/npm/src/app/ipex/group-issuance.js +902 -0
  36. package/esm/keri/npm/src/app/ipex/ipex-admitting.js +120 -0
  37. package/esm/keri/npm/src/app/ipex/ipex-conversation.js +197 -0
  38. package/esm/keri/npm/src/app/ipex/ipex-discloser.js +591 -0
  39. package/esm/keri/npm/src/app/ipex/ipex-granting.js +93 -0
  40. package/esm/keri/npm/src/app/ipex/ipex-graph.js +7 -70
  41. package/esm/keri/npm/src/app/ipex/ipex-grouping.js +42 -16
  42. package/esm/keri/npm/src/app/ipex/ipex-v2.js +21 -5
  43. package/esm/keri/npm/src/app/ipex/ipexing.js +1 -1
  44. package/esm/keri/npm/src/app/ipex/issuance.js +888 -0
  45. package/esm/keri/npm/src/app/ipex/pending-presentations.js +46 -0
  46. package/esm/keri/npm/src/app/ipex/presentation-files.js +200 -0
  47. package/esm/keri/npm/src/app/ipex/presenting.js +401 -0
  48. package/esm/keri/npm/src/app/ipex/receive-issuance.js +86 -0
  49. package/esm/keri/npm/src/app/ipex/unblinding-workflow.js +660 -0
  50. package/esm/keri/npm/src/app/mailbox/ipex-arrival.js +103 -0
  51. package/esm/keri/npm/src/app/mailbox/kel-publisher.js +322 -0
  52. package/esm/keri/npm/src/app/mailbox/kel-publishing.js +65 -0
  53. package/esm/keri/npm/src/app/mailbox/kel-submission.js +24 -0
  54. package/esm/keri/npm/src/app/mailbox/mailbox-admin.js +208 -0
  55. package/esm/keri/npm/src/app/mailbox/mailbox-poller.js +212 -47
  56. package/esm/keri/npm/src/app/mailbox/mailboxing.js +15 -14
  57. package/esm/keri/npm/src/app/multisig/counseling.js +482 -0
  58. package/esm/keri/npm/src/app/multisig/group-members.js +32 -0
  59. package/esm/keri/npm/src/app/multisig/grouping.js +4 -3
  60. package/esm/keri/npm/src/app/multisig/multisig-workflows.js +101 -141
  61. package/esm/keri/npm/src/app/multisig/proposals.js +281 -0
  62. package/esm/keri/npm/src/app/multisig/proposing.js +122 -0
  63. package/esm/keri/npm/src/app/notifications/notifying.js +5 -9
  64. package/esm/keri/npm/src/app/notifications/signaling.js +5 -5
  65. package/esm/keri/npm/src/app/protocol/parsering.js +26 -1
  66. package/esm/keri/npm/src/app/protocol/protocol-processing.js +44 -6
  67. package/esm/keri/npm/src/app/queries/query-workflows.js +98 -0
  68. package/esm/keri/npm/src/app/queries/witness-inquisitor.js +2 -2
  69. package/esm/keri/npm/src/app/runtime/agent-runtime.js +113 -65
  70. package/esm/keri/npm/src/app/runtime/cue-runtime.js +3 -6
  71. package/esm/keri/npm/src/app/runtime/delivery-outbox.js +87 -0
  72. package/esm/keri/npm/src/app/runtime/doing.js +17 -0
  73. package/esm/keri/npm/src/app/runtime/ipex-auxiliaries.js +207 -0
  74. package/esm/keri/npm/src/app/runtime/operation-owners.js +151 -0
  75. package/esm/keri/npm/src/app/runtime/retry-backoff.js +93 -0
  76. package/esm/keri/npm/src/app/runtime/workflow-contract.js +80 -0
  77. package/esm/keri/npm/src/app/transport/byte-source.js +6 -42
  78. package/esm/keri/npm/src/app/transport/cesr-egress.js +77 -13
  79. package/esm/keri/npm/src/app/transport/file-bytes.js +41 -0
  80. package/esm/keri/npm/src/app/transport/http-client.js +25 -6
  81. package/esm/keri/npm/src/app/transport/http-messenger.js +14 -9
  82. package/esm/keri/npm/src/app/transport/message-source.js +1 -1
  83. package/esm/keri/npm/src/app/transport/messengering.js +3 -4
  84. package/esm/keri/npm/src/app/transport/node-http-client.js +21 -0
  85. package/esm/keri/npm/src/app/transport/tcp-dialer.js +14 -0
  86. package/esm/keri/npm/src/app/witness/http-endpoints.js +4 -4
  87. package/esm/keri/npm/src/app/witness/receipt-client.js +2 -2
  88. package/esm/keri/npm/src/cli/common/context.js +2 -2
  89. package/esm/keri/npm/src/cli/common/event-completion.js +49 -0
  90. package/esm/keri/npm/src/cli/common/existing.js +3 -5
  91. package/esm/keri/npm/src/cli/common/runtime-workers.js +23 -0
  92. package/esm/keri/npm/src/cli/credentials/ipex.js +159 -191
  93. package/esm/keri/npm/src/cli/credentials/vc.js +53 -72
  94. package/esm/keri/npm/src/cli/endpoints/did.js +12 -3
  95. package/esm/keri/npm/src/cli/endpoints/oobi-clean.js +4 -3
  96. package/esm/keri/npm/src/cli/endpoints/oobi.js +12 -15
  97. package/esm/keri/npm/src/cli/identity/challenge.js +9 -35
  98. package/esm/keri/npm/src/cli/identity/delegate.js +81 -258
  99. package/esm/keri/npm/src/cli/identity/incept.js +17 -34
  100. package/esm/keri/npm/src/cli/identity/init.js +4 -3
  101. package/esm/keri/npm/src/cli/identity/interact.js +7 -19
  102. package/esm/keri/npm/src/cli/identity/rotate.js +10 -38
  103. package/esm/keri/npm/src/cli/index.js +3 -1
  104. package/esm/keri/npm/src/cli/messaging/exchange.js +2 -2
  105. package/esm/keri/npm/src/cli/messaging/group-join.js +79 -0
  106. package/esm/keri/npm/src/cli/messaging/group-wait.js +88 -0
  107. package/esm/keri/npm/src/cli/messaging/multisig.js +187 -250
  108. package/esm/keri/npm/src/cli/messaging/root-copy-lines.js +31 -0
  109. package/esm/keri/npm/src/cli/tools/annotate.js +2 -1
  110. package/esm/keri/npm/src/cli/tools/benchmark.js +2 -1
  111. package/esm/keri/npm/src/cli/tools/db-dump.js +1 -4
  112. package/esm/keri/npm/src/core/bytes.js +9 -0
  113. package/esm/keri/npm/src/core/kel/delegation-ancestry.js +92 -0
  114. package/esm/keri/npm/src/core/kel/eventing.js +67 -12
  115. package/esm/keri/npm/src/core/kel/kever.js +11 -9
  116. package/esm/keri/npm/src/core/mailbox/kram-policy.js +41 -9
  117. package/esm/keri/npm/src/core/mailbox/kram-pruning.js +15 -22
  118. package/esm/keri/npm/src/core/mailbox/kram-staging.js +2 -2
  119. package/esm/keri/npm/src/core/mailbox/kraming.js +2 -0
  120. package/esm/keri/npm/src/core/records.js +23 -0
  121. package/esm/keri/npm/src/core/routing.js +15 -2
  122. package/esm/keri/npm/src/db/basing.js +183 -205
  123. package/esm/keri/npm/src/db/core/dber.js +1062 -0
  124. package/esm/keri/npm/src/db/core/index.js +4 -2
  125. package/esm/keri/npm/src/db/core/indexeddb-persistence.js +221 -0
  126. package/esm/keri/npm/src/db/core/lmdb-opener.js +30 -0
  127. package/esm/keri/npm/src/db/core/lmdber.js +199 -1067
  128. package/esm/keri/npm/src/db/core/memstore.js +532 -0
  129. package/esm/keri/npm/src/db/core/path-manager.js +109 -223
  130. package/esm/keri/npm/src/db/core/store-owner.js +104 -0
  131. package/esm/keri/npm/src/db/core/webdber.js +252 -0
  132. package/esm/keri/npm/src/db/escrowing.js +2 -2
  133. package/esm/keri/npm/src/db/exchange/exchange-nests.js +3 -2
  134. package/esm/keri/npm/src/db/indexeddb.js +98 -0
  135. package/esm/keri/npm/src/db/keeping.js +38 -123
  136. package/esm/keri/npm/src/db/koming.js +1 -1
  137. package/esm/keri/npm/src/db/lmdb-stores.js +68 -0
  138. package/esm/keri/npm/src/db/lmdb.js +6 -0
  139. package/esm/keri/npm/src/db/mailbox/mailboxing.js +12 -65
  140. package/esm/keri/npm/src/db/noting.js +11 -55
  141. package/esm/keri/npm/src/db/reger.js +43 -105
  142. package/esm/keri/npm/src/db/replay/witness-replay.js +2 -20
  143. package/esm/keri/npm/src/db/store-lock.js +150 -0
  144. package/esm/keri/npm/src/db/subing.js +1 -1
  145. package/esm/keri/npm/src/npm/db-indexeddb.browser.js +2 -0
  146. package/esm/keri/npm/src/npm/db-indexeddb.js +3 -0
  147. package/esm/keri/npm/src/npm/db-lmdb.js +3 -0
  148. package/esm/keri/npm/src/npm/db.browser.js +2 -0
  149. package/esm/keri/npm/src/npm/index.browser.js +9 -0
  150. package/esm/keri/npm/src/npm/runtime-node.js +3 -0
  151. package/esm/keri/npm/src/npm/runtime-web.browser.js +2 -0
  152. package/esm/keri/npm/src/npm/runtime-web.js +3 -0
  153. package/esm/keri/npm/src/npm/runtime.browser.js +2 -0
  154. package/esm/keri/npm/src/runtime/index.js +58 -12
  155. package/esm/keri/npm/src/runtime/node.js +14 -0
  156. package/esm/keri/npm/src/runtime/web/output-barrier.js +47 -0
  157. package/esm/keri/npm/src/runtime/web/persistent-storage.js +37 -0
  158. package/esm/keri/npm/src/runtime/web.js +10 -0
  159. package/esm/keri/npm/src/vdr/eventing.js +1 -1
  160. package/esm/keri/npm/src/vdr/tel-publication.js +19 -3
  161. package/esm/keri/npm/src/version.js +2 -2
  162. package/package.json +24 -4
  163. package/types/acdc/authoring.d.ts +54 -0
  164. package/types/acdc/authoring.d.ts.map +1 -0
  165. package/types/acdc/chaining.d.ts +56 -6
  166. package/types/acdc/chaining.d.ts.map +1 -1
  167. package/types/acdc/custody.d.ts +77 -0
  168. package/types/acdc/custody.d.ts.map +1 -0
  169. package/types/acdc/dhking.d.ts +94 -3
  170. package/types/acdc/dhking.d.ts.map +1 -1
  171. package/types/acdc/regbasing.d.ts +11 -6
  172. package/types/acdc/regbasing.d.ts.map +1 -1
  173. package/types/acdc/regengine.d.ts.map +1 -1
  174. package/types/acdc/registering.d.ts +8 -4
  175. package/types/acdc/registering.d.ts.map +1 -1
  176. package/types/acdc/registraring.d.ts.map +1 -1
  177. package/types/acdc/salting.d.ts +59 -7
  178. package/types/acdc/salting.d.ts.map +1 -1
  179. package/types/acdc/scheming.d.ts +2 -0
  180. package/types/acdc/scheming.d.ts.map +1 -1
  181. package/types/acdc/unblinding.d.ts +58 -19
  182. package/types/acdc/unblinding.d.ts.map +1 -1
  183. package/types/app/bootstrap/authenticating.d.ts +3 -1
  184. package/types/app/bootstrap/authenticating.d.ts.map +1 -1
  185. package/types/app/bootstrap/oobi-resolving.d.ts +92 -0
  186. package/types/app/bootstrap/oobi-resolving.d.ts.map +1 -0
  187. package/types/app/bootstrap/oobiery.d.ts +3 -1
  188. package/types/app/bootstrap/oobiery.d.ts.map +1 -1
  189. package/types/app/credentials/credential-revoking.d.ts +3 -0
  190. package/types/app/credentials/credential-revoking.d.ts.map +1 -1
  191. package/types/app/credentials/credential-workflows.d.ts +5 -0
  192. package/types/app/credentials/credential-workflows.d.ts.map +1 -1
  193. package/types/app/credentials/registry-settling.d.ts +85 -0
  194. package/types/app/credentials/registry-settling.d.ts.map +1 -0
  195. package/types/app/credentials/root-replicating.d.ts +97 -0
  196. package/types/app/credentials/root-replicating.d.ts.map +1 -0
  197. package/types/app/credentials/root-replicator.d.ts +105 -0
  198. package/types/app/credentials/root-replicator.d.ts.map +1 -0
  199. package/types/app/credentials/tel-completion.d.ts +55 -0
  200. package/types/app/credentials/tel-completion.d.ts.map +1 -0
  201. package/types/app/credentials/verifying.d.ts +2 -1
  202. package/types/app/credentials/verifying.d.ts.map +1 -1
  203. package/types/app/delivery/forwarding.d.ts +16 -0
  204. package/types/app/delivery/forwarding.d.ts.map +1 -1
  205. package/types/app/exchanges/exchanging.d.ts +2 -0
  206. package/types/app/exchanges/exchanging.d.ts.map +1 -1
  207. package/types/app/identity/challenging.d.ts +54 -0
  208. package/types/app/identity/challenging.d.ts.map +1 -1
  209. package/types/app/identity/configing.d.ts +7 -5
  210. package/types/app/identity/configing.d.ts.map +1 -1
  211. package/types/app/identity/delegating.d.ts +21 -4
  212. package/types/app/identity/delegating.d.ts.map +1 -1
  213. package/types/app/identity/delegation-approval.d.ts +228 -0
  214. package/types/app/identity/delegation-approval.d.ts.map +1 -0
  215. package/types/app/identity/event-completion.d.ts +151 -0
  216. package/types/app/identity/event-completion.d.ts.map +1 -0
  217. package/types/app/identity/habbing.d.ts +90 -7
  218. package/types/app/identity/habbing.d.ts.map +1 -1
  219. package/types/app/identity/keeping.d.ts +50 -4
  220. package/types/app/identity/keeping.d.ts.map +1 -1
  221. package/types/app/identity/lmdb-habery.d.ts +6 -0
  222. package/types/app/identity/lmdb-habery.d.ts.map +1 -0
  223. package/types/app/ipex/group-ipex.d.ts +247 -0
  224. package/types/app/ipex/group-ipex.d.ts.map +1 -0
  225. package/types/app/ipex/group-issuance.d.ts +281 -0
  226. package/types/app/ipex/group-issuance.d.ts.map +1 -0
  227. package/types/app/ipex/ipex-admitting.d.ts +47 -0
  228. package/types/app/ipex/ipex-admitting.d.ts.map +1 -0
  229. package/types/app/ipex/ipex-conversation.d.ts +195 -0
  230. package/types/app/ipex/ipex-conversation.d.ts.map +1 -0
  231. package/types/app/ipex/ipex-discloser.d.ts +156 -0
  232. package/types/app/ipex/ipex-discloser.d.ts.map +1 -0
  233. package/types/app/ipex/ipex-granting.d.ts +145 -0
  234. package/types/app/ipex/ipex-granting.d.ts.map +1 -0
  235. package/types/app/ipex/ipex-graph.d.ts +4 -4
  236. package/types/app/ipex/ipex-graph.d.ts.map +1 -1
  237. package/types/app/ipex/ipex-grouping.d.ts +18 -0
  238. package/types/app/ipex/ipex-grouping.d.ts.map +1 -1
  239. package/types/app/ipex/ipex-v2.d.ts +11 -2
  240. package/types/app/ipex/ipex-v2.d.ts.map +1 -1
  241. package/types/app/ipex/ipexing.d.ts +3 -0
  242. package/types/app/ipex/ipexing.d.ts.map +1 -1
  243. package/types/app/ipex/issuance.d.ts +443 -0
  244. package/types/app/ipex/issuance.d.ts.map +1 -0
  245. package/types/app/ipex/pending-presentations.d.ts +25 -0
  246. package/types/app/ipex/pending-presentations.d.ts.map +1 -0
  247. package/types/app/ipex/presentation-files.d.ts +47 -0
  248. package/types/app/ipex/presentation-files.d.ts.map +1 -0
  249. package/types/app/ipex/presenting.d.ts +298 -0
  250. package/types/app/ipex/presenting.d.ts.map +1 -0
  251. package/types/app/ipex/receive-issuance.d.ts +99 -0
  252. package/types/app/ipex/receive-issuance.d.ts.map +1 -0
  253. package/types/app/ipex/unblinding-workflow.d.ts +255 -0
  254. package/types/app/ipex/unblinding-workflow.d.ts.map +1 -0
  255. package/types/app/mailbox/ipex-arrival.d.ts +104 -0
  256. package/types/app/mailbox/ipex-arrival.d.ts.map +1 -0
  257. package/types/app/mailbox/kel-publisher.d.ts +141 -0
  258. package/types/app/mailbox/kel-publisher.d.ts.map +1 -0
  259. package/types/app/mailbox/kel-publishing.d.ts +70 -0
  260. package/types/app/mailbox/kel-publishing.d.ts.map +1 -0
  261. package/types/app/mailbox/kel-submission.d.ts +18 -0
  262. package/types/app/mailbox/kel-submission.d.ts.map +1 -0
  263. package/types/app/mailbox/mailbox-admin.d.ts +113 -0
  264. package/types/app/mailbox/mailbox-admin.d.ts.map +1 -0
  265. package/types/app/mailbox/mailbox-poller.d.ts +92 -3
  266. package/types/app/mailbox/mailbox-poller.d.ts.map +1 -1
  267. package/types/app/mailbox/mailboxing.d.ts +4 -1
  268. package/types/app/mailbox/mailboxing.d.ts.map +1 -1
  269. package/types/app/multisig/counseling.d.ts +196 -0
  270. package/types/app/multisig/counseling.d.ts.map +1 -0
  271. package/types/app/multisig/group-members.d.ts +20 -0
  272. package/types/app/multisig/group-members.d.ts.map +1 -1
  273. package/types/app/multisig/grouping.d.ts +39 -20
  274. package/types/app/multisig/grouping.d.ts.map +1 -1
  275. package/types/app/multisig/multisig-workflows.d.ts +93 -23
  276. package/types/app/multisig/multisig-workflows.d.ts.map +1 -1
  277. package/types/app/multisig/proposals.d.ts +129 -0
  278. package/types/app/multisig/proposals.d.ts.map +1 -0
  279. package/types/app/multisig/proposing.d.ts +125 -0
  280. package/types/app/multisig/proposing.d.ts.map +1 -0
  281. package/types/app/notifications/notifying.d.ts +1 -1
  282. package/types/app/notifications/notifying.d.ts.map +1 -1
  283. package/types/app/notifications/signaling.d.ts +3 -1
  284. package/types/app/notifications/signaling.d.ts.map +1 -1
  285. package/types/app/protocol/parsering.d.ts +16 -1
  286. package/types/app/protocol/parsering.d.ts.map +1 -1
  287. package/types/app/protocol/protocol-processing.d.ts +9 -1
  288. package/types/app/protocol/protocol-processing.d.ts.map +1 -1
  289. package/types/app/queries/query-workflows.d.ts +98 -0
  290. package/types/app/queries/query-workflows.d.ts.map +1 -0
  291. package/types/app/runtime/agent-runtime.d.ts +79 -25
  292. package/types/app/runtime/agent-runtime.d.ts.map +1 -1
  293. package/types/app/runtime/cue-runtime.d.ts +2 -1
  294. package/types/app/runtime/cue-runtime.d.ts.map +1 -1
  295. package/types/app/runtime/delivery-outbox.d.ts +68 -0
  296. package/types/app/runtime/delivery-outbox.d.ts.map +1 -0
  297. package/types/app/runtime/doing.d.ts +27 -0
  298. package/types/app/runtime/doing.d.ts.map +1 -0
  299. package/types/app/runtime/ipex-auxiliaries.d.ts +74 -0
  300. package/types/app/runtime/ipex-auxiliaries.d.ts.map +1 -0
  301. package/types/app/runtime/operation-owners.d.ts +137 -0
  302. package/types/app/runtime/operation-owners.d.ts.map +1 -0
  303. package/types/app/runtime/retry-backoff.d.ts +49 -0
  304. package/types/app/runtime/retry-backoff.d.ts.map +1 -0
  305. package/types/app/runtime/workflow-contract.d.ts +79 -0
  306. package/types/app/runtime/workflow-contract.d.ts.map +1 -0
  307. package/types/app/transport/byte-source.d.ts +13 -10
  308. package/types/app/transport/byte-source.d.ts.map +1 -1
  309. package/types/app/transport/cesr-egress.d.ts +21 -7
  310. package/types/app/transport/cesr-egress.d.ts.map +1 -1
  311. package/types/app/transport/file-bytes.d.ts +11 -0
  312. package/types/app/transport/file-bytes.d.ts.map +1 -0
  313. package/types/app/transport/http-client.d.ts +3 -0
  314. package/types/app/transport/http-client.d.ts.map +1 -1
  315. package/types/app/transport/http-messenger.d.ts +15 -10
  316. package/types/app/transport/http-messenger.d.ts.map +1 -1
  317. package/types/app/transport/message-source.d.ts +1 -1
  318. package/types/app/transport/messengering.d.ts +2 -2
  319. package/types/app/transport/messengering.d.ts.map +1 -1
  320. package/types/app/transport/node-http-client.d.ts +10 -0
  321. package/types/app/transport/node-http-client.d.ts.map +1 -0
  322. package/types/app/transport/tcp-dialer.d.ts +21 -0
  323. package/types/app/transport/tcp-dialer.d.ts.map +1 -0
  324. package/types/cli/common/event-completion.d.ts +26 -0
  325. package/types/cli/common/event-completion.d.ts.map +1 -0
  326. package/types/cli/common/existing.d.ts.map +1 -1
  327. package/types/cli/common/runtime-workers.d.ts +23 -0
  328. package/types/cli/common/runtime-workers.d.ts.map +1 -0
  329. package/types/cli/credentials/ipex.d.ts.map +1 -1
  330. package/types/cli/credentials/vc.d.ts +1 -1
  331. package/types/cli/credentials/vc.d.ts.map +1 -1
  332. package/types/cli/endpoints/did.d.ts.map +1 -1
  333. package/types/cli/endpoints/oobi-clean.d.ts.map +1 -1
  334. package/types/cli/endpoints/oobi.d.ts +3 -1
  335. package/types/cli/endpoints/oobi.d.ts.map +1 -1
  336. package/types/cli/identity/challenge.d.ts +1 -1
  337. package/types/cli/identity/challenge.d.ts.map +1 -1
  338. package/types/cli/identity/delegate.d.ts +14 -1
  339. package/types/cli/identity/delegate.d.ts.map +1 -1
  340. package/types/cli/identity/incept.d.ts.map +1 -1
  341. package/types/cli/identity/init.d.ts.map +1 -1
  342. package/types/cli/identity/interact.d.ts.map +1 -1
  343. package/types/cli/identity/rotate.d.ts.map +1 -1
  344. package/types/cli/index.d.ts +4 -2
  345. package/types/cli/index.d.ts.map +1 -1
  346. package/types/cli/messaging/group-join.d.ts +53 -0
  347. package/types/cli/messaging/group-join.d.ts.map +1 -0
  348. package/types/cli/messaging/group-wait.d.ts +34 -0
  349. package/types/cli/messaging/group-wait.d.ts.map +1 -0
  350. package/types/cli/messaging/multisig.d.ts +36 -4
  351. package/types/cli/messaging/multisig.d.ts.map +1 -1
  352. package/types/cli/messaging/root-copy-lines.d.ts +39 -0
  353. package/types/cli/messaging/root-copy-lines.d.ts.map +1 -0
  354. package/types/cli/tools/annotate.d.ts.map +1 -1
  355. package/types/cli/tools/benchmark.d.ts.map +1 -1
  356. package/types/cli/tools/db-dump.d.ts.map +1 -1
  357. package/types/core/bytes.d.ts +2 -0
  358. package/types/core/bytes.d.ts.map +1 -1
  359. package/types/core/cues.d.ts +11 -0
  360. package/types/core/cues.d.ts.map +1 -1
  361. package/types/core/kel/delegation-ancestry.d.ts +41 -0
  362. package/types/core/kel/delegation-ancestry.d.ts.map +1 -0
  363. package/types/core/kel/eventing.d.ts.map +1 -1
  364. package/types/core/kel/kever.d.ts +5 -4
  365. package/types/core/kel/kever.d.ts.map +1 -1
  366. package/types/core/mailbox/kram-policy.d.ts +14 -0
  367. package/types/core/mailbox/kram-policy.d.ts.map +1 -1
  368. package/types/core/mailbox/kram-pruning.d.ts +1 -3
  369. package/types/core/mailbox/kram-pruning.d.ts.map +1 -1
  370. package/types/core/mailbox/kraming.d.ts +1 -1
  371. package/types/core/mailbox/kraming.d.ts.map +1 -1
  372. package/types/core/records.d.ts +61 -0
  373. package/types/core/records.d.ts.map +1 -1
  374. package/types/core/routing.d.ts +6 -0
  375. package/types/core/routing.d.ts.map +1 -1
  376. package/types/db/basing.d.ts +22 -25
  377. package/types/db/basing.d.ts.map +1 -1
  378. package/types/db/core/dber.d.ts +505 -0
  379. package/types/db/core/dber.d.ts.map +1 -0
  380. package/types/db/core/index.d.ts +4 -2
  381. package/types/db/core/index.d.ts.map +1 -1
  382. package/types/db/core/indexeddb-persistence.d.ts +59 -0
  383. package/types/db/core/indexeddb-persistence.d.ts.map +1 -0
  384. package/types/db/core/lmdb-opener.d.ts +17 -0
  385. package/types/db/core/lmdb-opener.d.ts.map +1 -0
  386. package/types/db/core/lmdber.d.ts +60 -383
  387. package/types/db/core/lmdber.d.ts.map +1 -1
  388. package/types/db/core/memstore.d.ts +129 -0
  389. package/types/db/core/memstore.d.ts.map +1 -0
  390. package/types/db/core/path-manager.d.ts +22 -45
  391. package/types/db/core/path-manager.d.ts.map +1 -1
  392. package/types/db/core/store-owner.d.ts +59 -0
  393. package/types/db/core/store-owner.d.ts.map +1 -0
  394. package/types/db/core/webdber.d.ts +127 -0
  395. package/types/db/core/webdber.d.ts.map +1 -0
  396. package/types/db/escrowing.d.ts +3 -3
  397. package/types/db/escrowing.d.ts.map +1 -1
  398. package/types/db/exchange/exchange-nests.d.ts.map +1 -1
  399. package/types/db/indexeddb.d.ts +37 -0
  400. package/types/db/indexeddb.d.ts.map +1 -0
  401. package/types/db/keeping.d.ts +14 -25
  402. package/types/db/keeping.d.ts.map +1 -1
  403. package/types/db/koming.d.ts +7 -8
  404. package/types/db/koming.d.ts.map +1 -1
  405. package/types/db/lmdb-stores.d.ts +45 -0
  406. package/types/db/lmdb-stores.d.ts.map +1 -0
  407. package/types/db/lmdb.d.ts +7 -0
  408. package/types/db/lmdb.d.ts.map +1 -0
  409. package/types/db/mailbox/mailboxing.d.ts +7 -21
  410. package/types/db/mailbox/mailboxing.d.ts.map +1 -1
  411. package/types/db/noting.d.ts +7 -12
  412. package/types/db/noting.d.ts.map +1 -1
  413. package/types/db/reger.d.ts +7 -11
  414. package/types/db/reger.d.ts.map +1 -1
  415. package/types/db/replay/witness-replay.d.ts +0 -2
  416. package/types/db/replay/witness-replay.d.ts.map +1 -1
  417. package/types/db/store-lock.d.ts +72 -0
  418. package/types/db/store-lock.d.ts.map +1 -0
  419. package/types/db/subing.d.ts +24 -25
  420. package/types/db/subing.d.ts.map +1 -1
  421. package/types/npm/db-indexeddb.d.ts +4 -0
  422. package/types/npm/db-indexeddb.d.ts.map +1 -0
  423. package/types/npm/db-lmdb.d.ts +4 -0
  424. package/types/npm/db-lmdb.d.ts.map +1 -0
  425. package/types/npm/runtime-node.d.ts +4 -0
  426. package/types/npm/runtime-node.d.ts.map +1 -0
  427. package/types/npm/runtime-web.d.ts +4 -0
  428. package/types/npm/runtime-web.d.ts.map +1 -0
  429. package/types/runtime/index.d.ts +48 -14
  430. package/types/runtime/index.d.ts.map +1 -1
  431. package/types/runtime/node.d.ts +15 -0
  432. package/types/runtime/node.d.ts.map +1 -0
  433. package/types/runtime/web/output-barrier.d.ts +30 -0
  434. package/types/runtime/web/output-barrier.d.ts.map +1 -0
  435. package/types/runtime/web/persistent-storage.d.ts +36 -0
  436. package/types/runtime/web/persistent-storage.d.ts.map +1 -0
  437. package/types/runtime/web.d.ts +11 -0
  438. package/types/runtime/web.d.ts.map +1 -0
  439. package/types/vdr/tel-publication.d.ts +6 -0
  440. package/types/vdr/tel-publication.d.ts.map +1 -1
  441. package/types/version.d.ts +2 -2
  442. package/esm/keri/npm/src/acdc/relating.js +0 -59
  443. package/esm/keri/npm/src/cli/common/tel-completion.js +0 -24
  444. package/esm/keri/npm/src/db/baser-defaults.js +0 -11
  445. package/types/acdc/relating.d.ts +0 -21
  446. package/types/acdc/relating.d.ts.map +0 -1
  447. package/types/cli/common/tel-completion.d.ts +0 -8
  448. package/types/cli/common/tel-completion.d.ts.map +0 -1
  449. package/types/db/baser-defaults.d.ts +0 -5
  450. 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 { acdcEdgeBlocks as blocks, acdcEdgeTarget, acdcGroupLabels } from "../../acdc/chaining.js";
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 nodes and walk their reachable graph in BFS order.
62
- * Offers may omit far nodes; grants require every referenced node. Nested ownership
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, closed) {
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) || !body.verify() || !nodeIlks.has(body.ilk)
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
- if (!nodes.has(origin))
78
- return null;
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, true);
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
- if (acdcV2GraphUse(hby, protocol.registry?.store ?? null, origins[0], frame.nests ?? []) !== true)
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 pending multisig wrapper around an embedded IPEX message.
137
- *
138
- * @param hby Borrowed local identities and accepted-state stores.
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* approveMultisigIpex(hby, protocol, postman, reger, wrapper, options = {}) {
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, false);
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, true);
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, false);
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. */