keri-ts 2.0.1 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (450) hide show
  1. package/README.md +30 -2
  2. package/esm/keri/npm/src/acdc/authoring.js +195 -0
  3. package/esm/keri/npm/src/acdc/chaining.js +223 -89
  4. package/esm/keri/npm/src/acdc/custody.js +164 -0
  5. package/esm/keri/npm/src/acdc/dhking.js +244 -32
  6. package/esm/keri/npm/src/acdc/observing.js +2 -2
  7. package/esm/keri/npm/src/acdc/regbasing.js +30 -29
  8. package/esm/keri/npm/src/acdc/regengine.js +4 -6
  9. package/esm/keri/npm/src/acdc/registering.js +13 -10
  10. package/esm/keri/npm/src/acdc/registraring.js +4 -9
  11. package/esm/keri/npm/src/acdc/salting.js +143 -26
  12. package/esm/keri/npm/src/acdc/scheming.js +93 -54
  13. package/esm/keri/npm/src/acdc/unblinding.js +120 -99
  14. package/esm/keri/npm/src/app/bootstrap/authenticating.js +4 -6
  15. package/esm/keri/npm/src/app/bootstrap/oobi-resolving.js +41 -0
  16. package/esm/keri/npm/src/app/bootstrap/oobiery.js +5 -7
  17. package/esm/keri/npm/src/app/credentials/credential-revoking.js +1 -0
  18. package/esm/keri/npm/src/app/credentials/credential-workflows.js +2 -0
  19. package/esm/keri/npm/src/app/credentials/registry-settling.js +44 -0
  20. package/esm/keri/npm/src/app/credentials/root-replicating.js +131 -0
  21. package/esm/keri/npm/src/app/credentials/root-replicator.js +198 -0
  22. package/esm/keri/npm/src/app/credentials/tel-completion.js +36 -0
  23. package/esm/keri/npm/src/app/credentials/verifying.js +12 -3
  24. package/esm/keri/npm/src/app/delivery/forwarding.js +64 -9
  25. package/esm/keri/npm/src/app/exchanges/exchanging.js +24 -15
  26. package/esm/keri/npm/src/app/identity/challenging.js +50 -0
  27. package/esm/keri/npm/src/app/identity/configing.js +17 -43
  28. package/esm/keri/npm/src/app/identity/delegating.js +77 -77
  29. package/esm/keri/npm/src/app/identity/delegation-approval.js +333 -0
  30. package/esm/keri/npm/src/app/identity/event-completion.js +154 -0
  31. package/esm/keri/npm/src/app/identity/habbing.js +183 -41
  32. package/esm/keri/npm/src/app/identity/keeping.js +78 -5
  33. package/esm/keri/npm/src/app/identity/lmdb-habery.js +12 -0
  34. package/esm/keri/npm/src/app/ipex/group-ipex.js +327 -0
  35. package/esm/keri/npm/src/app/ipex/group-issuance.js +902 -0
  36. package/esm/keri/npm/src/app/ipex/ipex-admitting.js +120 -0
  37. package/esm/keri/npm/src/app/ipex/ipex-conversation.js +197 -0
  38. package/esm/keri/npm/src/app/ipex/ipex-discloser.js +591 -0
  39. package/esm/keri/npm/src/app/ipex/ipex-granting.js +93 -0
  40. package/esm/keri/npm/src/app/ipex/ipex-graph.js +7 -70
  41. package/esm/keri/npm/src/app/ipex/ipex-grouping.js +42 -16
  42. package/esm/keri/npm/src/app/ipex/ipex-v2.js +21 -5
  43. package/esm/keri/npm/src/app/ipex/ipexing.js +1 -1
  44. package/esm/keri/npm/src/app/ipex/issuance.js +888 -0
  45. package/esm/keri/npm/src/app/ipex/pending-presentations.js +46 -0
  46. package/esm/keri/npm/src/app/ipex/presentation-files.js +200 -0
  47. package/esm/keri/npm/src/app/ipex/presenting.js +401 -0
  48. package/esm/keri/npm/src/app/ipex/receive-issuance.js +86 -0
  49. package/esm/keri/npm/src/app/ipex/unblinding-workflow.js +660 -0
  50. package/esm/keri/npm/src/app/mailbox/ipex-arrival.js +103 -0
  51. package/esm/keri/npm/src/app/mailbox/kel-publisher.js +322 -0
  52. package/esm/keri/npm/src/app/mailbox/kel-publishing.js +65 -0
  53. package/esm/keri/npm/src/app/mailbox/kel-submission.js +24 -0
  54. package/esm/keri/npm/src/app/mailbox/mailbox-admin.js +208 -0
  55. package/esm/keri/npm/src/app/mailbox/mailbox-poller.js +212 -47
  56. package/esm/keri/npm/src/app/mailbox/mailboxing.js +15 -14
  57. package/esm/keri/npm/src/app/multisig/counseling.js +482 -0
  58. package/esm/keri/npm/src/app/multisig/group-members.js +32 -0
  59. package/esm/keri/npm/src/app/multisig/grouping.js +4 -3
  60. package/esm/keri/npm/src/app/multisig/multisig-workflows.js +101 -141
  61. package/esm/keri/npm/src/app/multisig/proposals.js +281 -0
  62. package/esm/keri/npm/src/app/multisig/proposing.js +122 -0
  63. package/esm/keri/npm/src/app/notifications/notifying.js +5 -9
  64. package/esm/keri/npm/src/app/notifications/signaling.js +5 -5
  65. package/esm/keri/npm/src/app/protocol/parsering.js +26 -1
  66. package/esm/keri/npm/src/app/protocol/protocol-processing.js +44 -6
  67. package/esm/keri/npm/src/app/queries/query-workflows.js +98 -0
  68. package/esm/keri/npm/src/app/queries/witness-inquisitor.js +2 -2
  69. package/esm/keri/npm/src/app/runtime/agent-runtime.js +113 -65
  70. package/esm/keri/npm/src/app/runtime/cue-runtime.js +3 -6
  71. package/esm/keri/npm/src/app/runtime/delivery-outbox.js +87 -0
  72. package/esm/keri/npm/src/app/runtime/doing.js +17 -0
  73. package/esm/keri/npm/src/app/runtime/ipex-auxiliaries.js +207 -0
  74. package/esm/keri/npm/src/app/runtime/operation-owners.js +151 -0
  75. package/esm/keri/npm/src/app/runtime/retry-backoff.js +93 -0
  76. package/esm/keri/npm/src/app/runtime/workflow-contract.js +80 -0
  77. package/esm/keri/npm/src/app/transport/byte-source.js +6 -42
  78. package/esm/keri/npm/src/app/transport/cesr-egress.js +77 -13
  79. package/esm/keri/npm/src/app/transport/file-bytes.js +41 -0
  80. package/esm/keri/npm/src/app/transport/http-client.js +25 -6
  81. package/esm/keri/npm/src/app/transport/http-messenger.js +14 -9
  82. package/esm/keri/npm/src/app/transport/message-source.js +1 -1
  83. package/esm/keri/npm/src/app/transport/messengering.js +3 -4
  84. package/esm/keri/npm/src/app/transport/node-http-client.js +21 -0
  85. package/esm/keri/npm/src/app/transport/tcp-dialer.js +14 -0
  86. package/esm/keri/npm/src/app/witness/http-endpoints.js +4 -4
  87. package/esm/keri/npm/src/app/witness/receipt-client.js +2 -2
  88. package/esm/keri/npm/src/cli/common/context.js +2 -2
  89. package/esm/keri/npm/src/cli/common/event-completion.js +49 -0
  90. package/esm/keri/npm/src/cli/common/existing.js +3 -5
  91. package/esm/keri/npm/src/cli/common/runtime-workers.js +23 -0
  92. package/esm/keri/npm/src/cli/credentials/ipex.js +159 -191
  93. package/esm/keri/npm/src/cli/credentials/vc.js +53 -72
  94. package/esm/keri/npm/src/cli/endpoints/did.js +12 -3
  95. package/esm/keri/npm/src/cli/endpoints/oobi-clean.js +4 -3
  96. package/esm/keri/npm/src/cli/endpoints/oobi.js +12 -15
  97. package/esm/keri/npm/src/cli/identity/challenge.js +9 -35
  98. package/esm/keri/npm/src/cli/identity/delegate.js +81 -258
  99. package/esm/keri/npm/src/cli/identity/incept.js +17 -34
  100. package/esm/keri/npm/src/cli/identity/init.js +4 -3
  101. package/esm/keri/npm/src/cli/identity/interact.js +7 -19
  102. package/esm/keri/npm/src/cli/identity/rotate.js +10 -38
  103. package/esm/keri/npm/src/cli/index.js +3 -1
  104. package/esm/keri/npm/src/cli/messaging/exchange.js +2 -2
  105. package/esm/keri/npm/src/cli/messaging/group-join.js +79 -0
  106. package/esm/keri/npm/src/cli/messaging/group-wait.js +88 -0
  107. package/esm/keri/npm/src/cli/messaging/multisig.js +187 -250
  108. package/esm/keri/npm/src/cli/messaging/root-copy-lines.js +31 -0
  109. package/esm/keri/npm/src/cli/tools/annotate.js +2 -1
  110. package/esm/keri/npm/src/cli/tools/benchmark.js +2 -1
  111. package/esm/keri/npm/src/cli/tools/db-dump.js +1 -4
  112. package/esm/keri/npm/src/core/bytes.js +9 -0
  113. package/esm/keri/npm/src/core/kel/delegation-ancestry.js +92 -0
  114. package/esm/keri/npm/src/core/kel/eventing.js +67 -12
  115. package/esm/keri/npm/src/core/kel/kever.js +11 -9
  116. package/esm/keri/npm/src/core/mailbox/kram-policy.js +41 -9
  117. package/esm/keri/npm/src/core/mailbox/kram-pruning.js +15 -22
  118. package/esm/keri/npm/src/core/mailbox/kram-staging.js +2 -2
  119. package/esm/keri/npm/src/core/mailbox/kraming.js +2 -0
  120. package/esm/keri/npm/src/core/records.js +23 -0
  121. package/esm/keri/npm/src/core/routing.js +15 -2
  122. package/esm/keri/npm/src/db/basing.js +183 -205
  123. package/esm/keri/npm/src/db/core/dber.js +1062 -0
  124. package/esm/keri/npm/src/db/core/index.js +4 -2
  125. package/esm/keri/npm/src/db/core/indexeddb-persistence.js +221 -0
  126. package/esm/keri/npm/src/db/core/lmdb-opener.js +30 -0
  127. package/esm/keri/npm/src/db/core/lmdber.js +199 -1067
  128. package/esm/keri/npm/src/db/core/memstore.js +532 -0
  129. package/esm/keri/npm/src/db/core/path-manager.js +109 -223
  130. package/esm/keri/npm/src/db/core/store-owner.js +104 -0
  131. package/esm/keri/npm/src/db/core/webdber.js +252 -0
  132. package/esm/keri/npm/src/db/escrowing.js +2 -2
  133. package/esm/keri/npm/src/db/exchange/exchange-nests.js +3 -2
  134. package/esm/keri/npm/src/db/indexeddb.js +98 -0
  135. package/esm/keri/npm/src/db/keeping.js +38 -123
  136. package/esm/keri/npm/src/db/koming.js +1 -1
  137. package/esm/keri/npm/src/db/lmdb-stores.js +68 -0
  138. package/esm/keri/npm/src/db/lmdb.js +6 -0
  139. package/esm/keri/npm/src/db/mailbox/mailboxing.js +12 -65
  140. package/esm/keri/npm/src/db/noting.js +11 -55
  141. package/esm/keri/npm/src/db/reger.js +43 -105
  142. package/esm/keri/npm/src/db/replay/witness-replay.js +2 -20
  143. package/esm/keri/npm/src/db/store-lock.js +150 -0
  144. package/esm/keri/npm/src/db/subing.js +1 -1
  145. package/esm/keri/npm/src/npm/db-indexeddb.browser.js +2 -0
  146. package/esm/keri/npm/src/npm/db-indexeddb.js +3 -0
  147. package/esm/keri/npm/src/npm/db-lmdb.js +3 -0
  148. package/esm/keri/npm/src/npm/db.browser.js +2 -0
  149. package/esm/keri/npm/src/npm/index.browser.js +9 -0
  150. package/esm/keri/npm/src/npm/runtime-node.js +3 -0
  151. package/esm/keri/npm/src/npm/runtime-web.browser.js +2 -0
  152. package/esm/keri/npm/src/npm/runtime-web.js +3 -0
  153. package/esm/keri/npm/src/npm/runtime.browser.js +2 -0
  154. package/esm/keri/npm/src/runtime/index.js +58 -12
  155. package/esm/keri/npm/src/runtime/node.js +14 -0
  156. package/esm/keri/npm/src/runtime/web/output-barrier.js +47 -0
  157. package/esm/keri/npm/src/runtime/web/persistent-storage.js +37 -0
  158. package/esm/keri/npm/src/runtime/web.js +10 -0
  159. package/esm/keri/npm/src/vdr/eventing.js +1 -1
  160. package/esm/keri/npm/src/vdr/tel-publication.js +19 -3
  161. package/esm/keri/npm/src/version.js +2 -2
  162. package/package.json +24 -4
  163. package/types/acdc/authoring.d.ts +54 -0
  164. package/types/acdc/authoring.d.ts.map +1 -0
  165. package/types/acdc/chaining.d.ts +56 -6
  166. package/types/acdc/chaining.d.ts.map +1 -1
  167. package/types/acdc/custody.d.ts +77 -0
  168. package/types/acdc/custody.d.ts.map +1 -0
  169. package/types/acdc/dhking.d.ts +94 -3
  170. package/types/acdc/dhking.d.ts.map +1 -1
  171. package/types/acdc/regbasing.d.ts +11 -6
  172. package/types/acdc/regbasing.d.ts.map +1 -1
  173. package/types/acdc/regengine.d.ts.map +1 -1
  174. package/types/acdc/registering.d.ts +8 -4
  175. package/types/acdc/registering.d.ts.map +1 -1
  176. package/types/acdc/registraring.d.ts.map +1 -1
  177. package/types/acdc/salting.d.ts +59 -7
  178. package/types/acdc/salting.d.ts.map +1 -1
  179. package/types/acdc/scheming.d.ts +2 -0
  180. package/types/acdc/scheming.d.ts.map +1 -1
  181. package/types/acdc/unblinding.d.ts +58 -19
  182. package/types/acdc/unblinding.d.ts.map +1 -1
  183. package/types/app/bootstrap/authenticating.d.ts +3 -1
  184. package/types/app/bootstrap/authenticating.d.ts.map +1 -1
  185. package/types/app/bootstrap/oobi-resolving.d.ts +92 -0
  186. package/types/app/bootstrap/oobi-resolving.d.ts.map +1 -0
  187. package/types/app/bootstrap/oobiery.d.ts +3 -1
  188. package/types/app/bootstrap/oobiery.d.ts.map +1 -1
  189. package/types/app/credentials/credential-revoking.d.ts +3 -0
  190. package/types/app/credentials/credential-revoking.d.ts.map +1 -1
  191. package/types/app/credentials/credential-workflows.d.ts +5 -0
  192. package/types/app/credentials/credential-workflows.d.ts.map +1 -1
  193. package/types/app/credentials/registry-settling.d.ts +85 -0
  194. package/types/app/credentials/registry-settling.d.ts.map +1 -0
  195. package/types/app/credentials/root-replicating.d.ts +97 -0
  196. package/types/app/credentials/root-replicating.d.ts.map +1 -0
  197. package/types/app/credentials/root-replicator.d.ts +105 -0
  198. package/types/app/credentials/root-replicator.d.ts.map +1 -0
  199. package/types/app/credentials/tel-completion.d.ts +55 -0
  200. package/types/app/credentials/tel-completion.d.ts.map +1 -0
  201. package/types/app/credentials/verifying.d.ts +2 -1
  202. package/types/app/credentials/verifying.d.ts.map +1 -1
  203. package/types/app/delivery/forwarding.d.ts +16 -0
  204. package/types/app/delivery/forwarding.d.ts.map +1 -1
  205. package/types/app/exchanges/exchanging.d.ts +2 -0
  206. package/types/app/exchanges/exchanging.d.ts.map +1 -1
  207. package/types/app/identity/challenging.d.ts +54 -0
  208. package/types/app/identity/challenging.d.ts.map +1 -1
  209. package/types/app/identity/configing.d.ts +7 -5
  210. package/types/app/identity/configing.d.ts.map +1 -1
  211. package/types/app/identity/delegating.d.ts +21 -4
  212. package/types/app/identity/delegating.d.ts.map +1 -1
  213. package/types/app/identity/delegation-approval.d.ts +228 -0
  214. package/types/app/identity/delegation-approval.d.ts.map +1 -0
  215. package/types/app/identity/event-completion.d.ts +151 -0
  216. package/types/app/identity/event-completion.d.ts.map +1 -0
  217. package/types/app/identity/habbing.d.ts +90 -7
  218. package/types/app/identity/habbing.d.ts.map +1 -1
  219. package/types/app/identity/keeping.d.ts +50 -4
  220. package/types/app/identity/keeping.d.ts.map +1 -1
  221. package/types/app/identity/lmdb-habery.d.ts +6 -0
  222. package/types/app/identity/lmdb-habery.d.ts.map +1 -0
  223. package/types/app/ipex/group-ipex.d.ts +247 -0
  224. package/types/app/ipex/group-ipex.d.ts.map +1 -0
  225. package/types/app/ipex/group-issuance.d.ts +281 -0
  226. package/types/app/ipex/group-issuance.d.ts.map +1 -0
  227. package/types/app/ipex/ipex-admitting.d.ts +47 -0
  228. package/types/app/ipex/ipex-admitting.d.ts.map +1 -0
  229. package/types/app/ipex/ipex-conversation.d.ts +195 -0
  230. package/types/app/ipex/ipex-conversation.d.ts.map +1 -0
  231. package/types/app/ipex/ipex-discloser.d.ts +156 -0
  232. package/types/app/ipex/ipex-discloser.d.ts.map +1 -0
  233. package/types/app/ipex/ipex-granting.d.ts +145 -0
  234. package/types/app/ipex/ipex-granting.d.ts.map +1 -0
  235. package/types/app/ipex/ipex-graph.d.ts +4 -4
  236. package/types/app/ipex/ipex-graph.d.ts.map +1 -1
  237. package/types/app/ipex/ipex-grouping.d.ts +18 -0
  238. package/types/app/ipex/ipex-grouping.d.ts.map +1 -1
  239. package/types/app/ipex/ipex-v2.d.ts +11 -2
  240. package/types/app/ipex/ipex-v2.d.ts.map +1 -1
  241. package/types/app/ipex/ipexing.d.ts +3 -0
  242. package/types/app/ipex/ipexing.d.ts.map +1 -1
  243. package/types/app/ipex/issuance.d.ts +443 -0
  244. package/types/app/ipex/issuance.d.ts.map +1 -0
  245. package/types/app/ipex/pending-presentations.d.ts +25 -0
  246. package/types/app/ipex/pending-presentations.d.ts.map +1 -0
  247. package/types/app/ipex/presentation-files.d.ts +47 -0
  248. package/types/app/ipex/presentation-files.d.ts.map +1 -0
  249. package/types/app/ipex/presenting.d.ts +298 -0
  250. package/types/app/ipex/presenting.d.ts.map +1 -0
  251. package/types/app/ipex/receive-issuance.d.ts +99 -0
  252. package/types/app/ipex/receive-issuance.d.ts.map +1 -0
  253. package/types/app/ipex/unblinding-workflow.d.ts +255 -0
  254. package/types/app/ipex/unblinding-workflow.d.ts.map +1 -0
  255. package/types/app/mailbox/ipex-arrival.d.ts +104 -0
  256. package/types/app/mailbox/ipex-arrival.d.ts.map +1 -0
  257. package/types/app/mailbox/kel-publisher.d.ts +141 -0
  258. package/types/app/mailbox/kel-publisher.d.ts.map +1 -0
  259. package/types/app/mailbox/kel-publishing.d.ts +70 -0
  260. package/types/app/mailbox/kel-publishing.d.ts.map +1 -0
  261. package/types/app/mailbox/kel-submission.d.ts +18 -0
  262. package/types/app/mailbox/kel-submission.d.ts.map +1 -0
  263. package/types/app/mailbox/mailbox-admin.d.ts +113 -0
  264. package/types/app/mailbox/mailbox-admin.d.ts.map +1 -0
  265. package/types/app/mailbox/mailbox-poller.d.ts +92 -3
  266. package/types/app/mailbox/mailbox-poller.d.ts.map +1 -1
  267. package/types/app/mailbox/mailboxing.d.ts +4 -1
  268. package/types/app/mailbox/mailboxing.d.ts.map +1 -1
  269. package/types/app/multisig/counseling.d.ts +196 -0
  270. package/types/app/multisig/counseling.d.ts.map +1 -0
  271. package/types/app/multisig/group-members.d.ts +20 -0
  272. package/types/app/multisig/group-members.d.ts.map +1 -1
  273. package/types/app/multisig/grouping.d.ts +39 -20
  274. package/types/app/multisig/grouping.d.ts.map +1 -1
  275. package/types/app/multisig/multisig-workflows.d.ts +93 -23
  276. package/types/app/multisig/multisig-workflows.d.ts.map +1 -1
  277. package/types/app/multisig/proposals.d.ts +129 -0
  278. package/types/app/multisig/proposals.d.ts.map +1 -0
  279. package/types/app/multisig/proposing.d.ts +125 -0
  280. package/types/app/multisig/proposing.d.ts.map +1 -0
  281. package/types/app/notifications/notifying.d.ts +1 -1
  282. package/types/app/notifications/notifying.d.ts.map +1 -1
  283. package/types/app/notifications/signaling.d.ts +3 -1
  284. package/types/app/notifications/signaling.d.ts.map +1 -1
  285. package/types/app/protocol/parsering.d.ts +16 -1
  286. package/types/app/protocol/parsering.d.ts.map +1 -1
  287. package/types/app/protocol/protocol-processing.d.ts +9 -1
  288. package/types/app/protocol/protocol-processing.d.ts.map +1 -1
  289. package/types/app/queries/query-workflows.d.ts +98 -0
  290. package/types/app/queries/query-workflows.d.ts.map +1 -0
  291. package/types/app/runtime/agent-runtime.d.ts +79 -25
  292. package/types/app/runtime/agent-runtime.d.ts.map +1 -1
  293. package/types/app/runtime/cue-runtime.d.ts +2 -1
  294. package/types/app/runtime/cue-runtime.d.ts.map +1 -1
  295. package/types/app/runtime/delivery-outbox.d.ts +68 -0
  296. package/types/app/runtime/delivery-outbox.d.ts.map +1 -0
  297. package/types/app/runtime/doing.d.ts +27 -0
  298. package/types/app/runtime/doing.d.ts.map +1 -0
  299. package/types/app/runtime/ipex-auxiliaries.d.ts +74 -0
  300. package/types/app/runtime/ipex-auxiliaries.d.ts.map +1 -0
  301. package/types/app/runtime/operation-owners.d.ts +137 -0
  302. package/types/app/runtime/operation-owners.d.ts.map +1 -0
  303. package/types/app/runtime/retry-backoff.d.ts +49 -0
  304. package/types/app/runtime/retry-backoff.d.ts.map +1 -0
  305. package/types/app/runtime/workflow-contract.d.ts +79 -0
  306. package/types/app/runtime/workflow-contract.d.ts.map +1 -0
  307. package/types/app/transport/byte-source.d.ts +13 -10
  308. package/types/app/transport/byte-source.d.ts.map +1 -1
  309. package/types/app/transport/cesr-egress.d.ts +21 -7
  310. package/types/app/transport/cesr-egress.d.ts.map +1 -1
  311. package/types/app/transport/file-bytes.d.ts +11 -0
  312. package/types/app/transport/file-bytes.d.ts.map +1 -0
  313. package/types/app/transport/http-client.d.ts +3 -0
  314. package/types/app/transport/http-client.d.ts.map +1 -1
  315. package/types/app/transport/http-messenger.d.ts +15 -10
  316. package/types/app/transport/http-messenger.d.ts.map +1 -1
  317. package/types/app/transport/message-source.d.ts +1 -1
  318. package/types/app/transport/messengering.d.ts +2 -2
  319. package/types/app/transport/messengering.d.ts.map +1 -1
  320. package/types/app/transport/node-http-client.d.ts +10 -0
  321. package/types/app/transport/node-http-client.d.ts.map +1 -0
  322. package/types/app/transport/tcp-dialer.d.ts +21 -0
  323. package/types/app/transport/tcp-dialer.d.ts.map +1 -0
  324. package/types/cli/common/event-completion.d.ts +26 -0
  325. package/types/cli/common/event-completion.d.ts.map +1 -0
  326. package/types/cli/common/existing.d.ts.map +1 -1
  327. package/types/cli/common/runtime-workers.d.ts +23 -0
  328. package/types/cli/common/runtime-workers.d.ts.map +1 -0
  329. package/types/cli/credentials/ipex.d.ts.map +1 -1
  330. package/types/cli/credentials/vc.d.ts +1 -1
  331. package/types/cli/credentials/vc.d.ts.map +1 -1
  332. package/types/cli/endpoints/did.d.ts.map +1 -1
  333. package/types/cli/endpoints/oobi-clean.d.ts.map +1 -1
  334. package/types/cli/endpoints/oobi.d.ts +3 -1
  335. package/types/cli/endpoints/oobi.d.ts.map +1 -1
  336. package/types/cli/identity/challenge.d.ts +1 -1
  337. package/types/cli/identity/challenge.d.ts.map +1 -1
  338. package/types/cli/identity/delegate.d.ts +14 -1
  339. package/types/cli/identity/delegate.d.ts.map +1 -1
  340. package/types/cli/identity/incept.d.ts.map +1 -1
  341. package/types/cli/identity/init.d.ts.map +1 -1
  342. package/types/cli/identity/interact.d.ts.map +1 -1
  343. package/types/cli/identity/rotate.d.ts.map +1 -1
  344. package/types/cli/index.d.ts +4 -2
  345. package/types/cli/index.d.ts.map +1 -1
  346. package/types/cli/messaging/group-join.d.ts +53 -0
  347. package/types/cli/messaging/group-join.d.ts.map +1 -0
  348. package/types/cli/messaging/group-wait.d.ts +34 -0
  349. package/types/cli/messaging/group-wait.d.ts.map +1 -0
  350. package/types/cli/messaging/multisig.d.ts +36 -4
  351. package/types/cli/messaging/multisig.d.ts.map +1 -1
  352. package/types/cli/messaging/root-copy-lines.d.ts +39 -0
  353. package/types/cli/messaging/root-copy-lines.d.ts.map +1 -0
  354. package/types/cli/tools/annotate.d.ts.map +1 -1
  355. package/types/cli/tools/benchmark.d.ts.map +1 -1
  356. package/types/cli/tools/db-dump.d.ts.map +1 -1
  357. package/types/core/bytes.d.ts +2 -0
  358. package/types/core/bytes.d.ts.map +1 -1
  359. package/types/core/cues.d.ts +11 -0
  360. package/types/core/cues.d.ts.map +1 -1
  361. package/types/core/kel/delegation-ancestry.d.ts +41 -0
  362. package/types/core/kel/delegation-ancestry.d.ts.map +1 -0
  363. package/types/core/kel/eventing.d.ts.map +1 -1
  364. package/types/core/kel/kever.d.ts +5 -4
  365. package/types/core/kel/kever.d.ts.map +1 -1
  366. package/types/core/mailbox/kram-policy.d.ts +14 -0
  367. package/types/core/mailbox/kram-policy.d.ts.map +1 -1
  368. package/types/core/mailbox/kram-pruning.d.ts +1 -3
  369. package/types/core/mailbox/kram-pruning.d.ts.map +1 -1
  370. package/types/core/mailbox/kraming.d.ts +1 -1
  371. package/types/core/mailbox/kraming.d.ts.map +1 -1
  372. package/types/core/records.d.ts +61 -0
  373. package/types/core/records.d.ts.map +1 -1
  374. package/types/core/routing.d.ts +6 -0
  375. package/types/core/routing.d.ts.map +1 -1
  376. package/types/db/basing.d.ts +22 -25
  377. package/types/db/basing.d.ts.map +1 -1
  378. package/types/db/core/dber.d.ts +505 -0
  379. package/types/db/core/dber.d.ts.map +1 -0
  380. package/types/db/core/index.d.ts +4 -2
  381. package/types/db/core/index.d.ts.map +1 -1
  382. package/types/db/core/indexeddb-persistence.d.ts +59 -0
  383. package/types/db/core/indexeddb-persistence.d.ts.map +1 -0
  384. package/types/db/core/lmdb-opener.d.ts +17 -0
  385. package/types/db/core/lmdb-opener.d.ts.map +1 -0
  386. package/types/db/core/lmdber.d.ts +60 -383
  387. package/types/db/core/lmdber.d.ts.map +1 -1
  388. package/types/db/core/memstore.d.ts +129 -0
  389. package/types/db/core/memstore.d.ts.map +1 -0
  390. package/types/db/core/path-manager.d.ts +22 -45
  391. package/types/db/core/path-manager.d.ts.map +1 -1
  392. package/types/db/core/store-owner.d.ts +59 -0
  393. package/types/db/core/store-owner.d.ts.map +1 -0
  394. package/types/db/core/webdber.d.ts +127 -0
  395. package/types/db/core/webdber.d.ts.map +1 -0
  396. package/types/db/escrowing.d.ts +3 -3
  397. package/types/db/escrowing.d.ts.map +1 -1
  398. package/types/db/exchange/exchange-nests.d.ts.map +1 -1
  399. package/types/db/indexeddb.d.ts +37 -0
  400. package/types/db/indexeddb.d.ts.map +1 -0
  401. package/types/db/keeping.d.ts +14 -25
  402. package/types/db/keeping.d.ts.map +1 -1
  403. package/types/db/koming.d.ts +7 -8
  404. package/types/db/koming.d.ts.map +1 -1
  405. package/types/db/lmdb-stores.d.ts +45 -0
  406. package/types/db/lmdb-stores.d.ts.map +1 -0
  407. package/types/db/lmdb.d.ts +7 -0
  408. package/types/db/lmdb.d.ts.map +1 -0
  409. package/types/db/mailbox/mailboxing.d.ts +7 -21
  410. package/types/db/mailbox/mailboxing.d.ts.map +1 -1
  411. package/types/db/noting.d.ts +7 -12
  412. package/types/db/noting.d.ts.map +1 -1
  413. package/types/db/reger.d.ts +7 -11
  414. package/types/db/reger.d.ts.map +1 -1
  415. package/types/db/replay/witness-replay.d.ts +0 -2
  416. package/types/db/replay/witness-replay.d.ts.map +1 -1
  417. package/types/db/store-lock.d.ts +72 -0
  418. package/types/db/store-lock.d.ts.map +1 -0
  419. package/types/db/subing.d.ts +24 -25
  420. package/types/db/subing.d.ts.map +1 -1
  421. package/types/npm/db-indexeddb.d.ts +4 -0
  422. package/types/npm/db-indexeddb.d.ts.map +1 -0
  423. package/types/npm/db-lmdb.d.ts +4 -0
  424. package/types/npm/db-lmdb.d.ts.map +1 -0
  425. package/types/npm/runtime-node.d.ts +4 -0
  426. package/types/npm/runtime-node.d.ts.map +1 -0
  427. package/types/npm/runtime-web.d.ts +4 -0
  428. package/types/npm/runtime-web.d.ts.map +1 -0
  429. package/types/runtime/index.d.ts +48 -14
  430. package/types/runtime/index.d.ts.map +1 -1
  431. package/types/runtime/node.d.ts +15 -0
  432. package/types/runtime/node.d.ts.map +1 -0
  433. package/types/runtime/web/output-barrier.d.ts +30 -0
  434. package/types/runtime/web/output-barrier.d.ts.map +1 -0
  435. package/types/runtime/web/persistent-storage.d.ts +36 -0
  436. package/types/runtime/web/persistent-storage.d.ts.map +1 -0
  437. package/types/runtime/web.d.ts +11 -0
  438. package/types/runtime/web.d.ts.map +1 -0
  439. package/types/vdr/tel-publication.d.ts +6 -0
  440. package/types/vdr/tel-publication.d.ts.map +1 -1
  441. package/types/version.d.ts +2 -2
  442. package/esm/keri/npm/src/acdc/relating.js +0 -59
  443. package/esm/keri/npm/src/cli/common/tel-completion.js +0 -24
  444. package/esm/keri/npm/src/db/baser-defaults.js +0 -11
  445. package/types/acdc/relating.d.ts +0 -21
  446. package/types/acdc/relating.d.ts.map +0 -1
  447. package/types/cli/common/tel-completion.d.ts +0 -8
  448. package/types/cli/common/tel-completion.d.ts.map +0 -1
  449. package/types/db/baser-defaults.d.ts +0 -5
  450. package/types/db/baser-defaults.d.ts.map +0 -1
