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,1042 @@
1
+ /**
2
+ * Explicitly approved IPEX Unblind, following Python's local query/reply profile.
3
+ * Only event openings cross this boundary. Roots, application state vocabulary,
4
+ * transport and final Admit remain with their existing owners.
5
+ */
6
+ import { bytesEqual, concatBytes, Counter, Diger, Kinds, makeBlindUuid, NumberPrimitive, parseAttachmentGroup, parseBytes, SealSource, SerderACDC, unblindBlindState, Vrsn_2_0, } from "cesr-ts";
7
+ import { Hab } from "../app/identity/habbing.js";
8
+ import { IpexV2Handler } from "../app/ipex/ipex-v2.js";
9
+ import { isLocalGroupHab, latestGroupContribution, localGroupMember } from "../app/multisig/group-members.js";
10
+ import { copyAuxiliaryQuery, envelopeFromFrame, } from "../app/protocol/parsering.js";
11
+ import { abortable } from "../app/runtime/abortable.js";
12
+ import { Deck } from "../core/deck.js";
13
+ import { TransIdxSigGroup } from "../core/dispatch.js";
14
+ import { ValidationError } from "../core/errors.js";
15
+ import { verifyExchangeProofs, verifyQueryAttachments } from "../core/exchange/exchange-proofing.js";
16
+ import { Kever } from "../core/kel/kever.js";
17
+ import { query, reply } from "../core/protocol-eventing.js";
18
+ import { messagize } from "../core/protocol-serialization.js";
19
+ import { fetchStoredTsgs, unverifiedReplyDecision } from "../core/routing.js";
20
+ import { prepareNests, publishNests } from "../db/exchange/exchange-nests.js";
21
+ import { timestampMicros } from "../time/mod.js";
22
+ import { validateUpdate, verifyRegistryAnchor, vet, vetBlind, vetBound, } from "./regeventing.js";
23
+ import { publicOpeningAttachment } from "./registering.js";
24
+ /** Compare registry selections without treating JSON dictionary order as authority. */
25
+ function sameSelection(left, right) {
26
+ return Object.keys(left).length === Object.keys(right).length
27
+ && Object.entries(left).every(([key, values]) => right[key]?.length === values.length && values.every((value, index) => right[key][index] === value));
28
+ }
29
+ /** Decode exactly one complete wire message, without dispatch or database effects. */
30
+ function parsed(raw) {
31
+ const frames = parseBytes(concatBytes(Counter.makeGVC(Vrsn_2_0), raw));
32
+ if (frames.length !== 1)
33
+ throw new ValidationError("Expected exactly one Unblind message");
34
+ return envelopeFromFrame(frames[0]);
35
+ }
36
+ /** Source evidence is accepted only from the public chain, never raw escrow bodies. */
37
+ function ordinal(event) {
38
+ const sn = BigInt(`0x${event.sad.n}`);
39
+ if (sn > BigInt(Number.MAX_SAFE_INTEGER))
40
+ throw new ValidationError("Registry ordinal exceeds storage range");
41
+ return Number(sn);
42
+ }
43
+ /**
44
+ * One presentation's explicit proof-release consent. Inject as qvy
45
+ * and register Route on the habitat's existing Revery Router. Wire intake cannot
46
+ * approve work; a fresh owner cannot resume an unfinished operation. Group members
47
+ * sign exact proposals under that approval. Ordinary thresholds elect delivery
48
+ * from the completed aggregate; neither contribution nor delivery requires a root.
49
+ */
50
+ export class Unblind {
51
+ /** Bind the exact Grant verifier's store and an explicit ordinary-state vocabulary. */
52
+ constructor({ hab, exc, registry, states, rvy = hab.rvy, now = Date.now }) {
53
+ Object.defineProperty(this, "resource", {
54
+ enumerable: true,
55
+ configurable: true,
56
+ writable: true,
57
+ value: Unblind.Route
58
+ });
59
+ Object.defineProperty(this, "outgoing", {
60
+ enumerable: true,
61
+ configurable: true,
62
+ writable: true,
63
+ value: new Deck()
64
+ });
65
+ Object.defineProperty(this, "pendingQueries", {
66
+ enumerable: true,
67
+ configurable: true,
68
+ writable: true,
69
+ value: new Map()
70
+ });
71
+ Object.defineProperty(this, "now", {
72
+ enumerable: true,
73
+ configurable: true,
74
+ writable: true,
75
+ value: void 0
76
+ });
77
+ Object.defineProperty(this, "operations", {
78
+ enumerable: true,
79
+ configurable: true,
80
+ writable: true,
81
+ value: new Map()
82
+ });
83
+ Object.defineProperty(this, "hab", {
84
+ enumerable: true,
85
+ configurable: true,
86
+ writable: true,
87
+ value: void 0
88
+ });
89
+ Object.defineProperty(this, "exc", {
90
+ enumerable: true,
91
+ configurable: true,
92
+ writable: true,
93
+ value: void 0
94
+ });
95
+ Object.defineProperty(this, "rvy", {
96
+ enumerable: true,
97
+ configurable: true,
98
+ writable: true,
99
+ value: void 0
100
+ });
101
+ Object.defineProperty(this, "registry", {
102
+ enumerable: true,
103
+ configurable: true,
104
+ writable: true,
105
+ value: void 0
106
+ });
107
+ Object.defineProperty(this, "states", {
108
+ enumerable: true,
109
+ configurable: true,
110
+ writable: true,
111
+ value: void 0
112
+ });
113
+ Object.defineProperty(this, "group", {
114
+ enumerable: true,
115
+ configurable: true,
116
+ writable: true,
117
+ value: void 0
118
+ });
119
+ if (!(hab instanceof Hab) || hab.db !== exc.hby.db || registry.db !== hab.db || rvy.db !== hab.db
120
+ || exc.hby.habs.get(hab.pre) !== hab) {
121
+ throw new ValidationError("Unblind requires a local signing habitat");
122
+ }
123
+ this.group = isLocalGroupHab(exc.hby, hab);
124
+ if (this.group)
125
+ localGroupMember(exc.hby, hab.pre);
126
+ if (!Array.isArray(states) || states.some((state) => typeof state !== "string")) {
127
+ throw new ValidationError("Unblind requires an explicit sequence of state strings");
128
+ }
129
+ this.now = now;
130
+ this.hab = hab;
131
+ this.exc = exc;
132
+ this.rvy = rvy;
133
+ this.registry = registry;
134
+ this.states = [...states];
135
+ }
136
+ /** Freeze one authenticated live Grant's exact bodies, parties and authorized registry scope. */
137
+ approve(grant) {
138
+ this.pruneQueries();
139
+ const input = this.exc.retainedInput(grant);
140
+ if (!input)
141
+ throw new ValidationError("Unblind requires an authenticated retained Grant");
142
+ const message = input.serder, sender = message.pre, recipient = message.sad.ri;
143
+ const xid = message.ilk === "xip" ? message.said : message.sad.x;
144
+ if (typeof xid !== "string" || !sender || typeof recipient !== "string" || sender === recipient
145
+ || ![sender, recipient].includes(this.hab.pre))
146
+ throw new ValidationError("Local habitat is not a presentation party");
147
+ const handler = this.exc.handlerFor(message);
148
+ if (!(handler instanceof IpexV2Handler) || handler.registry !== this.registry.store) {
149
+ throw new ValidationError("Unblind must use the selected Grant verifier's registry store");
150
+ }
151
+ const existing = this.operations.get(xid);
152
+ if (existing) {
153
+ if (existing.grant !== grant)
154
+ throw new ValidationError("Another Grant is selected for this transaction");
155
+ this.live(existing);
156
+ return xid;
157
+ }
158
+ const context = this.exc.presentationContext(grant, { xid, sender, recipient });
159
+ if (!context)
160
+ throw new ValidationError("Presentation is unavailable, terminated or expired");
161
+ this.operations.set(xid, {
162
+ xid,
163
+ grant,
164
+ sender,
165
+ recipient,
166
+ raw: message.raw.slice(),
167
+ bodies: context.nests.map((nest) => nest.body.raw.slice()),
168
+ scope: new Map([...context.registries].map(([regid, nodes]) => [regid, [...nodes]])),
169
+ query: null,
170
+ reply: null,
171
+ requested: null,
172
+ selected: null,
173
+ openings: new Map(),
174
+ requestedByPeer: false,
175
+ received: false,
176
+ abandoned: false,
177
+ proposal: null,
178
+ contribution: null,
179
+ });
180
+ this.replayQuery(xid);
181
+ return xid;
182
+ }
183
+ /** Freeze a signed disclosee query over the missing accepted public suffix. */
184
+ start(grant) {
185
+ const op = this.operation(this.approve(grant));
186
+ if (this.hab.pre !== op.recipient)
187
+ throw new ValidationError("Only the disclosee starts Unblind");
188
+ if (!op.query && !op.contribution) {
189
+ const { requested, children } = this.request(op);
190
+ const message = query(Unblind.Route, { x: op.xid, re: requested }, {
191
+ pre: this.hab.pre,
192
+ replyRoute: Unblind.Route,
193
+ pvrsn: Vrsn_2_0,
194
+ kind: Kinds.json,
195
+ });
196
+ const signed = this.signed(message, children);
197
+ op.requested = requested;
198
+ if (this.group) {
199
+ op.proposal = message.raw.slice();
200
+ op.contribution = signed;
201
+ this.outgoing.push({ kin: "sign", dest: this.hab.pre, msg: signed.slice() });
202
+ }
203
+ else
204
+ op.query = signed;
205
+ }
206
+ this.current(op);
207
+ return (op.query ?? op.contribution).slice();
208
+ }
209
+ /**
210
+ * Re-sign this disclosee's started individual query for delivery now.
211
+ *
212
+ * KERIpy `Unblind.requery` (kentbull/keripy#159): a queued query can age past
213
+ * the discloser's KRAM timeliness window before transport begins. The renewal
214
+ * keeps the approved Grant, the frozen requested events and their nested
215
+ * public evidence; only the query's own `dt`, SAID and signatures change, and
216
+ * it becomes the outstanding query. A newer registry head still needs a new
217
+ * operation, and the Grant's deadline is never extended. Groups cannot renew here.
218
+ */
219
+ requery(xid) {
220
+ const op = this.operation(xid);
221
+ if (this.group)
222
+ throw new ValidationError("one group member cannot renew a threshold unblind query");
223
+ if (this.hab.pre !== op.recipient || !op.query)
224
+ throw new ValidationError("unblind has no started disclosee query");
225
+ if (op.received)
226
+ throw new ValidationError("unblind already received its authenticated reply");
227
+ this.current(op);
228
+ const { requested, children } = this.request(op);
229
+ if (!op.requested || !sameSelection(requested, op.requested)) {
230
+ throw new ValidationError("unblind request differs from the approved query");
231
+ }
232
+ const message = query(Unblind.Route, { x: op.xid, re: requested }, {
233
+ pre: this.hab.pre,
234
+ replyRoute: Unblind.Route,
235
+ pvrsn: Vrsn_2_0,
236
+ kind: Kinds.json,
237
+ });
238
+ op.query = this.signed(message, children);
239
+ return op.query.slice();
240
+ }
241
+ /**
242
+ * Contribute to one exact group proposal under the existing local approval.
243
+ * Validate every member signature and the public suffix/minimum openings before
244
+ * signing. A rootless member signs the supplied proof, never derives a root.
245
+ */
246
+ contribute(xid, proposal) {
247
+ if (!this.group)
248
+ throw new ValidationError("Unblind contribution requires a local group member");
249
+ const envelope = parsed(proposal), message = envelope.serder, querying = message.ilk === "qry";
250
+ if (!querying && message.ilk !== "rpy")
251
+ throw new ValidationError("Expected a signed Unblind query or reply");
252
+ this.attachments(envelope, querying ? "query" : "reply");
253
+ if (envelope.sigers.length || envelope.cigars.length) {
254
+ throw new ValidationError("Group proposal requires named group signing factors");
255
+ }
256
+ const { op, selected, nests } = this.preflight(message, querying ? "q" : "a", querying ? "recipient" : "sender", true);
257
+ if (op.xid !== xid || querying && message.sad.rr !== Unblind.Route) {
258
+ throw new ValidationError("Proposal differs from the approved Unblind transaction");
259
+ }
260
+ if (!querying && !op.requestedByPeer) {
261
+ throw new ValidationError("Group reply requires its authenticated peer query");
262
+ }
263
+ this.current(op);
264
+ if (op.proposal && !bytesEqual(op.proposal, message.raw)) {
265
+ throw new ValidationError("Unblind proposal body is frozen");
266
+ }
267
+ const kever = this.hab.kever;
268
+ const groups = [
269
+ ...envelope.tsgs,
270
+ ...envelope.ssgs.map(group => new TransIdxSigGroup(group.prefixer, NumberPrimitive.fromNum(BigInt(kever.lastEst.s)), new Diger({ qb64: kever.lastEst.d }), group.sigers)),
271
+ ];
272
+ if (!groups.length)
273
+ throw new ValidationError("Proposal lacks a group member signature");
274
+ for (const group of groups) {
275
+ if (group.pre !== this.hab.pre || group.sn !== BigInt(kever.lastEst.s) || group.said !== kever.lastEst.d) {
276
+ throw new ValidationError("Proposal names different group establishment keys");
277
+ }
278
+ const verified = Kever.verifyIndexedSignatures(message.raw, group.sigers, kever.verfers);
279
+ if (!verified.sigers.length || verified.sigers.length !== group.sigers.length) {
280
+ throw new ValidationError("Proposal lacks valid member contributions");
281
+ }
282
+ }
283
+ const extra = querying
284
+ ? this.queryEvidence(op, selected, envelope.nests)
285
+ : envelope.attachmentGroups.filter(group => ["BlindedStateQuadruples", "BoundStateSextuples"]
286
+ .includes(group.name.replace(/^Big/, ""))).map(group => group.raw);
287
+ if (!querying) {
288
+ const openings = this.replyOpenings(op, selected, nests, [...envelope.bsqs, ...envelope.bsss]);
289
+ const minimum = this.minimum(op, nests, event => this.opening(openings, event));
290
+ if (!sameSelection(selected, minimum.selected)) {
291
+ throw new ValidationError("Reply is not the minimum current suffix");
292
+ }
293
+ }
294
+ if (op.contribution) {
295
+ const previous = parsed(op.contribution);
296
+ const old = querying
297
+ ? this.publicEvents(previous.nests)
298
+ : previous.attachmentGroups.filter(group => ["BlindedStateQuadruples", "BoundStateSextuples"]
299
+ .includes(group.name.replace(/^Big/, ""))).map(group => group.raw);
300
+ if (old.length !== extra.length || old.some((wire, index) => !bytesEqual(wire, extra[index]))) {
301
+ throw new ValidationError("Unblind proposal evidence is frozen");
302
+ }
303
+ }
304
+ else {
305
+ const signed = this.signed(message, extra);
306
+ op.proposal = message.raw.slice();
307
+ op.contribution = signed;
308
+ if (querying)
309
+ op.requested = selected;
310
+ }
311
+ return op.contribution.slice();
312
+ }
313
+ /** Authenticate the full peer threshold before public evidence intake or proof release. */
314
+ processQuery(envelope) {
315
+ this.pruneQueries();
316
+ try {
317
+ const { serder } = envelope;
318
+ if (serder.ilk !== "qry" || serder.sad.rr !== Unblind.Route)
319
+ throw new ValidationError("Invalid Unblind query");
320
+ this.attachments(envelope, "query");
321
+ const own = this.group && serder.pre === this.hab.pre;
322
+ const xid = serder.sad?.q?.x;
323
+ if (!own && typeof xid === "string" && !this.operations.has(xid)) {
324
+ this.retainQuery(envelope);
325
+ return { kind: "accept" };
326
+ }
327
+ const { op, selected } = this.preflight(serder, "q", own ? "recipient" : "sender", own);
328
+ if (own && (!op.proposal || !bytesEqual(op.proposal, serder.raw))) {
329
+ throw new ValidationError("Own Unblind query lacks its exact locally approved proposal");
330
+ }
331
+ if (!verifyQueryAttachments(this.hab.db, envelope))
332
+ return { kind: "drop", reason: "missingAuthentication" };
333
+ if (op.requested && !sameSelection(op.requested, selected)) {
334
+ throw new ValidationError("Conflicting Unblind request");
335
+ }
336
+ if (own) {
337
+ const extra = this.queryEvidence(op, selected, envelope.nests);
338
+ this.current(op);
339
+ const kever = this.hab.kever;
340
+ let groups = envelope.tsgs.filter(group => group.pre === this.hab.pre);
341
+ if (!groups.length) {
342
+ const sigers = [
343
+ ...envelope.sigers,
344
+ ...envelope.ssgs.filter(group => group.pre === this.hab.pre).flatMap(group => group.sigers),
345
+ ];
346
+ groups = [
347
+ new TransIdxSigGroup(kever.prefixer, NumberPrimitive.fromNum(BigInt(kever.lastEst.s)), new Diger({ qb64: kever.lastEst.d }), sigers),
348
+ ];
349
+ }
350
+ this.groupMessage(op, "query", serder, groups, extra);
351
+ return { kind: "accept" };
352
+ }
353
+ this.receiveEvents(selected, envelope.nests);
354
+ this.live(op);
355
+ op.requested = selected;
356
+ op.requestedByPeer = true;
357
+ if (!this.group)
358
+ this.respond(op.xid);
359
+ return { kind: "accept" };
360
+ }
361
+ catch (error) {
362
+ if (error instanceof ValidationError)
363
+ return { kind: "drop", reason: "invalidQuery" };
364
+ throw error;
365
+ }
366
+ }
367
+ /** Schedule responder work only after the selected live operation authenticates its peer query. */
368
+ hasPeerQuery(xid) {
369
+ const op = this.operation(xid);
370
+ this.live(op);
371
+ this.current(op);
372
+ if (this.hab.pre !== op.sender)
373
+ throw new ValidationError("Peer query readiness requires the selected discloser");
374
+ return op.requestedByPeer;
375
+ }
376
+ /** Retry a previously authenticated request locally when held proofs become available. */
377
+ respond(xid) {
378
+ const op = this.operation(xid), { nests } = this.live(op);
379
+ if (this.hab.pre !== op.sender || !op.requestedByPeer)
380
+ throw new ValidationError("No authenticated peer request");
381
+ this.current(op);
382
+ if (this.group && op.contribution)
383
+ return (op.reply ?? op.contribution).slice();
384
+ if (!op.reply) {
385
+ const { selected, openings } = this.minimum(op, nests, (event) => this.held(op, event, nests));
386
+ const message = reply(Unblind.Route, { x: op.xid, re: selected }, {
387
+ pre: this.hab.pre,
388
+ pvrsn: Vrsn_2_0,
389
+ kind: Kinds.json,
390
+ });
391
+ const signed = this.signed(message, openings.map(publicOpeningAttachment));
392
+ if (this.group) {
393
+ op.proposal = message.raw.slice();
394
+ op.contribution = signed;
395
+ this.outgoing.push({ kin: "sign", dest: this.hab.pre, msg: signed.slice() });
396
+ return signed.slice();
397
+ }
398
+ op.reply = signed;
399
+ }
400
+ this.outgoing.push({ kin: "reply", dest: op.recipient, msg: op.reply.slice() });
401
+ return op.reply.slice();
402
+ }
403
+ /** Independently vet openings before caching them; Revery owns signature threshold and BADA. */
404
+ processReply({ serder, diger, route, cigars = [], tsgs = [], attachments }) {
405
+ try {
406
+ if (serder.ilk !== "rpy" || route !== Unblind.Route)
407
+ throw new ValidationError("Invalid Unblind reply");
408
+ // Revery's proof escrow can retry without attachments after independently
409
+ // checked openings entered this process-local operation on initial intake.
410
+ if (attachments) {
411
+ if (!bytesEqual(attachments.serder.raw, serder.raw)) {
412
+ throw new ValidationError("Reply attachment body mismatch");
413
+ }
414
+ this.attachments(attachments, "reply");
415
+ }
416
+ const own = this.group && serder.pre === this.hab.pre;
417
+ const { op, selected, nests } = this.preflight(serder, "a", own ? "sender" : "recipient", own);
418
+ if (own && (!op.proposal || !bytesEqual(op.proposal, serder.raw) || !op.requestedByPeer)) {
419
+ throw new ValidationError("Own Unblind reply lacks its exact locally approved proposal");
420
+ }
421
+ if (!own && !op.query)
422
+ throw new ValidationError("Reply has no outstanding Unblind query");
423
+ this.current(op);
424
+ const verified = this.replyOpenings(op, selected, nests, [
425
+ ...attachments?.bsqs ?? [],
426
+ ...attachments?.bsss ?? [],
427
+ ]);
428
+ for (const [said, opening] of verified)
429
+ op.openings.set(said, opening);
430
+ const minimum = this.minimum(op, nests, (event) => this.opening(op.openings, event));
431
+ if (own) {
432
+ if (!sameSelection(selected, minimum.selected)) {
433
+ throw new ValidationError("Reply is not the minimum current suffix");
434
+ }
435
+ }
436
+ else {
437
+ if (Object.entries(minimum.selected).some(([regid, saids]) => saids.some(said => !selected[regid]?.includes(said))))
438
+ throw new ValidationError("Reply does not cover the required current suffix");
439
+ for (const said of Object.values(selected).flat())
440
+ this.opening(op.openings, this.registry.store.event(said));
441
+ }
442
+ const decision = this.rvy.acceptReply({ serder, saider: diger, route, aid: op.sender, cigars, tsgs });
443
+ if (decision.kind !== "accept")
444
+ return decision;
445
+ op.selected = selected;
446
+ if (own) {
447
+ this.groupMessage(op, "reply", serder, fetchStoredTsgs(this.hab.db, diger.qb64).filter(group => group.pre === this.hab.pre), minimum.openings.map(publicOpeningAttachment));
448
+ return decision;
449
+ }
450
+ op.received = true;
451
+ return decision;
452
+ }
453
+ catch (error) {
454
+ if (error instanceof ValidationError)
455
+ return unverifiedReplyDecision(error.message);
456
+ throw error;
457
+ }
458
+ }
459
+ /** Authenticated reply readiness only: neither credential-state acceptance nor Admit. */
460
+ complete(xid) {
461
+ const op = this.operation(xid);
462
+ this.live(op);
463
+ this.current(op);
464
+ return this.group && this.hab.pre === op.sender ? op.reply !== null : op.received;
465
+ }
466
+ /**
467
+ * Return the verified openings an authenticated reply selected.
468
+ *
469
+ * KERIpy `Unblind.openings` (kentbull/keripy#156): a read-only accessor for a
470
+ * group member forwarding the completed reply, with its proofs, to the other
471
+ * members. It requires the same readiness as `complete` (local approval, live
472
+ * original Grant, an authenticated reply or frozen own group reply). Each
473
+ * opening was checked against its accepted event and the approved disclosure
474
+ * when the reply arrived. It is not a credential-state verdict and authorizes
475
+ * neither Admit nor retention; `finish` owns that.
476
+ *
477
+ * @returns registry event SAID to opening, in the reply's selected order; a copy.
478
+ */
479
+ openings(xid) {
480
+ if (!this.complete(xid))
481
+ throw new ValidationError("unblind reply has not been authenticated and verified");
482
+ const op = this.operation(xid);
483
+ const openings = new Map();
484
+ for (const said of Object.values(op.selected ?? {}).flat()) {
485
+ const opening = op.openings.get(said);
486
+ if (!opening)
487
+ throw new ValidationError("unblind reply has not been authenticated and verified");
488
+ openings.set(said, opening);
489
+ }
490
+ return openings;
491
+ }
492
+ /** Retry this exact Grant, or atomically update only its live accepted proof view. */
493
+ *finish(xid) {
494
+ const op = this.operation(xid), { nests } = this.live(op), db = this.hab.db;
495
+ this.current(op);
496
+ if (this.hab.pre === op.sender) {
497
+ if (!op.requestedByPeer || !op.reply)
498
+ throw new ValidationError("Responder requires its completed signed reply");
499
+ const frame = parsed(op.reply);
500
+ this.attachments(frame, "reply");
501
+ const { selected } = this.preflight(frame.serder, "a", "sender", true);
502
+ const proof = verifyExchangeProofs(db, frame.serder, { tsgs: frame.tsgs, cigars: frame.cigars });
503
+ if (proof.invalid || proof.missing.length || !(proof.tsgs.some((group) => group.pre === op.sender)
504
+ || proof.cigars.some((cigar) => cigar.verfer?.qb64 === op.sender))) {
505
+ throw new ValidationError("Responder reply lacks its full signature threshold");
506
+ }
507
+ const openings = this.replyOpenings(op, selected, nests, [...frame.bsqs, ...frame.bsss]);
508
+ if (!op.selected || !sameSelection(op.selected, selected)) {
509
+ const minimum = this.minimum(op, nests, (event) => this.opening(openings, event));
510
+ if (!sameSelection(selected, minimum.selected)) {
511
+ throw new ValidationError("Reply is not the minimum current suffix");
512
+ }
513
+ }
514
+ op.selected = selected;
515
+ op.openings = openings;
516
+ }
517
+ else if (!op.received)
518
+ throw new ValidationError("Unblind reply has not been authenticated and verified");
519
+ const accepted = this.exc.complete(op.grant), snapshot = db.enst.get([op.grant]);
520
+ for (const nest of nests) {
521
+ const evidence = envelopeFromFrame(nest), present = new Set([...evidence.bsqs, ...evidence.bsss].map((v) => v.d.nonce));
522
+ for (const said of Object.values(op.selected).flat()) {
523
+ const event = this.registry.store.event(said), opening = this.opening(op.openings, event);
524
+ if (event.sad.rd === nest.body.ked?.rd && (!opening.td.nonce || opening.td.nonce === nest.body.said)
525
+ && !present.has(opening.d.nonce)) {
526
+ nest.attachments.push(parseAttachmentGroup(publicOpeningAttachment(opening), Vrsn_2_0, "txt").group);
527
+ present.add(opening.d.nonce);
528
+ }
529
+ }
530
+ }
531
+ if (!accepted) {
532
+ const input = this.exc.retainedInput(op.grant, { pending: true });
533
+ if (!input)
534
+ throw new ValidationError("Selected pending Grant is no longer live");
535
+ return yield* this.exc.acceptPendingGrantProof({ ...input, nests });
536
+ }
537
+ // Serialization may suspend; repeat all authority and snapshot checks inside
538
+ // the single writer. This does not rewrite another Grant or any Admit.
539
+ const wires = yield* abortable((signal) => prepareNests(nests, signal));
540
+ const result = db.env.transactionSync(() => {
541
+ this.live(op);
542
+ this.current(op);
543
+ const retained = db.enst.get([op.grant]);
544
+ if (retained.length !== snapshot.length || retained.some((raw, index) => raw !== snapshot[index])) {
545
+ throw new ValidationError("Approved presentation evidence changed");
546
+ }
547
+ const verified = this.exc.verifyGrantProofs(op.grant, nests);
548
+ if (typeof verified !== "object" || verified.kind !== "accept") {
549
+ return { kind: "reject", said: op.grant, reason: "Updated presentation proofs did not verify" };
550
+ }
551
+ publishNests(db, op.grant, wires);
552
+ for (const [node, record] of verified.registryStates)
553
+ db.exrs.pin([op.grant, node], record);
554
+ return { kind: "accept", said: op.grant };
555
+ });
556
+ yield* abortable(async () => {
557
+ await db.env.flushed;
558
+ });
559
+ return result;
560
+ }
561
+ /** Discard approved work and unsent replies; delivered bytes remain caller-owned. */
562
+ abandon(xid) {
563
+ const retained = this.pendingQueries.delete(xid);
564
+ if (retained && !this.operations.has(xid))
565
+ return;
566
+ const op = this.operation(xid);
567
+ const keep = [...this.outgoing].filter(item => ![op.query, op.reply, op.contribution]
568
+ .some(wire => wire && bytesEqual(item.msg, wire)));
569
+ this.outgoing.clear();
570
+ this.outgoing.extend(keep);
571
+ op.query = null;
572
+ op.reply = null;
573
+ op.proposal = null;
574
+ op.contribution = null;
575
+ op.openings.clear();
576
+ op.abandoned = true;
577
+ }
578
+ /** Select the exact missing public suffix without signing or changing registry state. */
579
+ request(op) {
580
+ const nests = this.live(op).nests, carried = this.carried(op, nests);
581
+ const requested = {}, children = [];
582
+ for (const regid of op.scope.keys()) {
583
+ const events = this.events(regid);
584
+ let missing = false, start = 0;
585
+ for (let index = events.length - 1; index >= 0; index--) {
586
+ const opening = carried.get(events[index].said);
587
+ if (!opening)
588
+ missing = true;
589
+ else if (this.checkOpening(op, events[index], opening, nests)) {
590
+ start = index + 1;
591
+ break;
592
+ }
593
+ }
594
+ if (!missing)
595
+ continue;
596
+ requested[regid] = [];
597
+ for (const event of events.slice(start)) {
598
+ const anchor = this.registry.store.anchor(event.said);
599
+ if (!anchor)
600
+ throw new ValidationError("Requested event lacks accepted source evidence");
601
+ requested[regid].push(event.said);
602
+ children.push(messagize(event, Counter.enclose({
603
+ code: "SealSourceCouples",
604
+ version: Vrsn_2_0,
605
+ qb64: SealSource.qb64b({ s: NumberPrimitive.fromNum(anchor[0].num), d: anchor[1] }),
606
+ }), { nested: true, gvrsn: Vrsn_2_0 }));
607
+ }
608
+ }
609
+ if (!Object.keys(requested).length)
610
+ throw new ValidationError("Grant already carries the current openings");
611
+ return { requested, children };
612
+ }
613
+ /** Release all process-local approvals, opening references and retry bytes without changing stores. */
614
+ close() {
615
+ for (const xid of this.operations.keys())
616
+ this.abandon(xid);
617
+ this.operations.clear();
618
+ this.pendingQueries.clear();
619
+ this.outgoing.clear();
620
+ }
621
+ /** Hold one authenticated public suffix for explicit release consent; never import events here. */
622
+ retainQuery(envelope) {
623
+ const query = envelope.serder, data = this.parameters(query, "q");
624
+ if (!verifyQueryAttachments(this.hab.db, envelope))
625
+ throw new ValidationError("Unauthenticated Unblind query");
626
+ const candidates = [...this.hab.db.tmsc.getTopItemIter([this.hab.pre, data.x])]
627
+ .map(([key]) => this.hab.db.exns.get([key[2]]) ?? this.hab.db.epse.get([key[2]]))
628
+ .filter(grant => grant && grant.pre === this.hab.pre && grant.sad.ri === query.pre
629
+ && this.exc.presentationContext(grant.said, { xid: data.x, sender: this.hab.pre, recipient: query.pre }));
630
+ if (candidates.length !== 1)
631
+ throw new ValidationError("Unblind query has no unique authenticated Grant");
632
+ const grant = candidates[0];
633
+ const context = this.exc.presentationContext(grant.said, {
634
+ xid: data.x,
635
+ sender: this.hab.pre,
636
+ recipient: query.pre,
637
+ });
638
+ const selected = this.selection(data.re, context.registries, "q");
639
+ this.validateEvents(selected, envelope.nests);
640
+ const expires = this.retainUntil(envelope, grant);
641
+ const prior = this.pendingQueries.get(data.x);
642
+ if (prior && !bytesEqual(prior.envelope.serder.raw, query.raw)) {
643
+ throw new ValidationError("Conflicting Unblind query");
644
+ }
645
+ if (!prior) {
646
+ this.pendingQueries.set(data.x, { envelope: copyAuxiliaryQuery(envelope), expires, grant: grant.said });
647
+ }
648
+ }
649
+ /** Expired evidence cannot survive another owner interaction. */
650
+ pruneQueries() {
651
+ const now = BigInt(this.now()) * 1000n;
652
+ for (const [xid, query] of this.pendingQueries)
653
+ if (now >= query.expires)
654
+ this.pendingQueries.delete(xid);
655
+ return now;
656
+ }
657
+ /** Consume the first authenticated request only after explicit approval; never renew either clock. */
658
+ replayQuery(xid) {
659
+ const pending = this.pendingQueries.get(xid);
660
+ this.pendingQueries.delete(xid);
661
+ if (pending && pending.grant === this.operations.get(xid)?.grant
662
+ && BigInt(this.now()) * 1000n < pending.expires)
663
+ this.processQuery(pending.envelope);
664
+ }
665
+ /** Bound process-local public evidence by the original query and accepted Grant lifetimes. */
666
+ retainUntil(envelope, grant) {
667
+ const now = this.pruneQueries();
668
+ const cache = this.hab.db.msgc.get([envelope.serder.pre, envelope.serder.said]);
669
+ const messageTime = cache && timestampMicros(cache.mdt);
670
+ const grantTime = timestampMicros(this.exc.exchangeDeadline(grant) ?? undefined);
671
+ if (!cache || this.hab.db.pmkm.get([envelope.serder.pre, envelope.serder.said]) || messageTime === null
672
+ || messageTime === undefined || grantTime === null
673
+ || !Number.isSafeInteger(cache.d) || !Number.isSafeInteger(cache.ml)
674
+ || cache.d < 0 || cache.ml < 0 || !Number.isSafeInteger(cache.d + cache.ml)) {
675
+ throw new ValidationError("Query has no accepted original lifetime");
676
+ }
677
+ const queryTime = messageTime + BigInt(cache.d + cache.ml) * 1000n;
678
+ const expires = queryTime < grantTime ? queryTime : grantTime;
679
+ if (now >= expires)
680
+ throw new ValidationError("Query or Grant has expired");
681
+ return expires;
682
+ }
683
+ operation(xid) {
684
+ const op = this.operations.get(xid);
685
+ if (!op)
686
+ throw new ValidationError("Unblind transaction has no local approval");
687
+ return op;
688
+ }
689
+ live(op) {
690
+ const context = this.exc.presentationContext(op.grant, op);
691
+ if (op.abandoned || !context || !bytesEqual(context.serder.raw, op.raw)) {
692
+ throw new ValidationError("Presentation is unavailable, terminated or expired");
693
+ }
694
+ if (context.nests.length !== op.bodies.length
695
+ || context.nests.some((nest, i) => !bytesEqual(nest.body.raw, op.bodies[i]))
696
+ || context.registries.size !== op.scope.size || [...op.scope].some(([regid, nodes]) => {
697
+ const selected = context.registries.get(regid);
698
+ return !selected || selected.length !== nodes.length || nodes.some((node, i) => selected[i] !== node);
699
+ }))
700
+ throw new ValidationError("Presentation differs from the approved Grant");
701
+ return context;
702
+ }
703
+ current(op) {
704
+ for (const [regid, saids] of Object.entries(op.requested ?? {})) {
705
+ if (this.registry.store.headEvent(regid)?.said !== saids.at(-1)) {
706
+ throw new ValidationError("Registry head changed after the Unblind request");
707
+ }
708
+ }
709
+ }
710
+ /** Decode the exact query/reply body before applying consent and event scope. */
711
+ parameters(serder, field) {
712
+ const data = serder.sad?.[field];
713
+ if (!serder.verify() || serder.pvrsn.major !== 2 || serder.pvrsn.minor !== 0 || serder.route !== Unblind.Route
714
+ || !data || typeof data !== "object" || Array.isArray(data) || Object.keys(data).sort().join() !== "re,x"
715
+ || !("x" in data) || typeof data.x !== "string" || !("re" in data) || !data.re
716
+ || typeof data.re !== "object" || Array.isArray(data.re))
717
+ throw new ValidationError("Invalid Unblind message shape");
718
+ return data;
719
+ }
720
+ /** Keep selected event identities distinct and inside the authenticated Grant's registry scope. */
721
+ selection(re, scope, field) {
722
+ const selected = {};
723
+ for (const [regid, values] of Object.entries(re)) {
724
+ if (!scope.has(regid) || !Array.isArray(values) || !values.length
725
+ || values.some((value) => typeof value !== "string" || !value) || new Set(values).size !== values.length) {
726
+ throw new ValidationError("Unblind events must be distinct lists within the approved scope");
727
+ }
728
+ selected[regid] = [...values];
729
+ }
730
+ if (field === "q" && !Object.keys(selected).length)
731
+ throw new ValidationError("Unblind query scope is empty");
732
+ return selected;
733
+ }
734
+ preflight(serder, field, role, own = false) {
735
+ const data = this.parameters(serder, field);
736
+ const op = this.operation(data.x), { nests } = this.live(op);
737
+ if (this.hab.pre !== op[role] || serder.pre !== op[own ? role : role === "sender" ? "recipient" : "sender"]) {
738
+ throw new ValidationError("Wrong Unblind sender or local recipient");
739
+ }
740
+ const selected = this.selection(data.re, op.scope, field);
741
+ return { op, selected, nests };
742
+ }
743
+ /** Encode the endorsed finite body and explicit counted evidence in one attachment enclosure. */
744
+ signed(message, extra, groups) {
745
+ const auth = parsed(groups
746
+ ? messagize(message, { tsgs: groups, gvrsn: Vrsn_2_0 })
747
+ : this.hab.endorse(message, { gvrsn: Vrsn_2_0 }));
748
+ const attachments = concatBytes(...auth.attachmentGroups.map((group) => group.raw), ...extra);
749
+ return concatBytes(Counter.makeGVC(Vrsn_2_0), message.raw, Counter.enclose({ code: "AttachmentGroup", qb64: attachments, version: Vrsn_2_0 }));
750
+ }
751
+ /** Reconstruct only allowed finite public event children; credentials never pass this encoder. */
752
+ publicEvents(nests) {
753
+ return nests.map(nest => {
754
+ if (!(nest.body instanceof SerderACDC) || nest.body.ilk !== "bup") {
755
+ throw new ValidationError("Unblind query must carry public BUP evidence");
756
+ }
757
+ this.attachments(envelopeFromFrame(nest), "event");
758
+ return messagize(nest.body, concatBytes(...nest.attachments.map(group => group.raw)), {
759
+ nested: true,
760
+ gvrsn: Vrsn_2_0,
761
+ });
762
+ });
763
+ }
764
+ /** Local group signatures cover exactly the suffix selected from this member's accepted state. */
765
+ queryEvidence(op, selected, nests) {
766
+ const expected = this.request(op), supplied = this.publicEvents(nests);
767
+ if (!sameSelection(selected, expected.requested) || supplied.length !== expected.children.length
768
+ || supplied.some((wire, index) => !bytesEqual(wire, expected.children[index]))) {
769
+ throw new ValidationError("Group query differs from the selected public events and sources");
770
+ }
771
+ return supplied;
772
+ }
773
+ /** Freeze a complete aggregate, then elect delivery from its own historical signing indices. */
774
+ groupMessage(op, field, message, groups, extra) {
775
+ if (field === "query" && op.query)
776
+ return;
777
+ if (!op[field]) {
778
+ const verified = verifyExchangeProofs(this.hab.db, message, {
779
+ tsgs: groups.filter(group => group.pre === this.hab.pre),
780
+ });
781
+ if (!verified.tsgs.length || verified.invalid || verified.missing.length) {
782
+ throw new ValidationError("Own Unblind message lacks a verified group signature threshold");
783
+ }
784
+ op[field] = this.signed(message, extra, verified.tsgs);
785
+ }
786
+ // Later contributions cannot change which member is elected by these frozen bytes.
787
+ const proof = parsed(op[field]).tsgs[0];
788
+ const establishment = this.hab.db.getEvtSerder(proof.pre, proof.said);
789
+ if (!establishment?.estive)
790
+ throw new ValidationError("Group aggregate establishment is unavailable");
791
+ const member = localGroupMember(this.exc.hby, this.hab.pre);
792
+ const contribution = latestGroupContribution(this.hab.db, member.pre, establishment.verfers);
793
+ if (contribution?.index === Math.min(...proof.sigers.map(siger => siger.index))) {
794
+ this.outgoing.push({ kin: field, dest: field === "query" ? op.sender : op.recipient, msg: op[field].slice() });
795
+ }
796
+ }
797
+ /** Reject foreign evidence families, including unknown raw attachment groups. */
798
+ attachments(envelope, kind) {
799
+ const common = [
800
+ envelope.wigers,
801
+ envelope.trqs,
802
+ envelope.frcs,
803
+ envelope.tdcs,
804
+ envelope.ptds,
805
+ envelope.tmqs,
806
+ envelope.essrs ?? [],
807
+ envelope.unresolvedLast,
808
+ ];
809
+ const forbidden = kind === "event"
810
+ ? [
811
+ ...common,
812
+ envelope.sigers,
813
+ envelope.cigars,
814
+ envelope.tsgs,
815
+ envelope.ssgs,
816
+ envelope.nests,
817
+ envelope.bsqs,
818
+ envelope.bsss,
819
+ ]
820
+ : [
821
+ ...common,
822
+ envelope.sscs,
823
+ envelope.ssts,
824
+ ...(kind === "query" ? [envelope.bsqs, envelope.bsss] : [envelope.nests, envelope.ssgs]),
825
+ ];
826
+ const allowed = kind === "event"
827
+ ? ["SealSourceCouples", "SealSourceTriples"]
828
+ : [
829
+ "ControllerIdxSigs",
830
+ "NonTransReceiptCouples",
831
+ "TransIdxSigGroups",
832
+ ...(kind === "query" ? ["TransLastIdxSigGroups"] : ["BlindedStateQuadruples", "BoundStateSextuples"]),
833
+ ];
834
+ if (forbidden.some((values) => values.length)
835
+ || envelope.attachmentGroups.some((group) => !allowed.includes(group.name.replace(/^Big/, ""))))
836
+ throw new ValidationError("Unsupported Unblind attachments");
837
+ }
838
+ events(regid) {
839
+ const head = this.registry.store.headEvent(regid);
840
+ if (!head || head.ilk !== "bup")
841
+ throw new ValidationError("Accepted registry updates are unavailable");
842
+ const events = [];
843
+ for (let sn = 1; sn <= ordinal(head); sn++) {
844
+ const event = this.registry.store.seqEvent(regid, sn);
845
+ if (!event)
846
+ throw new ValidationError("Accepted registry chain is incomplete");
847
+ events.push(event);
848
+ }
849
+ return events;
850
+ }
851
+ /** Vet every supplied suffix before any ordinary TEL intake changes the accepted prefix. */
852
+ validateEvents(requested, nests) {
853
+ const saids = Object.values(requested).flat();
854
+ if (nests.length !== saids.length || nests.some((nest, i) => nest.body.said !== saids[i])) {
855
+ throw new ValidationError("Nested events differ from the exact Unblind request");
856
+ }
857
+ let offset = 0;
858
+ for (const [regid, selected] of Object.entries(requested)) {
859
+ const rip = this.registry.store.seqEvent(regid, 0), head = this.registry.store.headEvent(regid);
860
+ if (!rip || !head)
861
+ throw new ValidationError("Query registry has no accepted inception");
862
+ const children = nests.slice(offset, offset + selected.length);
863
+ offset += selected.length;
864
+ if (!(children[0].body instanceof SerderACDC))
865
+ throw new ValidationError("Expected public BUP evidence");
866
+ if (validateUpdate(children[0].body, regid).kind !== "valid") {
867
+ throw new ValidationError("Query must carry public BUP evidence");
868
+ }
869
+ const first = ordinal(children[0].body), prefix = [];
870
+ if (first < 1 || first > ordinal(head) + 1)
871
+ throw new ValidationError("Query has no accepted preceding prefix");
872
+ for (let sn = 1; sn < first; sn++) {
873
+ const event = this.registry.store.seqEvent(regid, sn);
874
+ if (!event)
875
+ throw new ValidationError("Query has no accepted preceding prefix");
876
+ prefix.push(event);
877
+ }
878
+ for (let i = 0; i < children.length; i++) {
879
+ const frame = children[i], event = frame.body;
880
+ if (!(event instanceof SerderACDC))
881
+ throw new ValidationError("Expected public BUP evidence");
882
+ const checked = validateUpdate(event, regid), envelope = envelopeFromFrame(frame);
883
+ this.attachments(envelope, "event");
884
+ if (checked.kind !== "valid" || ordinal(event) !== first + i) {
885
+ throw new ValidationError("Query BUP suffix is not contiguous");
886
+ }
887
+ const sources = [
888
+ ...envelope.sscs.map((seal) => ({ issuer: rip.issuer, number: seal.s, diger: seal.d })),
889
+ ...envelope.ssts.map((seal) => ({ issuer: seal.i.qb64, number: seal.s, diger: seal.d })),
890
+ ];
891
+ for (const source of sources) {
892
+ if (source.issuer !== rip.issuer || !verifyRegistryAnchor(checked.event, { db: this.hab.db, ...source })) {
893
+ throw new ValidationError("Query event has an unverified source");
894
+ }
895
+ }
896
+ const accepted = this.registry.store.seqEvent(regid, first + i);
897
+ if (accepted && !bytesEqual(accepted.raw, event.raw)) {
898
+ throw new ValidationError("Query conflicts with accepted history");
899
+ }
900
+ prefix.push(event);
901
+ }
902
+ if (vet({ rip, updates: prefix, db: this.hab.db }).kind !== "verified"
903
+ || ordinal(head) > first + selected.length - 1)
904
+ throw new ValidationError("Query has unverified or superseded history");
905
+ }
906
+ }
907
+ receiveEvents(requested, nests) {
908
+ this.validateEvents(requested, nests);
909
+ for (const frame of nests) {
910
+ const envelope = envelopeFromFrame(frame);
911
+ const decision = this.registry.processEvent(frame.body, {
912
+ sscs: envelope.sscs,
913
+ ssts: envelope.ssts,
914
+ });
915
+ if (decision.kind !== "accept" && decision.kind !== "duplicate") {
916
+ throw new ValidationError("Public BUP has not reached acceptance");
917
+ }
918
+ }
919
+ }
920
+ checkOpening(op, event, opening, nests) {
921
+ if (!vetBlind(opening, String(event.sad.b))) {
922
+ throw new ValidationError("Opening does not match the exact event BLID");
923
+ }
924
+ const target = opening.td.nonce, binding = !!(target || opening.ts.text);
925
+ if (binding && !op.scope.get(String(event.sad.rd))?.includes(target)) {
926
+ throw new ValidationError("Opening targets an unrelated credential");
927
+ }
928
+ const credential = nests.find((nest) => nest.body.said === target)?.body;
929
+ if (vetBound(opening, credential instanceof SerderACDC ? credential : undefined, this.hab.db)) {
930
+ throw new ValidationError("Bound opening lacks its exact accepted Issuee event");
931
+ }
932
+ return binding;
933
+ }
934
+ carried(op, nests) {
935
+ const carried = new Map();
936
+ for (const nest of nests) {
937
+ const regid = nest.body.ked?.rd;
938
+ if (typeof regid !== "string" || !op.scope.has(regid))
939
+ continue;
940
+ const envelope = envelopeFromFrame(nest);
941
+ for (const opening of [...envelope.bsqs, ...envelope.bsss]) {
942
+ for (const event of this.events(regid)) {
943
+ if (opening.d.nonce === event.sad.b) {
944
+ this.checkOpening(op, event, opening, nests);
945
+ carried.set(event.said, opening);
946
+ }
947
+ }
948
+ }
949
+ }
950
+ return carried;
951
+ }
952
+ held(op, event, nests) {
953
+ let opening = this.registry.store.publicOpening(event.said);
954
+ if (!opening) {
955
+ for (const nest of nests) {
956
+ const envelope = envelopeFromFrame(nest);
957
+ opening = [...envelope.bsqs, ...envelope.bsss].find((candidate) => candidate.d.nonce === event.sad.b) ?? null;
958
+ if (opening)
959
+ break;
960
+ }
961
+ }
962
+ if (!opening) {
963
+ const root = this.hab.mgr.getRegistryRoot(this.hab.pre, String(event.sad.rd));
964
+ if (root) {
965
+ for (const target of op.scope.get(String(event.sad.rd))) {
966
+ opening = unblindBlindState({
967
+ said: String(event.sad.b),
968
+ uuid: makeBlindUuid({ salt: root.qb64, sn: BigInt(ordinal(event)) }),
969
+ acdc: target,
970
+ states: this.states,
971
+ });
972
+ if (opening)
973
+ break;
974
+ }
975
+ }
976
+ }
977
+ if (!opening)
978
+ throw new ValidationError("Required exact event opening is unavailable");
979
+ this.checkOpening(op, event, opening, nests);
980
+ return opening;
981
+ }
982
+ minimum(op, nests, resolve) {
983
+ const carried = this.carried(op, nests), selected = {}, openings = new Map();
984
+ for (const [regid, saids] of Object.entries(op.requested)) {
985
+ const suffix = [];
986
+ let bound = false;
987
+ for (const event of this.events(regid).reverse()) {
988
+ let opening = carried.get(event.said);
989
+ if (!opening) {
990
+ if (!saids.includes(event.said)) {
991
+ throw new ValidationError("Required older opening was neither carried nor requested");
992
+ }
993
+ opening = resolve(event);
994
+ suffix.push(event.said);
995
+ openings.set(opening.d.nonce, opening);
996
+ }
997
+ if (this.checkOpening(op, event, opening, nests)) {
998
+ bound = true;
999
+ break;
1000
+ }
1001
+ }
1002
+ if (!bound)
1003
+ throw new ValidationError("Registry suffix contains no credential state");
1004
+ if (suffix.length)
1005
+ selected[regid] = suffix.reverse();
1006
+ }
1007
+ return { selected, openings: [...openings.values()] };
1008
+ }
1009
+ opening(openings, event) {
1010
+ const opening = openings.get(event.said);
1011
+ if (!opening)
1012
+ throw new ValidationError("Reply lacks a required opening");
1013
+ return opening;
1014
+ }
1015
+ replyOpenings(op, selected, nests, proofs) {
1016
+ if (!op.requested
1017
+ || Object.entries(selected).some(([regid, saids]) => !op.requested[regid] || saids.some((said) => !op.requested[regid].includes(said)))) {
1018
+ throw new ValidationError("Reply names an event outside the outstanding request");
1019
+ }
1020
+ const seen = new Set(), verified = new Map();
1021
+ for (const opening of proofs) {
1022
+ if (seen.has(opening.d.nonce))
1023
+ throw new ValidationError("Duplicate Unblind opening");
1024
+ seen.add(opening.d.nonce);
1025
+ const events = Object.values(selected).flat().map((said) => this.registry.store.event(said));
1026
+ const matches = events.filter((event) => event.sad.b === opening.d.nonce);
1027
+ if (!matches.length)
1028
+ throw new ValidationError("Reply carries an excess opening");
1029
+ for (const event of matches) {
1030
+ this.checkOpening(op, event, opening, nests);
1031
+ verified.set(event.said, opening);
1032
+ }
1033
+ }
1034
+ return verified;
1035
+ }
1036
+ }
1037
+ Object.defineProperty(Unblind, "Route", {
1038
+ enumerable: true,
1039
+ configurable: true,
1040
+ writable: true,
1041
+ value: "/ipex/unblind"
1042
+ });