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
@@ -1,1346 +0,0 @@
1
- /**
2
- * Mailbox-first forwarding and polling support.
3
- *
4
- * KERIpy correspondence:
5
- * - ports the conceptual roles of `Poster`, `StreamPoster`, `ForwardHandler`,
6
- * and mailbox polling/query handling from `keri.app.forwarding` and
7
- * `keri.app.indirecting`
8
- *
9
- * Current `keri-ts` difference:
10
- * - delivery and polling are synchronous Effection operations instead of HIO
11
- * doers
12
- * - sender retry durability is optional via `Outboxer`
13
- * - HTTP posting honors both KERIpy header mode and the Tufa-only body mode
14
- */
15
- import { collectPayload, concatBytes, Counter, Diger, nestedPayload, parsePather, ResourceAdmissionError, ResourceLimitError, SerderACDC, SerderKERI, Vrsn_2_0, } from "cesr-ts";
16
- import { call, resource, spawn } from "effection";
17
- import { ValidationError } from "../core/errors.js";
18
- import { CREDENTIAL_MAILBOX_TOPIC, DELEGATE_MAILBOX_TOPIC, OOBI_MAILBOX_TOPIC } from "../core/mailbox-topics.js";
19
- import { exchange } from "../core/protocol-exchanging.js";
20
- import { Roles } from "../core/roles.js";
21
- import { dgKey } from "../db/core/keys.js";
22
- import { MAX_NESTED_WIRE_BYTES } from "../db/exchange-nests.js";
23
- import { DEFAULT_MAILBOX_INBOX_LIMITS, MailboxAdmissionError, } from "../db/mailbox-inbox.js";
24
- import { makeNowIso8601 } from "../time/mod.js";
25
- import { abortable } from "./abortable.js";
26
- import { chunkBytes } from "./byte-source.js";
27
- import { postCesr } from "./cesr-egress.js";
28
- import { buildCesrRequest } from "./cesr-http.js";
29
- import { closeResponseBody, fetchResponseHandleOrNull } from "./httping.js";
30
- import { consumeMailboxSse } from "./mailbox-sse.js";
31
- import { directDeliveryEndpoints, firstSortedEndpoint, getOutboxer, mailboxDeliveryEndpoints, mailboxPollEndpoints, mailboxTopicKey, } from "./mailboxing.js";
32
- import { Organizer } from "./organizing.js";
33
- import { defaultRuntimeServices } from "./runtime-services.js";
34
- import { runtimeTurn } from "./runtime-turn.js";
35
- import { sendCesrTcp } from "./tcp-egress.js";
36
- /** Deliver prepared wire; explicit runtime lends same-socket intake, otherwise TCP drains output only. */
37
- export function* sendPreparedCesrTarget(target, services, signal, onHttpRefusal, onAdmissionRefusal, runtime) {
38
- if (target.kind === "tcp") {
39
- if (runtime) {
40
- yield* sendCesrTcp(target.url, target.message, {
41
- services,
42
- signal,
43
- onAdmissionRefusal,
44
- replies: { runtime, local: true },
45
- });
46
- }
47
- else
48
- yield* sendCesrTcp(target.url, target.message, { services, signal, onAdmissionRefusal });
49
- }
50
- else if (target.kind === "http") {
51
- yield* postCesrMessage(target.url, target.message, target.bodyMode, target.destination, services, signal, onHttpRefusal, onAdmissionRefusal);
52
- }
53
- }
54
- /** Preserve selected endpoint and signed bytes; TCP has no HTTP body framing mode. */
55
- function remoteCesrTarget(endpoint, message, bodyMode) {
56
- const base = { url: endpoint.url, destination: endpoint.eid, message };
57
- return new URL(endpoint.url).protocol === "tcp:" ? { ...base, kind: "tcp" } : { ...base, kind: "http", bodyMode };
58
- }
59
- /** Join a prepared target attempt; local completion/refusal/busy never implies protocol acceptance. */
60
- export function* attemptPreparedCesrTarget(target, services, signal, runtime) {
61
- let observed;
62
- try {
63
- yield* call(() => sendPreparedCesrTarget(target, services, signal, (error) => observed = error, (error) => observed = error, runtime));
64
- signal?.throwIfAborted();
65
- return "complete";
66
- }
67
- catch (error) {
68
- if (!observed || error !== observed)
69
- throw error;
70
- signal?.throwIfAborted();
71
- if (error instanceof ResourceAdmissionError) {
72
- if (error.reason === "busy")
73
- return "busy";
74
- throw error;
75
- }
76
- return "refused";
77
- }
78
- }
79
- /**
80
- * Mailbox-first postman for outbound EXN transport.
81
- *
82
- * Responsibilities:
83
- * - resolve recipient aliases against organizer/contact state
84
- * - route to all currently authorized recipient mailbox endpoints when present
85
- * - fall back to direct controller/agent endpoints, then one witness endpoint,
86
- * when no mailbox exists
87
- * - persist sender-side mailbox retry state per mailbox endpoint
88
- */
89
- export class Poster {
90
- constructor(hby, options = {}) {
91
- Object.defineProperty(this, "hby", {
92
- enumerable: true,
93
- configurable: true,
94
- writable: true,
95
- value: void 0
96
- });
97
- Object.defineProperty(this, "mailboxer", {
98
- enumerable: true,
99
- configurable: true,
100
- writable: true,
101
- value: void 0
102
- });
103
- Object.defineProperty(this, "outboxer", {
104
- enumerable: true,
105
- configurable: true,
106
- writable: true,
107
- value: void 0
108
- });
109
- Object.defineProperty(this, "organizer", {
110
- enumerable: true,
111
- configurable: true,
112
- writable: true,
113
- value: void 0
114
- });
115
- Object.defineProperty(this, "services", {
116
- enumerable: true,
117
- configurable: true,
118
- writable: true,
119
- value: void 0
120
- });
121
- const { mailboxer, outboxer, services = defaultRuntimeServices } = options;
122
- this.hby = hby;
123
- this.mailboxer = mailboxer ?? null;
124
- this.outboxer = outboxer ?? getOutboxer(hby);
125
- this.organizer = new Organizer(hby);
126
- this.services = services;
127
- }
128
- /**
129
- * Resolve one CLI or user recipient input into the actual destination prefix.
130
- *
131
- * Resolution order matches the mailbox CLI mental model:
132
- * - exact known prefix wins
133
- * - otherwise exact organizer alias lookup is required
134
- */
135
- resolveRecipient(recipient) {
136
- if (this.hby.db.getKever(recipient)) {
137
- return recipient;
138
- }
139
- const matches = this.organizer.findExact("alias", recipient);
140
- if (matches.length === 0) {
141
- throw new ValidationError(`no contact found with alias '${recipient}'`);
142
- }
143
- if (matches.length > 1) {
144
- throw new ValidationError(`multiple contacts match alias '${recipient}', use prefix instead`);
145
- }
146
- return matches[0].id;
147
- }
148
- /**
149
- * Send one EXN through the mailbox-first delivery policy.
150
- *
151
- * Default policy:
152
- * - if recipient mailboxes exist, broadcast to all mailbox endpoints
153
- * - if no mailbox exists, send directly to controller/agent endpoints
154
- * - if no direct endpoints exist, fall back to one witness endpoint
155
- * - failed mailbox deliveries are queued durably for retry
156
- *
157
- * Current `keri-ts` difference:
158
- * - KERIpy `Poster` is queue/doer based
159
- * - here the caller drives one explicit operation and gets a structured
160
- * result back immediately
161
- * - optional runtime lends same-socket TCP intake; standalone TCP is transmit-only
162
- * - public callers own synchronous route/signing preparation and wire retention
163
- */
164
- *sendExchange(hab, args, runtime) {
165
- const recipient = this.resolveRecipient(args.recipient);
166
- const topic = args.topic ?? defaultTopicForRoute(args.route);
167
- if (topic.length === 0) {
168
- throw new ValidationError(`Unable to derive mailbox topic from route ${args.route}.`);
169
- }
170
- const embedded = args.embeds ?? {};
171
- const exchangeRecipient = args.exchangeRecipient === null ? undefined : args.exchangeRecipient ?? recipient;
172
- const [serder, attachments] = exchange(args.route, args.payload, {
173
- sender: hab.pre,
174
- recipient: exchangeRecipient,
175
- modifiers: args.modifiers,
176
- stamp: args.date,
177
- dig: args.dig,
178
- embeds: Object.keys(embedded).length > 0 ? embedded : undefined,
179
- });
180
- const message = concatBytes(hab.endorse(serder, { pipelined: false }), attachments);
181
- const deliveries = [];
182
- const queued = [];
183
- const delivery = args.delivery ?? "auto";
184
- const mailboxEndpoints = delivery === "direct" ? [] : mailboxDeliveryEndpoints(hab, recipient);
185
- if (mailboxEndpoints.length > 0) {
186
- const failed = new Map();
187
- for (const endpoint of mailboxEndpoints) {
188
- try {
189
- yield* this.deliverMailboxTarget(hab, recipient, topic, message, endpoint, runtime);
190
- deliveries.push(endpoint.url);
191
- }
192
- catch (error) {
193
- failed.set(endpoint.eid, error instanceof Error ? error.message : String(error));
194
- }
195
- }
196
- if (failed.size > 0) {
197
- if (this.outboxer.enabled) {
198
- const said = serder.said;
199
- if (!said) {
200
- throw new ValidationError("Exchange message is missing a SAID.");
201
- }
202
- this.outboxer.queueMessage(said, message, {
203
- sender: hab.pre,
204
- recipient,
205
- topic,
206
- createdAt: makeNowIso8601(),
207
- }, failed.keys());
208
- const attemptedAt = makeNowIso8601();
209
- for (const [eid, error] of failed.entries()) {
210
- this.outboxer.markFailed(said, eid, attemptedAt, error);
211
- queued.push(`outbox:${eid}`);
212
- }
213
- }
214
- else if (deliveries.length === 0) {
215
- throw new ValidationError(`Exchange delivery failed for ${recipient}: ${[...failed.values()].join("; ")}`);
216
- }
217
- }
218
- return { serder, deliveries, queued };
219
- }
220
- const directEndpoints = directDeliveryEndpoints(hab, recipient);
221
- if (directEndpoints.length > 0) {
222
- for (const endpoint of directEndpoints) {
223
- yield* sendPreparedCesrTarget(remoteCesrTarget(endpoint, message, this.hby.cesrBodyMode), this.services, undefined, undefined, undefined, runtime);
224
- deliveries.push(endpoint.url);
225
- }
226
- return { serder, deliveries, queued };
227
- }
228
- if (delivery !== "direct") {
229
- const witnessEndpoint = firstSortedEndpoint(hab.endsFor(recipient)[Roles.witness]);
230
- if (witnessEndpoint) {
231
- yield* this.deliverWitnessTarget(hab, recipient, topic, message, witnessEndpoint, runtime);
232
- deliveries.push(witnessEndpoint.url);
233
- return { serder, deliveries, queued };
234
- }
235
- }
236
- throw new ValidationError(`No end roles for ${recipient} to send evt=${serder.said ?? "<unknown>"}`);
237
- }
238
- /**
239
- * Send one raw CESR message through the same mailbox-first transport policy.
240
- *
241
- * This is used by delegation workflows where correctness depends on the
242
- * actual KEL bytes reaching the delegator or delegate, not on an EXN wrapper.
243
- * Optional runtime lends TCP intake; caller owns preparation/retention before transport.
244
- */
245
- *sendBytes(hab, args, runtime) {
246
- const route = this.resolveBytesRoute(hab, args);
247
- const deliveries = [];
248
- const queued = [];
249
- const failed = new Map();
250
- for (let index = 0; index < route.targets.length; index++) {
251
- const endpoint = route.targets[index];
252
- try {
253
- const target = this.prepareBytesTarget(hab, route, index, args.message);
254
- yield* sendPreparedCesrTarget(target, this.services, undefined, undefined, undefined, runtime);
255
- deliveries.push(endpoint.url);
256
- }
257
- catch (error) {
258
- if (route.kind !== "mailbox")
259
- throw error;
260
- failed.set(endpoint.eid, error instanceof Error ? error.message : String(error));
261
- }
262
- }
263
- if (failed.size > 0) {
264
- if (this.outboxer.enabled) {
265
- const said = crypto.randomUUID();
266
- this.outboxer.queueMessage(said, args.message, {
267
- sender: hab.pre,
268
- recipient: route.recipient,
269
- topic: route.topic,
270
- createdAt: makeNowIso8601(),
271
- }, failed.keys());
272
- const attemptedAt = makeNowIso8601();
273
- for (const [eid, error] of failed) {
274
- this.outboxer.markFailed(said, eid, attemptedAt, error);
275
- queued.push(`outbox:${eid}`);
276
- }
277
- }
278
- else if (deliveries.length === 0) {
279
- throw new ValidationError(`CESR delivery failed for ${route.recipient}: ${[...failed.values()].join("; ")}`);
280
- }
281
- }
282
- return { deliveries, queued };
283
- }
284
- /** Snapshot mailbox/direct/witness policy without opening transport or reading message bytes. */
285
- resolveBytesRoute(hab, args) {
286
- const recipient = this.resolveRecipient(args.recipient);
287
- const route = this.findBytesRoute(hab, { ...args, recipient, recipientIsPrefix: true });
288
- if (!route)
289
- throw new ValidationError(`No end roles for ${recipient} to send raw CESR payload.`);
290
- return route;
291
- }
292
- /** Same policy; parsed-prefix lookup bypasses aliases, absence is explicit, other failures propagate. */
293
- findBytesRoute(hab, args) {
294
- const recipient = args.recipientIsPrefix ? args.recipient : this.resolveRecipient(args.recipient);
295
- const topic = args.topic ?? "";
296
- const delivery = args.delivery ?? "auto";
297
- const base = { sender: hab.pre, recipient, topic, bodyMode: this.hby.cesrBodyMode };
298
- const mailboxes = delivery === "direct" ? [] : mailboxDeliveryEndpoints(hab, recipient);
299
- if (mailboxes.length > 0) {
300
- if (!topic)
301
- throw new ValidationError(`Mailbox delivery requires an explicit topic for ${recipient}.`);
302
- return { ...base, kind: "mailbox", targets: mailboxes };
303
- }
304
- if (delivery !== "direct" && topic && this.mailboxer && this.hby.db.prefixes.has(hab.pre)
305
- && this.hby.db.ends.get([recipient, Roles.mailbox, hab.pre])?.allowed) {
306
- return { ...base, kind: "local", targets: [{ eid: hab.pre, url: `local-mailbox:${hab.pre}` }] };
307
- }
308
- const direct = directDeliveryEndpoints(hab, recipient);
309
- if (direct.length > 0)
310
- return { ...base, kind: "direct", targets: direct };
311
- if (delivery !== "direct") {
312
- if (!topic) {
313
- throw new ValidationError(`Witness fallback delivery requires an explicit topic for ${recipient}.`);
314
- }
315
- const witness = firstSortedEndpoint(hab.endsFor(recipient)[Roles.witness]);
316
- if (witness)
317
- return { ...base, kind: "witness", targets: [witness] };
318
- }
319
- return null;
320
- }
321
- /** Guarded preparation; an explicit finite cap copies direct wire for independently credited retention. */
322
- prepareBytesTarget(hab, route, index, message, maxBytes) {
323
- if (maxBytes !== undefined && (!Number.isSafeInteger(maxBytes) || maxBytes < 0)) {
324
- throw new RangeError("Invalid cue target byte limit");
325
- }
326
- if (maxBytes !== undefined && message.buffer.byteLength > maxBytes) {
327
- throw new ResourceLimitError("Cue target backing exceeds limit");
328
- }
329
- if (hab.pre !== route.sender)
330
- throw new Error("CESR route belongs to another sender");
331
- const endpoint = route.targets[index];
332
- if (!Number.isSafeInteger(index) || !endpoint)
333
- throw new RangeError("Invalid CESR delivery target");
334
- if (route.kind !== "direct") {
335
- const forwarded = this.prepareForwardedTarget(hab, route.recipient, route.topic, message, endpoint, maxBytes);
336
- return forwarded.kind === "http" ? { ...forwarded, bodyMode: route.bodyMode } : forwarded;
337
- }
338
- return remoteCesrTarget(endpoint, maxBytes === undefined ? message : message.slice(), route.bodyMode);
339
- }
340
- /**
341
- * Retry any pending mailbox-target deliveries using current recipient state.
342
- *
343
- * Retry behavior is per mailbox endpoint, not per logical message. A removed
344
- * mailbox cancels only that endpoint's target row. Runtime route/signing and
345
- * outcome publication use short turns; transport cleanup joins outside the guard.
346
- * Runtime scans require pre-copy bounded reads and retain admitted copies through joined cleanup.
347
- * Standalone/custom iteration retains its caller-owned preparation and retention contract.
348
- */
349
- processPending(runtime) {
350
- if (runtime && runtime.hby !== this.hby)
351
- throw new RangeError("Poster retry requires its owning Habery runtime");
352
- // deno-lint-ignore no-this-alias -- One retry pass owns transport cleanup before guarded publication.
353
- const self = this;
354
- return call(function* () {
355
- if (runtime && !self.outboxer.enabled)
356
- return;
357
- const limits = { maxMessageBytes: DEFAULT_FORWARD_BYTES, maxMetadataBytes: 65536 };
358
- if (runtime && self.outboxer.enabled && !self.outboxer.iterPendingBounded) {
359
- throw new RangeError("Runtime outbox retries require bounded reads from the custom store");
360
- }
361
- // Four payload copies (including pull overlap), retained wire plus three preparation copies, metadata/key work.
362
- // Register credit first: nested transport and cursor cleanup join before this owner releases.
363
- let busy = false;
364
- yield* resource(function* (provide) {
365
- const credit = runtime && self.outboxer.enabled
366
- ? runtime.resources.reserve({ bytes: 8 * limits.maxMessageBytes + 8 * limits.maxMetadataBytes + 131072 })
367
- : undefined;
368
- if (credit?.kind === "refuse") {
369
- if (credit.reason === "busy")
370
- busy = true;
371
- else
372
- throw new ResourceAdmissionError("Outbox read/copy admission exceeds shared capacity", credit.reason);
373
- }
374
- try {
375
- yield* provide();
376
- }
377
- finally {
378
- if (credit?.kind === "reserve")
379
- credit.reservation.release();
380
- }
381
- });
382
- if (busy)
383
- return;
384
- let iterator;
385
- yield* resource(function* (provide) {
386
- try {
387
- yield* provide();
388
- }
389
- finally {
390
- const close = function* () {
391
- iterator?.return(undefined);
392
- };
393
- if (runtime)
394
- yield* runtime.reactor.settle(undefined, {}, close);
395
- else
396
- yield* close();
397
- }
398
- });
399
- while (true) {
400
- let next;
401
- const pull = function* () {
402
- iterator ??= runtime && self.outboxer.enabled
403
- ? self.outboxer.iterPendingBounded(limits)
404
- : self.outboxer.iterPending();
405
- next = iterator.next();
406
- };
407
- if (runtime)
408
- yield* runtime.reactor.settle(undefined, {}, pull);
409
- else
410
- yield* pull();
411
- if (next.done)
412
- break;
413
- const pending = next.value;
414
- const state = {};
415
- const prepare = function* () {
416
- const hab = self.hby.habs.get(pending.message.sender);
417
- if (!hab) {
418
- self.outboxer.cancelTarget(pending.said, pending.target.eid, makeNowIso8601(), "sender habitat is unavailable");
419
- return;
420
- }
421
- const endpoint = mailboxDeliveryEndpoints(hab, pending.message.recipient)
422
- .find((current) => current.eid === pending.target.eid);
423
- if (!endpoint) {
424
- self.outboxer.cancelTarget(pending.said, pending.target.eid, makeNowIso8601(), "mailbox removed");
425
- return;
426
- }
427
- try {
428
- state.target = self.prepareForwardedTarget(hab, pending.message.recipient, pending.message.topic, pending.raw, endpoint);
429
- }
430
- catch (error) {
431
- state.failure = { error };
432
- }
433
- };
434
- if (runtime)
435
- yield* runtime.reactor.settle(undefined, {}, prepare);
436
- else
437
- yield* prepare();
438
- if (!state.target && !state.failure)
439
- continue;
440
- if (state.target) {
441
- try {
442
- yield* call(() => sendPreparedCesrTarget(state.target, self.services, undefined, undefined, undefined, runtime));
443
- }
444
- catch (error) {
445
- state.failure = { error };
446
- }
447
- }
448
- const publish = function* () {
449
- try {
450
- if (state.failure)
451
- throw state.failure.error;
452
- self.outboxer.markDelivered(pending.said, pending.target.eid, makeNowIso8601());
453
- }
454
- catch (error) {
455
- self.outboxer.markFailed(pending.said, pending.target.eid, makeNowIso8601(), error instanceof Error ? error.message : String(error));
456
- }
457
- };
458
- if (runtime)
459
- yield* runtime.reactor.settle(undefined, {}, publish);
460
- else
461
- yield* publish();
462
- }
463
- });
464
- }
465
- /** Return whether any sender retry work still remains. */
466
- hasPendingWork() {
467
- return this.outboxer.pendingCount() > 0;
468
- }
469
- /** Cancel all pending retry targets for one mailbox AID. */
470
- cancelMailbox(eid) {
471
- this.outboxer.cancelMailbox(eid, makeNowIso8601());
472
- }
473
- /**
474
- * Deliver one message to one mailbox endpoint.
475
- *
476
- * Delivery modes:
477
- * - if the mailbox AID is local to this habery, store directly in
478
- * `Mailboxer`
479
- * - otherwise wrap in `/fwd` and post to the remote mailbox URL
480
- */
481
- *deliverMailboxTarget(hab, recipient, topic, message, endpoint, runtime) {
482
- yield* this.deliverForwardedTarget(hab, recipient, topic, message, endpoint, runtime);
483
- }
484
- /**
485
- * Deliver one message using the recipient's witness as a store-and-forward
486
- * fallback when no mailbox or direct endpoint exists.
487
- */
488
- *deliverWitnessTarget(hab, recipient, topic, message, endpoint, runtime) {
489
- yield* this.deliverForwardedTarget(hab, recipient, topic, message, endpoint, runtime);
490
- }
491
- /**
492
- * Deliver one `/fwd`-wrapped payload to a mailbox or witness endpoint.
493
- *
494
- * Local hosted targets store directly in `Mailboxer`; remote targets receive
495
- * KERIpy-style introduction material ahead of the forwarded payload.
496
- */
497
- *deliverForwardedTarget(hab, recipient, topic, message, endpoint, runtime) {
498
- const target = this.prepareForwardedTarget(hab, recipient, topic, message, endpoint);
499
- yield* sendPreparedCesrTarget(target, this.services, undefined, undefined, undefined, runtime);
500
- }
501
- /** Local mailbox writes and signed introductions finish before any network work starts. */
502
- prepareForwardedTarget(hab, recipient, topic, message, endpoint, maxBytes = DEFAULT_FORWARD_BYTES) {
503
- if (this.hby.db.prefixes.has(endpoint.eid)) {
504
- const stored = this.requireMailboxer().storeMsg(mailboxTopicKey(recipient, topic), mailboxReplyPayload(hab, recipient, topic, message, maxBytes));
505
- if (!stored)
506
- throw new Error("Mailbox publication did not complete");
507
- return { kind: "stored" };
508
- }
509
- const forwarded = buildForwardedDelivery(hab, { recipient, topic, message }, maxBytes);
510
- const intro = introduce(hab, endpoint.eid, maxBytes - forwarded.length);
511
- return remoteCesrTarget(endpoint, concatBytes(intro, forwarded), this.hby.cesrBodyMode);
512
- }
513
- /** Require provider mailbox storage for local mailbox-target delivery. */
514
- requireMailboxer() {
515
- if (!this.mailboxer) {
516
- throw new ValidationError("Local mailbox delivery requires provider mailbox storage.");
517
- }
518
- return this.mailboxer;
519
- }
520
- }
521
- /**
522
- * Accepted `/fwd` route handler that stores embedded payloads in mailbox topics.
523
- *
524
- * This is the `keri-ts` mailbox-storage analogue to KERIpy's `ForwardHandler`.
525
- *
526
- * Authorization rule:
527
- * - the request-scoped mailbox AID passed with this message must currently be
528
- * authorized for the addressed recipient
529
- */
530
- export class ForwardHandler {
531
- constructor(mailboxDirector) {
532
- Object.defineProperty(this, "resource", {
533
- enumerable: true,
534
- configurable: true,
535
- writable: true,
536
- value: ForwardHandler.resource
537
- });
538
- /** This route binds a single v2 child body; recipient processors authenticate its evidence. */
539
- Object.defineProperty(this, "acceptsNests", {
540
- enumerable: true,
541
- configurable: true,
542
- writable: true,
543
- value: true
544
- });
545
- Object.defineProperty(this, "mailboxDirector", {
546
- enumerable: true,
547
- configurable: true,
548
- writable: true,
549
- value: void 0
550
- });
551
- this.mailboxDirector = mailboxDirector;
552
- }
553
- /**
554
- * Verify that the embedded exchange has the mailbox modifiers and one
555
- * extractable forwarded payload.
556
- */
557
- verify(args) {
558
- const modifiers = args.serder.ked?.q;
559
- if (typeof modifiers?.pre !== "string" || typeof modifiers?.topic !== "string")
560
- return false;
561
- if (args.serder.pvrsn.major < 2) {
562
- return !args.nests?.length && extractForwardedMessage(args.serder, args.attachments) !== null;
563
- }
564
- if (args.nests?.length !== 1)
565
- return false;
566
- const signed = args.serder.a?.evt;
567
- const child = args.nests[0].body;
568
- if (typeof signed !== "string" || !(child instanceof SerderKERI || child instanceof SerderACDC))
569
- return false;
570
- try {
571
- return child.verify() && new Diger({ qb64: signed }).verify(child.raw);
572
- }
573
- catch {
574
- return false;
575
- }
576
- }
577
- /**
578
- * Store one forwarded payload when the receiving host is allowed to act as
579
- * the recipient's async correspondence store.
580
- *
581
- * Accepted host shapes:
582
- * - explicit mailbox provider authorized in `ends.`
583
- * - recipient witness host from the accepted KEL witness set
584
- * - recipient agent host authorized in `ends.`
585
- *
586
- * Controller endpoints stay excluded here because they are direct
587
- * correspondence destinations, not store-and-forward hosts.
588
- */
589
- handle(args) {
590
- const modifiers = args.serder.ked?.q;
591
- const recipient = typeof modifiers?.pre === "string" ? modifiers.pre : null;
592
- const topic = typeof modifiers?.topic === "string" ? modifiers.topic : null;
593
- const child = args.serder.pvrsn.major >= 2 ? args.nests?.[0] : undefined;
594
- const forwarded = child ? null : extractForwardedMessage(args.serder, args.attachments);
595
- const mailboxAid = args.mailboxAid;
596
- if (!recipient || !topic || (!child && !forwarded)) {
597
- return;
598
- }
599
- const hby = this.mailboxDirector.hby;
600
- const recipientKever = hby.db.getKever(recipient);
601
- if (!recipientKever) {
602
- return;
603
- }
604
- if (mailboxAid) {
605
- if (!hostCanStoreForwardRecipient(hby, recipient, recipientKever, mailboxAid)) {
606
- return;
607
- }
608
- }
609
- else if (!hasLocalStoreForwardHost(hby, recipient, recipientKever)) {
610
- return;
611
- }
612
- if (child) {
613
- // Mailbox LMDB accepts a finite row; collect one admitted child, never the whole exchange stream.
614
- return abortable(async (signal) => {
615
- const wire = await collectPayload(nestedPayload(child, Vrsn_2_0), MAX_NESTED_WIRE_BYTES, signal);
616
- signal.throwIfAborted();
617
- this.mailboxDirector.publish(recipient, topic, wire);
618
- });
619
- }
620
- this.mailboxDirector.publish(recipient, topic, forwarded);
621
- }
622
- }
623
- Object.defineProperty(ForwardHandler, "resource", {
624
- enumerable: true,
625
- configurable: true,
626
- writable: true,
627
- value: "/fwd"
628
- });
629
- function hostCanStoreForwardRecipient(hby, recipient, recipientKever, hostAid) {
630
- // A local host may store forwarded traffic only when it is an authorized
631
- // witness/mailbox/agent for the recipient. This keeps mailbox storage from
632
- // becoming a generic unauthenticated relay.
633
- if (recipientKever.wits.includes(hostAid)) {
634
- return true;
635
- }
636
- for (const role of [Roles.mailbox, Roles.agent]) {
637
- const end = hby.db.ends.get([recipient, role, hostAid]);
638
- if (end?.allowed || end?.enabled) {
639
- return true;
640
- }
641
- }
642
- return false;
643
- }
644
- function hasLocalStoreForwardHost(hby, recipient, recipientKever) {
645
- // Check all local prefixes because a multi-role runtime can host a mailbox
646
- // AID that is distinct from the controller currently processing the EXN.
647
- for (const hostAid of hby.db.prefixes) {
648
- if (hostCanStoreForwardRecipient(hby, recipient, recipientKever, hostAid)) {
649
- return true;
650
- }
651
- }
652
- return false;
653
- }
654
- /**
655
- * Local/remote mailbox consumer for forwarded EXN topics.
656
- *
657
- * Current scope:
658
- * - replays locally stored mailbox topics for the active habitat prefix
659
- * - polls configured remote mailbox or witness endpoints with `mbx` queries
660
- * - ingests retrieved payloads back through the shared `Reactor`
661
- */
662
- export class MailboxPoller {
663
- constructor(hby, mailboxDirector, options = {}) {
664
- Object.defineProperty(this, "hby", {
665
- enumerable: true,
666
- configurable: true,
667
- writable: true,
668
- value: void 0
669
- });
670
- Object.defineProperty(this, "mailboxDirector", {
671
- enumerable: true,
672
- configurable: true,
673
- writable: true,
674
- value: void 0
675
- });
676
- Object.defineProperty(this, "timeoutPolicy", {
677
- enumerable: true,
678
- configurable: true,
679
- writable: true,
680
- value: void 0
681
- });
682
- Object.defineProperty(this, "services", {
683
- enumerable: true,
684
- configurable: true,
685
- writable: true,
686
- value: void 0
687
- });
688
- Object.defineProperty(this, "pollTransport", {
689
- enumerable: true,
690
- configurable: true,
691
- writable: true,
692
- value: void 0
693
- });
694
- Object.defineProperty(this, "delivered", {
695
- enumerable: true,
696
- configurable: true,
697
- writable: true,
698
- value: new Set()
699
- });
700
- Object.defineProperty(this, "inboxLimits", {
701
- enumerable: true,
702
- configurable: true,
703
- writable: true,
704
- value: void 0
705
- });
706
- Object.defineProperty(this, "durableAdmission", {
707
- enumerable: true,
708
- configurable: true,
709
- writable: true,
710
- value: void 0
711
- });
712
- Object.defineProperty(this, "localCursors", {
713
- enumerable: true,
714
- configurable: true,
715
- writable: true,
716
- value: new Map()
717
- });
718
- /** One bounded command-local resume position; endpoint/habitat metadata stays borrowed. */
719
- Object.defineProperty(this, "nextRemotePoll", {
720
- enumerable: true,
721
- configurable: true,
722
- writable: true,
723
- value: { target: 0, endpoint: 0 }
724
- });
725
- const { timeouts, services = defaultRuntimeServices, pollTransport = defaultMailboxPollTransport, } = options;
726
- this.hby = hby;
727
- if (options.mailboxAdmission && options.mailboxAdmission.mode !== "durable") {
728
- throw new Error("Unsupported mailbox admission mode");
729
- }
730
- this.durableAdmission = options.mailboxAdmission?.mode === "durable";
731
- this.inboxLimits = { ...DEFAULT_MAILBOX_INBOX_LIMITS, ...options.mailboxAdmission?.limits };
732
- for (const limit of Object.values(this.inboxLimits)) {
733
- if (!Number.isSafeInteger(limit) || limit < 1) {
734
- throw new MailboxAdmissionError("invalid-input", "Invalid mailbox inbox limit");
735
- }
736
- }
737
- this.mailboxDirector = mailboxDirector;
738
- this.timeoutPolicy = normalizeMailboxPollingTimeoutPolicy(timeouts);
739
- this.services = services;
740
- this.pollTransport = pollTransport;
741
- }
742
- /** Configure mailbox polling state for future expansion; currently a no-op. */
743
- configure(_args = {}) {
744
- return;
745
- }
746
- /** Register one mailbox topic that this poller should retrieve. */
747
- registerTopic(topic) {
748
- this.mailboxDirector.registerTopic(topic);
749
- }
750
- /**
751
- * Drain one polling turn:
752
- * - replay locally hosted mailbox traffic first
753
- * - then query remote mailbox or witness endpoints using `mbx`
754
- *
755
- * The returned batches preserve per-source boundaries so callers can ingest
756
- * one local or remote result set and run follow-on escrow/cue work before
757
- * moving to the next source.
758
- */
759
- *processOnce({ budgetMs, } = {}) {
760
- const topics = this.mailboxDirector.registeredTopics();
761
- if (topics.length === 0) {
762
- return [];
763
- }
764
- const batches = this.replayRetained();
765
- const deadline = this.services.clock.now() + positiveTimeoutMs(budgetMs, this.timeoutPolicy.commandLocalBudgetMs);
766
- for (const pre of this.hby.prefixes) {
767
- const local = this.readLocalMailbox(pre, topics);
768
- if (local.length > 0) {
769
- batches.push({ source: "local", pre, messages: local });
770
- }
771
- }
772
- const targets = this.remotePollTargets();
773
- if (targets.length === 0)
774
- return this.handOff(batches);
775
- const firstTarget = this.nextRemotePoll.target % targets.length;
776
- const firstEndpoint = this.nextRemotePoll.endpoint;
777
- // Wrap to the earlier endpoints of the starting habitat without flattening peer metadata.
778
- for (let visited = 0; visited <= targets.length; visited++) {
779
- const targetIndex = (firstTarget + visited) % targets.length;
780
- const target = targets[targetIndex];
781
- const remoteEndpoints = mailboxPollEndpoints(this.hby, target.hab);
782
- if (remoteEndpoints.length === 0)
783
- continue;
784
- const resume = firstEndpoint % remoteEndpoints.length;
785
- const start = visited === 0 ? resume : 0;
786
- const end = visited === targets.length ? resume : remoteEndpoints.length;
787
- for (let endpointIndex = start; endpointIndex < end; endpointIndex++) {
788
- const remainingBudgetMs = deadline - this.services.clock.now();
789
- if (remainingBudgetMs <= 0)
790
- return this.handOff(batches);
791
- // Advance before the joined poll, so an empty, failed or cancelled long poll cannot monopolize the next turn.
792
- const nextEndpoint = endpointIndex + 1;
793
- this.nextRemotePoll.target = nextEndpoint < remoteEndpoints.length
794
- ? targetIndex
795
- : (targetIndex + 1) % targets.length;
796
- this.nextRemotePoll.endpoint = nextEndpoint < remoteEndpoints.length ? nextEndpoint : 0;
797
- const batch = yield* this.pollRemoteEndpointOnce(target, remoteEndpoints[endpointIndex], remainingBudgetMs);
798
- if (batch)
799
- batches.push(batch);
800
- }
801
- }
802
- return this.handOff(batches);
803
- }
804
- /**
805
- * Poll forever, streaming typed batches into one sink.
806
- *
807
- * Long-lived runtime polling stays callback-based because concurrent remote
808
- * workers do not have a natural finite return value.
809
- */
810
- *pollDo(onBatch) {
811
- const remoteWorkers = new Map();
812
- try {
813
- while (true) {
814
- for (const batch of this.replayRetained()) {
815
- yield* call(() => onBatch(batch));
816
- this.handOff([batch]);
817
- }
818
- const topics = this.mailboxDirector.registeredTopics();
819
- yield* this.syncRemoteWorkers(remoteWorkers, onBatch, topics);
820
- if (topics.length > 0) {
821
- for (const pre of this.hby.prefixes) {
822
- const local = this.readLocalMailbox(pre, topics);
823
- if (local.length > 0) {
824
- yield* call(() => onBatch({ source: "local", pre, messages: local }));
825
- }
826
- }
827
- }
828
- yield* runtimeTurn();
829
- }
830
- }
831
- finally {
832
- for (const task of [...remoteWorkers.values()].reverse()) {
833
- yield* task.halt();
834
- }
835
- }
836
- }
837
- /**
838
- * Read locally stored mailbox traffic from the shared `Mailboxer`.
839
- *
840
- * Local cursors are in-memory only because they are scoped to the current
841
- * runtime process, unlike remote mailbox progress tracked in `tops.`.
842
- */
843
- readLocalMailbox(pre, topics) {
844
- if (!this.mailboxDirector.hasMailboxStore()) {
845
- return [];
846
- }
847
- const cursor = this.localCursor(pre);
848
- const messages = [];
849
- let bytes = 0;
850
- for (const topic of topics) {
851
- for (const item of this.mailboxDirector.topicIter(pre, topic, cursor[topic] ?? 0)) {
852
- if (item.msg.length > this.inboxLimits.maxRecordBytes) {
853
- throw new MailboxAdmissionError("capacity", "Mailbox record byte limit");
854
- }
855
- if (messages.length === this.inboxLimits.maxBatchRecords
856
- || item.msg.length > this.inboxLimits.maxBatchBytes - bytes)
857
- return messages;
858
- bytes += item.msg.length;
859
- cursor[topic] = item.idx + 1;
860
- messages.push(item.msg);
861
- }
862
- }
863
- return messages;
864
- }
865
- /** Return the in-memory local mailbox cursor map for one local prefix. */
866
- localCursor(pre) {
867
- const current = this.localCursors.get(pre);
868
- if (current) {
869
- return current;
870
- }
871
- const created = {};
872
- this.localCursors.set(pre, created);
873
- return created;
874
- }
875
- /**
876
- * Poll one remote mailbox or witness endpoint once and return one batch.
877
- *
878
- * Timeout ownership:
879
- * - bounded callers pass their remaining command-local budget
880
- * - long-lived workers pass the normal mailbox long-poll duration
881
- */
882
- *pollRemoteEndpointOnce(target, endpoint, budgetMs, onBatch) {
883
- const cursor = this.mailboxDirector.remoteQueryCursor(target.targetPre, endpoint.eid);
884
- const messages = [];
885
- let bytes = 0;
886
- // deno-lint-ignore no-this-alias -- Generator callbacks have no lexical this.
887
- const self = this;
888
- yield* this.pollTransport.poll({
889
- hab: target.signerHab,
890
- targetPre: target.targetPre,
891
- endpoint,
892
- topics: cursor,
893
- bodyMode: this.hby.cesrBodyMode,
894
- timeouts: mailboxFetchTimeoutPolicy(this.timeoutPolicy, budgetMs),
895
- services: this.services,
896
- }, function* (message) {
897
- if (message.msg.length > self.inboxLimits.maxRecordBytes) {
898
- throw new MailboxAdmissionError("capacity", "Mailbox record byte limit");
899
- }
900
- if (message.msg.length > self.inboxLimits.maxBatchBytes) {
901
- throw new MailboxAdmissionError("capacity", "Mailbox batch byte limit");
902
- }
903
- if (onBatch) {
904
- // Await acceptance before asking SSE for another event; durable cursors move with retained bytes.
905
- if (self.durableAdmission) {
906
- self.hby.db.mailboxInbox.admit(target.targetPre, endpoint.eid, [message], self.inboxLimits);
907
- for (const batch of self.replayRetained(target.targetPre, endpoint.eid)) {
908
- yield* call(() => onBatch(batch));
909
- self.handOff([batch]);
910
- }
911
- }
912
- else {
913
- yield* call(() => onBatch({ source: "remote", pre: target.targetPre, eid: endpoint.eid, messages: [message.msg] }));
914
- self.mailboxDirector.updateRemoteCursor(target.targetPre, endpoint.eid, message.topic, message.idx);
915
- }
916
- return;
917
- }
918
- // Command-local batches are finite; unread/over-budget events remain at the peer for the next poll.
919
- if (message.msg.length > self.inboxLimits.maxBatchBytes - bytes)
920
- return false;
921
- bytes += message.msg.length;
922
- messages.push(message);
923
- return messages.length < self.inboxLimits.maxBatchRecords;
924
- });
925
- if (messages.length === 0) {
926
- return null;
927
- }
928
- if (!this.durableAdmission) {
929
- for (const message of messages) {
930
- this.mailboxDirector.updateRemoteCursor(target.targetPre, endpoint.eid, message.topic, message.idx);
931
- }
932
- return {
933
- source: "remote",
934
- pre: target.targetPre,
935
- eid: endpoint.eid,
936
- messages: messages.map((message) => message.msg),
937
- };
938
- }
939
- this.hby.db.mailboxInbox.admit(target.targetPre, endpoint.eid, messages, this.inboxLimits);
940
- return this.replayRetained(target.targetPre, endpoint.eid)[0] ?? null;
941
- }
942
- /** Deliver retained ingress once per poller lifetime; consumers explicitly dispose durable outcomes. */
943
- replayRetained(pre, eid) {
944
- if (!this.durableAdmission)
945
- return [];
946
- const topics = new Set(this.mailboxDirector.registeredTopics());
947
- if (topics.size === 0)
948
- return [];
949
- const retained = this.hby.db.mailboxInbox.pending({ pre, eid, topics, exclude: this.delivered });
950
- const batches = new Map();
951
- for (const { delivery, msg } of retained) {
952
- if (this.delivered.has(delivery.id) || (pre && delivery.pre !== pre) || (eid && delivery.eid !== eid))
953
- continue;
954
- const key = JSON.stringify([delivery.pre, delivery.eid]);
955
- let batch = batches.get(key);
956
- if (!batch) {
957
- batch = { source: "remote", pre: delivery.pre, eid: delivery.eid, messages: [], deliveries: [] };
958
- batches.set(key, batch);
959
- }
960
- batch.messages.push(msg);
961
- batch.deliveries.push(delivery);
962
- }
963
- return [...batches.values()];
964
- }
965
- /** Mark successful handoff only, never selection before later network work or a throwing sink. */
966
- handOff(batches) {
967
- // Validate/prune before marking new IDs: a corrupt retained row must not lose this handoff.
968
- if (this.delivered.size + batches.reduce((n, batch) => n + (batch.deliveries?.length ?? 0), 0)
969
- > this.inboxLimits.maxRetainedRecords) {
970
- const retained = new Set(this.hby.db.mailboxInbox.retained().map((row) => row.id));
971
- for (const id of this.delivered)
972
- if (!retained.has(id))
973
- this.delivered.delete(id);
974
- }
975
- const output = [];
976
- for (const batch of batches) {
977
- if (!batch.deliveries) {
978
- output.push(batch);
979
- continue;
980
- }
981
- const messages = [], deliveries = [];
982
- for (const [index, delivery] of batch.deliveries.entries()) {
983
- if (this.delivered.has(delivery.id))
984
- continue;
985
- this.delivered.add(delivery.id);
986
- messages.push(batch.messages[index]);
987
- deliveries.push(delivery);
988
- }
989
- if (messages.length)
990
- output.push({ ...batch, messages, deliveries });
991
- }
992
- return output;
993
- }
994
- /** Keep one long-lived worker running for each currently configured remote endpoint. */
995
- *syncRemoteWorkers(remoteWorkers, onBatch, topics) {
996
- const active = new Set();
997
- if (topics.length > 0) {
998
- for (const target of this.remotePollTargets()) {
999
- for (const endpoint of mailboxPollEndpoints(this.hby, target.hab)) {
1000
- const workerKey = `${target.targetPre}:${endpoint.key}`;
1001
- active.add(workerKey);
1002
- if (remoteWorkers.has(workerKey)) {
1003
- continue;
1004
- }
1005
- const task = yield* spawn(() => this.remoteEndpointWorker(target, endpoint, onBatch));
1006
- remoteWorkers.set(workerKey, task);
1007
- }
1008
- }
1009
- }
1010
- for (const [workerKey, task] of [...remoteWorkers.entries()]) {
1011
- if (active.has(workerKey)) {
1012
- continue;
1013
- }
1014
- yield* task.halt();
1015
- remoteWorkers.delete(workerKey);
1016
- }
1017
- }
1018
- /**
1019
- * Poll one remote endpoint continuously in the long-lived runtime shape.
1020
- *
1021
- * This keeps KERIpy's "one poller per endpoint" behavior while preserving
1022
- * `keri-ts`'s split between mailbox transport and runtime parser ownership.
1023
- */
1024
- *remoteEndpointWorker(target, endpoint, onBatch) {
1025
- while (true) {
1026
- const batch = yield* this.pollRemoteEndpointOnce(target, endpoint, this.timeoutPolicy.maxPollDurationMs, onBatch);
1027
- if (batch) {
1028
- yield* call(() => onBatch(batch));
1029
- this.handOff([batch]);
1030
- }
1031
- yield* runtimeTurn();
1032
- }
1033
- }
1034
- remotePollTargets() {
1035
- const targets = [];
1036
- for (const hab of this.hby.habs.values()) {
1037
- const signerHab = this.pollSignerHab(hab);
1038
- if (!signerHab) {
1039
- continue;
1040
- }
1041
- targets.push({ hab, targetPre: hab.pre, signerHab });
1042
- }
1043
- return targets;
1044
- }
1045
- pollSignerHab(hab) {
1046
- if (!this.hby.db.groups.has(hab.pre)) {
1047
- return hab;
1048
- }
1049
- const mid = this.hby.db.getHab(hab.pre)?.mid;
1050
- if (!mid) {
1051
- return null;
1052
- }
1053
- return this.hby.habs.get(mid) ?? null;
1054
- }
1055
- }
1056
- Object.defineProperty(MailboxPoller, "DefaultTimeoutPolicy", {
1057
- enumerable: true,
1058
- configurable: true,
1059
- writable: true,
1060
- value: Object.freeze({
1061
- requestOpenTimeoutMs: 5_000,
1062
- maxPollDurationMs: 30_000,
1063
- commandLocalBudgetMs: 5_000,
1064
- })
1065
- });
1066
- Object.defineProperty(MailboxPoller, "ReadIdleTimeoutMs", {
1067
- enumerable: true,
1068
- configurable: true,
1069
- writable: true,
1070
- value: 500
1071
- });
1072
- /**
1073
- * Build one signed `/fwd` exchange containing the embedded mailbox payload.
1074
- *
1075
- * The caller is responsible for any surrounding introduction or end-role
1076
- * material that should travel with the forwarded request.
1077
- */
1078
- function buildForwardedDelivery(hab, args, maxBytes = DEFAULT_FORWARD_BYTES) {
1079
- if (args.message.buffer.byteLength > maxBytes)
1080
- throw new ResourceLimitError("Forwarded payload exceeds byte limit");
1081
- const [serder, attachments] = exchange("/fwd", {}, {
1082
- sender: hab.pre,
1083
- modifiers: { pre: args.recipient, topic: transportMailboxTopic(args.topic) },
1084
- embeds: { evt: args.message },
1085
- });
1086
- const endorsed = hab.endorse(serder, { pipelined: false });
1087
- if (endorsed.length + attachments.length > maxBytes) {
1088
- throw new ResourceLimitError("Cue forwarded wire exceeds limit");
1089
- }
1090
- return concatBytes(endorsed, attachments);
1091
- }
1092
- /**
1093
- * Include the sender's latest KEL before locally stored `/reply` payloads.
1094
- *
1095
- * KERIpy's `Revery` escrows transferable replies whose signer establishment
1096
- * event is unknown. Python KLI does not route that escrow's follow-up query cue
1097
- * during the bounded `kli query` command, so a local mailbox host must provide
1098
- * the verification context with the reply itself for rotated `/ksn` replies.
1099
- */
1100
- function mailboxReplyPayload(hab, recipient, topic, message, maxBytes = DEFAULT_FORWARD_BYTES) {
1101
- if (topic !== "/reply" && topic !== "reply") {
1102
- return message;
1103
- }
1104
- if (message.buffer.byteLength > maxBytes)
1105
- throw new ResourceLimitError("Mailbox reply exceeds byte limit");
1106
- const introduction = introduce(hab, recipient, maxBytes - message.length);
1107
- return introduction.length === 0 ? message : concatBytes(introduction, message);
1108
- }
1109
- /** Finite convenience wire ceiling; a local policy rather than a protocol maximum. */
1110
- const DEFAULT_FORWARD_BYTES = 8 * 1024 * 1024;
1111
- /**
1112
- * Borrow a Hab/store for lazy introduction output, preserving target KEL, oldest
1113
- * delegator first, then endpoint/location replies. Capture begins on iteration.
1114
- * No source is opened when a witness/receipt already makes introduction unnecessary.
1115
- * Native proof/key copies and the large-history transport caller remain separately qualified.
1116
- */
1117
- export function introductionMessages(hab, remote, limits = {}) {
1118
- const endpoints = hab.replyEndRoleMessages(hab.pre, undefined, [], "", limits);
1119
- const maxDepth = limits.maxDepth ?? 32;
1120
- const maxMessageBytes = limits.maxMessageBytes ?? DEFAULT_FORWARD_BYTES;
1121
- return {
1122
- *[Symbol.iterator]() {
1123
- const kever = hab.kever;
1124
- if (!kever || kever.wits.includes(remote))
1125
- return;
1126
- const latestSaid = kever.serder.said;
1127
- if (!latestSaid || remoteAlreadyReceiptedLatestEvent(hab, remote, latestSaid))
1128
- return;
1129
- const captured = hab.db.replay(hab.pre, 0, {
1130
- maxDepth,
1131
- maxMessageBytes,
1132
- });
1133
- if (captured)
1134
- yield* captured;
1135
- yield* endpoints;
1136
- },
1137
- };
1138
- }
1139
- /**
1140
- * Collect a finite introduction under a configurable 8 MiB default; explicit
1141
- * Infinity is misuse. Admit every message before retention and the final join.
1142
- * Remaining credit may be zero when witness/receipt suppression produces no output.
1143
- * This convenience collector does not establish a shared runtime memory bound.
1144
- */
1145
- export function introduce(hab, remote, maxBytes = DEFAULT_FORWARD_BYTES, limits = {}) {
1146
- if (!Number.isSafeInteger(maxBytes) || maxBytes < 0)
1147
- throw new RangeError("Invalid introduction byte limit");
1148
- const configuredMessageBytes = limits.maxMessageBytes ?? DEFAULT_FORWARD_BYTES;
1149
- if (!Number.isSafeInteger(configuredMessageBytes) || configuredMessageBytes < 1) {
1150
- throw new RangeError("Invalid introduction message limit");
1151
- }
1152
- const configuredMetadataBytes = limits.maxDescriptorBytes ?? configuredMessageBytes;
1153
- if (!Number.isSafeInteger(configuredMetadataBytes) || configuredMetadataBytes < 0
1154
- || configuredMetadataBytes > configuredMessageBytes) {
1155
- throw new RangeError("Invalid introduction metadata limit");
1156
- }
1157
- const maxMessageBytes = Math.min(configuredMessageBytes, Math.max(1, maxBytes));
1158
- const maxDescriptorBytes = Math.min(configuredMetadataBytes, maxMessageBytes);
1159
- const messages = [];
1160
- let size = 0;
1161
- for (const bytes of introductionMessages(hab, remote, { ...limits, maxMessageBytes, maxDescriptorBytes })) {
1162
- if (bytes.length > maxBytes - size)
1163
- throw new ResourceLimitError("Query introduction exceeds byte limit");
1164
- size += bytes.length;
1165
- if (bytes.length)
1166
- messages.push(bytes);
1167
- }
1168
- return concatBytes(...messages);
1169
- }
1170
- function remoteAlreadyReceiptedLatestEvent(hab, remote, said) {
1171
- const keys = [
1172
- dgKey(hab.pre, said),
1173
- dgKey(remote, said),
1174
- ];
1175
- for (const key of keys) {
1176
- if (hab.db.vrcs.get(key).some(([prefixer]) => prefixer.qb64 === remote)) {
1177
- return true;
1178
- }
1179
- if (hab.db.rcts.get(key).some(([prefixer]) => prefixer.qb64.startsWith(remote))) {
1180
- return true;
1181
- }
1182
- }
1183
- return false;
1184
- }
1185
- /** Derive the default mailbox topic from the first non-empty route segment. */
1186
- function defaultTopicForRoute(route) {
1187
- if (route.startsWith("/delegate")) {
1188
- return DELEGATE_MAILBOX_TOPIC;
1189
- }
1190
- if (route === "/oobis") {
1191
- return OOBI_MAILBOX_TOPIC;
1192
- }
1193
- if (route.startsWith("/ipex/")) {
1194
- return CREDENTIAL_MAILBOX_TOPIC;
1195
- }
1196
- const trimmed = route.replace(/^\/+/, "");
1197
- return trimmed.split("/")[0] ?? "";
1198
- }
1199
- /** KERIpy pollers query protocol mailbox topics with a leading slash. */
1200
- function pollMailboxTopic(topic) {
1201
- if (topic.length === 0 || topic.startsWith("/")) {
1202
- return topic;
1203
- }
1204
- return `/${topic}`;
1205
- }
1206
- /** KERIpy `/fwd` modifiers use the bare topic name, e.g. `multisig`. */
1207
- function transportMailboxTopic(topic) {
1208
- return topic.replace(/^\/+/, "");
1209
- }
1210
- /**
1211
- * Public helper for deriving mailbox topic defaults from one EXN route.
1212
- *
1213
- * This stays exported because CLI and runtime call sites both need one shared
1214
- * answer for "which mailbox topic should this route land in by default?"
1215
- */
1216
- export function mailboxTopicForRoute(route) {
1217
- return pollMailboxTopic(defaultTopicForRoute(route));
1218
- }
1219
- function extractForwardedMessage(serder, attachments) {
1220
- const embeds = serder.ked?.e;
1221
- const evt = embeds?.evt;
1222
- if (!evt || typeof evt !== "object" || Array.isArray(evt)) {
1223
- return null;
1224
- }
1225
- // Rebuild the embedded event from SAD plus only the attachment material
1226
- // pathed to `/e/evt`; other pathed groups belong to the outer `/fwd` message.
1227
- const embedded = embeddedSerderRaw(evt);
1228
- const messageParts = [embedded];
1229
- for (const attachment of attachments) {
1230
- const atc = forwardedAttachmentForPath(attachment.raw, "/e/evt");
1231
- if (atc) {
1232
- messageParts.push(atc);
1233
- }
1234
- }
1235
- return concatBytes(...messageParts);
1236
- }
1237
- function embeddedSerderRaw(sad) {
1238
- const version = typeof sad.v === "string" ? sad.v : "";
1239
- if (version.startsWith("ACDC")) {
1240
- return new SerderACDC({ sad, verify: false }).raw;
1241
- }
1242
- return new SerderKERI({ sad }).raw;
1243
- }
1244
- /**
1245
- * Extract the forwarded attachment bytes for the embedded `/e/evt` path.
1246
- *
1247
- * Forwarded attachment groups can carry multiple pathed attachments, so the
1248
- * path filter keeps mailbox reconstruction focused on the embedded event.
1249
- */
1250
- function forwardedAttachmentForPath(raw, path) {
1251
- if (raw.length === 0) {
1252
- return null;
1253
- }
1254
- const counter = new Counter({ qb64b: raw });
1255
- const offset = counter.fullSize;
1256
- const pather = parsePather(raw.slice(offset), "txt");
1257
- if (pather.path !== path) {
1258
- return null;
1259
- }
1260
- return raw.slice(offset + pather.fullSize);
1261
- }
1262
- const defaultMailboxPollTransport = {
1263
- *poll(args, consume) {
1264
- // A completed long poll releases its HTTP resource before the next poll begins.
1265
- return yield* call(() => fetchMailboxMessages(args.hab, args.targetPre, args.endpoint.eid, args.endpoint.url, args.topics, args.bodyMode, args.timeouts, args.services, consume));
1266
- },
1267
- };
1268
- /**
1269
- * Query one remote mailbox endpoint and parse any returned mailbox SSE events.
1270
- *
1271
- * The query cursor values are "next wanted" ordinals, matching `mbx`
1272
- * semantics.
1273
- */
1274
- function* fetchMailboxMessages(hab, targetPre, src, url, topics, bodyMode, timeouts, services, consume) {
1275
- const query = hab.query(targetPre, src, { topics }, "mbx");
1276
- const handle = yield* fetchMailboxQueryResponse(url, query, bodyMode, src, timeouts.requestOpenTimeoutMs, services);
1277
- if (!handle) {
1278
- return;
1279
- }
1280
- const { response, controller } = handle;
1281
- if (!response.ok) {
1282
- yield* closeResponseBody(response);
1283
- return;
1284
- }
1285
- yield* consumeMailboxSse(response, controller, consume, {
1286
- idleTimeoutMs: timeouts.readIdleTimeoutMs,
1287
- maxDurationMs: timeouts.maxReadDurationMs,
1288
- services,
1289
- });
1290
- }
1291
- /**
1292
- * Issue one mailbox `mbx` poll request and return the live response handle.
1293
- *
1294
- * The helper owns only the request lifecycle:
1295
- * - build one CESR-over-HTTP mailbox query request
1296
- * - apply the pre-response timeout policy
1297
- * - return `null` when that timeout expires before any response arrives
1298
- *
1299
- * Message parsing and SSE body policy remain with `fetchMailboxMessages(...)`.
1300
- */
1301
- function* fetchMailboxQueryResponse(url, query, bodyMode, destination, timeoutMs, services = defaultRuntimeServices) {
1302
- const request = buildCesrRequest(query, {
1303
- bodyMode,
1304
- destination,
1305
- });
1306
- return yield* fetchResponseHandleOrNull(url, {
1307
- method: "POST",
1308
- headers: request.headers,
1309
- body: request.body,
1310
- }, { timeoutMs, services });
1311
- }
1312
- function normalizeMailboxPollingTimeoutPolicy(overrides) {
1313
- const defaults = MailboxPoller.DefaultTimeoutPolicy;
1314
- return Object.freeze({
1315
- requestOpenTimeoutMs: positiveTimeoutMs(overrides?.requestOpenTimeoutMs, defaults.requestOpenTimeoutMs),
1316
- maxPollDurationMs: positiveTimeoutMs(overrides?.maxPollDurationMs, defaults.maxPollDurationMs),
1317
- commandLocalBudgetMs: positiveTimeoutMs(overrides?.commandLocalBudgetMs, defaults.commandLocalBudgetMs),
1318
- });
1319
- }
1320
- function mailboxFetchTimeoutPolicy(timeouts, budgetMs) {
1321
- const boundedBudgetMs = Math.max(1, budgetMs);
1322
- return {
1323
- requestOpenTimeoutMs: Math.min(timeouts.requestOpenTimeoutMs, boundedBudgetMs),
1324
- maxReadDurationMs: Math.min(timeouts.maxPollDurationMs, boundedBudgetMs),
1325
- readIdleTimeoutMs: MailboxPoller.ReadIdleTimeoutMs,
1326
- };
1327
- }
1328
- function positiveTimeoutMs(value, fallback) {
1329
- return typeof value === "number" && Number.isFinite(value) && value > 0 ? Math.floor(value) : fallback;
1330
- }
1331
- /** Post finite mailbox/EXN caller bytes through the shared progressive, scope-owned sender. */
1332
- export function* postCesrMessage(url, body, bodyMode, destination, services = defaultRuntimeServices, signal, onHttpRefusal, onAdmissionRefusal) {
1333
- yield* postCesr(url, (signal) => chunkBytes(body, { signal }), {
1334
- bodyMode,
1335
- destination,
1336
- services,
1337
- signal,
1338
- onHttpRefusal,
1339
- onAdmissionRefusal,
1340
- });
1341
- }
1342
- /** Shared EXN send helper used by CLI commands that want KERIpy-style behavior. */
1343
- export function* sendExchangeMessage(hby, hab, args) {
1344
- const poster = new Poster(hby);
1345
- return yield* poster.sendExchange(hab, args);
1346
- }