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,821 @@
1
+ import { Organizer } from "../identity/organizing.js";
2
+ /**
3
+ * Multisig proposal and approval workflows.
4
+ *
5
+ * CLI orchestration owns timed waits, worker lifetimes, prompts and output.
6
+ * This module publishes proposals and approves stored KEL/RPY/VDR proposals
7
+ * without starting or driving background workers.
8
+ */
9
+ import { attachmentPayload, collectPayload, concatBytes, Counter, Diger, Ilks, NumberPrimitive, NumDex, parseBytes, Prefixer, SerderACDC, SerderKERI, TraitDex, Vrsn_2_0, } from "cesr-ts";
10
+ import { verifyRegistryAnchor, vetBlind, } from "../../acdc/regeventing.js";
11
+ import { publicOpeningAttachment } from "../../acdc/registering.js";
12
+ import { ValidationError } from "../../core/errors.js";
13
+ import { isV2RegistryRoute } from "../../core/exchange/protocol-exchanging.js";
14
+ import { Kever } from "../../core/kel/kever.js";
15
+ import { messagize } from "../../core/protocol-serialization.js";
16
+ import { RegistryRecord } from "../../core/records.js";
17
+ import { loadNests } from "../../db/exchange/exchange-nests.js";
18
+ import { Credentialer, Registry, serializeCredential } from "../../vdr/credentialing.js";
19
+ import { envelopeFromFrame } from "../protocol/parsering.js";
20
+ import { groupCredentialAnchorReady, validateCredentialIssueProposal, validateCredentialRevocationProposal, validateCredentialSource, validateRegistryName, validateRegistryProposal, } from "../credentials/credential-proposals.js";
21
+ import { endpointRoleAccepted, groupEndorseReply, groupEventKeys, groupSigningMembers, localGroupMember, signLocalGroupEvent, } from "../identity/endpoint-roleing.js";
22
+ import { Reactor } from "../protocol/reactor.js";
23
+ import { abortable } from "../runtime/abortable.js";
24
+ import { collectBytes } from "../transport/byte-source.js";
25
+ import { findLocalGroupMember as findLocalMember, groupMemberHasKey, uniqueMembers } from "./group-members.js";
26
+ import { acdcV2RegistryProposal, MULTISIG_ICP_ROUTE, MULTISIG_ISS_ROUTE, MULTISIG_IXN_ROUTE, MULTISIG_REV_ROUTE, MULTISIG_ROT_ROUTE, MULTISIG_RPY_ROUTE, MULTISIG_VCP_ROUTE, multisigChild, multisigChildEvidence, multisigChildGenusAttrs, prepareAcdcV2RegistryExn, prepareMultisigEventExn, prepareMultisigVdrExn, registryProposalEvent, } from "./grouping.js";
27
+ import { admitAndSendGroupMessage, groupSendResult, multisigPayloadSaid, prepareGroupMessage, remoteGroupMembers, signGroupMessage, storedGroupMessage, } from "./multisig-messaging.js";
28
+ /** Approve one exact ACDC v2 TEL/anchor through existing member signing and ordinary processors.
29
+ * A returned wrapper records consent, not quorum/witness/TEL completion; retry the accepted-state owners.
30
+ */
31
+ export function* approveAcdcV2Registry(hby, protocol, group, event, { anchor, opening } = {}) {
32
+ const registry = protocol.registry, member = localGroupMember(hby, group.pre);
33
+ if (!registry || group.db !== hby.db || registry.db !== hby.db) {
34
+ throw new ValidationError("ACDC v2 group registry owner is unavailable.");
35
+ }
36
+ if (!group.kever || !groupSigningMembers(hby, group.pre).includes(member.pre)) {
37
+ throw new ValidationError("Registry approval requires an accepted group and current local signing member.");
38
+ }
39
+ const checked = registryProposalEvent(event, group.pre, registry.store);
40
+ if (!checked) {
41
+ throw new ValidationError("ACDC v2 TEL belongs to another group or is unavailable.");
42
+ }
43
+ if (opening && (event.ilk !== "bup" || !vetBlind(opening, event.sad.b))) {
44
+ throw new ValidationError("Invalid proposed event opening.");
45
+ }
46
+ const seal = { i: checked.regid, s: event.sad.n, d: event.said };
47
+ const retained = registry.store.anchor(event.said);
48
+ if (!anchor && retained
49
+ && verifyRegistryAnchor(checked, { db: hby.db, issuer: group.pre, number: retained[0], diger: retained[1] })) {
50
+ anchor = hby.db.getEvtSerder(group.pre, retained[1].qb64) ?? undefined;
51
+ }
52
+ const seals = (candidate) => !!candidate?.seals.some(value => isRecord(value) && value.i === seal.i && value.s === seal.s && value.d === seal.d);
53
+ // A rerun resumes an accepted group anchor whose TEL still awaits evidence; it never authors a second anchor.
54
+ for (let sn = group.kever.sn; !anchor && sn > 0; sn--) {
55
+ const said = hby.db.kels.getLast(group.pre, sn);
56
+ const candidate = said ? hby.db.getEvtSerder(group.pre, said) : null;
57
+ if (seals(candidate))
58
+ anchor = candidate;
59
+ }
60
+ let authored = false;
61
+ if (!anchor) {
62
+ const pending = hby.db.pses.getLast(group.pre, group.kever.sn + 1);
63
+ if (pending)
64
+ anchor = hby.db.getEvtSerder(group.pre, pending) ?? undefined;
65
+ if (!anchor) {
66
+ authored = true;
67
+ anchor = (group.kever.estOnly
68
+ ? hby.rotateGroupHab(group.name, undefined, undefined, { data: [seal], version: Vrsn_2_0 })
69
+ : hby.interactGroupHab(group.name, undefined, { data: [seal], version: Vrsn_2_0 })).serder;
70
+ }
71
+ }
72
+ if (anchor.pvrsn.major !== 2 || anchor.pvrsn.minor !== 0 || !anchor.verify()
73
+ || anchor.pre !== group.pre || !["ixn", "rot", "drt"].includes(anchor.ilk ?? "")
74
+ || !anchor.seals.some(value => isRecord(value) && value.i === seal.i && value.s === seal.s && value.d === seal.d)) {
75
+ throw new ValidationError("Group anchor must be V2 and seal the exact proposed TEL.");
76
+ }
77
+ if (!authored && hby.db.kels.getLast(group.pre, anchor.sn) === anchor.said) {
78
+ // Accepted anchors reuse only this member's authenticated exact recorded contribution.
79
+ let establishment = anchor;
80
+ while (establishment && !establishment.estive) {
81
+ establishment = establishment.prior ? hby.db.getEvtSerder(group.pre, establishment.prior) : null;
82
+ }
83
+ for (const index of hby.db.meids.get([anchor.said])) {
84
+ const retained = hby.db.exns.get([index.qb64]);
85
+ const payload = retained?.sad?.a;
86
+ if (!retained || retained.pre !== member.pre || retained.route !== `/multisig/${event.ilk}` || !isRecord(payload)
87
+ || payload.gid !== group.pre || payload.tel !== event.said || payload.anc !== anchor.said
88
+ || !protocol.exc.verifyAccepted(retained.said, retained.route)) {
89
+ continue;
90
+ }
91
+ const frames = loadNests(hby.db, retained.said);
92
+ const verified = establishment && frames[1] && Kever.verifyIndexedSignatures(anchor.raw, envelopeFromFrame(frames[1]).sigers, establishment.verfers);
93
+ if (!verified
94
+ || !verified.sigers.some(siger => groupMemberHasKey(hby.db, member.pre, establishment.verfers[siger.index].qb64))) {
95
+ continue;
96
+ }
97
+ const replay = yield* abortable(signal => collectBytes(protocol.exc.replay(retained.said, signal)));
98
+ const [frame] = parseBytes(replay);
99
+ const foot = yield* abortable(signal => collectPayload(attachmentPayload(frame), signal));
100
+ return [retained, foot];
101
+ }
102
+ throw new ValidationError("Accepted registry anchor has no retained exact local approval.");
103
+ }
104
+ if (!authored && (anchor.sn !== group.kever.sn + 1 || anchor.prior !== group.kever.serder.said)) {
105
+ throw new ValidationError("Registry anchor does not extend the current group event.");
106
+ }
107
+ const keys = groupEventKeys(hby, group.pre, anchor);
108
+ const sigers = signLocalGroupEvent(hby, anchor, groupSigningMembers(hby, group.pre), keys);
109
+ const own = messagize(anchor, { sigers, gvrsn: Vrsn_2_0 });
110
+ const tel = concatBytes(event.raw, Counter.enclose({
111
+ code: "AttachmentGroup",
112
+ version: Vrsn_2_0,
113
+ qb64: opening ? publicOpeningAttachment(opening) : new Uint8Array(),
114
+ }));
115
+ const input = new Reactor(protocol);
116
+ yield* input.processBytes(concatBytes(Counter.makeGVC(Vrsn_2_0), tel), { local: true });
117
+ yield* input.processBytes(concatBytes(Counter.makeGVC(Vrsn_2_0), own), { local: true });
118
+ const proposal = yield* prepareAcdcV2RegistryExn(member.pre, tel, own, registry.store);
119
+ const signed = signGroupMessage(member, "", proposal);
120
+ yield* input.processBytes(signed.message, { local: true });
121
+ yield* protocol.processEscrowsOnce();
122
+ return [proposal[0], signed.message.subarray(proposal[0].raw.length)];
123
+ }
124
+ /** Publish this member's exact approved TEL/anchor wrapper; the caller runs and joins delivery. */
125
+ export function* publishAcdcV2Registry(hby, postman, group, approval) {
126
+ const member = localGroupMember(hby, group.pre), outcomes = [];
127
+ const wire = concatBytes(approval[0].raw, approval[1]);
128
+ for (const recipient of remoteGroupMembers(hby, member, groupSigningMembers(hby, group.pre))) {
129
+ const evt = postman.sendStream({ src: member.pre, dest: recipient, msgs: [wire], topic: "multisig" }, {
130
+ notify: true,
131
+ });
132
+ const outcome = yield* postman.wait(evt);
133
+ if (outcome.kin === "failed")
134
+ throw outcome.error;
135
+ outcomes.push({
136
+ recipient,
137
+ exnSaid: approval[0].said,
138
+ payloadSaid: approval[0].sad.a.anc,
139
+ deliveries: outcome.deliveries,
140
+ });
141
+ }
142
+ return groupSendResult(outcomes);
143
+ }
144
+ /**
145
+ * Publish a route-correlated event proposal; grouping owns child identity and label derivation.
146
+ *
147
+ * @param hby Borrowed group identities and accepted state.
148
+ * @param protocol Shared semantic owner; this publication owns its byte-input context.
149
+ * @param postman Borrowed delivery owner; the caller runs and joins its worker.
150
+ * @param member Local member signing habitat, distinct from the group AID.
151
+ * @param recipients Member AIDs; local recipients are skipped.
152
+ * @param proposal Route-correlated group proposal with its named business fields.
153
+ * @param embeddedMessage Signed child wire to include under the route-derived label.
154
+ * @param childGvrsn Optional explicit attachment genus for the child.
155
+ * @returns Stable proposal/wrapper identities and completed deliveries, independent of group acceptance.
156
+ */
157
+ export function* publishProposal(hby, protocol, postman, member, recipients, proposal, embeddedMessage, childGvrsn) {
158
+ const input = new Reactor(protocol);
159
+ const outcomes = [];
160
+ for (const recipient of remoteGroupMembers(hby, member, recipients)) {
161
+ const destination = new Organizer(hby.db, hby.signator).resolveRecipient(recipient);
162
+ const prepared = yield* prepareMultisigEventExn(member.pre, proposal, embeddedMessage, {
163
+ recipient: destination,
164
+ childGvrsn,
165
+ });
166
+ const signed = yield* prepareGroupMessage(protocol.exc, member, destination, prepared);
167
+ outcomes.push(yield* admitAndSendGroupMessage(input, postman, signed));
168
+ }
169
+ return groupSendResult(outcomes);
170
+ }
171
+ /** Publish typed registry evidence, processing each exact local wrapper before delivery. */
172
+ function* publishVdrProposal(hby, protocol, postman, member, recipients, proposal) {
173
+ const input = new Reactor(protocol);
174
+ const outcomes = [];
175
+ for (const recipient of remoteGroupMembers(hby, member, recipients)) {
176
+ const destination = new Organizer(hby.db, hby.signator).resolveRecipient(recipient);
177
+ const prepared = prepareMultisigVdrExn(member.pre, proposal, { recipient: destination });
178
+ const signed = yield* prepareGroupMessage(protocol.exc, member, destination, prepared);
179
+ outcomes.push(yield* admitAndSendGroupMessage(input, postman, signed));
180
+ }
181
+ return groupSendResult(outcomes);
182
+ }
183
+ /** True when a KEL event is accepted locally. */
184
+ /**
185
+ * Commit the members of a locally accepted group establishment event.
186
+ *
187
+ * Only the current latest establishment event commits; replaying an older
188
+ * approval must not restore historical group membership. Returns whether the
189
+ * members were committed.
190
+ */
191
+ export function commitAcceptedGroupMembers(hby, serder, smids, rmids) {
192
+ const pre = serder.pre;
193
+ if (!pre || !eventAccepted(hby, serder) || hby.db.getKever(pre)?.lastEst.d !== serder.said) {
194
+ return false;
195
+ }
196
+ hby.commitGroupHabMembers(pre, smids, rmids.length > 0 ? rmids : smids);
197
+ return true;
198
+ }
199
+ export function eventAccepted(hby, serder) {
200
+ const pre = serder.pre;
201
+ const said = serder.said;
202
+ const sn = serder.sn;
203
+ if (!pre || !said || sn === null) {
204
+ return false;
205
+ }
206
+ return hby.db.kels.getLast(pre, sn) === said;
207
+ }
208
+ export function routeForKelEvent(serder) {
209
+ switch (serder.ilk) {
210
+ case Ilks.icp:
211
+ case Ilks.dip:
212
+ return MULTISIG_ICP_ROUTE;
213
+ case Ilks.rot:
214
+ case Ilks.drt:
215
+ return MULTISIG_ROT_ROUTE;
216
+ case Ilks.ixn:
217
+ return MULTISIG_IXN_ROUTE;
218
+ default:
219
+ return null;
220
+ }
221
+ }
222
+ /**
223
+ * Select accepted coordination evidence before any approval effects.
224
+ * An explicit SAID names the outer EXN and survives notification consumption.
225
+ * Notices discover candidates; their attributes do not authorize a route or group.
226
+ * An explicit accepted wrapper missing its handler index is replayed by the caller.
227
+ */
228
+ function* pendingMultisigProposals(hby, runtime, notices, options) {
229
+ const candidates = options.said ? [options.said] : notices.map(note => note.attrs.d);
230
+ const group = options.group && (hby.habByName(options.group)?.pre ?? options.group);
231
+ const selected = [];
232
+ for (const said of new Set(candidates)) {
233
+ if (typeof said !== "string")
234
+ continue;
235
+ const exn = hby.db.exns.get([said]);
236
+ if (!exn?.ked)
237
+ continue;
238
+ const route = exn.route ?? "";
239
+ if (!isKelRoute(route) && !isVdrRoute(route) && route !== MULTISIG_RPY_ROUTE && !isV2RegistryRoute(route)) {
240
+ continue;
241
+ }
242
+ const payloadSaid = multisigPayloadSaid(exn);
243
+ if (!payloadSaid)
244
+ continue;
245
+ const indexed = hby.db.meids.get([payloadSaid]).some(index => index.qb64 === said);
246
+ if (!indexed && !options.said)
247
+ continue;
248
+ const proposalGroup = isKelRoute(route)
249
+ ? kelApproval(exn, route, yield* kelChild(hby, runtime, exn, route))?.group
250
+ : stringField(payloadSection(exn.ked), "gid");
251
+ if (!proposalGroup)
252
+ continue;
253
+ if (group && group !== proposalGroup) {
254
+ if (options.said) {
255
+ throw new ValidationError(`Multisig exchange ${said} belongs to group ${proposalGroup}, not ${group}.`);
256
+ }
257
+ continue;
258
+ }
259
+ selected.push({ exn, route, indexed });
260
+ }
261
+ return selected;
262
+ }
263
+ /** Approve matching stored evidence; host progress and deadlines belong to the caller. */
264
+ export function* approvePendingMultisigProposal(hby, runtime, options) {
265
+ const notifier = runtime.notifier;
266
+ if (!notifier && !options.said) {
267
+ throw new ValidationError("Multisig join requires notification storage or an explicit exchange SAID.");
268
+ }
269
+ const notices = (notifier?.list(0, 100) ?? []);
270
+ for (const { exn, route, indexed } of yield* pendingMultisigProposals(hby, runtime, notices, options)) {
271
+ if (!indexed) {
272
+ // Acceptance commits before the asynchronous handler. Resume that ordinary
273
+ // authenticated intake after interruption; never synthesize approval indexes.
274
+ const message = yield* abortable(signal => collectBytes(runtime.exc.replay(exn.said, signal)));
275
+ yield* runtime.reactor.processBytes(message, { local: true });
276
+ const payloadSaid = multisigPayloadSaid(exn);
277
+ if (!hby.db.meids.get([payloadSaid]).some(index => index.qb64 === exn.said))
278
+ continue;
279
+ }
280
+ const rgy = isVdrRoute(route) ? runtime.vdr : null;
281
+ let result;
282
+ if (isKelRoute(route)) {
283
+ result = yield* approveKelProposal(hby, runtime, exn, route, options);
284
+ }
285
+ else if (isVdrRoute(route)) {
286
+ result = yield* approveVdrProposal(hby, rgy, runtime, exn, route, options);
287
+ }
288
+ else if (isV2RegistryRoute(route)) {
289
+ const nests = loadNests(hby.db, exn.said);
290
+ const proposal = acdcV2RegistryProposal(exn, nests, runtime.acdc?.store ?? null);
291
+ const group = proposal?.anchor.pre ? hby.habs.get(proposal.anchor.pre) : null;
292
+ if (!proposal || !group)
293
+ continue;
294
+ const head = group.kever?.serder.said;
295
+ if (!head)
296
+ throw new ValidationError("Registry approval requires an accepted local group.");
297
+ if (!options.callbacks.approveProposal({ route, group: group.pre, embedded: proposal.tel.said }))
298
+ continue;
299
+ if (group.kever?.serder.said !== head || !acdcV2RegistryProposal(exn, nests, runtime.acdc?.store ?? null)) {
300
+ throw new ValidationError("Group or registry changed while approval was pending.");
301
+ }
302
+ const envelope = envelopeFromFrame(nests[0]), opening = [...envelope.bsqs, ...envelope.bsss];
303
+ if (opening.length > 1)
304
+ throw new ValidationError("Registry proposal carries multiple openings.");
305
+ const approval = yield* approveAcdcV2Registry(hby, runtime.protocol, group, proposal.tel, {
306
+ anchor: proposal.anchor,
307
+ opening: opening[0],
308
+ });
309
+ const published = yield* publishAcdcV2Registry(hby, runtime.postman, group, approval);
310
+ const regid = proposal.tel.ilk === "rip" ? proposal.tel.said : proposal.tel.regid;
311
+ const accepted = runtime.acdc.store.seqEvent(regid, Number(BigInt(`0x${proposal.tel.sad.n}`)))?.said === proposal.tel.said;
312
+ result = { route, said: exn.said, embedded: proposal.tel.said, group: group.pre, accepted, ...published };
313
+ }
314
+ else {
315
+ result = yield* approveRpyProposal(hby, runtime, exn, route, options);
316
+ }
317
+ if (result) {
318
+ for (const note of notices) {
319
+ if (note.attrs.d === exn.said)
320
+ notifier?.remove(note.rid);
321
+ }
322
+ return result;
323
+ }
324
+ }
325
+ return null;
326
+ }
327
+ /**
328
+ * Approve and publish a local contribution to one endpoint-role reply proposal.
329
+ * Validate required child evidence before signing, process the local contribution,
330
+ * and await concrete member deliveries. Transmission is not group acceptance.
331
+ *
332
+ * @param hby Borrowed local identities and accepted-state stores.
333
+ * @param runtime Borrowed composed runtime; caller owns its worker and store lifetime.
334
+ * @param exn Stored multisig exchange wrapper.
335
+ * @param route Selected multisig route identifying the proposal kind.
336
+ * @param options Human approval/alias callbacks and workflow choices; refusal leaves the proposal inert.
337
+ * @returns Approval result with protocol acceptance and deliveries, or null for declined/incomplete input.
338
+ */
339
+ function* approveRpyProposal(hby, runtime, exn, route, options) {
340
+ const wrapperSaid = exn.said;
341
+ if (!wrapperSaid) {
342
+ return null;
343
+ }
344
+ const payload = payloadSection(exn.ked ?? {});
345
+ const groupPre = requireText(stringField(payload, "gid") || undefined, "Group prefix");
346
+ const groupHab = hby.habs.get(groupPre);
347
+ if (!groupHab) {
348
+ throw new ValidationError(`Group ${groupPre} must be joined before approving ${route}.`);
349
+ }
350
+ const member = localGroupMember(hby, groupPre);
351
+ const child = yield* replyChild(hby, runtime, exn);
352
+ if (!child)
353
+ return null;
354
+ const { event: rpySerder, attachment, genus } = child;
355
+ const embeddedSaid = rpySerder.said ?? "";
356
+ const prior = storedGroupMessage(hby.db, member.pre, exn);
357
+ if (!prior && !options.callbacks.approveProposal({ route, group: groupPre, embedded: embeddedSaid || "<unknown>" })) {
358
+ return null;
359
+ }
360
+ yield* runtime.reactor.processBytes(concatBytes(Counter.makeGVC(genus), rpySerder.raw, attachment), { local: true });
361
+ let localRpy;
362
+ if (prior) {
363
+ const retained = yield* replyChild(hby, runtime, prior);
364
+ if (!retained || retained.event.said !== embeddedSaid || !retained.attachment.length) {
365
+ throw new ValidationError(`Stored multisig approval ${prior.said} lacks its rpy contribution.`);
366
+ }
367
+ localRpy = concatBytes(retained.event.raw, retained.attachment);
368
+ }
369
+ else
370
+ localRpy = groupEndorseReply(hby, groupPre, rpySerder, genus);
371
+ yield* runtime.reactor.processBytes(concatBytes(Counter.makeGVC(genus), localRpy), { local: true });
372
+ yield* runtime.protocol.processEscrowsOnce();
373
+ const attrs = rpyAttrs(rpySerder);
374
+ const publication = yield* publishProposal(hby, runtime.protocol, runtime.postman, member, groupSigningMembers(hby, groupPre), { route, attrs: { gid: groupPre } }, localRpy, genus);
375
+ const accepted = endpointRoleAccepted(hby, attrs.cid, attrs.role, attrs.eid);
376
+ return { route, said: wrapperSaid, embedded: embeddedSaid, group: groupPre, accepted, ...publication };
377
+ }
378
+ /**
379
+ * Approve and publish a local contribution to one KEL event proposal.
380
+ * Validate required child evidence before signing, process the local contribution,
381
+ * and await concrete member deliveries. Transmission is not group acceptance.
382
+ *
383
+ * @param hby Borrowed local identities and accepted-state stores.
384
+ * @param runtime Borrowed composed runtime; caller owns its worker and store lifetime.
385
+ * @param exn Stored multisig exchange wrapper.
386
+ * @param route Selected multisig route identifying the proposal kind.
387
+ * @param options Human approval/alias callbacks and workflow choices; refusal leaves the proposal inert.
388
+ * @returns Approval result with protocol acceptance and deliveries, or null for declined/incomplete input.
389
+ */
390
+ function* approveKelProposal(hby, runtime, exn, route, options) {
391
+ const wrapperSaid = exn.said;
392
+ if (!wrapperSaid) {
393
+ return null;
394
+ }
395
+ const selected = kelApproval(exn, route, yield* kelChild(hby, runtime, exn, route));
396
+ if (!selected)
397
+ return null;
398
+ const member = selected.proposal.route === MULTISIG_IXN_ROUTE
399
+ ? localGroupMember(hby, selected.group)
400
+ : findLocalMember(hby, kelApprovalMembers(selected));
401
+ if (!member) {
402
+ throw new ValidationError(`No local member found for multisig proposal ${wrapperSaid}.`);
403
+ }
404
+ const prior = storedGroupMessage(hby.db, member.pre, exn);
405
+ // A resume reuses the member's recorded membership choices as well as its
406
+ // child signatures; a later peer wrapper cannot replace that decision.
407
+ const approval = prior ? kelApproval(prior, route, yield* kelChild(hby, runtime, prior, route)) : selected;
408
+ if (!approval || approval.group !== selected.group || approval.event.said !== selected.event.said) {
409
+ throw new ValidationError(`Stored multisig approval does not match ${wrapperSaid}.`);
410
+ }
411
+ const { event: serder, group: groupPre, proposal } = approval;
412
+ const { smids } = proposal.attrs;
413
+ const embeddedSaid = serder.said;
414
+ const members = kelApprovalMembers(approval);
415
+ let localMessage;
416
+ if (prior) {
417
+ // The resumed approval was decoded from this member's own recorded wrapper and child proof.
418
+ if (!approval.attachment.length) {
419
+ throw new ValidationError(`Stored multisig approval ${prior.said} lacks its ${kelProposalLabel(route)} contribution.`);
420
+ }
421
+ localMessage = concatBytes(serder.raw, approval.attachment);
422
+ }
423
+ else {
424
+ // A proposal already accepted locally that names no local signing member (for example
425
+ // an earlier rotation that only committed to this member's next key) has nothing to
426
+ // approve. Skip it so a later proposal for the same group can be selected.
427
+ if (eventAccepted(hby, serder) && !smids.some(mid => hby.habs.has(mid))) {
428
+ return null;
429
+ }
430
+ if (!options.callbacks.approveProposal({ route, group: groupPre, embedded: embeddedSaid ?? "<unknown>" })) {
431
+ return null;
432
+ }
433
+ if (proposal.route === MULTISIG_ICP_ROUTE || (proposal.route === MULTISIG_ROT_ROUTE && !hby.habs.has(groupPre))) {
434
+ const rmids = proposal.attrs.rmids;
435
+ const alias = options.callbacks.chooseGroupAlias(groupPre);
436
+ hby.joinGroupHab(groupPre, alias, member, smids, rmids.length > 0 ? rmids : smids);
437
+ }
438
+ const keys = groupEventKeys(hby, groupPre, serder);
439
+ const sigers = signLocalGroupEvent(hby, serder, smids, keys);
440
+ localMessage = messagize(serder, { sigers, pipelined: false, gvrsn: approval.genus });
441
+ }
442
+ // Each contribution may already own a counted attachment enclosure. Admit
443
+ // complete messages separately and let the ordinary KEL owner union proofs.
444
+ yield* runtime.reactor.processBytes(concatBytes(Counter.makeGVC(approval.genus), localMessage), { local: true });
445
+ yield* runtime.reactor.processBytes(concatBytes(Counter.makeGVC(approval.genus), serder.raw, approval.attachment), { local: true });
446
+ yield* runtime.protocol.processEscrowsOnce();
447
+ const publication = yield* publishProposal(hby, runtime.protocol, runtime.postman, member, members, proposal, localMessage, approval.genus);
448
+ const accepted = eventAccepted(hby, serder);
449
+ if (proposal.route !== MULTISIG_IXN_ROUTE) {
450
+ commitAcceptedGroupMembers(hby, serder, smids, proposal.attrs.rmids);
451
+ }
452
+ return { route, said: wrapperSaid, embedded: embeddedSaid ?? "", group: groupPre, accepted, ...publication };
453
+ }
454
+ /**
455
+ * Approve and publish a local contribution to one registry/credential TEL proposal.
456
+ * Validate required child evidence before signing, process the local contribution,
457
+ * and await concrete member deliveries. Transmission is not group acceptance.
458
+ *
459
+ * @param hby Borrowed local identities and accepted-state stores.
460
+ * @param rgy Borrowed legacy registry owner, or null; required only after a valid proposal is approved.
461
+ * @param runtime Borrowed composed runtime; caller owns its worker and store lifetime.
462
+ * @param exn Stored multisig exchange wrapper.
463
+ * @param route Selected multisig route identifying the proposal kind.
464
+ * @param options Human approval/alias callbacks and workflow choices; refusal leaves the proposal inert.
465
+ * @returns Approval result with protocol acceptance and deliveries, or null for declined/incomplete input.
466
+ */
467
+ function* approveVdrProposal(hby, rgy, runtime, exn, route, options) {
468
+ const wrapperSaid = exn.said;
469
+ if (!wrapperSaid) {
470
+ return null;
471
+ }
472
+ const payload = payloadSection(exn.ked ?? {});
473
+ const groupPre = requireText(stringField(payload, "gid") || undefined, "Group prefix");
474
+ const groupHab = hby.habs.get(groupPre);
475
+ if (!groupHab) {
476
+ throw new ValidationError(`Group ${groupPre} must be joined before approving ${route}.`);
477
+ }
478
+ const member = localGroupMember(hby, groupPre);
479
+ const embed = embeddedSection(exn.ked ?? {});
480
+ const label = vdrProposalLabel(route);
481
+ const embeddedSad = embed?.[label];
482
+ const anchor = multisigChild(hby, exn, "anc");
483
+ if (!isRecord(embeddedSad) || !anchor) {
484
+ return null;
485
+ }
486
+ if (anchor.event.pre !== groupPre)
487
+ return null;
488
+ const embeddedSerder = new SerderKERI({ sad: embeddedSad });
489
+ // Required children must be decoded before approval can sign or accept the anchor.
490
+ const acdcSad = embed?.acdc;
491
+ let proposal;
492
+ if (route !== MULTISIG_ISS_ROUTE) {
493
+ proposal = { route };
494
+ }
495
+ else {
496
+ if (!isRecord(acdcSad))
497
+ return null;
498
+ proposal = { route, credential: new SerderACDC({ sad: acdcSad }) };
499
+ }
500
+ const { event: anchorSerder, attachment, genus } = anchor;
501
+ const embeddedSaid = embeddedSerder.said ?? "";
502
+ if (proposal.route === MULTISIG_VCP_ROUTE) {
503
+ validateRegistryProposal(groupPre, embeddedSerder, anchorSerder);
504
+ }
505
+ else if (proposal.route === MULTISIG_REV_ROUTE) {
506
+ if (!rgy)
507
+ throw new ValidationError("Legacy credential registry is unavailable in this runtime.");
508
+ const said = requireText(stringField(payload, "said") || undefined, "Credential SAID");
509
+ if (!validateCredentialRevocationProposal(rgy, groupPre, said, embeddedSerder, anchorSerder))
510
+ return null;
511
+ }
512
+ else {
513
+ if (!rgy)
514
+ throw new ValidationError("Legacy credential registry is unavailable in this runtime.");
515
+ const evidence = multisigChildEvidence(hby, exn, "acdc", proposal.credential);
516
+ if (!evidence.attachment.length)
517
+ return null;
518
+ validateCredentialSource(proposal.credential, embeddedSerder, evidence.attachment, evidence.genus);
519
+ if (!validateCredentialIssueProposal(rgy, groupPre, proposal.credential, embeddedSerder, anchorSerder))
520
+ return null;
521
+ }
522
+ const prior = storedGroupMessage(hby.db, member.pre, exn);
523
+ if (!prior && !groupCredentialAnchorReady(hby, groupPre, anchorSerder))
524
+ return null;
525
+ if (!prior && !options.callbacks.approveProposal({ route, group: groupPre, embedded: embeddedSaid || "<unknown>" })) {
526
+ return null;
527
+ }
528
+ // Declined or malformed proposals remain inert; require VDR before signing or intake.
529
+ if (!rgy)
530
+ throw new ValidationError("Legacy credential registry is unavailable in this runtime.");
531
+ let registryName;
532
+ if (proposal.route === MULTISIG_VCP_ROUTE && !prior) {
533
+ registryName = options.callbacks.chooseRegistryName(embeddedSerder.pre);
534
+ validateRegistryName(rgy.reger, registryName, embeddedSerder.pre);
535
+ }
536
+ const smids = groupSigningMembers(hby, groupPre);
537
+ let localAnchor;
538
+ if (prior) {
539
+ localAnchor = storedContribution(hby, prior, "anc", anchorSerder.said);
540
+ }
541
+ else {
542
+ const keys = groupEventKeys(hby, groupPre, anchorSerder);
543
+ const sigers = signLocalGroupEvent(hby, anchorSerder, smids, keys);
544
+ localAnchor = messagize(anchorSerder, { sigers, pipelined: false, gvrsn: genus });
545
+ }
546
+ yield* runtime.reactor.processBytes(concatBytes(Counter.makeGVC(genus), localAnchor), { local: true });
547
+ yield* runtime.reactor.processBytes(concatBytes(Counter.makeGVC(genus), anchorSerder.raw, attachment), {
548
+ local: true,
549
+ });
550
+ yield* runtime.protocol.processEscrowsOnce();
551
+ let accepted = false;
552
+ let publication;
553
+ const attrs = { gid: groupPre, ...multisigChildGenusAttrs(anchorSerder, genus) };
554
+ if (proposal.route === MULTISIG_VCP_ROUTE) {
555
+ accepted = approveRegistryIncept(rgy, groupHab, embeddedSerder, anchorSerder, registryName);
556
+ publication = {
557
+ route: proposal.route,
558
+ attrs: { ...attrs, ...(typeof payload.usage === "string" ? { usage: payload.usage } : {}) },
559
+ embeds: { vcp: embeddedSerder.raw, anc: localAnchor },
560
+ };
561
+ }
562
+ else if (proposal.route === MULTISIG_REV_ROUTE) {
563
+ const seal = sourceSeal(anchorSerder);
564
+ rgy.tvy.processEvent({ serder: embeddedSerder, seqner: seal.seqner, saider: seal.saider });
565
+ rgy.processEscrows();
566
+ rgy.publication.track(embeddedSerder, anchorSerder);
567
+ accepted = telAccepted(rgy.reger, embeddedSerder.pre, embeddedSerder.sn, embeddedSerder.said);
568
+ publication = {
569
+ route: proposal.route,
570
+ attrs: { ...attrs, said: embeddedSerder.pre },
571
+ embeds: { rev: embeddedSerder.raw, anc: localAnchor },
572
+ };
573
+ }
574
+ else {
575
+ const creder = proposal.credential;
576
+ accepted = approveCredentialIssue(rgy, creder, embeddedSerder, anchorSerder);
577
+ const seal = telCredentialSeal(embeddedSerder);
578
+ publication = {
579
+ route: proposal.route,
580
+ attrs,
581
+ embeds: {
582
+ acdc: serializeCredential(creder, seal.prefixer, seal.seqner, seal.saider, genus),
583
+ iss: embeddedSerder.raw,
584
+ anc: localAnchor,
585
+ },
586
+ };
587
+ }
588
+ const published = yield* publishVdrProposal(hby, runtime.protocol, runtime.postman, member, smids, publication);
589
+ return {
590
+ route,
591
+ said: wrapperSaid,
592
+ embedded: embeddedSaid,
593
+ group: groupPre,
594
+ accepted,
595
+ tel: {
596
+ pre: embeddedSerder.pre,
597
+ sn: embeddedSerder.sn,
598
+ publicationComplete: rgy.publication.complete(embeddedSerder.pre, embeddedSerder.sn),
599
+ },
600
+ ...published,
601
+ };
602
+ }
603
+ /** Preserve the recorded signing/rotation participant order during approval and resume. */
604
+ function kelApprovalMembers({ proposal }) {
605
+ if (proposal.route === MULTISIG_IXN_ROUTE)
606
+ return [...proposal.attrs.smids];
607
+ return uniqueMembers([...proposal.attrs.smids, ...proposal.attrs.rmids]);
608
+ }
609
+ /** Revalidate v2 nested reply commitments through ordinary exchange admission before reading proofs. */
610
+ function replyChild(hby, runtime, wrapper) {
611
+ return nestedChild(hby, runtime, wrapper, MULTISIG_RPY_ROUTE, "rpy");
612
+ }
613
+ /** Read a KEL proposal's named v1 embed, or its v2 nested child after authenticated wrapper admission. */
614
+ function kelChild(hby, runtime, wrapper, route) {
615
+ return nestedChild(hby, runtime, wrapper, route, kelProposalLabel(route));
616
+ }
617
+ /** v1 reads the named pathed embed; v2 reads the first nest of an accepted wrapper with its own proof. */
618
+ function* nestedChild(hby, runtime, wrapper, route, label) {
619
+ if (wrapper.pvrsn.major === 1)
620
+ return multisigChild(hby, wrapper, label);
621
+ if (!wrapper.said || !runtime.exc.verifyAccepted(wrapper.said, route))
622
+ return null;
623
+ const [child] = loadNests(hby.db, wrapper.said);
624
+ if (!(child?.body instanceof SerderKERI))
625
+ return null;
626
+ const attachment = yield* abortable(signal => collectPayload(attachmentPayload(child), signal));
627
+ return { event: child.body, attachment, genus: child.gvrsn ?? child.body.gvrsn ?? child.body.pvrsn };
628
+ }
629
+ /** Reuse a recorded member's child proof; never sign a replacement during resume. */
630
+ function storedContribution(hby, wrapper, label, said) {
631
+ const child = multisigChild(hby, wrapper, label);
632
+ if (!child || child.event.said !== said || child.attachment.length === 0) {
633
+ throw new ValidationError(`Stored multisig approval ${wrapper.said} lacks its ${label} contribution.`);
634
+ }
635
+ return concatBytes(child.event.raw, child.attachment);
636
+ }
637
+ /** VDR coordination keeps KERIpy's named child for each legacy route. */
638
+ function vdrProposalLabel(route) {
639
+ switch (route) {
640
+ case MULTISIG_VCP_ROUTE:
641
+ return "vcp";
642
+ case MULTISIG_ISS_ROUTE:
643
+ return "iss";
644
+ case MULTISIG_REV_ROUTE:
645
+ return "rev";
646
+ }
647
+ }
648
+ /** The supported route determines its one named KEL child. */
649
+ function kelProposalLabel(route) {
650
+ switch (route) {
651
+ case MULTISIG_ICP_ROUTE:
652
+ return "icp";
653
+ case MULTISIG_ROT_ROUTE:
654
+ return "rot";
655
+ case MULTISIG_IXN_ROUTE:
656
+ return "ixn";
657
+ }
658
+ }
659
+ /** Decode the fields used by approval, preserving existing missing-embed and member-list behavior. */
660
+ function kelApproval(exn, route, child) {
661
+ if (!child)
662
+ return null;
663
+ const { event } = child;
664
+ const attrs = exn.ked?.a;
665
+ const payload = isRecord(attrs) ? attrs : {};
666
+ const group = requireText(route === MULTISIG_ICP_ROUTE
667
+ ? event.pre ?? undefined
668
+ : (typeof payload.gid === "string" ? payload.gid : "") || event.pre || undefined, "Group prefix");
669
+ // Approval must name the same group whose event we will sign.
670
+ if (group !== event.pre)
671
+ return null;
672
+ const smids = stringArrayField(payload, "smids");
673
+ if (route === MULTISIG_IXN_ROUTE) {
674
+ return { ...child, group, proposal: { route, attrs: { gid: group, smids } } };
675
+ }
676
+ const rmids = stringArrayField(payload, "rmids");
677
+ const proposal = route === MULTISIG_ICP_ROUTE
678
+ ? {
679
+ route,
680
+ attrs: { smids, rmids, ...(typeof payload.delegator === "string" ? { delegator: payload.delegator } : {}) },
681
+ }
682
+ : { route, attrs: { gid: group, smids, rmids } };
683
+ return { ...child, group, proposal };
684
+ }
685
+ function approveRegistryIncept(rgy, groupHab, vserder, anchorSerder, registryName) {
686
+ const seal = sourceSeal(anchorSerder);
687
+ rgy.tvy.processEvent({ serder: vserder, seqner: seal.seqner, saider: seal.saider });
688
+ rgy.processEscrows();
689
+ const regk = requireSerderPrefix(vserder, "registry inception");
690
+ if (registryName !== undefined) {
691
+ const cnfg = stringArrayField(vserder.ked ?? {}, "c");
692
+ registerRegistry(rgy, registryName, groupHab, regk, {
693
+ estOnly: cnfg.includes(TraitDex.EstOnly),
694
+ });
695
+ }
696
+ const eventSaid = requireSerderSaid(vserder, "registry inception");
697
+ rgy.publication.track(vserder, anchorSerder);
698
+ return telAccepted(rgy.reger, regk, 0, eventSaid);
699
+ }
700
+ function approveCredentialIssue(rgy, creder, iserder, anchorSerder) {
701
+ const { hby } = rgy;
702
+ const seal = sourceSeal(anchorSerder);
703
+ rgy.tvy.processEvent({ serder: iserder, seqner: seal.seqner, saider: seal.saider });
704
+ rgy.processEscrows();
705
+ const reger = rgy.reger;
706
+ const vry = rgy.vry;
707
+ const credentialer = new Credentialer(hby, { reger, vry });
708
+ const credentialSeal = telCredentialSeal(iserder);
709
+ const verifierDecision = vry.processCredential({
710
+ creder,
711
+ prefixer: credentialSeal.prefixer,
712
+ seqner: credentialSeal.seqner,
713
+ saider: credentialSeal.saider,
714
+ });
715
+ if (verifierDecision.kind === "accept") {
716
+ reger.ccrd.pin(requireCredentialSaid(creder), creder);
717
+ }
718
+ vry.processEscrows();
719
+ rgy.publication.track(iserder, anchorSerder);
720
+ return credentialer.complete(requireCredentialSaid(creder))
721
+ || reger.saved.get([requireCredentialSaid(creder)]) !== null;
722
+ }
723
+ function registerRegistry(rgy, name, hab, regk, options) {
724
+ rgy.reger.registries.add(regk);
725
+ rgy.reger.regs.pin(name, new RegistryRecord({ registryKey: regk, prefix: hab.pre }));
726
+ if (!rgy.registries.has(name)) {
727
+ rgy.registries.set(name, new Registry({
728
+ publication: rgy.publication,
729
+ name,
730
+ hab,
731
+ reger: rgy.reger,
732
+ tvy: rgy.tvy,
733
+ cues: rgy.cues,
734
+ regk,
735
+ estOnly: options.estOnly,
736
+ }));
737
+ }
738
+ }
739
+ function sourceSeal(serder) {
740
+ return { seqner: ordinal(serder.sn ?? 0), saider: new Diger({ qb64: requireSerderSaid(serder, "anchor event") }) };
741
+ }
742
+ function telCredentialSeal(serder) {
743
+ return {
744
+ prefixer: new Prefixer({ qb64: requireSerderPrefix(serder, "credential TEL event") }),
745
+ seqner: ordinal(serder.sn ?? 0),
746
+ saider: new Diger({ qb64: requireSerderSaid(serder, "credential TEL event") }),
747
+ };
748
+ }
749
+ function ordinal(num) {
750
+ const raw = new Uint8Array(16);
751
+ let value = BigInt(num);
752
+ for (let i = raw.length - 1; i >= 0; i--) {
753
+ raw[i] = Number(value & 0xffn);
754
+ value >>= 8n;
755
+ }
756
+ return new NumberPrimitive({ code: NumDex.Huge, raw });
757
+ }
758
+ function requireSerderPrefix(serder, label) {
759
+ if (!serder.pre) {
760
+ throw new ValidationError(`${label} is missing prefix.`);
761
+ }
762
+ return serder.pre;
763
+ }
764
+ function requireSerderSaid(serder, label) {
765
+ if (!serder.said) {
766
+ throw new ValidationError(`${label} is missing SAID.`);
767
+ }
768
+ return serder.said;
769
+ }
770
+ function requireCredentialSaid(creder) {
771
+ if (!creder.said) {
772
+ throw new ValidationError("Credential is missing SAID.");
773
+ }
774
+ return creder.said;
775
+ }
776
+ function telAccepted(reger, pre, sn, eventSaid) {
777
+ return reger.tels.getOn(pre, sn)?.qb64 === eventSaid;
778
+ }
779
+ function rpyAttrs(serder) {
780
+ const attrs = serder.ked?.a;
781
+ if (!attrs || typeof attrs !== "object"
782
+ || !("cid" in attrs) || typeof attrs.cid !== "string" || !attrs.cid
783
+ || !("role" in attrs) || typeof attrs.role !== "string" || !attrs.role
784
+ || !("eid" in attrs) || typeof attrs.eid !== "string" || !attrs.eid) {
785
+ throw new ValidationError("Multisig reply is missing cid, role, or eid.");
786
+ }
787
+ return { cid: attrs.cid, role: attrs.role, eid: attrs.eid };
788
+ }
789
+ function payloadSection(ked) {
790
+ return isRecord(ked.a) ? ked.a : {};
791
+ }
792
+ function embeddedSection(ked) {
793
+ if (isRecord(ked.e)) {
794
+ return ked.e;
795
+ }
796
+ const attrs = payloadSection(ked);
797
+ return isRecord(attrs.e) ? attrs.e : null;
798
+ }
799
+ function stringArrayField(record, field) {
800
+ const value = record[field];
801
+ return Array.isArray(value) ? value.filter((item) => typeof item === "string") : [];
802
+ }
803
+ function stringField(record, field) {
804
+ const value = record[field];
805
+ return typeof value === "string" ? value : "";
806
+ }
807
+ function isRecord(value) {
808
+ return typeof value === "object" && value !== null && !Array.isArray(value);
809
+ }
810
+ function isKelRoute(route) {
811
+ return route === MULTISIG_ICP_ROUTE || route === MULTISIG_ROT_ROUTE || route === MULTISIG_IXN_ROUTE;
812
+ }
813
+ function isVdrRoute(route) {
814
+ return route === MULTISIG_VCP_ROUTE || route === MULTISIG_ISS_ROUTE || route === MULTISIG_REV_ROUTE;
815
+ }
816
+ function requireText(value, label) {
817
+ if (!value) {
818
+ throw new ValidationError(`${label} is required and cannot be empty.`);
819
+ }
820
+ return value;
821
+ }