keri-ts 0.11.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (820) hide show
  1. package/README.md +32 -2
  2. package/esm/keri/npm/src/_dnt.polyfills.js +36 -0
  3. package/esm/keri/npm/src/acdc/chaining.js +213 -0
  4. package/esm/keri/npm/src/acdc/dhking.js +716 -0
  5. package/esm/keri/npm/src/acdc/messaging.js +2 -0
  6. package/esm/keri/npm/src/acdc/observing.js +47 -40
  7. package/esm/keri/npm/src/acdc/regbasing.js +22 -22
  8. package/esm/keri/npm/src/acdc/regengine.js +88 -119
  9. package/esm/keri/npm/src/acdc/regeventing.js +163 -44
  10. package/esm/keri/npm/src/acdc/registering.js +99 -23
  11. package/esm/keri/npm/src/acdc/registraring.js +82 -46
  12. package/esm/keri/npm/src/acdc/relating.js +59 -0
  13. package/esm/keri/npm/src/acdc/salting.js +720 -0
  14. package/esm/keri/npm/src/acdc/scheming.js +103 -105
  15. package/esm/keri/npm/src/acdc/unblinding.js +1042 -0
  16. package/esm/keri/npm/src/app/{authenticating.js → bootstrap/authenticating.js} +40 -39
  17. package/esm/keri/npm/src/app/bootstrap/bootstrapping.js +109 -0
  18. package/esm/keri/npm/src/app/bootstrap/oobi-replies.js +113 -0
  19. package/esm/keri/npm/src/app/{oobiery.js → bootstrap/oobiery.js} +211 -267
  20. package/esm/keri/npm/src/app/credentials/credential-importing.js +201 -0
  21. package/esm/keri/npm/src/app/credentials/credential-proposals.js +120 -0
  22. package/esm/keri/npm/src/app/credentials/credential-revoking.js +165 -0
  23. package/esm/keri/npm/src/app/credentials/credential-workflows.js +365 -0
  24. package/esm/keri/npm/src/app/credentials/tel-publishing.js +27 -0
  25. package/esm/keri/npm/src/app/{verifying.js → credentials/verifying.js} +50 -45
  26. package/esm/keri/npm/src/app/delivery/forwarding.js +600 -0
  27. package/esm/keri/npm/src/app/delivery/introducing.js +68 -0
  28. package/esm/keri/npm/src/app/delivery/reply-streams.js +230 -0
  29. package/esm/keri/npm/src/app/delivery/respondant.js +159 -0
  30. package/esm/keri/npm/src/app/delivery/stored-replies.js +53 -0
  31. package/esm/keri/npm/src/app/exchanges/essr.js +111 -0
  32. package/esm/keri/npm/src/app/exchanges/exchange-messaging.js +66 -0
  33. package/esm/keri/npm/src/app/exchanges/exchanging.js +1354 -0
  34. package/esm/keri/npm/src/app/{challenging.js → identity/challenging.js} +13 -8
  35. package/esm/keri/npm/src/app/{configing.js → identity/configing.js} +4 -4
  36. package/esm/keri/npm/src/app/{delegating.js → identity/delegating.js} +118 -40
  37. package/esm/keri/npm/src/app/{endpoint-roleing.js → identity/endpoint-roleing.js} +43 -39
  38. package/esm/keri/npm/src/app/{habbing.js → identity/habbing.js} +258 -226
  39. package/esm/keri/npm/src/app/{keeping.js → identity/keeping.js} +60 -56
  40. package/esm/keri/npm/src/app/{organizing.js → identity/organizing.js} +47 -21
  41. package/esm/keri/npm/src/app/{ipex-building.js → ipex/ipex-building.js} +53 -55
  42. package/esm/keri/npm/src/app/ipex/ipex-credentialing.js +359 -0
  43. package/esm/keri/npm/src/app/{ipex-graph.js → ipex/ipex-graph.js} +70 -124
  44. package/esm/keri/npm/src/app/ipex/ipex-grouping.js +664 -0
  45. package/esm/keri/npm/src/app/ipex/ipex-node-authentication.js +185 -0
  46. package/esm/keri/npm/src/app/ipex/ipex-v2.js +692 -0
  47. package/esm/keri/npm/src/app/{ipexing.js → ipex/ipexing.js} +59 -10
  48. package/esm/keri/npm/src/app/mailbox/forward-handler.js +228 -0
  49. package/esm/keri/npm/src/app/{mailbox-director.js → mailbox/mailbox-director.js} +146 -139
  50. package/esm/keri/npm/src/app/mailbox/mailbox-poller.js +305 -0
  51. package/esm/keri/npm/src/app/mailbox/mailbox-sse.js +254 -0
  52. package/esm/keri/npm/src/app/{mailboxing.js → mailbox/mailboxing.js} +117 -70
  53. package/esm/keri/npm/src/app/mailbox/topic-routing.js +54 -0
  54. package/esm/keri/npm/src/app/multisig/group-members.js +173 -0
  55. package/esm/keri/npm/src/app/multisig/grouping.js +932 -0
  56. package/esm/keri/npm/src/app/multisig/multisig-messaging.js +164 -0
  57. package/esm/keri/npm/src/app/multisig/multisig-workflows.js +821 -0
  58. package/esm/keri/npm/src/app/{notifying.js → notifications/notifying.js} +23 -50
  59. package/esm/keri/npm/src/app/notifications/signaling.js +177 -0
  60. package/esm/keri/npm/src/app/{parsering.js → protocol/parsering.js} +123 -53
  61. package/esm/keri/npm/src/app/protocol/protocol-processing.js +245 -0
  62. package/esm/keri/npm/src/app/protocol/reactor.js +55 -0
  63. package/esm/keri/npm/src/app/queries/query-replies.js +151 -0
  64. package/esm/keri/npm/src/app/queries/querying.js +306 -0
  65. package/esm/keri/npm/src/app/queries/witness-inquisitor.js +415 -0
  66. package/esm/keri/npm/src/app/runtime/abortable.js +103 -0
  67. package/esm/keri/npm/src/app/runtime/agent-runtime.js +633 -0
  68. package/esm/keri/npm/src/app/runtime/cue-runtime.js +61 -0
  69. package/esm/keri/npm/src/app/runtime/runtime-clock.js +6 -0
  70. package/esm/keri/npm/src/app/{byte-source.js → transport/byte-source.js} +43 -21
  71. package/esm/keri/npm/src/app/transport/cesr-egress.js +317 -0
  72. package/esm/keri/npm/src/app/{cesr-http.js → transport/cesr-http.js} +28 -78
  73. package/esm/keri/npm/src/app/transport/http-client.js +172 -0
  74. package/esm/keri/npm/src/app/transport/http-messenger.js +52 -0
  75. package/esm/keri/npm/src/app/transport/http-stream-messenger.js +60 -0
  76. package/esm/keri/npm/src/app/transport/httping.js +57 -0
  77. package/esm/keri/npm/src/app/transport/message-source.js +77 -0
  78. package/esm/keri/npm/src/app/transport/messengering.js +68 -0
  79. package/esm/keri/npm/src/app/{socket-source.js → transport/socket-source.js} +41 -5
  80. package/esm/keri/npm/src/app/transport/tcp-egress.js +377 -0
  81. package/esm/keri/npm/src/app/transport/tcp-messenger.js +162 -0
  82. package/esm/keri/npm/src/app/transport/tcp-stream-messenger.js +40 -0
  83. package/esm/keri/npm/src/app/transport/transport-error.js +14 -0
  84. package/esm/keri/npm/src/app/witness/http-endpoints.js +185 -0
  85. package/esm/keri/npm/src/app/witness/ingress.js +148 -0
  86. package/esm/keri/npm/src/app/witness/receipt-client.js +248 -0
  87. package/esm/keri/npm/src/app/witness/receipt-messages.js +29 -0
  88. package/esm/keri/npm/src/app/witness/receipting.js +323 -0
  89. package/esm/keri/npm/src/app/witness/registration.js +50 -0
  90. package/esm/keri/npm/src/cli/common/bootstrap.js +12 -0
  91. package/esm/keri/npm/src/{app/cli → cli}/common/context.js +47 -9
  92. package/esm/keri/npm/src/{app/cli → cli}/common/existing.js +9 -29
  93. package/esm/keri/npm/src/cli/common/parsing.js +279 -0
  94. package/esm/keri/npm/src/cli/common/passcode.js +66 -0
  95. package/esm/keri/npm/src/cli/common/tel-completion.js +24 -0
  96. package/esm/keri/npm/src/{app/cli → cli}/common/witness-auth.js +2 -2
  97. package/esm/keri/npm/src/cli/credentials/ipex.js +702 -0
  98. package/esm/keri/npm/src/cli/credentials/vc.js +399 -0
  99. package/esm/keri/npm/src/{app/cli → cli/endpoints}/did.js +71 -53
  100. package/esm/keri/npm/src/{app/cli → cli/endpoints}/ends.js +34 -31
  101. package/esm/keri/npm/src/{app/cli → cli/endpoints}/loc.js +22 -20
  102. package/esm/keri/npm/src/cli/endpoints/oobi-clean.js +134 -0
  103. package/esm/keri/npm/src/{app/cli → cli/endpoints}/oobi.js +37 -36
  104. package/esm/keri/npm/src/{app/cli → cli/identity}/aid.js +8 -7
  105. package/esm/keri/npm/src/cli/identity/challenge.js +181 -0
  106. package/esm/keri/npm/src/{app/cli → cli/identity}/delegate.js +88 -73
  107. package/esm/keri/npm/src/{app/cli → cli/identity}/export.js +9 -8
  108. package/esm/keri/npm/src/cli/identity/incept.js +181 -0
  109. package/esm/keri/npm/src/cli/identity/init.js +153 -0
  110. package/esm/keri/npm/src/cli/identity/interact.js +84 -0
  111. package/esm/keri/npm/src/{app/cli → cli/identity}/list.js +7 -6
  112. package/esm/keri/npm/src/cli/identity/rotate.js +172 -0
  113. package/esm/keri/npm/src/cli/index.js +38 -0
  114. package/esm/keri/npm/src/{app/cli → cli/messaging}/exchange.js +24 -24
  115. package/esm/keri/npm/src/cli/messaging/multisig.js +569 -0
  116. package/esm/keri/npm/src/{app/cli → cli/messaging}/notifications.js +26 -22
  117. package/esm/keri/npm/src/{app/cli → cli}/output.js +1 -1
  118. package/esm/keri/npm/src/cli/tools/annotate.js +25 -0
  119. package/esm/keri/npm/src/{app/cli → cli/tools}/benchmark.js +18 -9
  120. package/esm/keri/npm/src/{app/cli → cli/tools}/db-dump.js +14 -27
  121. package/esm/keri/npm/src/{app/cli → cli/tools}/saidify.js +3 -2
  122. package/esm/keri/npm/src/{app/cli → cli/tools}/sign.js +16 -10
  123. package/esm/keri/npm/src/{app/cli → cli/tools}/verify.js +10 -10
  124. package/esm/keri/npm/src/core/attachment-countering.js +31 -1
  125. package/esm/keri/npm/src/core/deck.js +5 -44
  126. package/esm/keri/npm/src/core/dispatch.js +10 -2
  127. package/esm/keri/npm/src/core/errors.js +5 -10
  128. package/esm/keri/npm/src/core/{exchange-proofing.js → exchange/exchange-proofing.js} +32 -2
  129. package/esm/keri/npm/src/core/{protocol-exchanging.js → exchange/protocol-exchanging.js} +47 -4
  130. package/esm/keri/npm/src/core/genus-framing.js +44 -0
  131. package/esm/keri/npm/src/core/{eventing.js → kel/eventing.js} +209 -390
  132. package/esm/keri/npm/src/core/kel/kever-decisions.js +70 -0
  133. package/esm/keri/npm/src/core/{kever.js → kel/kever.js} +84 -167
  134. package/esm/keri/npm/src/core/logger.js +3 -3
  135. package/esm/keri/npm/src/core/{kram-policy.js → mailbox/kram-policy.js} +14 -4
  136. package/esm/keri/npm/src/core/{kram-pruning.js → mailbox/kram-pruning.js} +5 -15
  137. package/esm/keri/npm/src/core/{kram-signatures.js → mailbox/kram-signatures.js} +1 -1
  138. package/esm/keri/npm/src/core/mailbox/kram-staging.js +149 -0
  139. package/esm/keri/npm/src/core/{kram-time.js → mailbox/kram-time.js} +9 -15
  140. package/esm/keri/npm/src/core/mailbox/kraming.js +78 -0
  141. package/esm/keri/npm/src/core/protocol-eventing.js +6 -1
  142. package/esm/keri/npm/src/core/protocol-serialization.js +9 -34
  143. package/esm/keri/npm/src/core/protocol-vdr-eventing.js +10 -11
  144. package/esm/keri/npm/src/core/records.js +0 -19
  145. package/esm/keri/npm/src/core/routing.js +187 -199
  146. package/esm/keri/npm/src/db/baser-defaults.js +11 -0
  147. package/esm/keri/npm/src/db/basing.js +224 -401
  148. package/esm/keri/npm/src/db/core/keys.js +2 -2
  149. package/esm/keri/npm/src/db/core/lmdber.js +123 -149
  150. package/esm/keri/npm/src/db/core/path-manager.js +2 -4
  151. package/esm/keri/npm/src/db/escrowing.js +82 -200
  152. package/esm/keri/npm/src/db/exchange/exchange-nests.js +54 -0
  153. package/esm/keri/npm/src/db/exchange/exchange-records.js +7 -0
  154. package/esm/keri/npm/src/db/index.js +5 -6
  155. package/esm/keri/npm/src/db/keeping.js +123 -6
  156. package/esm/keri/npm/src/db/{kram-factors.js → mailbox/kram-factors.js} +17 -50
  157. package/esm/keri/npm/src/db/{mailboxing.js → mailbox/mailboxing.js} +5 -8
  158. package/esm/keri/npm/src/db/reger.js +48 -69
  159. package/esm/keri/npm/src/db/{kel-replay.js → replay/kel-replay.js} +12 -24
  160. package/esm/keri/npm/src/db/{tel-replay.js → replay/tel-replay.js} +38 -36
  161. package/esm/keri/npm/src/db/{witness-replay.js → replay/witness-replay.js} +8 -14
  162. package/esm/keri/npm/src/db/subing.js +2 -11
  163. package/esm/keri/npm/src/did/keri/resolving.js +4 -18
  164. package/esm/keri/npm/src/did/webs/artifacts.js +21 -24
  165. package/esm/keri/npm/src/did/webs/designated-aliases.js +18 -48
  166. package/esm/keri/npm/src/did/webs/documenting.js +8 -8
  167. package/esm/keri/npm/src/did/webs/resolving.js +73 -74
  168. package/esm/keri/npm/src/library/index.js +1 -1
  169. package/esm/keri/npm/src/npm/cli.js +1 -1
  170. package/esm/keri/npm/src/npm/index.js +1 -1
  171. package/esm/keri/npm/src/runtime/index.js +105 -74
  172. package/esm/keri/npm/src/vdr/backer-state.js +55 -0
  173. package/esm/keri/npm/src/vdr/credential-tsn-record.js +59 -0
  174. package/esm/keri/npm/src/vdr/credentialing.js +84 -109
  175. package/esm/keri/npm/src/vdr/eventing.js +633 -251
  176. package/esm/keri/npm/src/vdr/registry-tsn-record.js +55 -0
  177. package/esm/keri/npm/src/vdr/revoking.js +90 -0
  178. package/esm/keri/npm/src/vdr/tel-anchor.js +29 -0
  179. package/esm/keri/npm/src/vdr/tel-publication.js +178 -0
  180. package/esm/keri/npm/src/vdr/tsn-query.js +15 -10
  181. package/esm/keri/npm/src/{app/version.js → version.js} +2 -2
  182. package/package.json +7 -21
  183. package/types/_dnt.polyfills.d.ts +55 -0
  184. package/types/_dnt.polyfills.d.ts.map +1 -1
  185. package/types/acdc/chaining.d.ts +35 -0
  186. package/types/acdc/chaining.d.ts.map +1 -0
  187. package/types/acdc/dhking.d.ts +136 -0
  188. package/types/acdc/dhking.d.ts.map +1 -0
  189. package/types/acdc/messaging.d.ts.map +1 -1
  190. package/types/acdc/observing.d.ts +19 -15
  191. package/types/acdc/observing.d.ts.map +1 -1
  192. package/types/acdc/regbasing.d.ts +8 -9
  193. package/types/acdc/regbasing.d.ts.map +1 -1
  194. package/types/acdc/regengine.d.ts +14 -28
  195. package/types/acdc/regengine.d.ts.map +1 -1
  196. package/types/acdc/regeventing.d.ts +24 -7
  197. package/types/acdc/regeventing.d.ts.map +1 -1
  198. package/types/acdc/registering.d.ts +27 -11
  199. package/types/acdc/registering.d.ts.map +1 -1
  200. package/types/acdc/registraring.d.ts +22 -22
  201. package/types/acdc/registraring.d.ts.map +1 -1
  202. package/types/acdc/relating.d.ts +21 -0
  203. package/types/acdc/relating.d.ts.map +1 -0
  204. package/types/acdc/salting.d.ts +241 -0
  205. package/types/acdc/salting.d.ts.map +1 -0
  206. package/types/acdc/scheming.d.ts +3 -2
  207. package/types/acdc/scheming.d.ts.map +1 -1
  208. package/types/acdc/unblinding.d.ts +150 -0
  209. package/types/acdc/unblinding.d.ts.map +1 -0
  210. package/types/app/bootstrap/authenticating.d.ts +54 -0
  211. package/types/app/bootstrap/authenticating.d.ts.map +1 -0
  212. package/types/app/bootstrap/bootstrapping.d.ts +45 -0
  213. package/types/app/bootstrap/bootstrapping.d.ts.map +1 -0
  214. package/types/app/bootstrap/oobi-replies.d.ts +8 -0
  215. package/types/app/bootstrap/oobi-replies.d.ts.map +1 -0
  216. package/types/app/{oobiery.d.ts → bootstrap/oobiery.d.ts} +98 -27
  217. package/types/app/bootstrap/oobiery.d.ts.map +1 -0
  218. package/types/app/credentials/credential-importing.d.ts +29 -0
  219. package/types/app/credentials/credential-importing.d.ts.map +1 -0
  220. package/types/app/credentials/credential-proposals.d.ts +27 -0
  221. package/types/app/credentials/credential-proposals.d.ts.map +1 -0
  222. package/types/app/credentials/credential-revoking.d.ts +44 -0
  223. package/types/app/credentials/credential-revoking.d.ts.map +1 -0
  224. package/types/app/credentials/credential-workflows.d.ts +149 -0
  225. package/types/app/credentials/credential-workflows.d.ts.map +1 -0
  226. package/types/app/{schema-resolving.d.ts → credentials/schema-resolving.d.ts} +2 -2
  227. package/types/app/credentials/schema-resolving.d.ts.map +1 -0
  228. package/types/app/credentials/tel-publishing.d.ts +16 -0
  229. package/types/app/credentials/tel-publishing.d.ts.map +1 -0
  230. package/types/app/{verifying.d.ts → credentials/verifying.d.ts} +20 -9
  231. package/types/app/credentials/verifying.d.ts.map +1 -0
  232. package/types/app/delivery/forwarding.d.ts +227 -0
  233. package/types/app/delivery/forwarding.d.ts.map +1 -0
  234. package/types/app/delivery/introducing.d.ts +21 -0
  235. package/types/app/delivery/introducing.d.ts.map +1 -0
  236. package/types/app/delivery/reply-streams.d.ts +49 -0
  237. package/types/app/delivery/reply-streams.d.ts.map +1 -0
  238. package/types/app/delivery/respondant.d.ts +52 -0
  239. package/types/app/delivery/respondant.d.ts.map +1 -0
  240. package/types/app/delivery/stored-replies.d.ts +11 -0
  241. package/types/app/delivery/stored-replies.d.ts.map +1 -0
  242. package/types/app/exchanges/essr.d.ts +53 -0
  243. package/types/app/exchanges/essr.d.ts.map +1 -0
  244. package/types/app/exchanges/exchange-messaging.d.ts +73 -0
  245. package/types/app/exchanges/exchange-messaging.d.ts.map +1 -0
  246. package/types/app/exchanges/exchanging.d.ts +379 -0
  247. package/types/app/exchanges/exchanging.d.ts.map +1 -0
  248. package/types/app/{challenging.d.ts → identity/challenging.d.ts} +9 -3
  249. package/types/app/identity/challenging.d.ts.map +1 -0
  250. package/types/app/{configing.d.ts → identity/configing.d.ts} +1 -1
  251. package/types/app/identity/configing.d.ts.map +1 -0
  252. package/types/app/{delegating.d.ts → identity/delegating.d.ts} +59 -17
  253. package/types/app/identity/delegating.d.ts.map +1 -0
  254. package/types/app/identity/endpoint-roleing.d.ts +54 -0
  255. package/types/app/identity/endpoint-roleing.d.ts.map +1 -0
  256. package/types/app/{habbing.d.ts → identity/habbing.d.ts} +86 -54
  257. package/types/app/identity/habbing.d.ts.map +1 -0
  258. package/types/app/{keeping.d.ts → identity/keeping.d.ts} +19 -5
  259. package/types/app/identity/keeping.d.ts.map +1 -0
  260. package/types/app/{organizing.d.ts → identity/organizing.d.ts} +19 -4
  261. package/types/app/identity/organizing.d.ts.map +1 -0
  262. package/types/app/{ipex-building.d.ts → ipex/ipex-building.d.ts} +5 -5
  263. package/types/app/ipex/ipex-building.d.ts.map +1 -0
  264. package/types/app/{ipex-credentialing.d.ts → ipex/ipex-credentialing.d.ts} +42 -10
  265. package/types/app/ipex/ipex-credentialing.d.ts.map +1 -0
  266. package/types/app/ipex/ipex-graph.d.ts +28 -0
  267. package/types/app/ipex/ipex-graph.d.ts.map +1 -0
  268. package/types/app/ipex/ipex-grouping.d.ts +112 -0
  269. package/types/app/ipex/ipex-grouping.d.ts.map +1 -0
  270. package/types/app/ipex/ipex-node-authentication.d.ts +32 -0
  271. package/types/app/ipex/ipex-node-authentication.d.ts.map +1 -0
  272. package/types/app/ipex/ipex-v2.d.ts +71 -0
  273. package/types/app/ipex/ipex-v2.d.ts.map +1 -0
  274. package/types/app/{ipexing.d.ts → ipex/ipexing.d.ts} +21 -8
  275. package/types/app/ipex/ipexing.d.ts.map +1 -0
  276. package/types/app/mailbox/forward-handler.d.ts +68 -0
  277. package/types/app/mailbox/forward-handler.d.ts.map +1 -0
  278. package/types/app/mailbox/mailbox-director.d.ts +252 -0
  279. package/types/app/mailbox/mailbox-director.d.ts.map +1 -0
  280. package/types/app/mailbox/mailbox-poller.d.ts +149 -0
  281. package/types/app/mailbox/mailbox-poller.d.ts.map +1 -0
  282. package/types/app/mailbox/mailbox-sse.d.ts +63 -0
  283. package/types/app/mailbox/mailbox-sse.d.ts.map +1 -0
  284. package/types/app/{mailboxing.d.ts → mailbox/mailboxing.d.ts} +92 -43
  285. package/types/app/mailbox/mailboxing.d.ts.map +1 -0
  286. package/types/app/mailbox/topic-routing.d.ts +18 -0
  287. package/types/app/mailbox/topic-routing.d.ts.map +1 -0
  288. package/types/app/multisig/group-members.d.ts +60 -0
  289. package/types/app/multisig/group-members.d.ts.map +1 -0
  290. package/types/app/multisig/grouping.d.ts +317 -0
  291. package/types/app/multisig/grouping.d.ts.map +1 -0
  292. package/types/app/multisig/multisig-messaging.d.ts +97 -0
  293. package/types/app/multisig/multisig-messaging.d.ts.map +1 -0
  294. package/types/app/multisig/multisig-workflows.d.ts +85 -0
  295. package/types/app/multisig/multisig-workflows.d.ts.map +1 -0
  296. package/types/app/{notifying.d.ts → notifications/notifying.d.ts} +5 -6
  297. package/types/app/notifications/notifying.d.ts.map +1 -0
  298. package/types/app/notifications/signaling.d.ts +68 -0
  299. package/types/app/notifications/signaling.d.ts.map +1 -0
  300. package/types/app/protocol/parsering.d.ts +128 -0
  301. package/types/app/protocol/parsering.d.ts.map +1 -0
  302. package/types/app/{protocol-host-policy.d.ts → protocol/protocol-host-policy.d.ts} +1 -10
  303. package/types/app/protocol/protocol-host-policy.d.ts.map +1 -0
  304. package/types/app/protocol/protocol-processing.d.ts +140 -0
  305. package/types/app/protocol/protocol-processing.d.ts.map +1 -0
  306. package/types/app/protocol/reactor.d.ts +43 -0
  307. package/types/app/protocol/reactor.d.ts.map +1 -0
  308. package/types/app/queries/query-replies.d.ts +78 -0
  309. package/types/app/queries/query-replies.d.ts.map +1 -0
  310. package/types/app/queries/querying.d.ts +155 -0
  311. package/types/app/queries/querying.d.ts.map +1 -0
  312. package/types/app/queries/witness-inquisitor.d.ts +150 -0
  313. package/types/app/queries/witness-inquisitor.d.ts.map +1 -0
  314. package/types/app/runtime/abortable.d.ts +39 -0
  315. package/types/app/runtime/abortable.d.ts.map +1 -0
  316. package/types/app/runtime/agent-runtime.d.ts +348 -0
  317. package/types/app/runtime/agent-runtime.d.ts.map +1 -0
  318. package/types/app/runtime/cue-runtime.d.ts +33 -0
  319. package/types/app/runtime/cue-runtime.d.ts.map +1 -0
  320. package/types/app/runtime/runtime-clock.d.ts +28 -0
  321. package/types/app/runtime/runtime-clock.d.ts.map +1 -0
  322. package/types/app/runtime/runtime-turn.d.ts.map +1 -0
  323. package/types/app/transport/byte-source.d.ts +41 -0
  324. package/types/app/transport/byte-source.d.ts.map +1 -0
  325. package/types/app/transport/cesr-egress.d.ts +117 -0
  326. package/types/app/transport/cesr-egress.d.ts.map +1 -0
  327. package/types/app/{cesr-http.d.ts → transport/cesr-http.d.ts} +9 -33
  328. package/types/app/transport/cesr-http.d.ts.map +1 -0
  329. package/types/app/transport/http-client.d.ts +99 -0
  330. package/types/app/transport/http-client.d.ts.map +1 -0
  331. package/types/app/transport/http-messenger.d.ts +37 -0
  332. package/types/app/transport/http-messenger.d.ts.map +1 -0
  333. package/types/app/transport/http-stream-messenger.d.ts +30 -0
  334. package/types/app/transport/http-stream-messenger.d.ts.map +1 -0
  335. package/types/app/transport/httping.d.ts +19 -0
  336. package/types/app/transport/httping.d.ts.map +1 -0
  337. package/types/app/transport/message-source.d.ts +22 -0
  338. package/types/app/transport/message-source.d.ts.map +1 -0
  339. package/types/app/transport/messengering.d.ts +41 -0
  340. package/types/app/transport/messengering.d.ts.map +1 -0
  341. package/types/app/{socket-source.d.ts → transport/socket-source.d.ts} +10 -3
  342. package/types/app/transport/socket-source.d.ts.map +1 -0
  343. package/types/app/transport/tcp-egress.d.ts +118 -0
  344. package/types/app/transport/tcp-egress.d.ts.map +1 -0
  345. package/types/app/transport/tcp-messenger.d.ts +69 -0
  346. package/types/app/transport/tcp-messenger.d.ts.map +1 -0
  347. package/types/app/transport/tcp-stream-messenger.d.ts +25 -0
  348. package/types/app/transport/tcp-stream-messenger.d.ts.map +1 -0
  349. package/types/app/transport/transport-error.d.ts +12 -0
  350. package/types/app/transport/transport-error.d.ts.map +1 -0
  351. package/types/app/witness/http-endpoints.d.ts +77 -0
  352. package/types/app/witness/http-endpoints.d.ts.map +1 -0
  353. package/types/app/witness/ingress.d.ts +65 -0
  354. package/types/app/witness/ingress.d.ts.map +1 -0
  355. package/types/app/witness/receipt-client.d.ts +82 -0
  356. package/types/app/witness/receipt-client.d.ts.map +1 -0
  357. package/types/app/witness/receipt-messages.d.ts +21 -0
  358. package/types/app/witness/receipt-messages.d.ts.map +1 -0
  359. package/types/app/witness/receipting.d.ts +117 -0
  360. package/types/app/witness/receipting.d.ts.map +1 -0
  361. package/types/app/witness/registration.d.ts +27 -0
  362. package/types/app/witness/registration.d.ts.map +1 -0
  363. package/types/cli/common/bootstrap.d.ts +5 -0
  364. package/types/cli/common/bootstrap.d.ts.map +1 -0
  365. package/types/{app/cli → cli}/common/context.d.ts +10 -9
  366. package/types/cli/common/context.d.ts.map +1 -0
  367. package/types/{app/cli → cli}/common/existing.d.ts +2 -8
  368. package/types/cli/common/existing.d.ts.map +1 -0
  369. package/types/{app/cli → cli}/common/parsing.d.ts +26 -15
  370. package/types/cli/common/parsing.d.ts.map +1 -0
  371. package/types/cli/common/passcode.d.ts +9 -0
  372. package/types/cli/common/passcode.d.ts.map +1 -0
  373. package/types/cli/common/rendering.d.ts.map +1 -0
  374. package/types/cli/common/tel-completion.d.ts +8 -0
  375. package/types/cli/common/tel-completion.d.ts.map +1 -0
  376. package/types/{app/cli → cli}/common/witness-auth.d.ts +1 -1
  377. package/types/cli/common/witness-auth.d.ts.map +1 -0
  378. package/types/cli/credentials/ipex.d.ts +110 -0
  379. package/types/cli/credentials/ipex.d.ts.map +1 -0
  380. package/types/cli/credentials/vc.d.ts +42 -0
  381. package/types/cli/credentials/vc.d.ts.map +1 -0
  382. package/types/{app/cli → cli/endpoints}/did.d.ts +5 -1
  383. package/types/cli/endpoints/did.d.ts.map +1 -0
  384. package/types/{app/cli → cli/endpoints}/ends.d.ts +9 -1
  385. package/types/cli/endpoints/ends.d.ts.map +1 -0
  386. package/types/cli/endpoints/loc.d.ts.map +1 -0
  387. package/types/cli/endpoints/oobi-clean.d.ts +8 -0
  388. package/types/cli/endpoints/oobi-clean.d.ts.map +1 -0
  389. package/types/{app/cli → cli/endpoints}/oobi.d.ts +3 -1
  390. package/types/cli/endpoints/oobi.d.ts.map +1 -0
  391. package/types/cli/identity/aid.d.ts.map +1 -0
  392. package/types/{app/cli → cli/identity}/challenge.d.ts +5 -1
  393. package/types/cli/identity/challenge.d.ts.map +1 -0
  394. package/types/cli/identity/delegate.d.ts +4 -0
  395. package/types/cli/identity/delegate.d.ts.map +1 -0
  396. package/types/cli/identity/export.d.ts.map +1 -0
  397. package/types/{app/cli → cli/identity}/incept.d.ts +2 -0
  398. package/types/cli/identity/incept.d.ts.map +1 -0
  399. package/types/{app/cli → cli/identity}/init.d.ts +2 -0
  400. package/types/cli/identity/init.d.ts.map +1 -0
  401. package/types/{app/cli → cli/identity}/interact.d.ts +2 -0
  402. package/types/cli/identity/interact.d.ts.map +1 -0
  403. package/types/cli/identity/list.d.ts.map +1 -0
  404. package/types/{app/cli → cli/identity}/rotate.d.ts +9 -2
  405. package/types/cli/identity/rotate.d.ts.map +1 -0
  406. package/types/cli/index.d.ts +39 -0
  407. package/types/cli/index.d.ts.map +1 -0
  408. package/types/{app/cli → cli/messaging}/exchange.d.ts +3 -1
  409. package/types/cli/messaging/exchange.d.ts.map +1 -0
  410. package/types/cli/messaging/multisig.d.ts +29 -0
  411. package/types/cli/messaging/multisig.d.ts.map +1 -0
  412. package/types/cli/messaging/notifications.d.ts.map +1 -0
  413. package/types/cli/output.d.ts.map +1 -0
  414. package/types/cli/tools/annotate-color.d.ts.map +1 -0
  415. package/types/cli/tools/annotate.d.ts.map +1 -0
  416. package/types/cli/tools/benchmark.d.ts.map +1 -0
  417. package/types/{app/cli → cli/tools}/db-dump.d.ts +0 -2
  418. package/types/cli/tools/db-dump.d.ts.map +1 -0
  419. package/types/cli/tools/saidify.d.ts.map +1 -0
  420. package/types/{app/cli → cli/tools}/sign.d.ts +2 -0
  421. package/types/cli/tools/sign.d.ts.map +1 -0
  422. package/types/cli/tools/verify.d.ts.map +1 -0
  423. package/types/core/attachment-countering.d.ts +10 -1
  424. package/types/core/attachment-countering.d.ts.map +1 -1
  425. package/types/core/cues.d.ts +146 -57
  426. package/types/core/cues.d.ts.map +1 -1
  427. package/types/core/deck.d.ts +2 -12
  428. package/types/core/deck.d.ts.map +1 -1
  429. package/types/core/dispatch.d.ts +7 -3
  430. package/types/core/dispatch.d.ts.map +1 -1
  431. package/types/core/errors.d.ts +4 -4
  432. package/types/core/errors.d.ts.map +1 -1
  433. package/types/core/{exchange-proofing.d.ts → exchange/exchange-proofing.d.ts} +9 -2
  434. package/types/core/exchange/exchange-proofing.d.ts.map +1 -0
  435. package/types/core/{protocol-exchanging.d.ts → exchange/protocol-exchanging.d.ts} +18 -2
  436. package/types/core/exchange/protocol-exchanging.d.ts.map +1 -0
  437. package/types/core/genus-framing.d.ts +12 -0
  438. package/types/core/genus-framing.d.ts.map +1 -0
  439. package/types/core/{eventing.d.ts → kel/eventing.d.ts} +37 -48
  440. package/types/core/kel/eventing.d.ts.map +1 -0
  441. package/types/core/{kever-decisions.d.ts → kel/kever-decisions.d.ts} +36 -22
  442. package/types/core/kel/kever-decisions.d.ts.map +1 -0
  443. package/types/core/{kever.d.ts → kel/kever.d.ts} +13 -47
  444. package/types/core/kel/kever.d.ts.map +1 -0
  445. package/types/core/kel/witnesses.d.ts.map +1 -0
  446. package/types/core/logger.d.ts +1 -1
  447. package/types/core/logger.d.ts.map +1 -1
  448. package/types/core/{kram-auth.d.ts → mailbox/kram-auth.d.ts} +2 -2
  449. package/types/core/mailbox/kram-auth.d.ts.map +1 -0
  450. package/types/core/{kram-policy.d.ts → mailbox/kram-policy.d.ts} +2 -2
  451. package/types/core/mailbox/kram-policy.d.ts.map +1 -0
  452. package/types/core/{kram-pruning.d.ts → mailbox/kram-pruning.d.ts} +3 -3
  453. package/types/core/{kram-pruning.d.ts.map → mailbox/kram-pruning.d.ts.map} +1 -1
  454. package/types/core/{kram-signatures.d.ts → mailbox/kram-signatures.d.ts} +3 -3
  455. package/types/core/mailbox/kram-signatures.d.ts.map +1 -0
  456. package/types/core/mailbox/kram-staging.d.ts +30 -0
  457. package/types/core/mailbox/kram-staging.d.ts.map +1 -0
  458. package/types/core/{kram-time.d.ts → mailbox/kram-time.d.ts} +5 -11
  459. package/types/core/mailbox/kram-time.d.ts.map +1 -0
  460. package/types/core/mailbox/kraming.d.ts +42 -0
  461. package/types/core/mailbox/kraming.d.ts.map +1 -0
  462. package/types/core/mailbox/mailbox-topics.d.ts.map +1 -0
  463. package/types/core/protocol-eventing.d.ts +5 -0
  464. package/types/core/protocol-eventing.d.ts.map +1 -1
  465. package/types/core/protocol-serialization.d.ts +1 -1
  466. package/types/core/protocol-serialization.d.ts.map +1 -1
  467. package/types/core/protocol-vdr-eventing.d.ts +7 -5
  468. package/types/core/protocol-vdr-eventing.d.ts.map +1 -1
  469. package/types/core/records.d.ts +15 -50
  470. package/types/core/records.d.ts.map +1 -1
  471. package/types/core/routing.d.ts +76 -46
  472. package/types/core/routing.d.ts.map +1 -1
  473. package/types/db/baser-defaults.d.ts +5 -0
  474. package/types/db/baser-defaults.d.ts.map +1 -0
  475. package/types/db/basing.d.ts +70 -75
  476. package/types/db/basing.d.ts.map +1 -1
  477. package/types/db/core/keys.d.ts.map +1 -1
  478. package/types/db/core/lmdber.d.ts +21 -23
  479. package/types/db/core/lmdber.d.ts.map +1 -1
  480. package/types/db/core/path-manager.d.ts.map +1 -1
  481. package/types/db/escrowing.d.ts +12 -49
  482. package/types/db/escrowing.d.ts.map +1 -1
  483. package/types/db/exchange/exchange-nests.d.ts +12 -0
  484. package/types/db/exchange/exchange-nests.d.ts.map +1 -0
  485. package/types/db/exchange/exchange-records.d.ts +38 -0
  486. package/types/db/exchange/exchange-records.d.ts.map +1 -0
  487. package/types/db/index.d.ts +5 -6
  488. package/types/db/index.d.ts.map +1 -1
  489. package/types/db/keeping.d.ts +19 -1
  490. package/types/db/keeping.d.ts.map +1 -1
  491. package/types/db/koming.d.ts +1 -1
  492. package/types/db/koming.d.ts.map +1 -1
  493. package/types/db/{kram-factors.d.ts → mailbox/kram-factors.d.ts} +3 -5
  494. package/types/db/mailbox/kram-factors.d.ts.map +1 -0
  495. package/types/db/{mailboxing.d.ts → mailbox/mailboxing.d.ts} +3 -4
  496. package/types/db/mailbox/mailboxing.d.ts.map +1 -0
  497. package/types/db/reger.d.ts +10 -12
  498. package/types/db/reger.d.ts.map +1 -1
  499. package/types/db/{kel-replay.d.ts → replay/kel-replay.d.ts} +2 -6
  500. package/types/db/replay/kel-replay.d.ts.map +1 -0
  501. package/types/db/{tel-replay.d.ts → replay/tel-replay.d.ts} +13 -8
  502. package/types/db/replay/tel-replay.d.ts.map +1 -0
  503. package/types/db/{witness-replay.d.ts → replay/witness-replay.d.ts} +2 -3
  504. package/types/db/replay/witness-replay.d.ts.map +1 -0
  505. package/types/db/subing.d.ts +1 -5
  506. package/types/db/subing.d.ts.map +1 -1
  507. package/types/did/keri/resolving.d.ts +5 -10
  508. package/types/did/keri/resolving.d.ts.map +1 -1
  509. package/types/did/webs/artifacts.d.ts +5 -5
  510. package/types/did/webs/artifacts.d.ts.map +1 -1
  511. package/types/did/webs/designated-aliases.d.ts +6 -5
  512. package/types/did/webs/designated-aliases.d.ts.map +1 -1
  513. package/types/did/webs/documenting.d.ts +6 -5
  514. package/types/did/webs/documenting.d.ts.map +1 -1
  515. package/types/did/webs/resolving.d.ts +13 -3
  516. package/types/did/webs/resolving.d.ts.map +1 -1
  517. package/types/library/index.d.ts +1 -1
  518. package/types/library/index.d.ts.map +1 -1
  519. package/types/npm/cli.d.ts +1 -1
  520. package/types/npm/cli.d.ts.map +1 -1
  521. package/types/npm/index.d.ts +1 -1
  522. package/types/npm/index.d.ts.map +1 -1
  523. package/types/runtime/index.d.ts +109 -76
  524. package/types/runtime/index.d.ts.map +1 -1
  525. package/types/vdr/backer-state.d.ts +22 -0
  526. package/types/vdr/backer-state.d.ts.map +1 -0
  527. package/types/vdr/credential-tsn-record.d.ts +13 -0
  528. package/types/vdr/credential-tsn-record.d.ts.map +1 -0
  529. package/types/vdr/credentialing.d.ts +16 -27
  530. package/types/vdr/credentialing.d.ts.map +1 -1
  531. package/types/vdr/eventing.d.ts +66 -23
  532. package/types/vdr/eventing.d.ts.map +1 -1
  533. package/types/vdr/registry-tsn-record.d.ts +6 -0
  534. package/types/vdr/registry-tsn-record.d.ts.map +1 -0
  535. package/types/vdr/revoking.d.ts +18 -0
  536. package/types/vdr/revoking.d.ts.map +1 -0
  537. package/types/vdr/tel-anchor.d.ts +10 -0
  538. package/types/vdr/tel-anchor.d.ts.map +1 -0
  539. package/types/vdr/tel-publication.d.ts +49 -0
  540. package/types/vdr/tel-publication.d.ts.map +1 -0
  541. package/types/vdr/tsn-query.d.ts +9 -4
  542. package/types/vdr/tsn-query.d.ts.map +1 -1
  543. package/types/{app/version.d.ts → version.d.ts} +2 -2
  544. package/types/version.d.ts.map +1 -0
  545. package/esm/keri/npm/src/app/abortable.js +0 -27
  546. package/esm/keri/npm/src/app/agent-runtime.js +0 -638
  547. package/esm/keri/npm/src/app/cesr-egress.js +0 -308
  548. package/esm/keri/npm/src/app/cesr-output.js +0 -12
  549. package/esm/keri/npm/src/app/cli/annotate.js +0 -24
  550. package/esm/keri/npm/src/app/cli/challenge.js +0 -168
  551. package/esm/keri/npm/src/app/cli/common/displaying.js +0 -43
  552. package/esm/keri/npm/src/app/cli/common/parsing.js +0 -215
  553. package/esm/keri/npm/src/app/cli/incept.js +0 -187
  554. package/esm/keri/npm/src/app/cli/index.js +0 -36
  555. package/esm/keri/npm/src/app/cli/init.js +0 -155
  556. package/esm/keri/npm/src/app/cli/interact.js +0 -72
  557. package/esm/keri/npm/src/app/cli/ipex.js +0 -453
  558. package/esm/keri/npm/src/app/cli/multisig.js +0 -474
  559. package/esm/keri/npm/src/app/cli/query.js +0 -143
  560. package/esm/keri/npm/src/app/cli/rotate.js +0 -171
  561. package/esm/keri/npm/src/app/cli/vc.js +0 -284
  562. package/esm/keri/npm/src/app/cli/verifier.js +0 -96
  563. package/esm/keri/npm/src/app/credential-workflows.js +0 -431
  564. package/esm/keri/npm/src/app/cue-delivery.js +0 -171
  565. package/esm/keri/npm/src/app/cue-preparation.js +0 -124
  566. package/esm/keri/npm/src/app/cue-route.js +0 -64
  567. package/esm/keri/npm/src/app/cue-runtime.js +0 -104
  568. package/esm/keri/npm/src/app/direct-reply-delivery.js +0 -282
  569. package/esm/keri/npm/src/app/essr.js +0 -235
  570. package/esm/keri/npm/src/app/exchanging.js +0 -1219
  571. package/esm/keri/npm/src/app/forwarding.js +0 -1346
  572. package/esm/keri/npm/src/app/group-members.js +0 -37
  573. package/esm/keri/npm/src/app/grouping.js +0 -534
  574. package/esm/keri/npm/src/app/httping.js +0 -130
  575. package/esm/keri/npm/src/app/ipex-credentialing.js +0 -245
  576. package/esm/keri/npm/src/app/ipex-grouping.js +0 -317
  577. package/esm/keri/npm/src/app/ipex-v2.js +0 -542
  578. package/esm/keri/npm/src/app/mailbox-sse.js +0 -257
  579. package/esm/keri/npm/src/app/multisig-workflows.js +0 -537
  580. package/esm/keri/npm/src/app/oobi-replies.js +0 -194
  581. package/esm/keri/npm/src/app/query-replies.js +0 -181
  582. package/esm/keri/npm/src/app/querying.js +0 -1040
  583. package/esm/keri/npm/src/app/reactor.js +0 -517
  584. package/esm/keri/npm/src/app/reply-streams.js +0 -304
  585. package/esm/keri/npm/src/app/respondant.js +0 -173
  586. package/esm/keri/npm/src/app/runtime-deliveries.js +0 -510
  587. package/esm/keri/npm/src/app/runtime-services.js +0 -25
  588. package/esm/keri/npm/src/app/signaling.js +0 -388
  589. package/esm/keri/npm/src/app/stored-replies.js +0 -85
  590. package/esm/keri/npm/src/app/tcp-egress.js +0 -334
  591. package/esm/keri/npm/src/app/verifier-agent.js +0 -461
  592. package/esm/keri/npm/src/app/witnessing.js +0 -956
  593. package/esm/keri/npm/src/core/cue-admission.js +0 -419
  594. package/esm/keri/npm/src/core/index.js +0 -23
  595. package/esm/keri/npm/src/core/kever-decisions.js +0 -63
  596. package/esm/keri/npm/src/core/kram-handoff.js +0 -148
  597. package/esm/keri/npm/src/core/kram-staging.js +0 -211
  598. package/esm/keri/npm/src/core/kraming.js +0 -99
  599. package/esm/keri/npm/src/db/exchange-nests.js +0 -175
  600. package/esm/keri/npm/src/db/exchange-records.js +0 -7
  601. package/esm/keri/npm/src/db/kram-snapshots.js +0 -216
  602. package/esm/keri/npm/src/db/mailbox-inbox.js +0 -206
  603. package/esm/keri/npm/src/db/outboxing.js +0 -371
  604. package/esm/keri/npm/src/db/payload-archive.js +0 -402
  605. package/esm/keri/npm/src/db/payload-store.js +0 -416
  606. package/esm/keri/npm/src/db/payload-view.js +0 -23
  607. package/esm/keri/npm/src/db/verifier-cueing.js +0 -132
  608. package/esm/keri/npm/src/vdr/credential-tsn.js +0 -218
  609. package/esm/keri/npm/src/vdr/registry-tsn.js +0 -218
  610. package/types/app/abortable.d.ts +0 -11
  611. package/types/app/abortable.d.ts.map +0 -1
  612. package/types/app/agent-runtime.d.ts +0 -284
  613. package/types/app/agent-runtime.d.ts.map +0 -1
  614. package/types/app/authenticating.d.ts +0 -36
  615. package/types/app/authenticating.d.ts.map +0 -1
  616. package/types/app/byte-source.d.ts +0 -16
  617. package/types/app/byte-source.d.ts.map +0 -1
  618. package/types/app/cesr-egress.d.ts +0 -48
  619. package/types/app/cesr-egress.d.ts.map +0 -1
  620. package/types/app/cesr-http.d.ts.map +0 -1
  621. package/types/app/cesr-output.d.ts +0 -5
  622. package/types/app/cesr-output.d.ts.map +0 -1
  623. package/types/app/challenging.d.ts.map +0 -1
  624. package/types/app/cli/aid.d.ts.map +0 -1
  625. package/types/app/cli/annotate-color.d.ts.map +0 -1
  626. package/types/app/cli/annotate.d.ts.map +0 -1
  627. package/types/app/cli/benchmark.d.ts.map +0 -1
  628. package/types/app/cli/challenge.d.ts.map +0 -1
  629. package/types/app/cli/common/context.d.ts.map +0 -1
  630. package/types/app/cli/common/displaying.d.ts +0 -12
  631. package/types/app/cli/common/displaying.d.ts.map +0 -1
  632. package/types/app/cli/common/existing.d.ts.map +0 -1
  633. package/types/app/cli/common/parsing.d.ts.map +0 -1
  634. package/types/app/cli/common/rendering.d.ts.map +0 -1
  635. package/types/app/cli/common/witness-auth.d.ts.map +0 -1
  636. package/types/app/cli/db-dump.d.ts.map +0 -1
  637. package/types/app/cli/delegate.d.ts +0 -26
  638. package/types/app/cli/delegate.d.ts.map +0 -1
  639. package/types/app/cli/did.d.ts.map +0 -1
  640. package/types/app/cli/ends.d.ts.map +0 -1
  641. package/types/app/cli/exchange.d.ts.map +0 -1
  642. package/types/app/cli/export.d.ts.map +0 -1
  643. package/types/app/cli/incept.d.ts.map +0 -1
  644. package/types/app/cli/index.d.ts +0 -37
  645. package/types/app/cli/index.d.ts.map +0 -1
  646. package/types/app/cli/init.d.ts.map +0 -1
  647. package/types/app/cli/interact.d.ts.map +0 -1
  648. package/types/app/cli/ipex.d.ts +0 -20
  649. package/types/app/cli/ipex.d.ts.map +0 -1
  650. package/types/app/cli/list.d.ts.map +0 -1
  651. package/types/app/cli/loc.d.ts.map +0 -1
  652. package/types/app/cli/multisig.d.ts +0 -12
  653. package/types/app/cli/multisig.d.ts.map +0 -1
  654. package/types/app/cli/notifications.d.ts.map +0 -1
  655. package/types/app/cli/oobi.d.ts.map +0 -1
  656. package/types/app/cli/output.d.ts.map +0 -1
  657. package/types/app/cli/query.d.ts +0 -12
  658. package/types/app/cli/query.d.ts.map +0 -1
  659. package/types/app/cli/rotate.d.ts.map +0 -1
  660. package/types/app/cli/saidify.d.ts.map +0 -1
  661. package/types/app/cli/sign.d.ts.map +0 -1
  662. package/types/app/cli/vc.d.ts +0 -20
  663. package/types/app/cli/vc.d.ts.map +0 -1
  664. package/types/app/cli/verifier.d.ts +0 -3
  665. package/types/app/cli/verifier.d.ts.map +0 -1
  666. package/types/app/cli/verify.d.ts.map +0 -1
  667. package/types/app/configing.d.ts.map +0 -1
  668. package/types/app/credential-workflows.d.ts +0 -118
  669. package/types/app/credential-workflows.d.ts.map +0 -1
  670. package/types/app/cue-delivery.d.ts +0 -30
  671. package/types/app/cue-delivery.d.ts.map +0 -1
  672. package/types/app/cue-preparation.d.ts +0 -25
  673. package/types/app/cue-preparation.d.ts.map +0 -1
  674. package/types/app/cue-route.d.ts +0 -19
  675. package/types/app/cue-route.d.ts.map +0 -1
  676. package/types/app/cue-runtime.d.ts +0 -46
  677. package/types/app/cue-runtime.d.ts.map +0 -1
  678. package/types/app/delegating.d.ts.map +0 -1
  679. package/types/app/direct-reply-delivery.d.ts +0 -38
  680. package/types/app/direct-reply-delivery.d.ts.map +0 -1
  681. package/types/app/endpoint-roleing.d.ts +0 -41
  682. package/types/app/endpoint-roleing.d.ts.map +0 -1
  683. package/types/app/essr.d.ts +0 -72
  684. package/types/app/essr.d.ts.map +0 -1
  685. package/types/app/exchanging.d.ts +0 -245
  686. package/types/app/exchanging.d.ts.map +0 -1
  687. package/types/app/forwarding.d.ts +0 -411
  688. package/types/app/forwarding.d.ts.map +0 -1
  689. package/types/app/group-members.d.ts +0 -12
  690. package/types/app/group-members.d.ts.map +0 -1
  691. package/types/app/grouping.d.ts +0 -150
  692. package/types/app/grouping.d.ts.map +0 -1
  693. package/types/app/habbing.d.ts.map +0 -1
  694. package/types/app/httping.d.ts +0 -42
  695. package/types/app/httping.d.ts.map +0 -1
  696. package/types/app/ipex-building.d.ts.map +0 -1
  697. package/types/app/ipex-credentialing.d.ts.map +0 -1
  698. package/types/app/ipex-graph.d.ts +0 -30
  699. package/types/app/ipex-graph.d.ts.map +0 -1
  700. package/types/app/ipex-grouping.d.ts +0 -51
  701. package/types/app/ipex-grouping.d.ts.map +0 -1
  702. package/types/app/ipex-v2.d.ts +0 -51
  703. package/types/app/ipex-v2.d.ts.map +0 -1
  704. package/types/app/ipexing.d.ts.map +0 -1
  705. package/types/app/keeping.d.ts.map +0 -1
  706. package/types/app/mailbox-director.d.ts +0 -159
  707. package/types/app/mailbox-director.d.ts.map +0 -1
  708. package/types/app/mailbox-sse.d.ts +0 -38
  709. package/types/app/mailbox-sse.d.ts.map +0 -1
  710. package/types/app/mailboxing.d.ts.map +0 -1
  711. package/types/app/multisig-workflows.d.ts +0 -59
  712. package/types/app/multisig-workflows.d.ts.map +0 -1
  713. package/types/app/notifying.d.ts.map +0 -1
  714. package/types/app/oobi-replies.d.ts +0 -18
  715. package/types/app/oobi-replies.d.ts.map +0 -1
  716. package/types/app/oobiery.d.ts.map +0 -1
  717. package/types/app/organizing.d.ts.map +0 -1
  718. package/types/app/parsering.d.ts +0 -106
  719. package/types/app/parsering.d.ts.map +0 -1
  720. package/types/app/protocol-host-policy.d.ts.map +0 -1
  721. package/types/app/query-replies.d.ts +0 -45
  722. package/types/app/query-replies.d.ts.map +0 -1
  723. package/types/app/querying.d.ts +0 -294
  724. package/types/app/querying.d.ts.map +0 -1
  725. package/types/app/reactor.d.ts +0 -171
  726. package/types/app/reactor.d.ts.map +0 -1
  727. package/types/app/reply-streams.d.ts +0 -51
  728. package/types/app/reply-streams.d.ts.map +0 -1
  729. package/types/app/respondant.d.ts +0 -48
  730. package/types/app/respondant.d.ts.map +0 -1
  731. package/types/app/runtime-deliveries.d.ts +0 -67
  732. package/types/app/runtime-deliveries.d.ts.map +0 -1
  733. package/types/app/runtime-services.d.ts +0 -29
  734. package/types/app/runtime-services.d.ts.map +0 -1
  735. package/types/app/runtime-turn.d.ts.map +0 -1
  736. package/types/app/schema-resolving.d.ts.map +0 -1
  737. package/types/app/signaling.d.ts +0 -96
  738. package/types/app/signaling.d.ts.map +0 -1
  739. package/types/app/socket-source.d.ts.map +0 -1
  740. package/types/app/stored-replies.d.ts +0 -18
  741. package/types/app/stored-replies.d.ts.map +0 -1
  742. package/types/app/tcp-egress.d.ts +0 -87
  743. package/types/app/tcp-egress.d.ts.map +0 -1
  744. package/types/app/verifier-agent.d.ts +0 -91
  745. package/types/app/verifier-agent.d.ts.map +0 -1
  746. package/types/app/verifying.d.ts.map +0 -1
  747. package/types/app/version.d.ts.map +0 -1
  748. package/types/app/witnessing.d.ts +0 -227
  749. package/types/app/witnessing.d.ts.map +0 -1
  750. package/types/core/cue-admission.d.ts +0 -74
  751. package/types/core/cue-admission.d.ts.map +0 -1
  752. package/types/core/eventing.d.ts.map +0 -1
  753. package/types/core/exchange-proofing.d.ts.map +0 -1
  754. package/types/core/index.d.ts +0 -24
  755. package/types/core/index.d.ts.map +0 -1
  756. package/types/core/kever-decisions.d.ts.map +0 -1
  757. package/types/core/kever.d.ts.map +0 -1
  758. package/types/core/kram-auth.d.ts.map +0 -1
  759. package/types/core/kram-handoff.d.ts +0 -45
  760. package/types/core/kram-handoff.d.ts.map +0 -1
  761. package/types/core/kram-policy.d.ts.map +0 -1
  762. package/types/core/kram-signatures.d.ts.map +0 -1
  763. package/types/core/kram-staging.d.ts +0 -36
  764. package/types/core/kram-staging.d.ts.map +0 -1
  765. package/types/core/kram-time.d.ts.map +0 -1
  766. package/types/core/kraming.d.ts +0 -46
  767. package/types/core/kraming.d.ts.map +0 -1
  768. package/types/core/mailbox-topics.d.ts.map +0 -1
  769. package/types/core/protocol-exchanging.d.ts.map +0 -1
  770. package/types/core/witnesses.d.ts.map +0 -1
  771. package/types/db/exchange-nests.d.ts +0 -39
  772. package/types/db/exchange-nests.d.ts.map +0 -1
  773. package/types/db/exchange-records.d.ts +0 -35
  774. package/types/db/exchange-records.d.ts.map +0 -1
  775. package/types/db/kel-replay.d.ts.map +0 -1
  776. package/types/db/kram-factors.d.ts.map +0 -1
  777. package/types/db/kram-snapshots.d.ts +0 -23
  778. package/types/db/kram-snapshots.d.ts.map +0 -1
  779. package/types/db/mailbox-inbox.d.ts +0 -72
  780. package/types/db/mailbox-inbox.d.ts.map +0 -1
  781. package/types/db/mailboxing.d.ts.map +0 -1
  782. package/types/db/outboxing.d.ts +0 -182
  783. package/types/db/outboxing.d.ts.map +0 -1
  784. package/types/db/payload-archive.d.ts +0 -70
  785. package/types/db/payload-archive.d.ts.map +0 -1
  786. package/types/db/payload-store.d.ts +0 -40
  787. package/types/db/payload-store.d.ts.map +0 -1
  788. package/types/db/payload-view.d.ts +0 -4
  789. package/types/db/payload-view.d.ts.map +0 -1
  790. package/types/db/tel-replay.d.ts.map +0 -1
  791. package/types/db/verifier-cueing.d.ts +0 -46
  792. package/types/db/verifier-cueing.d.ts.map +0 -1
  793. package/types/db/witness-replay.d.ts.map +0 -1
  794. package/types/vdr/credential-tsn.d.ts +0 -18
  795. package/types/vdr/credential-tsn.d.ts.map +0 -1
  796. package/types/vdr/registry-tsn.d.ts +0 -23
  797. package/types/vdr/registry-tsn.d.ts.map +0 -1
  798. /package/esm/keri/npm/src/app/{schema-resolving.js → credentials/schema-resolving.js} +0 -0
  799. /package/esm/keri/npm/src/app/{protocol-host-policy.js → protocol/protocol-host-policy.js} +0 -0
  800. /package/esm/keri/npm/src/app/{runtime-turn.js → runtime/runtime-turn.js} +0 -0
  801. /package/esm/keri/npm/src/{app/cli → cli}/common/rendering.js +0 -0
  802. /package/esm/keri/npm/src/{app/cli → cli/tools}/annotate-color.js +0 -0
  803. /package/esm/keri/npm/src/core/{witnesses.js → kel/witnesses.js} +0 -0
  804. /package/esm/keri/npm/src/core/{kram-auth.js → mailbox/kram-auth.js} +0 -0
  805. /package/esm/keri/npm/src/core/{mailbox-topics.js → mailbox/mailbox-topics.js} +0 -0
  806. /package/types/app/{runtime-turn.d.ts → runtime/runtime-turn.d.ts} +0 -0
  807. /package/types/{app/cli → cli}/common/rendering.d.ts +0 -0
  808. /package/types/{app/cli → cli/endpoints}/loc.d.ts +0 -0
  809. /package/types/{app/cli → cli/identity}/aid.d.ts +0 -0
  810. /package/types/{app/cli → cli/identity}/export.d.ts +0 -0
  811. /package/types/{app/cli → cli/identity}/list.d.ts +0 -0
  812. /package/types/{app/cli → cli/messaging}/notifications.d.ts +0 -0
  813. /package/types/{app/cli → cli}/output.d.ts +0 -0
  814. /package/types/{app/cli → cli/tools}/annotate-color.d.ts +0 -0
  815. /package/types/{app/cli → cli/tools}/annotate.d.ts +0 -0
  816. /package/types/{app/cli → cli/tools}/benchmark.d.ts +0 -0
  817. /package/types/{app/cli → cli/tools}/saidify.d.ts +0 -0
  818. /package/types/{app/cli → cli/tools}/verify.d.ts +0 -0
  819. /package/types/core/{witnesses.d.ts → kel/witnesses.d.ts} +0 -0
  820. /package/types/core/{mailbox-topics.d.ts → mailbox/mailbox-topics.d.ts} +0 -0