@@ -1,15 +1,15 @@
1
1
  import * as dntShim from "../../_dnt.shims.js";
2
2
  import { concatBytes } from "cesr-ts";
3
- import { call, spawn } from "effection";
4
3
  import { importCredentialStream } from "../../app/credentials/credential-importing.js";
5
4
  import { deliverCredentialRevocation, revocationRecipients, revokeCredential, } from "../../app/credentials/credential-revoking.js";
6
5
  import { createCredential, credentialRegistryRecords, credentialRegistryStatus, credentialStreamBytes, exportCredentialStream, inceptCredentialRegistry, listCredentials, pinSchemaBytes, } from "../../app/credentials/credential-workflows.js";
6
+ import { waitForIssuedCredential, waitForTelEvent } from "../../app/credentials/tel-completion.js";
7
7
  import { isLocalGroupHab, localGroupMember } from "../../app/multisig/group-members.js";
8
- import { runAgentRuntime } from "../../app/runtime/agent-runtime.js";
8
+ import { proposeCredentialIssue, proposeCredentialRegistry, proposeCredentialRevocation, } from "../../app/multisig/proposing.js";
9
9
  import { ValidationError } from "../../core/errors.js";
10
10
  import { withAgentRuntime, withExistingHabery } from "../common/context.js";
