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
@@ -0,0 +1,252 @@
1
+ /**
2
+ * Browser-capable `DBer`: a `MemStore` mirror with write-behind persistence.
3
+ *
4
+ * ADR-0015 owns the durability model. Reads and writes are synchronous against
5
+ * the mirror; each outermost commit enqueues one batch holding its net effect,
6
+ * and a queue shared by a composition applies batches one at a time in global
7
+ * commit order. Nothing here may reach `lmdb`, `node:` or the `Deno` global.
8
+ *
9
+ * Invariant: once the queue is joined with no failure, the mirror and the
10
+ * persisted rows are byte-identical, which is why `reopen` joins before it loads.
11
+ */
12
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
13
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
14
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
15
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
16
+ };
17
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
18
+ if (kind === "m") throw new TypeError("Private method is not writable");
19
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
20
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
21
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
22
+ };
23
+ var _PersistenceQueue_instances, _PersistenceQueue_tail, _PersistenceQueue_failure, _PersistenceQueue_append, _PersistenceQueue_settled, _WebDBer_instances, _WebDBer_persistence, _WebDBer_queue, _WebDBer_pendingTables, _WebDBer_connected, _WebDBer_enqueue, _WebDBer_takePendingTables, _WebDBer_carryPendingTables;
24
+ import { bytesEqual, bytesHex } from "cesr-ts";
25
+ import { call, ensure } from "effection";
26
+ import { DatabaseOperationError } from "../../core/errors.js";
27
+ import { MemStore } from "./memstore.js";
28
+ /**
29
+ * The persistence order of one composition. Tasks run strictly one at a time,
30
+ * outside any Effection scope, so cancelling a waiter never cancels a write.
31
+ *
32
+ * The first failure latches: every later task is skipped, because applying a
33
+ * later batch over a lost earlier one would break prefix durability.
34
+ */
35
+ export class PersistenceQueue {
36
+ constructor() {
37
+ _PersistenceQueue_instances.add(this);
38
+ _PersistenceQueue_tail.set(this, Promise.resolve());
39
+ _PersistenceQueue_failure.set(this, null);
40
+ }
41
+ /** Append a task, which is skipped if an earlier one failed. */
42
+ enqueue(task) {
43
+ __classPrivateFieldGet(this, _PersistenceQueue_instances, "m", _PersistenceQueue_append).call(this, task, false);
44
+ }
45
+ /** Append connection teardown, which still runs after a failure so a handle is not left open. */
46
+ release(task) {
47
+ __classPrivateFieldGet(this, _PersistenceQueue_instances, "m", _PersistenceQueue_append).call(this, task, true);
48
+ }
49
+ /** Refuse new work once latched. The original failure is the cause. */
50
+ assertHealthy() {
51
+ if (__classPrivateFieldGet(this, _PersistenceQueue_failure, "f")) {
52
+ throw new DatabaseOperationError("Persistence failed; this composition accepts no more commits", {
53
+ cause: __classPrivateFieldGet(this, _PersistenceQueue_failure, "f").error,
54
+ });
55
+ }
56
+ }
57
+ /** Wait until everything enqueued before this call is durable. Halting cancels only the wait. */
58
+ *flushed() {
59
+ const settled = __classPrivateFieldGet(this, _PersistenceQueue_instances, "m", _PersistenceQueue_settled).call(this);
60
+ yield* call(() => settled);
61
+ }
62
+ /** Like `flushed`, but a halted caller still waits for the queue and still reports its failure. */
63
+ *joined() {
64
+ const settled = __classPrivateFieldGet(this, _PersistenceQueue_instances, "m", _PersistenceQueue_settled).call(this);
65
+ yield* call(function* () {
66
+ yield* ensure(() => call(() => settled));
67
+ yield* call(() => settled);
68
+ });
69
+ }
70
+ }
71
+ _PersistenceQueue_tail = new WeakMap(), _PersistenceQueue_failure = new WeakMap(), _PersistenceQueue_instances = new WeakSet(), _PersistenceQueue_append = function _PersistenceQueue_append(task, always) {
72
+ __classPrivateFieldSet(this, _PersistenceQueue_tail, __classPrivateFieldGet(this, _PersistenceQueue_tail, "f").then(async () => {
73
+ if (__classPrivateFieldGet(this, _PersistenceQueue_failure, "f") && !always)
74
+ return;
75
+ try {
76
+ await task();
77
+ }
78
+ catch (error) {
79
+ __classPrivateFieldSet(this, _PersistenceQueue_failure, __classPrivateFieldGet(this, _PersistenceQueue_failure, "f") ?? { error }, "f");
80
+ }
81
+ }), "f");
82
+ }, _PersistenceQueue_settled = function _PersistenceQueue_settled() {
83
+ return __classPrivateFieldGet(this, _PersistenceQueue_tail, "f").then(() => {
84
+ if (__classPrivateFieldGet(this, _PersistenceQueue_failure, "f"))
85
+ throw __classPrivateFieldGet(this, _PersistenceQueue_failure, "f").error;
86
+ });
87
+ };
88
+ function sameValue(a, c) {
89
+ return a === null || c === null ? a === c : bytesEqual(a, c);
90
+ }
91
+ /** Collapse a commit's writes to the first prior and latest state of each row identity. */
92
+ function netRows(changes) {
93
+ const net = new Map();
94
+ for (const change of changes) {
95
+ if (change.kind !== "row")
96
+ continue;
97
+ const duplicate = change.dupsort ? bytesHex((change.before ?? change.after)) : "";
98
+ const identity = `${bytesHex(change.key)}/${duplicate}/${change.table}`;
99
+ const seen = net.get(identity);
100
+ if (seen) {
101
+ seen.after = change.after;
102
+ }
103
+ else {
104
+ net.set(identity, { ...change });
105
+ }
106
+ }
107
+ return [...net.values()].filter((row) => !sameValue(row.before, row.after));
108
+ }
109
+ /** The version a commit leaves behind, or `undefined` when it ends where it began. */
110
+ function netVersion(changes) {
111
+ const versions = changes.filter((change) => change.kind === "version");
112
+ const first = versions.at(0);
113
+ const last = versions.at(-1);
114
+ return first && last && first.before !== last.after ? last.after : undefined;
115
+ }
116
+ /**
117
+ * `MemStore` mirror whose commits persist through a `Persistence` adapter.
118
+ *
119
+ * After the queue latches, a commit already in the mirror stays there and stays
120
+ * readable even though it was never persisted, and every later transaction
121
+ * throws before touching the mirror, so the mirror stops changing. The durable
122
+ * state is a prefix of the commit sequence. Recovery is a new composition, with
123
+ * a new queue, loading that prefix; there is no retry.
124
+ */
125
+ export class WebDBer extends MemStore {
126
+ constructor(options, persistence, queue) {
127
+ super(options);
128
+ _WebDBer_instances.add(this);
129
+ _WebDBer_persistence.set(this, void 0);
130
+ _WebDBer_queue.set(this, void 0);
131
+ /** Tables not yet carried by a batch, so an unwritten table still persists its dupsort flag. */
132
+ _WebDBer_pendingTables.set(this, new Map());
133
+ _WebDBer_connected.set(this, false);
134
+ __classPrivateFieldSet(this, _WebDBer_persistence, persistence, "f");
135
+ __classPrivateFieldSet(this, _WebDBer_queue, queue, "f");
136
+ }
137
+ /**
138
+ * Join the queue, then bulk-load every persisted table before returning, so
139
+ * reads never suspend. A latched queue refuses, reporting its failure.
140
+ */
141
+ *reopen(options = {}) {
142
+ yield* this.close(options.clear ?? false);
143
+ const persistence = __classPrivateFieldGet(this, _WebDBer_persistence, "f");
144
+ __classPrivateFieldSet(this, _WebDBer_connected, true, "f");
145
+ const meta = yield* call(() => persistence.meta());
146
+ const tables = [];
147
+ for (const { name, dupsort } of meta.tables) {
148
+ tables.push({ name, dupsort, rows: yield* call(() => persistence.load(name)) });
149
+ }
150
+ this.loadContents(tables, meta.version);
151
+ return yield* super.reopen(options);
152
+ }
153
+ /**
154
+ * Stop accepting work, drain and join the queue even when cancelled, and
155
+ * report any failure. A latched store is neither cleared nor reusable, and
156
+ * every later close reports the same failure.
157
+ */
158
+ *close(clear = false) {
159
+ if (clear) {
160
+ __classPrivateFieldGet(this, _WebDBer_pendingTables, "f").clear();
161
+ }
162
+ else if (this.opened && !this.readonly) {
163
+ __classPrivateFieldGet(this, _WebDBer_instances, "m", _WebDBer_carryPendingTables).call(this);
164
+ }
165
+ yield* super.close();
166
+ const persistence = __classPrivateFieldGet(this, _WebDBer_persistence, "f");
167
+ if (__classPrivateFieldGet(this, _WebDBer_connected, "f")) {
168
+ __classPrivateFieldSet(this, _WebDBer_connected, false, "f");
169
+ __classPrivateFieldGet(this, _WebDBer_queue, "f").release(() => persistence.close());
170
+ }
171
+ if (clear)
172
+ __classPrivateFieldGet(this, _WebDBer_queue, "f").enqueue(() => persistence.clear());
173
+ yield* __classPrivateFieldGet(this, _WebDBer_queue, "f").joined();
174
+ if (clear)
175
+ yield* super.close(true);
176
+ return true;
177
+ }
178
+ /** Bind a table; a new one is physically created by the batch that first carries it. */
179
+ openTable(name, options = {}) {
180
+ if (this.readonly || !this.opened || !name || this.hasTable(name))
181
+ return super.openTable(name, options);
182
+ __classPrivateFieldGet(this, _WebDBer_queue, "f").assertHealthy();
183
+ const table = super.openTable(name, options);
184
+ __classPrivateFieldGet(this, _WebDBer_pendingTables, "f").set(name, options.dupsort ?? false);
185
+ return table;
186
+ }
187
+ transaction(fn) {
188
+ this.assertOpen();
189
+ __classPrivateFieldGet(this, _WebDBer_queue, "f").assertHealthy();
190
+ return super.transaction(fn);
191
+ }
192
+ /** Completes when every earlier commit in this composition is durable, or fails with its recorded failure. */
193
+ *flushed() {
194
+ this.assertOpen();
195
+ if (!this.readonly)
196
+ __classPrivateFieldGet(this, _WebDBer_instances, "m", _WebDBer_carryPendingTables).call(this);
197
+ yield* __classPrivateFieldGet(this, _WebDBer_queue, "f").flushed();
198
+ }
199
+ committed(changes) {
200
+ const rows = netRows(changes);
201
+ const version = netVersion(changes);
202
+ if (rows.length === 0 && version === undefined)
203
+ return;
204
+ const copy = (bytes) => new Uint8Array(bytes);
205
+ __classPrivateFieldGet(this, _WebDBer_instances, "m", _WebDBer_enqueue).call(this, {
206
+ tables: __classPrivateFieldGet(this, _WebDBer_instances, "m", _WebDBer_takePendingTables).call(this),
207
+ ...(version === undefined ? {} : { version }),
208
+ puts: rows.filter(({ after }) => after !== null).map(({ table, key, after }) => ({
209
+ table,
210
+ key: copy(key),
211
+ value: copy(after),
212
+ })),
213
+ deletes: rows.filter(({ after }) => after === null).map(({ table, dupsort, key, before }) => ({
214
+ table,
215
+ key: copy(key),
216
+ ...(dupsort ? { value: copy(before) } : {}),
217
+ })),
218
+ });
219
+ }
220
+ }
221
+ _WebDBer_persistence = new WeakMap(), _WebDBer_queue = new WeakMap(), _WebDBer_pendingTables = new WeakMap(), _WebDBer_connected = new WeakMap(), _WebDBer_instances = new WeakSet(), _WebDBer_enqueue = function _WebDBer_enqueue(batch) {
222
+ const persistence = __classPrivateFieldGet(this, _WebDBer_persistence, "f");
223
+ __classPrivateFieldGet(this, _WebDBer_queue, "f").enqueue(() => persistence.write(batch));
224
+ }, _WebDBer_takePendingTables = function _WebDBer_takePendingTables() {
225
+ const tables = [...__classPrivateFieldGet(this, _WebDBer_pendingTables, "f")].filter(([name]) => this.hasTable(name));
226
+ __classPrivateFieldGet(this, _WebDBer_pendingTables, "f").clear();
227
+ return tables.map(([name, dupsort]) => ({ name, dupsort }));
228
+ }, _WebDBer_carryPendingTables = function _WebDBer_carryPendingTables() {
229
+ const tables = __classPrivateFieldGet(this, _WebDBer_instances, "m", _WebDBer_takePendingTables).call(this);
230
+ if (tables.length > 0)
231
+ __classPrivateFieldGet(this, _WebDBer_instances, "m", _WebDBer_enqueue).call(this, { tables, puts: [], deletes: [] });
232
+ };
233
+ /** A `StoreOpener` of `WebDBer`s bound to one queue, which is what makes a composition one commit order. */
234
+ export class WebStoreOpener {
235
+ constructor(persistenceFor) {
236
+ Object.defineProperty(this, "persistenceFor", {
237
+ enumerable: true,
238
+ configurable: true,
239
+ writable: true,
240
+ value: persistenceFor
241
+ });
242
+ Object.defineProperty(this, "queue", {
243
+ enumerable: true,
244
+ configurable: true,
245
+ writable: true,
246
+ value: new PersistenceQueue()
247
+ });
248
+ }
249
+ create(family, identity) {
250
+ return new WebDBer(identity, this.persistenceFor(family, identity), this.queue);
251
+ }
252
+ }
@@ -155,7 +155,7 @@ export class Broker {
155
155
  if (!scan) {
156
156
  const start = encode(`${typ}.`), ceiling = encode(`${typ}/`);
157
157
  let tail;
158
- for (const key of this.escrowdb.sdb.getKeys({ start: ceiling, end: start, reverse: true, limit: 1 })) {
158
+ for (const key of this.db.scanKeys(this.escrowdb.sdb, { start: ceiling, end: start, reverse: true, limit: 1 })) {
159
159
  tail = key.slice();
160
160
  }
161
161
  if (!tail)
@@ -164,7 +164,7 @@ export class Broker {
164
164
  this.retryScans.set(typ, scan);
165
165
  }
166
166
  const rows = [];
167
- for (const key of this.escrowdb.sdb.getKeys({ start: scan.start, end: scan.end, limit: maxRows })) {
167
+ for (const key of this.db.scanKeys(this.escrowdb.sdb, { start: scan.start, end: scan.end, limit: maxRows })) {
168
168
  rows.push(key.slice());
169
169
  }
170
170
  for (const key of rows) {
@@ -3,7 +3,7 @@ import { b, collectPayload, concatBytes, Counter, nestedPayload, parseBytes, t,
3
3
  import { suffix, unsuffix } from "../core/keys.js";
4
4
  /** Read one physical row and close the LMDB key cursor before any caller suspension. */
5
5
  function nextRow(db, table, said, ordinal) {
6
- for (const key of table.sdb.getKeys({ start: suffix(b(said), ordinal) })) {
6
+ for (const key of db.scanKeys(table.sdb, { start: suffix(b(said), ordinal) })) {
7
7
  const [owner, index] = unsuffix(key);
8
8
  if (t(owner) !== said)
9
9
  return null;
@@ -16,8 +16,9 @@ function nextRow(db, table, said, ordinal) {
16
16
  }
17
17
  /** Test row presence without hydrating a potentially large wire value. */
18
18
  export function hasNests(db, said, ordinal = 0) {
19
- for (const key of db.enst.sdb.getKeys({ start: suffix(b(said), ordinal) }))
19
+ for (const key of db.scanKeys(db.enst.sdb, { start: suffix(b(said), ordinal) })) {
20
20
  return t(unsuffix(key)[0]) === said;
21
+ }
21
22
  return false;
22
23
  }
23
24
  /** Serialize resident children before the caller enters its synchronous evidence writer. */
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Browser IndexedDB backend surface for `keri-ts/db/indexeddb`.
3
+ *
4
+ * Kept off `keri-ts/db` because `IndexedDbPersistence` names DOM types
5
+ * (`IDBFactory`, `IDBKeyRange`) that Node consumers should not have to type-check.
6
+ */
7
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
8
+ if (kind === "m") throw new TypeError("Private method is not writable");
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
11
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
12
+ };
13
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
14
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
15
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
16
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
17
+ };
18
+ var _LockedWebDBer_instances, _LockedWebDBer_group, _LockedWebDBer_identity, _LockedWebDBer_ref, _LockedWebDBer_reopening, _LockedWebDBer_letGo, _LockedStoreOpener_group;
19
+ import { call } from "effection";
20
+ import { IndexedDbPersistence } from "./core/indexeddb-persistence.js";
21
+ import { WebDBer, WebStoreOpener } from "./core/webdber.js";
22
+ import { acquireStoreLock, StoreLockGroup, StoreLockHeldError, storeLockKey, StoreLockUnsupportedError, } from "./store-lock.js";
23
+ export { acquireStoreLock, IndexedDbPersistence, StoreLockHeldError, storeLockKey, StoreLockUnsupportedError, };
24
+ /** A `WebDBer` that holds a reference on its opener's lock for as long as it is open. */
25
+ class LockedWebDBer extends WebDBer {
26
+ constructor(identity, persistence, queue, group) {
27
+ super(identity, persistence, queue);
28
+ _LockedWebDBer_instances.add(this);
29
+ _LockedWebDBer_group.set(this, void 0);
30
+ _LockedWebDBer_identity.set(this, void 0);
31
+ _LockedWebDBer_ref.set(this, void 0);
32
+ _LockedWebDBer_reopening.set(this, false);
33
+ __classPrivateFieldSet(this, _LockedWebDBer_group, group, "f");
34
+ __classPrivateFieldSet(this, _LockedWebDBer_identity, identity, "f");
35
+ }
36
+ /** Take the lock before `WebDBer.reopen` loads anything; any failure or refusal to open lets it go. */
37
+ *reopen(options = {}) {
38
+ // Assigned inside the promise so a halt while waiting cannot orphan the reference.
39
+ yield* call(async () => {
40
+ __classPrivateFieldSet(this, _LockedWebDBer_ref, __classPrivateFieldGet(this, _LockedWebDBer_ref, "f") ?? await __classPrivateFieldGet(this, _LockedWebDBer_group, "f").acquire(__classPrivateFieldGet(this, _LockedWebDBer_identity, "f")), "f");
41
+ });
42
+ __classPrivateFieldSet(this, _LockedWebDBer_reopening, true, "f");
43
+ let opened = false;
44
+ try {
45
+ opened = yield* super.reopen(options);
46
+ return opened;
47
+ }
48
+ finally {
49
+ __classPrivateFieldSet(this, _LockedWebDBer_reopening, false, "f");
50
+ if (!opened)
51
+ yield* __classPrivateFieldGet(this, _LockedWebDBer_instances, "m", _LockedWebDBer_letGo).call(this);
52
+ }
53
+ }
54
+ /** Close, then release the lock even when closing fails. `reopen`'s own inner close keeps it. */
55
+ *close(clear = false) {
56
+ try {
57
+ return yield* super.close(clear);
58
+ }
59
+ finally {
60
+ if (!__classPrivateFieldGet(this, _LockedWebDBer_reopening, "f"))
61
+ yield* __classPrivateFieldGet(this, _LockedWebDBer_instances, "m", _LockedWebDBer_letGo).call(this);
62
+ }
63
+ }
64
+ }
65
+ _LockedWebDBer_group = new WeakMap(), _LockedWebDBer_identity = new WeakMap(), _LockedWebDBer_ref = new WeakMap(), _LockedWebDBer_reopening = new WeakMap(), _LockedWebDBer_instances = new WeakSet(), _LockedWebDBer_letGo = function* _LockedWebDBer_letGo() {
66
+ const ref = __classPrivateFieldGet(this, _LockedWebDBer_ref, "f");
67
+ __classPrivateFieldSet(this, _LockedWebDBer_ref, undefined, "f");
68
+ if (ref)
69
+ yield* call(() => ref.release());
70
+ };
71
+ /** `WebStoreOpener` whose stores share one reference-counted lock per store identity. */
72
+ class LockedStoreOpener extends WebStoreOpener {
73
+ constructor(persistenceFor, locks) {
74
+ super(persistenceFor);
75
+ _LockedStoreOpener_group.set(this, void 0);
76
+ __classPrivateFieldSet(this, _LockedStoreOpener_group, new StoreLockGroup(locks), "f");
77
+ }
78
+ create(family, identity) {
79
+ return new LockedWebDBer(identity, this.persistenceFor(family, identity), this.queue, __classPrivateFieldGet(this, _LockedStoreOpener_group, "f"));
80
+ }
81
+ }
82
+ _LockedStoreOpener_group = new WeakMap();
83
+ /**
84
+ * A `WebStoreOpener` whose stores persist to IndexedDB, one database per store
85
+ * family and identity. Inject `factory` and `keyRange` together outside a browser.
86
+ *
87
+ * Single-writer by default: the first store to open an identity (`base`, `name`, `temp`) takes a
88
+ * Web Locks lock, shared by every family the opener creates for it and released when the last of
89
+ * them closes. A second opener, tab or window on that identity is refused with
90
+ * `StoreLockHeldError`, and an engine without `navigator.locks` with `StoreLockUnsupportedError`;
91
+ * nothing runs unlocked unless `unsafeSkipStoreLock` says so.
92
+ */
93
+ export function indexedDbOpener(options = {}) {
94
+ const persistenceFor = (family, identity) => new IndexedDbPersistence(family, identity, options.factory, options.keyRange);
95
+ return options.unsafeSkipStoreLock
96
+ ? new WebStoreOpener(persistenceFor)
97
+ : new LockedStoreOpener(persistenceFor, options.locks === undefined ? {} : { locks: options.locks });
98
+ }