@@ -0,0 +1,932 @@
1
+ /**
2
+ * KERIpy-shaped multisig exchange coordination.
3
+ *
4
+ * This module owns the `/multisig/*` EXN family used to coordinate group
5
+ * registry, credential, reply, and wrapped business EXN proposals. It does not
6
+ * own group key-event counseling; local group habitat state still lives under
7
+ * `Habery.makeGroupHab(...)`, `Baser.habs`, and the keeper member stores.
8
+ */
9
+ import { collectPayload, concatBytes, Counter, nestedPayload, parse, parseBytes, parsePather, Prefixer, Saider, Serder, SerderACDC, SerderKERI, Vrsn_1_0, Vrsn_2_0, } from "cesr-ts";
10
+ import { call, ensure } from "effection";
11
+ import { validateRip, validateUpdate } from "../../acdc/regeventing.js";
12
+ import { ValidationError } from "../../core/errors.js";
13
+ import { exchange, isIpexVerb, isV2RegistryRoute, multisigChildField, nestedIpexRoute, nestedMultisigIlks, } from "../../core/exchange/protocol-exchanging.js";
14
+ import { Kevery } from "../../core/kel/eventing.js";
15
+ import { BasicReplyRouteHandler, Revery, Router } from "../../core/routing.js";
16
+ import { Exchanger } from "../exchanges/exchanging.js";
17
+ import { IpexV2Handler } from "../ipex/ipex-v2.js";
18
+ import { dispatchEnvelope, envelopeFromFrame } from "../protocol/parsering.js";
19
+ import { abortable, rethrowCleanupFailure } from "../runtime/abortable.js";
20
+ import { groupSigningMembers, localIpexContribution } from "./group-members.js";
21
+ import { multisigEmbeddedSection, multisigPayloadSaid } from "./multisig-messaging.js";
22
+ /** KERIpy multisig route constants. */
23
+ export const MULTISIG_ICP_ROUTE = "/multisig/icp";
24
+ export const MULTISIG_ROT_ROUTE = "/multisig/rot";
25
+ export const MULTISIG_IXN_ROUTE = "/multisig/ixn";
26
+ export const MULTISIG_RIP_ROUTE = "/multisig/rip";
27
+ export const MULTISIG_BUP_ROUTE = "/multisig/bup";
28
+ export const MULTISIG_VCP_ROUTE = "/multisig/vcp";
29
+ export const MULTISIG_ISS_ROUTE = "/multisig/iss";
30
+ export const MULTISIG_REV_ROUTE = "/multisig/rev";
31
+ export const MULTISIG_EXN_ROUTE = "/multisig/exn";
32
+ export const MULTISIG_RPY_ROUTE = "/multisig/rpy";
33
+ /** Local v2 coordination profile routes, as in KERIpy core; not upstream KERI or #1740 routes. */
34
+ export const MULTISIG_QRY_ROUTE = "/multisig/qry";
35
+ export const MULTISIG_IPEX_PROOF_ROUTE = "/multisig/ipex-proof";
36
+ /** Ordered route list used for handler registration. */
37
+ export const MULTISIG_ROUTES = [
38
+ MULTISIG_RIP_ROUTE,
39
+ MULTISIG_BUP_ROUTE,
40
+ MULTISIG_ICP_ROUTE,
41
+ MULTISIG_ROT_ROUTE,
42
+ MULTISIG_IXN_ROUTE,
43
+ MULTISIG_VCP_ROUTE,
44
+ MULTISIG_ISS_ROUTE,
45
+ MULTISIG_REV_ROUTE,
46
+ MULTISIG_EXN_ROUTE,
47
+ MULTISIG_RPY_ROUTE,
48
+ MULTISIG_QRY_ROUTE,
49
+ MULTISIG_IPEX_PROOF_ROUTE,
50
+ ];
51
+ /** Children whose verification needs caller-owned processors; the Multiplexor indexes and notifies only. */
52
+ const UNREPLAYED_ROUTES = [MULTISIG_QRY_ROUTE, MULTISIG_IPEX_PROOF_ROUTE];
53
+ /** Build an unsigned legacy VDR wrapper with its required named children. */
54
+ export function prepareMultisigVdrExn(sender, proposal, options = {}) {
55
+ return exchange(proposal.route, proposal.attrs, { ...options, sender, embeds: proposal.embeds });
56
+ }
57
+ /** Validate public TEL linkage before proposing or signing an anchor; no state is inferred from b. */
58
+ export function registryProposalEvent(tel, gid, store) {
59
+ const checked = tel.ilk === "rip" ? validateRip(tel, gid) : validateUpdate(tel, tel.regid ?? "");
60
+ if (checked.kind !== "valid" || tel.pvrsn.major !== 2 || tel.pvrsn.minor !== 0) {
61
+ return null;
62
+ }
63
+ if (tel.ilk === "rip") {
64
+ return checked.event;
65
+ }
66
+ const rip = store?.seqEvent(checked.event.regid, 0);
67
+ const inception = rip && validateRip(rip, gid);
68
+ const head = store?.headEvent(checked.event.regid);
69
+ if (!rip || !head || !inception || inception.kind !== "valid" || rip.pvrsn.major !== 2 || rip.pvrsn.minor !== 0) {
70
+ return null;
71
+ }
72
+ const headSn = BigInt(`0x${head.sad.n}`);
73
+ const sn = checked.event.sn;
74
+ if (sn > headSn + 1n || sn > BigInt(Number.MAX_SAFE_INTEGER)) {
75
+ return null;
76
+ }
77
+ const accepted = store.seqEvent(rip.said, Number(sn));
78
+ if (accepted) {
79
+ return sameBytes(accepted.raw, tel.raw) ? checked.event : null;
80
+ }
81
+ return sn === headSn + 1n && checked.event.prior === head.said ? checked.event : null;
82
+ }
83
+ /** Exact authenticated consent may share an anchor index with unrelated v2 TEL proposals. */
84
+ export function sameRegistryProposal(left, right) {
85
+ const a = left.sad?.a;
86
+ const b = right.sad?.a;
87
+ return isV2RegistryRoute(left.route ?? "") && left.route === right.route && isRecord(a) && isRecord(b)
88
+ && ["gid", "tel", "anc"].every(field => a[field] === b[field]);
89
+ }
90
+ /** Validate both child commitments and every supplied source coordinate without writing evidence. */
91
+ export function acdcV2RegistryProposal(wrapper, nests, store) {
92
+ const payload = wrapper.sad?.a;
93
+ const route = wrapper.route ?? "";
94
+ if (!isV2RegistryRoute(route) || !isRecord(payload) || typeof payload.gid !== "string" || nests.length !== 2
95
+ || wrapper.pvrsn.major !== 2 || wrapper.pvrsn.minor !== 0) {
96
+ return null;
97
+ }
98
+ const [tel, anchor] = nests.map(child => child.body);
99
+ if (!(tel instanceof SerderACDC) || !(anchor instanceof SerderKERI) || route !== `/multisig/${tel.ilk}`
100
+ || nests.some(child => child.nests?.length) || tel.said !== payload.tel || anchor.said !== payload.anc
101
+ || anchor.pvrsn.major !== 2 || anchor.pvrsn.minor !== 0 || !anchor.verify()
102
+ || anchor.pre !== payload.gid || !["ixn", "rot", "drt"].includes(anchor.ilk ?? "")) {
103
+ return null;
104
+ }
105
+ const event = registryProposalEvent(tel, payload.gid, store);
106
+ if (!event || !anchor.seals.some(seal => isRecord(seal) && seal.i === event.regid
107
+ && seal.s === tel.sad.n && seal.d === tel.said)) {
108
+ return null;
109
+ }
110
+ const evidence = envelopeFromFrame(nests[0]);
111
+ if (evidence.sscs.some(seal => seal.s.num !== BigInt(anchor.sn) || seal.d.qb64 !== anchor.said)
112
+ || evidence.ssts.some(seal => seal.i.qb64 !== payload.gid
113
+ || seal.s.num !== BigInt(anchor.sn) || seal.d.qb64 !== anchor.said)) {
114
+ return null;
115
+ }
116
+ return { tel, anchor };
117
+ }
118
+ /** Compare retained event bytes without normalizing their signed representation. */
119
+ function sameBytes(left, right) {
120
+ return left.length === right.length && left.every((value, index) => value === right[index]);
121
+ }
122
+ /** Commit one exact ACDC v2 registry/anchor pair using the ordinary nested-wire serializer. */
123
+ export function* prepareAcdcV2RegistryExn(sender, tel, anchor, store, options = {}) {
124
+ const children = [tel, anchor].map(wire => parseBytes(concatBytes(Counter.makeGVC(Vrsn_2_0), wire)));
125
+ if (children.some(frames => frames.length !== 1)) {
126
+ throw new Error("ACDC v2 registry proposal requires one TEL and one KEL event.");
127
+ }
128
+ const nests = children.map(frames => frames[0]);
129
+ if (!(nests[1].body instanceof SerderKERI))
130
+ throw new Error("ACDC v2 registry anchor must be KERI.");
131
+ const wrapper = exchange(`/multisig/${nests[0].body.ilk}`, {
132
+ gid: nests[1].body.pre,
133
+ tel: nests[0].body.said,
134
+ anc: nests[1].body.said,
135
+ }, {
136
+ ...options,
137
+ sender,
138
+ version: Vrsn_2_0,
139
+ })[0];
140
+ if (!acdcV2RegistryProposal(wrapper, nests, store))
141
+ throw new Error("Invalid ACDC v2 registry proposal.");
142
+ const parts = yield* abortable(signal => Promise.all(nests.map(child => collectPayload(nestedPayload(child, Vrsn_2_0), signal))));
143
+ return [wrapper, concatBytes(...parts)];
144
+ }
145
+ /** Coordinate one proposed group inception event. */
146
+ export function* multisigInceptExn(member, smids, rmids, icp, delegator, options = {}) {
147
+ return yield* prepareMultisigEventExn(member.pre, {
148
+ route: MULTISIG_ICP_ROUTE,
149
+ attrs: {
150
+ smids: [...smids],
151
+ rmids: [...(rmids ?? smids)],
152
+ ...(delegator ? { delegator } : {}),
153
+ },
154
+ }, rawMessage(icp), options);
155
+ }
156
+ /** Coordinate one proposed group rotation event. */
157
+ export function* multisigRotateExn(group, member, smids, rmids, rot, options = {}) {
158
+ return yield* prepareMultisigEventExn(member.pre, {
159
+ route: MULTISIG_ROT_ROUTE,
160
+ attrs: {
161
+ gid: groupPrefix(group),
162
+ smids: [...smids],
163
+ rmids: [...rmids],
164
+ },
165
+ }, rawMessage(rot), options);
166
+ }
167
+ /** Coordinate one proposed group interaction event. */
168
+ export function* multisigInteractExn(group, member, aids, ixn, options = {}) {
169
+ return yield* prepareMultisigEventExn(member.pre, {
170
+ route: MULTISIG_IXN_ROUTE,
171
+ attrs: {
172
+ gid: groupPrefix(group),
173
+ smids: [...aids],
174
+ },
175
+ }, rawMessage(ixn), options);
176
+ }
177
+ /** Coordinate one proposed multisig credential-registry inception. */
178
+ export function multisigRegistryInceptExn(group, member, usage, vcp, anc, options = {}) {
179
+ return prepareMultisigVdrExn(member.pre, {
180
+ route: MULTISIG_VCP_ROUTE,
181
+ attrs: { gid: groupPrefix(group), usage },
182
+ embeds: { vcp: rawMessage(vcp), anc: rawMessage(anc) },
183
+ }, exchangeOptions(member, options));
184
+ }
185
+ /** Coordinate one proposed multisig credential issuance. */
186
+ export function multisigIssueExn(group, member, acdc, iss, anc, options = {}) {
187
+ return prepareMultisigVdrExn(member.pre, {
188
+ route: MULTISIG_ISS_ROUTE,
189
+ attrs: { gid: groupPrefix(group) },
190
+ embeds: { acdc: rawMessage(acdc), iss: rawMessage(iss), anc: rawMessage(anc) },
191
+ }, exchangeOptions(member, options));
192
+ }
193
+ /** Coordinate one proposed multisig credential revocation. */
194
+ export function multisigRevokeExn(group, member, said, rev, anc, options = {}) {
195
+ return prepareMultisigVdrExn(member.pre, {
196
+ route: MULTISIG_REV_ROUTE,
197
+ attrs: { gid: groupPrefix(group), said },
198
+ embeds: { rev: rawMessage(rev), anc: rawMessage(anc) },
199
+ }, exchangeOptions(member, options));
200
+ }
201
+ /** Coordinate one proposed multisig reply event. */
202
+ export function* multisigRpyExn(group, member, rpy, options = {}) {
203
+ return yield* prepareMultisigEventExn(member.pre, {
204
+ route: MULTISIG_RPY_ROUTE,
205
+ attrs: {
206
+ gid: groupPrefix(group),
207
+ },
208
+ }, rawMessage(rpy), options);
209
+ }
210
+ /**
211
+ * Propose one exact signed v2 query authored by the group to its members.
212
+ *
213
+ * KERIpy `multisigQueryExn`: local v2 coordination profile route `/multisig/qry`
214
+ * whose `a` is `{gid, qry}` and whose single nested substream is the query stream.
215
+ */
216
+ export function* multisigQueryExn(group, member, qry, options = {}) {
217
+ return yield* prepareMultisigEventExn(member.pre, { route: MULTISIG_QRY_ROUTE, attrs: { gid: groupPrefix(group) } }, rawMessage(qry), { ...options, pvrsn: Vrsn_2_0 });
218
+ }
219
+ /**
220
+ * Share one exact v2 IPEX Grant stream, with its proofs, with group members.
221
+ *
222
+ * KERIpy `multisigIpexProofExn`: local v2 coordination profile route
223
+ * `/multisig/ipex-proof` whose `a` is `{gid, grant}` and whose single nested
224
+ * substream is the complete Grant stream, authored by or addressed to the group.
225
+ */
226
+ export function* multisigIpexProofExn(group, member, grant, options = {}) {
227
+ return yield* prepareMultisigEventExn(member.pre, { route: MULTISIG_IPEX_PROOF_ROUTE, attrs: { gid: groupPrefix(group) } }, rawMessage(grant), { ...options, pvrsn: Vrsn_2_0 });
228
+ }
229
+ /** Wrap one business EXN, such as `/ipex/grant`, for group approval. */
230
+ export function multisigExn(group, member, exn, options = {}) {
231
+ return exchange(MULTISIG_EXN_ROUTE, {
232
+ gid: groupPrefix(group),
233
+ }, {
234
+ ...exchangeOptions(member, options),
235
+ embeds: { exn: rawMessage(exn) },
236
+ });
237
+ }
238
+ /**
239
+ * Construct only the v2 parent body from an already parsed KERI child.
240
+ * This synchronous boundary checks the route/ilk and commits the child's SAID;
241
+ * it neither authenticates child proofs nor reads, adopts, or disposes any payload.
242
+ * Callers with a CesrFrame borrow its wire through nestedPayload(frame, Vrsn_2_0).
243
+ */
244
+ export function multisigExnBody(sender, proposal, child, options = {}) {
245
+ const { route, attrs } = proposal;
246
+ const pvrsn = options.pvrsn ?? options.version ?? Vrsn_2_0;
247
+ if (pvrsn.major !== 2)
248
+ throw new Error("Nested multisig bodies require protocol v2.");
249
+ if (!child.said || !nestedMultisigIlks(route)?.includes(child.ilk ?? "")) {
250
+ throw new Error("Multisig proposal requires a supported route and child kind.");
251
+ }
252
+ if (route === MULTISIG_EXN_ROUTE && !v2IpexChild(child, attrs.gid)) {
253
+ throw new Error("Multisig IPEX requires a v2 child authored by the selected group.");
254
+ }
255
+ const coordination = v2CoordinationChild(route, child, "gid" in attrs ? attrs.gid : undefined);
256
+ if (coordination)
257
+ throw new Error(coordination);
258
+ const field = multisigChildField(route);
259
+ const payload = route === MULTISIG_ICP_ROUTE
260
+ ? { gid: requireString(child.pre, "group inception prefix"), ...attrs, [field]: child.said }
261
+ : { ...attrs, [field]: child.said };
262
+ return exchange(route, payload, { ...options, sender, pvrsn })[0];
263
+ }
264
+ /** V2 IPEX proposals carry one exact group-authored child on a supported conversation route. */
265
+ function v2IpexChild(child, group) {
266
+ return child.pvrsn.major === 2 && child.pvrsn.minor === 0 && child.pre === group
267
+ && ["xip", "exn"].includes(child.ilk ?? "") && child.route?.startsWith("/ipex/") === true
268
+ && isIpexVerb(child.route.slice(6));
269
+ }
270
+ /**
271
+ * KERIpy core checks for the two local coordination routes: a group-authored v2
272
+ * query, or a v2 Grant authored by or addressed to the group. Returns a reason.
273
+ */
274
+ function v2CoordinationChild(route, child, group) {
275
+ const v2 = child.pvrsn.major === 2 && child.pvrsn.minor === 0;
276
+ if (route === MULTISIG_QRY_ROUTE && (!v2 || child.ilk !== "qry" || child.pre !== group)) {
277
+ return "Multisig query requires a v2 query authored by the selected group.";
278
+ }
279
+ if (route === MULTISIG_IPEX_PROOF_ROUTE
280
+ && (!v2 || child.route !== "/ipex/grant" || (child.pre !== group && child.sad?.ri !== group))) {
281
+ return "Multisig IPEX proof requires a v2 Grant for the selected group.";
282
+ }
283
+ return null;
284
+ }
285
+ /** Signed replay hint for a legacy child whose attachments use a different genus. */
286
+ export function multisigChildGenusAttrs(child, genus) {
287
+ return !child.gvrsn && (genus.major !== child.pvrsn.major || genus.minor !== child.pvrsn.minor)
288
+ ? { cgvrsn: [genus.major, genus.minor] }
289
+ : {};
290
+ }
291
+ /**
292
+ * Prepare finite child input, construct the parent and serialize its nested evidence.
293
+ * KEL (icp/rot/ixn) and reply proposals default to KERIpy's form for both v1 and v2
294
+ * groups: a v1 wrapper with a named `e` embed and pathed child attachments in the
295
+ * child's own genus. The group's version is the child KEL/reply version; the wrapper
296
+ * is only the coordination envelope. Other routes default to v2 nested wrappers, and
297
+ * an explicit `version`/`pvrsn` selects either form. The v1 pathed path retains
298
+ * its established encoding; v2 delegates parsing to parseBytes
299
+ * once and borrows the resulting child only until nestedPayload has been fully consumed.
300
+ * Parsed child evidence consists of ordinary values; serialization observes cancellation.
301
+ * Sending v2 requires enclosing these bytes and the parent's signatures together.
302
+ */
303
+ export function* prepareMultisigEventExn(sender, proposal, wire, options = {}) {
304
+ // Keep the route selection stable through parser suspension; attribute values remain immutable borrows.
305
+ const captured = { ...proposal };
306
+ const { route, attrs } = captured;
307
+ // KERIpy `kli multisig incept|interact|rotate` and `ends add` send these routes as v1
308
+ // `e`-embed wrappers whatever the group KEL version, and `kli multisig join` reads only `e`.
309
+ const keripyEmbedRoute = KERIPY_EMBED_PROPOSAL_ROUTES.includes(route);
310
+ const version = options.pvrsn ?? options.version ?? (keripyEmbedRoute ? Vrsn_1_0 : Vrsn_2_0);
311
+ const field = route.slice(route.lastIndexOf("/") + 1);
312
+ if (version.major === 1) {
313
+ const child = new SerderKERI({ raw: wire });
314
+ const genus = options.childGvrsn ?? child.gvrsn ?? child.pvrsn;
315
+ // KERIpy replays a legacy embed using this signed hint when body and attachment versions differ.
316
+ const hint = multisigChildGenusAttrs(child, genus);
317
+ const payload = route === MULTISIG_ICP_ROUTE
318
+ ? { gid: requireString(child.pre, "group inception prefix"), ...attrs, ...hint }
319
+ : { ...attrs, ...hint };
320
+ return exchange(route, payload, { ...options, sender, embeds: { [field]: wire } });
321
+ }
322
+ return yield* abortable(async (signal) => {
323
+ // Let the parser infer body genus; only an explicit counter override adds a selector.
324
+ const selector = options.childGvrsn ? Counter.makeGVC(options.childGvrsn) : new Uint8Array();
325
+ const input = selector.length ? concatBytes(selector, wire) : wire;
326
+ const frames = parseBytes(input);
327
+ const child = frames[0];
328
+ if (frames.length !== 1 || !(child.body instanceof SerderKERI)
329
+ || (child.nests?.length && !nestedChildAllowed(route, child.body))) {
330
+ throw new Error("Multisig proposal requires one supported direct child.");
331
+ }
332
+ const serder = multisigExnBody(sender, captured, child.body, options);
333
+ return [serder, await collectPayload(nestedPayload(child, Vrsn_2_0), signal)];
334
+ });
335
+ }
336
+ /** Coordination and IPEX children may carry their own nests; KEL and reply children may not. */
337
+ function nestedChildAllowed(route, child) {
338
+ return UNREPLAYED_ROUTES.includes(route) || (route === MULTISIG_EXN_ROUTE && nestedIpexRoute(child.route ?? ""));
339
+ }
340
+ /** Proposal routes KERIpy authors as v1 `e`-embed wrappers for both v1 and v2 groups. */
341
+ const KERIPY_EMBED_PROPOSAL_ROUTES = [
342
+ MULTISIG_ICP_ROUTE,
343
+ MULTISIG_ROT_ROUTE,
344
+ MULTISIG_IXN_ROUTE,
345
+ MULTISIG_RPY_ROUTE,
346
+ ];
347
+ /** Route handler that forwards accepted multisig EXNs to the `Multiplexor`. */
348
+ export class MultisigNotificationHandler {
349
+ /** Bind one registered route to its shared approval coordinator. */
350
+ constructor(resource, mux) {
351
+ Object.defineProperty(this, "resource", {
352
+ enumerable: true,
353
+ configurable: true,
354
+ writable: true,
355
+ value: void 0
356
+ });
357
+ Object.defineProperty(this, "mux", {
358
+ enumerable: true,
359
+ configurable: true,
360
+ writable: true,
361
+ value: void 0
362
+ });
363
+ this.resource = resource;
364
+ this.mux = mux;
365
+ }
366
+ /** Only supported nested multisig routes have child consumers. */
367
+ get acceptsNests() {
368
+ return nestedMultisigIlks(this.resource) !== null;
369
+ }
370
+ /**
371
+ * Authenticate the signed child relationship before exchange evidence is published.
372
+ * A child handler registered with `Multiplexor.addChildHandler` for this route and
373
+ * the nested child's route owns verification instead.
374
+ */
375
+ verify(args) {
376
+ const delegate = this.mux.childHandlerFor(args.serder, args.nests);
377
+ if (delegate)
378
+ return delegate.verify ? delegate.verify(args) : false;
379
+ return args.serder.route === this.resource && this.mux.verify(args.serder, args.nests);
380
+ }
381
+ /** Borrow persisted children until approval replay and coordination indexing finish. */
382
+ *handle(args) {
383
+ const delegate = this.mux.childHandlerFor(args.serder, args.nests);
384
+ if (delegate) {
385
+ const handled = delegate.handle(args);
386
+ if (handled)
387
+ yield* handled;
388
+ return;
389
+ }
390
+ yield* this.mux.add(args.serder, args.nests);
391
+ }
392
+ }
393
+ /** Register the KERIpy multisig route family with one exchanger. */
394
+ export function loadMultisigHandlers(hby, exchanger, options = {}) {
395
+ const mux = options.mux
396
+ ?? new Multiplexor(hby, {
397
+ notifier: options.notifier ?? null,
398
+ exchanger,
399
+ registry: options.registry ?? undefined,
400
+ messageKevery: options.messageKevery,
401
+ });
402
+ for (const route of MULTISIG_ROUTES) {
403
+ exchanger.addHandler(new MultisigNotificationHandler(route, mux));
404
+ }
405
+ return mux;
406
+ }
407
+ /**
408
+ * KERIpy `Multiplexor` analogue.
409
+ *
410
+ * The `meids.` and `maids.` indexes group proposals by embedded payload SAID so
411
+ * later approval/completion logic can find all submitters for the same payload.
412
+ */
413
+ export class Multiplexor {
414
+ /** Reuse durable group membership and separate child processors without sharing parent proof state. */
415
+ constructor(hby, { notifier, exchanger, registry, messageKevery } = {}) {
416
+ Object.defineProperty(this, "hby", {
417
+ enumerable: true,
418
+ configurable: true,
419
+ writable: true,
420
+ value: void 0
421
+ });
422
+ Object.defineProperty(this, "notifier", {
423
+ enumerable: true,
424
+ configurable: true,
425
+ writable: true,
426
+ value: void 0
427
+ });
428
+ /** Approval replay owns separate processors, as in frozen KERIpy Multiplexor. */
429
+ Object.defineProperty(this, "kvy", {
430
+ enumerable: true,
431
+ configurable: true,
432
+ writable: true,
433
+ value: void 0
434
+ });
435
+ Object.defineProperty(this, "rvy", {
436
+ enumerable: true,
437
+ configurable: true,
438
+ writable: true,
439
+ value: void 0
440
+ });
441
+ Object.defineProperty(this, "replay", {
442
+ enumerable: true,
443
+ configurable: true,
444
+ writable: true,
445
+ value: void 0
446
+ });
447
+ Object.defineProperty(this, "exchanger", {
448
+ enumerable: true,
449
+ configurable: true,
450
+ writable: true,
451
+ value: void 0
452
+ });
453
+ Object.defineProperty(this, "registry", {
454
+ enumerable: true,
455
+ configurable: true,
456
+ writable: true,
457
+ value: void 0
458
+ });
459
+ Object.defineProperty(this, "messageKevery", {
460
+ enumerable: true,
461
+ configurable: true,
462
+ writable: true,
463
+ value: void 0
464
+ });
465
+ /** Owners sharing one registered wrapper route, keyed by wrapper and nested child route. */
466
+ Object.defineProperty(this, "childHandlers", {
467
+ enumerable: true,
468
+ configurable: true,
469
+ writable: true,
470
+ value: new Map()
471
+ });
472
+ this.hby = hby;
473
+ this.notifier = notifier ?? null;
474
+ this.exchanger = exchanger;
475
+ this.registry = registry;
476
+ const router = new Router();
477
+ this.rvy = new Revery(hby.db, { rtr: router });
478
+ new BasicReplyRouteHandler(this.rvy).registerReplyRoutes(router);
479
+ this.kvy = new Kevery(hby.db, { lax: false, local: false, rvy: this.rvy });
480
+ this.messageKevery = messageKevery ?? this.kvy;
481
+ if (this.messageKevery.db !== hby.db) {
482
+ throw new TypeError("Multisig message intake must share the group evidence store.");
483
+ }
484
+ this.kvy.registerReplyRoutes(router);
485
+ this.replay = new Exchanger(hby);
486
+ }
487
+ /**
488
+ * Delegate one wrapper route's v2 children with route `child` to `handler`.
489
+ *
490
+ * KERIpy `Multiplexor.addChildHandler`: several owners share one registered
491
+ * `/multisig/*` Exchanger route without replacing `Exchanger.routes` entries.
492
+ * The delegate's `verify` and `handle` own all validation, indexing and
493
+ * notification for those children; the Multiplexor performs none of them.
494
+ * Registering a key twice is refused.
495
+ */
496
+ addChildHandler(route, child, handler) {
497
+ const key = childHandlerKey(route, child);
498
+ if (this.childHandlers.has(key)) {
499
+ throw new ValidationError(`child handler for ${route} ${child} already registered`);
500
+ }
501
+ this.childHandlers.set(key, handler);
502
+ }
503
+ /**
504
+ * Release a finite owner's delegation. A TypeScript runtime can outlive one
505
+ * command phase, unlike KERIpy's per-process CLI owners; the shared route stays.
506
+ */
507
+ removeChildHandler(route, child, handler) {
508
+ const key = childHandlerKey(route, child);
509
+ if (this.childHandlers.get(key) === handler)
510
+ this.childHandlers.delete(key);
511
+ }
512
+ /** Return the delegate for this v2 wrapper's single child route, if any. */
513
+ childHandlerFor(serder, nests = []) {
514
+ if (!this.childHandlers.size || serder.pvrsn.major !== 2 || nests.length !== 1)
515
+ return null;
516
+ const child = nests[0].body;
517
+ const route = child instanceof SerderKERI ? child.route : undefined;
518
+ return route ? this.childHandlers.get(childHandlerKey(serder.route ?? "", route)) ?? null : null;
519
+ }
520
+ /** V2 child replay borrows the caller's configured IPEX, registry, reply and KRAM owners. */
521
+ v2IpexOwners(child) {
522
+ const kvy = this.messageKevery, rvy = kvy.rvy, exc = this.exchanger;
523
+ const handler = exc?.handlerFor(child);
524
+ return !!this.registry && this.registry.db === this.hby.db && exc?.hby === this.hby
525
+ && rvy?.db === this.hby.db && kvy.kramer?.db === this.hby.db
526
+ && exc.cues === kvy.cues && rvy.cues === kvy.cues
527
+ && handler instanceof IpexV2Handler && handler.hby === this.hby
528
+ && handler.registry === this.registry.store;
529
+ }
530
+ /** Index an authenticated proposal; child acceptance still requires local approval and its own proofs. */
531
+ *add(serder, nests = []) {
532
+ const inspection = this.inspect(serder, nests);
533
+ if (!inspection.ok) {
534
+ return {
535
+ kind: "reject",
536
+ said: inspection.said,
537
+ reason: inspection.reason,
538
+ };
539
+ }
540
+ const { said, embeddedSaid, route, sender } = inspection;
541
+ const v2Ipex = serder.pvrsn.major === 2 && route === MULTISIG_EXN_ROUTE;
542
+ if (v2Ipex) {
543
+ if (!this.exchanger?.verifyAccepted(said, route)) {
544
+ return { kind: "reject", said, reason: "V2 IPEX approval requires an authenticated wrapper." };
545
+ }
546
+ // The authenticated local wrapper carries this member's actual verified child contribution.
547
+ if (this.isLocalHab(sender))
548
+ yield* this.processApproved(nests);
549
+ }
550
+ const { existing, submitters } = this.hby.db.env.transactionSync(() => {
551
+ const indexed = this.hby.db.meids.get([embeddedSaid]);
552
+ const existing = isV2RegistryRoute(route) || v2Ipex
553
+ ? indexed.filter(diger => {
554
+ const retained = this.hby.db.exns.get([diger.qb64]);
555
+ return retained && (v2Ipex
556
+ ? retained.pvrsn.major === 2 && retained.route === route
557
+ && isRecord(retained.sad?.a) && isRecord(serder.sad?.a)
558
+ && retained.sad.a.gid === serder.sad.a.gid && retained.sad.a.exn === embeddedSaid
559
+ : sameRegistryProposal(retained, serder))
560
+ && this.exchanger?.verifyAccepted(diger.qb64, route);
561
+ })
562
+ : indexed;
563
+ const submitters = isV2RegistryRoute(route) || v2Ipex
564
+ ? existing.map(diger => new Prefixer({ qb64: this.hby.db.exns.get([diger.qb64]).pre }))
565
+ : this.hby.db.maids.get([embeddedSaid]);
566
+ // Approval is the authenticated wrapper, not completion of its asynchronous child replay.
567
+ this.hby.db.meids.add([embeddedSaid], new Saider({ qb64: said }));
568
+ this.hby.db.maids.add([embeddedSaid], new Prefixer({ qb64: sender }));
569
+ return { existing, submitters };
570
+ });
571
+ const firstSubmission = existing.length === 0;
572
+ const unreplayed = UNREPLAYED_ROUTES.includes(route);
573
+ if (!this.isLocalHab(sender)) {
574
+ if (!unreplayed && submitters.some((submitter) => this.isLocalHab(submitter.qb64))) {
575
+ // The parent is durable, but approval never lends its signatures to the child.
576
+ if (serder.pvrsn.major === 1)
577
+ yield* this.processLegacyApproved(serder);
578
+ else
579
+ yield* this.processApproved(nests);
580
+ }
581
+ else if (serder.pvrsn.major === 2 || firstSubmission) {
582
+ // Legacy approval polling consumes its first notice; repeated v1 notices would re-propose it.
583
+ this.notifier?.add(firstSubmission ? { r: route, d: said } : { r: route, d: said, e: embeddedSaid });
584
+ }
585
+ }
586
+ else if (!unreplayed && submitters.some((submitter) => !this.isLocalHab(submitter.qb64))) {
587
+ // Remote evidence can precede approval. Replay one durable wrapper at a time after reopen.
588
+ for (const prior of existing)
589
+ yield* call(() => this.replayApproved(prior.qb64));
590
+ }
591
+ const duplicate = existing.some((saider) => saider.qb64 === said);
592
+ return {
593
+ kind: duplicate ? "duplicate" : "accept",
594
+ said,
595
+ embeddedSaid,
596
+ route,
597
+ sender,
598
+ };
599
+ }
600
+ /** Return true when this wrapper can be accepted for local group work. */
601
+ verify(serder, nests = []) {
602
+ return this.inspect(serder, nests).ok;
603
+ }
604
+ /** Process only the approved direct child; arbitrary descendants remain guarded. */
605
+ *processApproved(nests) {
606
+ for (const child of nests) {
607
+ const v2Ipex = child.body instanceof SerderKERI && child.body.pvrsn.major === 2
608
+ && child.body.route?.startsWith("/ipex/");
609
+ if (v2Ipex && !this.v2IpexOwners(child.body)) {
610
+ throw new Error("V2 IPEX replay owners are unavailable.");
611
+ }
612
+ yield* dispatchEnvelope(envelopeFromFrame(child, true), v2Ipex ? this.messageKevery.rvy : this.rvy, v2Ipex ? this.messageKevery : this.kvy, this.exchanger, undefined, undefined, undefined, this.messageKevery, this.registry);
613
+ }
614
+ }
615
+ /** Replay v1 children with their own stored proofs and signed attachment genus, as KERIpy does. */
616
+ *processLegacyApproved(wrapper) {
617
+ const embeds = multisigEmbeddedSection(wrapper.ked);
618
+ for (const label of Object.keys(embeds ?? {})) {
619
+ const sad = embeds?.[label];
620
+ if (!isRecord(sad)) {
621
+ continue;
622
+ }
623
+ const event = new Serder({ sad });
624
+ const { attachment, genus } = multisigChildEvidence(this.hby, wrapper, label, event);
625
+ for (const frame of parseBytes(concatBytes(Counter.makeGVC(genus), event.raw, attachment))) {
626
+ yield* dispatchEnvelope(envelopeFromFrame(frame, true), this.rvy, this.kvy, this.exchanger, undefined, undefined, undefined, this.messageKevery, this.registry);
627
+ }
628
+ }
629
+ }
630
+ /** Reopen stored evidence and revalidate it before approved protocol processing. */
631
+ replayApproved(said) {
632
+ // deno-lint-ignore no-this-alias -- Generator callbacks have no lexical this.
633
+ const self = this;
634
+ return call(function* () {
635
+ const controller = new AbortController();
636
+ const signal = controller.signal;
637
+ try {
638
+ signal.throwIfAborted();
639
+ const frames = parse(self.replay.replay(said, signal));
640
+ let pending;
641
+ // The earlier resource joins the read after processing children stop.
642
+ yield* ensure(function* () {
643
+ try {
644
+ if (pending) {
645
+ try {
646
+ yield* call(() => pending);
647
+ }
648
+ catch (error) {
649
+ rethrowCleanupFailure(error, signal);
650
+ }
651
+ }
652
+ }
653
+ finally {
654
+ yield* call(() => frames.return());
655
+ }
656
+ });
657
+ while (true) {
658
+ signal.throwIfAborted();
659
+ pending = frames.next();
660
+ let result;
661
+ try {
662
+ result = yield* call(() => pending);
663
+ }
664
+ catch (error) {
665
+ pending = undefined;
666
+ throw error;
667
+ }
668
+ pending = undefined;
669
+ signal.throwIfAborted();
670
+ if (result.done)
671
+ break;
672
+ const frame = result.value;
673
+ const serder = frame.body;
674
+ if (!self.verify(serder, frame.nests))
675
+ throw new Error("Stored multisig proposal failed revalidation.");
676
+ if (serder.pvrsn.major === 1)
677
+ yield* self.processLegacyApproved(serder);
678
+ else
679
+ yield* self.processApproved(frame.nests ?? []);
680
+ }
681
+ }
682
+ finally {
683
+ controller.abort();
684
+ }
685
+ });
686
+ }
687
+ /** Check route, child body commitment, and membership without mutating durable state. */
688
+ inspect(serder, nests) {
689
+ const said = serder.said ?? "<unknown>";
690
+ const ked = serder.ked;
691
+ if (!ked) {
692
+ return { ok: false, said, reason: "Missing decoded exchange body." };
693
+ }
694
+ const sender = serder.pre ?? "";
695
+ const route = serder.route ?? "";
696
+ let embeddedSaid;
697
+ if (serder.pvrsn.major === 1) {
698
+ const commitment = multisigPayloadSaid(serder);
699
+ if (!commitment || nests.length) {
700
+ return { ok: false, said, reason: "Missing multisig embedded SAID or unexpected v1 nesting." };
701
+ }
702
+ if (childGenusHint(ked.a) === null) {
703
+ return { ok: false, said, reason: "Invalid multisig child attachment genus." };
704
+ }
705
+ embeddedSaid = commitment;
706
+ }
707
+ else if (isV2RegistryRoute(route)) {
708
+ const children = acdcV2RegistryProposal(serder, nests, this.registry?.store ?? null);
709
+ if (!children)
710
+ return { ok: false, said, reason: "Invalid ACDC v2 registry/anchor proposal." };
711
+ if (!groupSigningMembers(this.hby, children.anchor.pre).includes(sender)) {
712
+ return { ok: false, said, reason: "Registry proposal sender is not a current group signing member." };
713
+ }
714
+ embeddedSaid = children.anchor.said;
715
+ }
716
+ else {
717
+ const allowed = nestedMultisigIlks(route);
718
+ if (!allowed || nests.length !== 1) {
719
+ return { ok: false, said, reason: "Unsupported nested multisig route or child count." };
720
+ }
721
+ const child = nests[0];
722
+ const signed = multisigPayloadSaid(serder);
723
+ if (typeof signed !== "string" || !child.body.said || !allowed.includes(child.body.ilk ?? "")
724
+ || !(child.body instanceof SerderKERI)
725
+ || (route !== MULTISIG_EXN_ROUTE && !UNREPLAYED_ROUTES.includes(route) && child.nests?.length)) {
726
+ return { ok: false, said, reason: "Invalid multisig child kind, descendants, or signed SAID." };
727
+ }
728
+ try {
729
+ if (!child.body.verify() || !child.body.compare(signed)) {
730
+ return { ok: false, said, reason: "Invalid multisig child digest." };
731
+ }
732
+ }
733
+ catch {
734
+ return { ok: false, said, reason: "Invalid multisig child commitment." };
735
+ }
736
+ if (route === MULTISIG_EXN_ROUTE) {
737
+ const attrs = serder.sad?.a;
738
+ if (serder.ilk !== "exn" || serder.pvrsn.minor !== 0
739
+ || !isRecord(attrs) || Object.keys(attrs).sort().join(",") !== "exn,gid"
740
+ || (child.nests?.length && !nestedIpexRoute(child.body.route ?? ""))
741
+ || !v2IpexChild(child.body, attrs.gid) || !this.v2IpexOwners(child.body)
742
+ || !groupSigningMembers(this.hby, child.body.pre).includes(sender)) {
743
+ return { ok: false, said, reason: "Invalid v2 IPEX group, member, route or replay owners." };
744
+ }
745
+ if (this.isLocalHab(sender)
746
+ && !localIpexContribution(this.hby.db, sender, child.body, envelopeFromFrame(child).tsgs)) {
747
+ return { ok: false, said, reason: "Local IPEX approval has no verified member contribution." };
748
+ }
749
+ }
750
+ if (UNREPLAYED_ROUTES.includes(route)) {
751
+ const attrs = isRecord(serder.sad?.a) ? serder.sad.a : {};
752
+ const coordination = v2CoordinationChild(route, child.body, attrs.gid);
753
+ if (coordination)
754
+ return { ok: false, said, reason: coordination };
755
+ if (typeof attrs.gid !== "string" || !this.isLocalHab(attrs.gid)
756
+ || !groupSigningMembers(this.hby, attrs.gid).includes(sender)) {
757
+ return { ok: false, said, reason: "Proposal sender is not a group signing member." };
758
+ }
759
+ }
760
+ embeddedSaid = signed;
761
+ }
762
+ const request = multisigMembership(route, ked.a);
763
+ const membership = request.kind === "reject" ? request.reason : this.verifyMembership(request);
764
+ if (membership) {
765
+ return { ok: false, said, reason: membership };
766
+ }
767
+ return {
768
+ ok: true,
769
+ said,
770
+ embeddedSaid,
771
+ route,
772
+ sender,
773
+ };
774
+ }
775
+ /** Return all stored wrapper EXNs for one embedded payload SAID. */
776
+ get(embeddedSaid) {
777
+ const exns = [];
778
+ for (const saider of this.hby.db.meids.get([embeddedSaid])) {
779
+ const exn = this.hby.db.exns.get([saider.qb64]);
780
+ if (!exn?.ked) {
781
+ continue;
782
+ }
783
+ exns.push({
784
+ exn: exn.ked,
785
+ paths: pathedAttachmentsByLabel(this.hby, saider.qb64),
786
+ });
787
+ }
788
+ return exns;
789
+ }
790
+ /** Apply local habitat membership to an already decoded request. */
791
+ verifyMembership(request) {
792
+ if (request.kind === "participate") {
793
+ return this.isLocalHab(request.group)
794
+ ? null
795
+ : `Invalid request to participate in group; not a local member of gid=${request.group}.`;
796
+ }
797
+ if (request.kind === "rotate" && this.isLocalHab(request.group)) {
798
+ return null;
799
+ }
800
+ return request.members.some((member) => this.isLocalHab(member))
801
+ ? null
802
+ : `Invalid request to join group; no local member in mids=${request.members.join(",")}.`;
803
+ }
804
+ isLocalHab(pre) {
805
+ return pre.length > 0 && this.hby.habs.has(pre);
806
+ }
807
+ }
808
+ /** Extract the embedded business EXN SAD from a `/multisig/exn` wrapper. */
809
+ export function embeddedBusinessExnSAD(serder) {
810
+ const embed = serder.ked ? multisigEmbeddedSection(serder.ked) : null;
811
+ const exn = embed && isRecord(embed["exn"]) ? embed["exn"] : null;
812
+ return exn ? { ...exn } : null;
813
+ }
814
+ /** Read one stored v1 child at the wire boundary, without authenticating its independent proof. */
815
+ export function multisigChild(hby, wrapper, label) {
816
+ const sad = multisigEmbeddedSection(wrapper.ked ?? {})?.[label];
817
+ if (!isRecord(sad)) {
818
+ return null;
819
+ }
820
+ const event = new SerderKERI({ sad });
821
+ return { event, ...multisigChildEvidence(hby, wrapper, label, event) };
822
+ }
823
+ /** Resolve the stored proof and signed genus independently of the child protocol. */
824
+ export function multisigChildEvidence(hby, wrapper, label, child) {
825
+ const attachment = multisigPathedAttachment(hby, wrapper.said, label);
826
+ const hint = attachment.length ? childGenusHint(wrapper.ked?.a) : undefined;
827
+ return { attachment, genus: child.gvrsn ?? hint ?? child.pvrsn };
828
+ }
829
+ /** Extract raw attachment bytes for one label from a stored multisig wrapper. */
830
+ export function multisigPathedAttachment(hby, wrapperSaid, label) {
831
+ const path = `/e/${label}`;
832
+ for (const text of hby.db.epath.get([wrapperSaid])) {
833
+ const atc = pathedAttachmentForPath(textEncoder.encode(text), path);
834
+ if (atc) {
835
+ return atc;
836
+ }
837
+ }
838
+ return new Uint8Array();
839
+ }
840
+ function pathedAttachmentsByLabel(hby, wrapperSaid) {
841
+ const paths = {};
842
+ for (const text of hby.db.epath.get([wrapperSaid])) {
843
+ const raw = textEncoder.encode(text);
844
+ const counter = new Counter({ qb64b: raw });
845
+ const pather = parsePather(raw.slice(counter.fullSize), "txt");
846
+ const label = pather.path.split("/").at(-1);
847
+ if (label) {
848
+ paths[label] = textDecoder.decode(raw.slice(counter.fullSize + pather.fullSize));
849
+ }
850
+ }
851
+ return paths;
852
+ }
853
+ function pathedAttachmentForPath(raw, path) {
854
+ if (raw.length === 0) {
855
+ return null;
856
+ }
857
+ const counter = new Counter({ qb64b: raw });
858
+ const offset = counter.fullSize;
859
+ const pather = parsePather(raw.slice(offset), "txt");
860
+ if (pather.path !== path) {
861
+ return null;
862
+ }
863
+ return raw.slice(offset + pather.fullSize);
864
+ }
865
+ function exchangeOptions(member, options) {
866
+ return {
867
+ sender: member.pre,
868
+ stamp: options.stamp,
869
+ date: options.date,
870
+ version: options.version,
871
+ pvrsn: options.pvrsn,
872
+ gvrsn: options.gvrsn,
873
+ kind: options.kind,
874
+ };
875
+ }
876
+ /** Decode the signed legacy child-genus hint before it can select attachment parsing. */
877
+ function childGenusHint(attrs) {
878
+ if (!isRecord(attrs) || attrs.cgvrsn === undefined)
879
+ return undefined;
880
+ const hint = attrs.cgvrsn;
881
+ if (!Array.isArray(hint) || hint.length !== 2
882
+ || (hint[0] !== 1 && hint[0] !== 2)
883
+ || typeof hint[1] !== "number" || !Number.isInteger(hint[1]) || hint[1] < 0 || hint[1] > 4095) {
884
+ return null;
885
+ }
886
+ return { major: hint[0], minor: hint[1] };
887
+ }
888
+ function payloadSection(ked) {
889
+ return isRecord(ked.a) ? ked.a : {};
890
+ }
891
+ /** Decode only membership fields; handler registration owns supported route selection. */
892
+ function multisigMembership(route, value) {
893
+ const attrs = isRecord(value) ? value : {};
894
+ if (route === MULTISIG_ICP_ROUTE) {
895
+ return { kind: "join", members: memberPrefixes(attrs.smids, attrs.rmids) };
896
+ }
897
+ // KERIpy also applies group membership to the whole /multisig/* family.
898
+ if (!route.startsWith("/multisig/")) {
899
+ return { kind: "reject", reason: `Invalid route ${route} for multisig exchange.` };
900
+ }
901
+ if (typeof attrs.gid !== "string" || !attrs.gid) {
902
+ return { kind: "reject", reason: "Missing multisig group identifier." };
903
+ }
904
+ return route === MULTISIG_ROT_ROUTE
905
+ ? { kind: "rotate", group: attrs.gid, members: memberPrefixes(attrs.smids, attrs.rmids) }
906
+ : { kind: "participate", group: attrs.gid };
907
+ }
908
+ /** Preserve the existing optional-list and non-string filtering at the wire boundary. */
909
+ function memberPrefixes(smids, rmids) {
910
+ const strings = (value) => Array.isArray(value) ? value.filter((item) => typeof item === "string") : [];
911
+ return [...strings(smids), ...strings(rmids)];
912
+ }
913
+ function childHandlerKey(route, child) {
914
+ return `${route}\u0000${child}`;
915
+ }
916
+ function groupPrefix(group) {
917
+ return typeof group === "string" ? group : group.pre;
918
+ }
919
+ function requireString(value, label) {
920
+ if (!value) {
921
+ throw new Error(`Missing ${label}.`);
922
+ }
923
+ return value;
924
+ }
925
+ function rawMessage(message) {
926
+ return message instanceof Uint8Array ? message : message.raw;
927
+ }
928
+ function isRecord(value) {
929
+ return typeof value === "object" && value !== null && !Array.isArray(value);
930
+ }
931
+ const textEncoder = new TextEncoder();
932
+ const textDecoder = new TextDecoder();