11
11
  import { parseBooleanOption, parseNumberOption, parseStringListOption, parseStringOption } from "../common/parsing.js";
12
- import { waitForIssuedCredential, waitForTelPublication } from "../common/tel-completion.js";
12
+ import { withRuntimeWorkers } from "../common/runtime-workers.js";
13
13
  /** Implement `tufa vc schema import` by pinning JSON schemas into `schema.`. */
14
14
  export function* vcSchemaImportCommand(args) {
15
15
  const vcArgs = {
@@ -35,29 +35,22 @@ export function* vcRegistryInceptCommand(args) {
35
35
  const hab = requireHab(hby, vcArgs.alias);
36
36
  const group = isLocalGroupHab(hby, hab);
37
37
  const signer = group ? localGroupMember(hby, hab.pre) : hab;
38
- const result = yield* call(function* () {
39
- const postman = runtime.postman;
40
- const worker = yield* spawn(() => runAgentRuntime(runtime, { hab: signer, pollMailbox: group }));
41
- try {
42
- const deadline = Date.now() + timeout * 1000;
43
- const created = yield* inceptCredentialRegistry(rgy, runtime.reactor, postman, hab, {
44
- registryName: vcArgs.registryName,
45
- estOnly: vcArgs.estOnly,
46
- usage: vcArgs.usage,
47
- });
48
- created.publicationComplete = yield* waitForTelPublication(rgy.publication, created.registry, 0, deadline);
49
- if (created.group) {
50
- created.group.accepted = rgy.reger.tels.getOn(created.registry, 0)?.qb64 === created.registry;
51
- if (created.group.accepted)
52
- created.group.status = "accept";
53
- }
54
- return created;
55
- }
56
- finally {
57
- yield* worker.halt();
38
+ return yield* withRuntimeWorkers(runtime, { hab: signer, pollMailbox: group }, function* () {
39
+ const deadline = Date.now() + timeout * 1000;
40
+ const options = { registryName: vcArgs.registryName, estOnly: vcArgs.estOnly, usage: vcArgs.usage };
41
+ const created = group
42
+ ? yield* proposeCredentialRegistry(proposeDeps(rgy, runtime), hab, options, GROUP_INPUTS)
43
+ : yield* inceptCredentialRegistry(rgy, runtime.reactor, runtime.postman, hab, options);
44
+ const waited = yield* waitForTelEvent(rgy, created.registry, 0, { deadline });
45
+ created.publicationComplete = waited.outcome === "settled";
46
+ // Report the accepted state the wait ended with; sending the proposal is not acceptance.
47
+ if (created.group) {
48
+ created.group.accepted = rgy.reger.tels.getOn(created.registry, 0)?.qb64 === created.registry;
49
+ if (created.group.accepted)
50
+ created.group.status = "accept";
58
51
  }
52
+ return created;
59
53
  });
60
- return result;
61
54
  });
62
55
  }
63
56
  /** Implement `tufa vc registry list` from local `Reger.regs` state. */
@@ -112,34 +105,23 @@ export function* vcCreateCommand(args) {
112
105
  throw new ValidationError("Selected alias does not control this registry.");
113
106
  const group = isLocalGroupHab(hby, issuer);
114
107
  const signer = group ? localGroupMember(hby, issuer.pre) : issuer;
115
- const result = yield* call(function* () {
116
- const postman = runtime.postman;
117
- const worker = yield* spawn(() => runAgentRuntime(runtime, { hab: signer, pollMailbox: group }));
118
- try {
119
- const deadline = Date.now() + timeout * 1000;
120
- const created = yield* createCredential(rgy, runtime.reactor, postman, {
121
- registryName: vcArgs.registryName,
122
- schema: schema,
123
- recipient,
124
- data,
125
- edges,
126
- rules,
127
- });
128
- yield* waitForIssuedCredential(rgy.publication, created.creder.said, deadline);
129
- const saved = rgy.reger.saved.get(created.creder.said) !== null;
130
- created.publicationComplete = rgy.publication.complete(created.creder.said);
131
- if (saved)
132
- created.status = "accept";
133
- if (created.group) {
134
- created.group.saved = saved;
135
- if (rgy.reger.tels.getOn(created.creder.said, 0)?.qb64 === created.tel)
136
- created.group.telStatus = "accept";
137
- }
138
- return created;
139
- }
140
- finally {
141
- yield* worker.halt();
108
+ const result = yield* withRuntimeWorkers(runtime, { hab: signer, pollMailbox: group }, function* () {
109
+ const deadline = Date.now() + timeout * 1000;
110
+ const options = { registryName: vcArgs.registryName, schema: schema, recipient, data, edges, rules };
111
+ const created = group
112
+ ? yield* proposeCredentialIssue(proposeDeps(rgy, runtime), options, GROUP_INPUTS)
113
+ : yield* createCredential(rgy, runtime.reactor, runtime.postman, options);
114
+ yield* waitForIssuedCredential(rgy, created.creder.said, { deadline });
115
+ const saved = rgy.reger.saved.get(created.creder.said) !== null;
116
+ created.publicationComplete = rgy.publication.complete(created.creder.said);
117
+ if (saved)
118
+ created.status = "accept";
119
+ if (created.group) {
120
+ created.group.saved = saved;
121
+ if (rgy.reger.tels.getOn(created.creder.said, 0)?.qb64 === created.tel)
122
+ created.group.telStatus = "accept";
142
123
  }
124
+ return created;
143
125
  });
144
126
  if (vcArgs.out) {
145
127
  writeBytes(credentialStreamBytes(hby, reger, result.creder, result.recipient), vcArgs.out);
@@ -235,28 +217,22 @@ export function* vcRevokeCommand(args) {
235
217
  }
236
218
  const group = isLocalGroupHab(hby, registry.hab);
237
219
  const signer = group ? localGroupMember(hby, registry.hab.pre) : registry.hab;
238
- const result = yield* call(function* () {
239
- const postman = runtime.postman;
240
- const worker = yield* spawn(() => runAgentRuntime(runtime, { hab: signer, pollMailbox: group }));
241
- try {
242
- const deadline = Date.now() + timeout * 1000;
243
- const revoked = yield* revokeCredential(rgy, runtime.reactor, postman, {
244
- registryName: vcArgs.registryName,
245
- credentialSaid: vcArgs.said,
246
- });
247
- revoked.publicationComplete = yield* waitForTelPublication(rgy.publication, revoked.said, 1, deadline);
248
- revoked.accepted = reger.tels.getOn(revoked.said, 1)?.qb64 === revoked.tel;
249
- if (revoked.accepted)
250
- revoked.status = "accept";
251
- const recipients = revocationRecipients(revoked.creder, vcArgs.send ?? [], !!vcArgs.alias);
252
- if (recipients.length > 0) {
253
- revoked.deliveries = yield* deliverCredentialRevocation(rgy, postman, revoked.said, recipients);
254
- }
255
- return revoked;
256
- }
257
- finally {
258
- yield* worker.halt();
220
+ const result = yield* withRuntimeWorkers(runtime, { hab: signer, pollMailbox: group }, function* () {
221
+ const deadline = Date.now() + timeout * 1000;
222
+ const options = { registryName: vcArgs.registryName, credentialSaid: vcArgs.said };
223
+ const revoked = group
224
+ ? yield* proposeCredentialRevocation(proposeDeps(rgy, runtime), options, GROUP_INPUTS)
225
+ : yield* revokeCredential(rgy, runtime.reactor, runtime.postman, options);
226
+ const waited = yield* waitForTelEvent(rgy, revoked.said, 1, { deadline });
227
+ revoked.publicationComplete = waited.outcome === "settled";
228
+ revoked.accepted = reger.tels.getOn(revoked.said, 1)?.qb64 === revoked.tel;
229
+ if (revoked.accepted)
230
+ revoked.status = "accept";
231
+ const recipients = revocationRecipients(revoked.creder, vcArgs.send ?? [], !!vcArgs.alias);
232
+ if (recipients.length > 0) {
233
+ revoked.deliveries = yield* deliverCredentialRevocation(rgy, runtime.postman, revoked.said, recipients);
259
234
  }
235
+ return revoked;
260
236
  });
261
237
  if (vcArgs.out && result.accepted && result.publicationComplete) {
262
238
  const recipient = vcArgs.recipient ? resolveAid(hby, vcArgs.recipient) : result.creder.issuee ?? "";
@@ -265,6 +241,11 @@ export function* vcRevokeCommand(args) {
265
241
  return result;
266
242
  });
267
243
  }
244
+ /** Every group member submits receipts for the anchors it proposes, as this command always has. */
245
+ const GROUP_INPUTS = { fallbackAfterMs: 0 };
246
+ function proposeDeps(rgy, runtime) {
247
+ return { rgy, input: runtime.reactor, postman: runtime.postman, counselor: runtime.counselor };
248
+ }
268
249
  function baseArgs(args) {
269
250
  return {
270
251
  name: parseStringOption(args.name, "name"),
@@ -2,13 +2,14 @@
2
2
  * DID-related CLI operations shared by the Tufa command dispatcher.
3
3
  */
4
4
  import * as dntShim from "../../_dnt.shims.js";
5
+ import { beginOobi, waitForOobi } from "../../app/bootstrap/oobi-resolving.js";
5
6
  import { isLocalGroupHab } from "../../app/multisig/group-members.js";
6
- import { runAgentRuntimeUntil, runtimeOobiConverged } from "../../app/runtime/agent-runtime.js";
7
7
  import { WitnessReceiptor } from "../../app/witness/receipting.js";
8
8
  import { ValidationError } from "../../core/errors.js";
9
9
  import { bindDesignatedAliases, DEFAULT_DESIGNATED_ALIASES_REGISTRY_NAME, generateDidWebsArtifacts, parseDidKeriIdentifier, parseDidWebs, resolveDidKeri, resolveDidWebs, } from "../../did/index.js";
10
10
  import { withAgentRuntime } from "../common/context.js";
11
11
  import { parseBooleanOption, parseStringListOption, parseStringOption, requireNonEmpty } from "../common/parsing.js";
12
+ import { withRuntimeWorkers } from "../common/runtime-workers.js";
12
13
  /** Implement `tufa dws bind`. */
13
14
  export function* dwsBindCommand(args) {
14
15
  const commandArgs = {
@@ -125,9 +126,17 @@ export function* dkrResolveCommand(args) {
125
126
  if (!rgy)
126
127
  throw new ValidationError("Legacy credential registry is unavailable in this runtime.");
127
128
  for (const oobi of commandArgs.oobis)
128
- runtime.oobiery.resolve(oobi);
129
+ beginOobi({ oobiery: runtime.oobiery }, oobi);
129
130
  if (commandArgs.oobis.length > 0) {
130
- yield* runAgentRuntimeUntil(runtime, () => commandArgs.oobis.every((url) => runtimeOobiConverged(runtime, url)), { timeoutMs: 30_000, pollMailbox: false });
131
+ // Each wait observes its own URL's record; the jobs progress together under one set of workers.
132
+ yield* withRuntimeWorkers(runtime, { pollMailbox: false }, function* () {
133
+ for (const url of commandArgs.oobis) {
134
+ const result = yield* waitForOobi({ db: hby.db }, url, { timeoutMs: 30_000 });
135
+ if (result.outcome === "timed-out") {
136
+ throw new Error(`OOBI ${url} did not resolve within ${result.timeoutMs}ms.`);
137
+ }
138
+ }
139
+ });
131
140
  }
132
141
  const result = resolveDidKeri(hby, rgy, did);
133
142
  console.log(JSON.stringify(commandArgs.meta ? result.resolution : result.document, null, 2));
@@ -2,9 +2,10 @@
2
2
  import * as dntShim from "../../_dnt.shims.js";
3
3
  import { call } from "effection";
4
4
  import { DatabaseOperationError, ValidationError } from "../../core/errors.js";
5
- import { baserDefaults } from "../../db/baser-defaults.js";
6
- import { createBaser } from "../../db/basing.js";
5
+ import { Baser } from "../../db/basing.js";
6
+ import { lmdbDefaultsFor } from "../../db/core/lmdb-opener.js";
7
7
  import { PathManager } from "../../db/core/path-manager.js";
8
+ import { createBaser } from "../../db/lmdb-stores.js";
8
9
  import { parseBooleanOption, parseStringOption } from "../common/parsing.js";
9
10
  import { writeJsonLine } from "../common/rendering.js";
10
11
  /** Read a nonempty JSON list, preserving exact keys and first-seen order. */
@@ -56,7 +57,7 @@ export function* oobiCleanCommand(args) {
56
57
  const keys = yield* loadKeys(args.keyFile);
57
58
  // Resolve through ordinary path preparation before Baser can create data.mdb.
58
59
  // Empty directories are ordinary startup effects; missing databases still fail.
59
- const paths = new PathManager(options, baserDefaults(options.compat));
60
+ const paths = new PathManager(options, lmdbDefaultsFor(Baser.Family, options.compat));
60
61
  paths.name = name;
61
62
  yield* paths.reopen();
62
63
  const path = paths.path;
@@ -1,13 +1,13 @@
1
- import { oobiTerminalState } from "../../app/bootstrap/oobiery.js";
1
+ import { resolveOobi } from "../../app/bootstrap/oobi-resolving.js";
2
2
  import { OOBI_MAILBOX_TOPIC, OOBI_REQUEST_ROUTE, oobiRequestExn } from "../../app/bootstrap/oobiery.js";
3
3
  import { sendExchangeMessage } from "../../app/exchanges/exchange-messaging.js";
4
- import { enqueueOobi, runAgentRuntimeUntil, runtimeOobiConverged } from "../../app/runtime/agent-runtime.js";
5
4
  import { systemClock } from "../../app/runtime/runtime-clock.js";
6
- import { FetchHttpClient } from "../../app/transport/http-client.js";
5
+ import { NodeHttpClient } from "../../app/transport/node-http-client.js";
7
6
  import { ValidationError } from "../../core/errors.js";
8
7
  import { EndpointRoles, isEndpointRole } from "../../core/roles.js";
9
8
  import { parseBooleanOption, parseStringOption } from "../common/parsing.js";
10
9
  import { withAgentRuntime, withExistingHab } from "../common/context.js";
10
+ import { withRuntimeWorkers } from "../common/runtime-workers.js";
11
11
  /**
12
12
  * Choose one preferred URL from a scheme-keyed location map.
13
13
  *
@@ -107,7 +107,9 @@ export function* oobiGenerateCommand(args) {
107
107
  *
108
108
  * The command queues one OOBI job, runs the shared workers, and succeeds only if
109
109
  * the URL lands in `roobi.`. Any reply/event material fetched from the OOBI is
110
- * forced through the same parser/routing path used by the long-lived host.
110
+ * forced through the same parser/routing path used by the long-lived host. It
111
+ * waits on that URL's own record, never on unrelated pending runtime work such
112
+ * as group proposals or delegation escrows.
111
113
  */
112
114
  export function* oobiResolveCommand(args) {
113
115
  const commandArgs = {
@@ -132,17 +134,12 @@ export function* oobiResolveCommand(args) {
132
134
  skipConfig: false,
133
135
  skipSignator: false,
134
136
  }, function* ({ runtime }) {
135
- enqueueOobi(runtime, {
136
- url,
137
- alias: commandArgs.oobiAlias,
138
- });
139
- yield* runAgentRuntimeUntil(runtime, () => runtimeOobiConverged(runtime, url), { timeoutMs: 30_000, pollMailbox: false });
140
- const terminal = oobiTerminalState(runtime.hby.db, url);
141
- if (terminal.status === "failed") {
142
- throw new ValidationError(`OOBI ${url} failed: ${terminal.record?.state ?? "failed"}`);
137
+ const result = yield* withRuntimeWorkers(runtime, { pollMailbox: false }, () => resolveOobi({ oobiery: runtime.oobiery, db: runtime.hby.db }, url, { alias: commandArgs.oobiAlias, timeoutMs: 30_000 }));
138
+ if (result.outcome === "timed-out") {
139
+ throw new Error(`OOBI ${url} did not resolve within ${result.timeoutMs}ms.`);
143
140
  }
144
- if (terminal.status !== "resolved") {
145
- throw new ValidationError(`OOBI ${url} did not resolve.`);
141
+ if (result.status.state === "failed") {
142
+ throw new ValidationError(`OOBI ${url} failed: ${result.status.reason}`);
146
143
  }
147
144
  console.log(url);
148
145
  });
@@ -191,7 +188,7 @@ export function* oobiRequestCommand(args) {
191
188
  skipSignator: false,
192
189
  }, function* ({ hby, hab }) {
193
190
  const exn = oobiRequestExn(hab, recipient, url);
194
- const { serder } = yield* sendExchangeMessage(hby, hab, new FetchHttpClient(), systemClock, {
191
+ const { serder } = yield* sendExchangeMessage(hby, hab, new NodeHttpClient(), systemClock, {
195
192
  dest: recipient,
196
193
  route: OOBI_REQUEST_ROUTE,
197
194
  topic: OOBI_MAILBOX_TOPIC,
@@ -1,14 +1,11 @@
1
- import { action, spawn } from "effection";
2
- import { sendExchangeMessage } from "../../app/exchanges/exchange-messaging.js";
3
- import { CHALLENGE_RESPONSE_ROUTE, findVerifiedChallengeResponse, formatChallengeWords, generateChallengeWords, markChallengeVerified, parseChallengeWords, } from "../../app/identity/challenging.js";
1
+ import { challengeStatus, formatChallengeWords, generateChallengeWords, markChallengeVerified, parseChallengeWords, respondToChallenge, waitForChallengeResponse, } from "../../app/identity/challenging.js";
4
2
  import { Organizer } from "../../app/identity/organizing.js";
5
- import { isLocalGroupHab } from "../../app/multisig/group-members.js";
6
- import { runAgentRuntime } from "../../app/runtime/agent-runtime.js";
7
3
  import { systemClock } from "../../app/runtime/runtime-clock.js";
8
- import { FetchHttpClient } from "../../app/transport/http-client.js";
4
+ import { NodeHttpClient } from "../../app/transport/node-http-client.js";
9
5
  import { ValidationError } from "../../core/errors.js";
10
6
  import { parseBooleanOption, parseIntegerOption, parseNumberOption, parseStringOption } from "../common/parsing.js";
11
7
  import { withAgentRuntime, withExistingHab } from "../common/context.js";
8
+ import { withRuntimeWorkers } from "../common/runtime-workers.js";
12
9
  /** Implement `tufa challenge generate`. */
13
10
  export function* challengeGenerateCommand(args) {
14
11
  const commandArgs = {
@@ -58,16 +55,7 @@ export function* challengeRespondCommand(args) {
58
55
  skipConfig: false,
59
56
  skipSignator: false,
60
57
  }, function* ({ hby, hab }) {
61
- if (isLocalGroupHab(hby, hab)) {
62
- throw new ValidationError("Challenge respond does not coordinate group approval. Select the responding member alias.");
63
- }
64
- const payload = { words };
65
- const { serder } = yield* sendExchangeMessage(hby, hab, new FetchHttpClient(), systemClock, {
66
- dest: recipient,
67
- route: CHALLENGE_RESPONSE_ROUTE,
68
- topic: "challenge",
69
- payload: { i: hab.pre, ...payload },
70
- });
58
+ const serder = yield* respondToChallenge({ hby, http: new NodeHttpClient(), clock: systemClock }, hab, recipient, words);
71
59
  console.log("Sent EXN message");
72
60
  console.log(serder.pretty());
73
61
  });
@@ -125,20 +113,12 @@ export function* challengeVerifyCommand(args) {
125
113
  runtime.mailboxDirector.registerTopic("/challenge");
126
114
  const timeoutMs = commandArgs.timeout * 1000;
127
115
  const pollDelayMs = commandArgs.pollDelayMs;
128
- const deadline = Date.now() + timeoutMs;
129
- let match = findVerifiedChallengeResponse(hby.db, signer, words);
130
- if (!match && timeoutMs > 0) {
131
- const worker = yield* spawn(() => runAgentRuntime(runtime));
132
- try {
133
- while (!match && Date.now() < deadline) {
134
- yield* sleep(Math.min(pollDelayMs, Math.max(0, deadline - Date.now())));
135
- match = findVerifiedChallengeResponse(hby.db, signer, words);
136
- }
137
- }
138
- finally {
139
- yield* worker.halt();
140
- }
116
+ let status = challengeStatus(hby, signer, words);
117
+ if (status.state === "waiting" && timeoutMs > 0) {
118
+ const waited = yield* withRuntimeWorkers(runtime, {}, () => waitForChallengeResponse(hby, signer, words, { timeoutMs, pollMs: pollDelayMs }));
119
+ status = waited.status;
141
120
  }
121
+ const match = status.state === "waiting" ? null : status.response;
142
122
  if (!match) {
143
123
  throw new ValidationError(`No challenge response from ${signerInput} matched the provided words.`);
144
124
  }
@@ -166,12 +146,6 @@ function normalizeOutput(input) {
166
146
  }
167
147
  throw new ValidationError(`Unsupported challenge output ${String(input)}.`);
168
148
  }
169
- function* sleep(ms) {
170
- yield* action((resolve) => {
171
- const timeoutId = setTimeout(() => resolve(undefined), ms);
172
- return () => clearTimeout(timeoutId);
173
- });
174
- }
175
149
  /** Challenge entropy is a positive whole bit count; omission selects the command default. */
176
150
  function parseStrength(value) {
177
151
  const strength = parseIntegerOption(value, "strength") ?? 128;