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
@@ -2,7 +2,7 @@ import { Cipher, MtrDex, NumberPrimitive, Prefixer, Salter, Signer, Verfer, } fr
2
2
  import { DatabaseNotOpenError, DatabaseOperationError } from "../core/errors.js";
3
3
  import { consoleLogger } from "../core/logger.js";
4
4
  import { RawRecord } from "../core/records.js";
5
- import { LMDBer } from "./core/lmdber.js";
5
+ import { StoreOwner } from "./core/store-owner.js";
6
6
  import { Komer } from "./koming.js";
7
7
  import { CatCesrIoSetSuber, CesrSuber, CryptSignerSuber, Suber } from "./subing.js";
8
8
  /**
@@ -101,14 +101,9 @@ function reencryptSalt(salt, encrypter, decrypter) {
101
101
  * named handles
102
102
  * - compatibility mode supports KERIpy `.keri/ks` layout visibility
103
103
  */
104
- export class Keeper {
105
- constructor(options = {}) {
106
- Object.defineProperty(this, "lmdber", {
107
- enumerable: true,
108
- configurable: true,
109
- writable: true,
110
- value: void 0
111
- });
104
+ export class Keeper extends StoreOwner {
105
+ constructor(store, logger = consoleLogger) {
106
+ super(store);
112
107
  Object.defineProperty(this, "logger", {
113
108
  enumerable: true,
114
109
  configurable: true,
@@ -192,42 +187,7 @@ export class Keeper {
192
187
  writable: true,
193
188
  value: void 0
194
189
  });
195
- this.logger = options.logger ?? consoleLogger;
196
- const compat = options.compat ?? false;
197
- this.lmdber = new LMDBer(options, {
198
- tailDirPath: Keeper.TailDirPath,
199
- cleanTailDirPath: "keri/clean/ks",
200
- altTailDirPath: compat
201
- ? Keeper.CompatAltTailDirPath
202
- : Keeper.AltTailDirPath,
203
- altCleanTailDirPath: compat ? ".keri/clean/ks" : ".tufa/clean/ks",
204
- tempPrefix: Keeper.TempPrefix,
205
- maxNamedDBs: Keeper.MaxNamedDBs,
206
- });
207
- }
208
- /** Expose the resolved keeper database name delegated from the root LMDBer. */
209
- get name() {
210
- return this.lmdber.name;
211
- }
212
- /** Expose the resolved keeper base prefix delegated from the root LMDBer. */
213
- get base() {
214
- return this.lmdber.base;
215
- }
216
- /** Report whether the keeper LMDB environment and named subdb surface are open. */
217
- get opened() {
218
- return this.lmdber.opened;
219
- }
220
- /** Report whether the keeper environment is opened in read-only mode. */
221
- get readonly() {
222
- return this.lmdber.readonly;
223
- }
224
- /** Report whether this keeper uses a temporary backing directory. */
225
- get temp() {
226
- return this.lmdber.temp;
227
- }
228
- /** Expose the resolved filesystem path for the keeper environment, when open. */
229
- get path() {
230
- return this.lmdber.path;
190
+ this.logger = logger;
231
191
  }
232
192
  /**
233
193
  * Reopen the keeper environment and bind the KERIpy-style named subdbs.
@@ -238,7 +198,7 @@ export class Keeper {
238
198
  * flows have not yet exercised it deeply.
239
199
  */
240
200
  *reopen(options = {}) {
241
- const opened = yield* this.lmdber.reopen(options);
201
+ const opened = yield* this.store.reopen(options);
242
202
  if (!opened)
243
203
  return false;
244
204
  try {
@@ -246,62 +206,62 @@ export class Keeper {
246
206
  // `aeid` anchors the encrypter/decrypter used to protect salts and
247
207
  // private keys, while `pidx`, `algo`, `salt`, and `tier` capture the
248
208
  // default root key-management settings.
249
- this.gbls = new Suber(this.lmdber, { subkey: "gbls." });
209
+ this.gbls = new Suber(this.store, { subkey: "gbls." });
250
210
  // Public-key to private-key secret material store.
251
211
  // Keys are fully qualified public keys and values are the corresponding
252
212
  // fully qualified private keys.
253
- this.pris = new CryptSignerSuber(this.lmdber, { subkey: "pris." });
213
+ this.pris = new CryptSignerSuber(this.store, { subkey: "pris." });
254
214
  // Group signing member tuples for one multisig prefix.
255
215
  // The stored tuple shape mirrors KERIpy's `(Prefixer, Number)` member
256
216
  // identifier set used by GroupSignifyHab flows.
257
- this.smids = new CatCesrIoSetSuber(this.lmdber, {
217
+ this.smids = new CatCesrIoSetSuber(this.store, {
258
218
  subkey: "smids.",
259
219
  ctor: [Prefixer, NumberPrimitive],
260
220
  });
261
221
  // Group rotating member tuples for one multisig prefix.
262
222
  // The stored tuple shape mirrors KERIpy's `(Prefixer, Number)` member
263
223
  // identifier set used by GroupSignifyHab flows.
264
- this.rmids = new CatCesrIoSetSuber(this.lmdber, {
224
+ this.rmids = new CatCesrIoSetSuber(this.store, {
265
225
  subkey: "rmids.",
266
226
  ctor: [Prefixer, NumberPrimitive],
267
227
  });
268
228
  // Prefix index keyed by the first public key in a key sequence.
269
229
  // Values are the identifier prefix, or the first public key for
270
230
  // temporary prefixes, matching the KERIpy keeper index contract.
271
- this.pres = new CesrSuber(this.lmdber, {
231
+ this.pres = new CesrSuber(this.store, {
272
232
  subkey: "pres.",
273
233
  ctor: Prefixer,
274
234
  });
275
235
  // Root derivation parameters for one managed identifier prefix.
276
- this.prms = new Komer(this.lmdber, {
236
+ this.prms = new Komer(this.store, {
277
237
  subkey: "prms.",
278
238
  recordClass: PrePrm,
279
239
  });
280
240
  // Old/current/next key situation for one managed identifier prefix.
281
- this.sits = new Komer(this.lmdber, {
241
+ this.sits = new Komer(this.store, {
282
242
  subkey: "sits.",
283
243
  recordClass: PreSit,
284
244
  });
285
245
  // Replayable public-key sets keyed by `(prefix, ridx)`.
286
246
  // This enables lookup of the current signing keys after each rotation so
287
247
  // establishment events can be replayed in order.
288
- this.pubs = new Komer(this.lmdber, {
248
+ this.pubs = new Komer(this.store, {
289
249
  subkey: "pubs.",
290
250
  recordClass: PubSet,
291
251
  });
292
252
  // Encrypted next private keys used by group-signify keeper flows.
293
253
  // KERIpy notes these are not yet broadly exercised outside that path.
294
- this.prxs = new CesrSuber(this.lmdber, {
254
+ this.prxs = new CesrSuber(this.store, {
295
255
  subkey: "prxs.",
296
256
  ctor: Cipher,
297
257
  });
298
258
  // Encrypted next-key commitments used by group-signify keeper flows.
299
259
  // KERIpy notes these are not yet broadly exercised outside that path.
300
- this.nxts = new CesrSuber(this.lmdber, {
260
+ this.nxts = new CesrSuber(this.store, {
301
261
  subkey: "nxts.",
302
262
  ctor: Cipher,
303
263
  });
304
- this.rroots = new CesrSuber(this.lmdber, { subkey: "rroots.", ctor: Cipher });
264
+ this.rroots = new CesrSuber(this.store, { subkey: "rroots.", ctor: Cipher });
305
265
  return true;
306
266
  }
307
267
  catch (error) {
@@ -311,7 +271,7 @@ export class Keeper {
311
271
  }
312
272
  /** Close the underlying keeper LMDB environment. */
313
273
  *close(clear = false) {
314
- return yield* this.lmdber.close(clear);
274
+ return yield* this.store.close(clear);
315
275
  }
316
276
  /**
317
277
  * Read one keeper-global string value from `gbls.`.
@@ -337,13 +297,12 @@ export class Keeper {
337
297
  changeEncryption({ currentAeid, aeid, encrypter, decrypter }) {
338
298
  if (this.readonly)
339
299
  throw new DatabaseOperationError("Cannot change encryption in a read-only keeper");
340
- const env = this.lmdber.env;
341
- if (!env)
300
+ if (!this.store.opened)
342
301
  throw new DatabaseNotOpenError("Keeper environment is not open");
343
- if (this.lmdber.inWriteTransaction) {
302
+ if (this.store.inWriteTransaction) {
344
303
  throw new DatabaseOperationError("Keeper encryption change must own its write transaction");
345
304
  }
346
- env.transactionSync(() => {
305
+ this.store.transaction(() => {
347
306
  const storedAeid = this.getGbls("aeid");
348
307
  if ((storedAeid ?? "") !== currentAeid) {
349
308
  throw new DatabaseOperationError("Keeper AEID changed before encryption migration; reopen the manager");
@@ -384,21 +343,29 @@ export class Keeper {
384
343
  throw new DatabaseOperationError("Keeper AEID write failed");
385
344
  });
386
345
  }
387
- /** Retain an immutable root under the authenticated policy, owning its commit. */
388
- retainRegistryRoot(keys, root, currentAeid, encrypter, decrypter) {
346
+ /**
347
+ * Retain a root under the authenticated policy, owning its commit. Immutable unless `overwrite`, which the
348
+ * caller sets only for a root it has established was never used; the old root then stays until this write.
349
+ */
350
+ retainRegistryRoot(keys, root, currentAeid, encrypter, decrypter, overwrite = false) {
389
351
  if (this.readonly)
390
352
  throw new DatabaseOperationError("Cannot retain registry roots in a read-only keeper");
391
- const env = this.lmdber.env;
392
- if (!env)
353
+ if (!this.store.opened)
393
354
  throw new DatabaseNotOpenError("Keeper environment is not open");
394
- if (this.lmdber.inWriteTransaction) {
355
+ if (this.store.inWriteTransaction) {
395
356
  throw new DatabaseOperationError("Registry root retention must own its write transaction");
396
357
  }
397
- return env.transactionSync(() => {
358
+ return this.store.transaction(() => {
398
359
  if (this.getGbls("aeid") !== currentAeid) {
399
360
  throw new DatabaseOperationError("Keeper AEID changed before registry root retention; reopen the manager");
400
361
  }
401
362
  const old = this.rroots.get(keys);
363
+ if (old && overwrite) {
364
+ if (!this.rroots.pin(keys, encrypter.encrypt({ prim: root }))) {
365
+ throw new DatabaseOperationError("Keeper registry root write failed");
366
+ }
367
+ return true;
368
+ }
402
369
  if (old) {
403
370
  const retained = decrypter.decrypt({ cipher: old, ctor: Salter });
404
371
  if (retained.qb64 !== root.qb64) {
@@ -520,29 +487,12 @@ export class Keeper {
520
487
  return this.rmids.get(pre);
521
488
  }
522
489
  }
523
- Object.defineProperty(Keeper, "TailDirPath", {
490
+ /** Placement of this store kind. */
491
+ Object.defineProperty(Keeper, "Family", {
524
492
  enumerable: true,
525
493
  configurable: true,
526
494
  writable: true,
527
- value: "keri/ks"
528
- });
529
- Object.defineProperty(Keeper, "AltTailDirPath", {
530
- enumerable: true,
531
- configurable: true,
532
- writable: true,
533
- value: ".tufa/ks"
534
- });
535
- Object.defineProperty(Keeper, "CompatAltTailDirPath", {
536
- enumerable: true,
537
- configurable: true,
538
- writable: true,
539
- value: ".keri/ks"
540
- });
541
- Object.defineProperty(Keeper, "TempPrefix", {
542
- enumerable: true,
543
- configurable: true,
544
- writable: true,
545
- value: "keri_ks_"
495
+ value: { tail: "ks", maxTables: 24 }
546
496
  });
547
497
  Object.defineProperty(Keeper, "MaxNamedDBs", {
548
498
  enumerable: true,
@@ -550,38 +500,3 @@ Object.defineProperty(Keeper, "MaxNamedDBs", {
550
500
  writable: true,
551
501
  value: 24
552
502
  });
553
- /** Constructor-safe async factory for a fully reopened `Keeper`. */
554
- export function* createKeeper(options = {}) {
555
- const keeper = new Keeper(options);
556
- let delivered = false;
557
- let failure;
558
- try {
559
- const opened = yield* keeper.reopen(options);
560
- if (!opened) {
561
- throw new DatabaseNotOpenError("Failed to open Keeper");
562
- }
563
- delivered = true;
564
- return keeper;
565
- }
566
- catch (error) {
567
- failure = { error };
568
- throw error;
569
- }
570
- finally {
571
- if (!delivered) {
572
- try {
573
- yield* keeper.close();
574
- }
575
- catch (error) {
576
- if (failure) {
577
- // deno-lint-ignore no-unsafe-finally -- Preserve the operation failure alongside shutdown failure.
578
- throw new AggregateError([failure.error, error], "Database acquisition and close failed", {
579
- cause: failure.error,
580
- });
581
- }
582
- // deno-lint-ignore no-unsafe-finally -- A shutdown failure must propagate.
583
- throw error;
584
- }
585
- }
586
- }
587
- }
@@ -88,7 +88,7 @@ export class KomerBase {
88
88
  value: void 0
89
89
  });
90
90
  this.db = db;
91
- this.sdb = this.db.openDB(subkey, dupsort);
91
+ this.sdb = this.db.openTable(subkey, { dupsort });
92
92
  this.sep = sep;
93
93
  this.kind = assertKomerKind(kind);
94
94
  this.recordClass = recordClass;
@@ -0,0 +1,68 @@
1
+ /**
2
+ * LMDB-backed construction of the domain stores.
3
+ *
4
+ * These helpers bind each `StoreOwner` to an `LMDBer` at its established paths.
5
+ * Everything here reaches the native addon; backend-neutral callers use the
6
+ * store classes with an injected `DBer` instead.
7
+ */
8
+ import { RegBaser } from "../acdc/regbasing.js";
9
+ import { adoptRegistry } from "../acdc/registering.js";
10
+ import { ValidationError } from "../core/errors.js";
11
+ import { Baser } from "./basing.js";
12
+ import { lmdbDefaultsFor } from "./core/lmdb-opener.js";
13
+ import { LMDBer } from "./core/lmdber.js";
14
+ import { openOwner } from "./core/store-owner.js";
15
+ import { Keeper } from "./keeping.js";
16
+ import { Mailboxer } from "./mailbox/mailboxing.js";
17
+ import { Noter } from "./noting.js";
18
+ import { Reger } from "./reger.js";
19
+ /** Construct a closed LMDB-backed `Baser` at its established paths. */
20
+ export function lmdbBaser({ compat, ...options } = {}) {
21
+ return new Baser(new LMDBer(options, lmdbDefaultsFor(Baser.Family, compat)), options.logger);
22
+ }
23
+ /** Constructor-safe async factory for a fully reopened `Baser`. */
24
+ export function* createBaser(options = {}) {
25
+ return yield* openOwner(lmdbBaser(options), "Baser", options);
26
+ }
27
+ /** Construct a closed LMDB-backed `Keeper` at its established paths. */
28
+ export function lmdbKeeper({ compat, ...options } = {}) {
29
+ return new Keeper(new LMDBer(options, lmdbDefaultsFor(Keeper.Family, compat)), options.logger);
30
+ }
31
+ /** Constructor-safe async factory for a fully reopened `Keeper`. */
32
+ export function* createKeeper(options = {}) {
33
+ return yield* openOwner(lmdbKeeper(options), "Keeper", options);
34
+ }
35
+ /** Construct a closed LMDB-backed `Noter` at its established paths. */
36
+ export function lmdbNoter({ compat, ...options } = {}) {
37
+ return new Noter(new LMDBer(options, lmdbDefaultsFor(Noter.Family, compat)));
38
+ }
39
+ /** Open a notification sidecar and return the ready-to-use databaser. */
40
+ export function* createNoter(options = {}) {
41
+ return yield* openOwner(lmdbNoter(options), "Noter", options);
42
+ }
43
+ /** Construct a closed LMDB-backed `Mailboxer` at its established paths. */
44
+ export function lmdbMailboxer({ compat, ...options } = {}) {
45
+ return new Mailboxer(new LMDBer(options, lmdbDefaultsFor(Mailboxer.Family, compat)));
46
+ }
47
+ /**
48
+ * Open a mailbox environment and return the ready-to-use databaser.
49
+ *
50
+ * Compatibility rule:
51
+ * - explicit mailbox opens stay strict
52
+ * - missing additive sidecars are tolerated only by higher-level habery open
53
+ * flows that are inspecting compat stores readonly
54
+ */
55
+ export function* createMailboxer(options = {}) {
56
+ return yield* openOwner(lmdbMailboxer(options), "Mailboxer", options);
57
+ }
58
+ /** Transfer a ready `Reger` to its caller, closing unreturned acquisitions on failure or cancellation. */
59
+ export function* createReger({ compat, ...options } = {}) {
60
+ const store = new LMDBer(options, lmdbDefaultsFor(Reger.Family, compat));
61
+ return yield* openOwner(new Reger(store), "Reger", options);
62
+ }
63
+ /** Open a registry store on LMDB at its established paths; the reference web backend remains unsupported. */
64
+ export function* openLmdbRegistry({ web = false, reopen = true, compat, opener: _opener, ...options } = {}) {
65
+ if (web)
66
+ throw new ValidationError("web registry backend is not yet supported by V2 Regery");
67
+ return yield* adoptRegistry(new RegBaser(new LMDBer(options, lmdbDefaultsFor(RegBaser.Family, compat))), reopen);
68
+ }
@@ -0,0 +1,6 @@
1
+ /** LMDB backend surface: native stores, paths and the default opener. */
2
+ export { createHabery } from "../app/identity/lmdb-habery.js";
3
+ export * from "./core/lmdb-opener.js";
4
+ export * from "./core/lmdber.js";
5
+ export * from "./core/path-manager.js";
6
+ export * from "./lmdb-stores.js";
@@ -15,7 +15,7 @@
15
15
  */
16
16
  import { Diger, MtrDex } from "cesr-ts";
17
17
  import { DatabaseNotOpenError } from "../../core/errors.js";
18
- import { LMDBer } from "../core/lmdber.js";
18
+ import { StoreOwner } from "../core/store-owner.js";
19
19
  import { CesrOnSuber, Suber } from "../subing.js";
20
20
  /** Raw-byte value family used for stored mailbox message bodies. */
21
21
  class BytesSuber extends Suber {
@@ -39,19 +39,9 @@ class BytesSuber extends Suber {
39
39
  * - `.tpcs` stores `(topic, on) -> digest`
40
40
  * - `.msgs` stores `digest -> raw message bytes`
41
41
  */
42
- export class Mailboxer extends LMDBer {
43
- constructor(options = {}) {
44
- const compat = options.compat ?? false;
45
- super(options, {
46
- tailDirPath: Mailboxer.TailDirPath,
47
- cleanTailDirPath: "keri/clean/mbx",
48
- altTailDirPath: compat
49
- ? Mailboxer.CompatAltTailDirPath
50
- : Mailboxer.AltTailDirPath,
51
- altCleanTailDirPath: compat ? ".keri/clean/mbx" : ".tufa/clean/mbx",
52
- tempPrefix: Mailboxer.TempPrefix,
53
- maxNamedDBs: Mailboxer.MaxNamedDBs,
54
- });
42
+ export class Mailboxer extends StoreOwner {
43
+ constructor() {
44
+ super(...arguments);
55
45
  Object.defineProperty(this, "tpcs", {
56
46
  enumerable: true,
57
47
  configurable: true,
@@ -69,12 +59,12 @@ export class Mailboxer extends LMDBer {
69
59
  * Reopen the mailbox environment and bind the KERIpy-shaped named subdbs.
70
60
  */
71
61
  *reopen(options = {}) {
72
- const opened = yield* super.reopen(options);
62
+ const opened = yield* this.store.reopen(options);
73
63
  if (!opened) {
74
64
  return false;
75
65
  }
76
- this.tpcs = new CesrOnSuber(this, { subkey: "tpcs.", ctor: Diger });
77
- this.msgs = new BytesSuber(this, { subkey: "msgs." });
66
+ this.tpcs = new CesrOnSuber(this.store, { subkey: "tpcs.", ctor: Diger });
67
+ this.msgs = new BytesSuber(this.store, { subkey: "msgs." });
78
68
  return true;
79
69
  }
80
70
  /**
@@ -119,15 +109,14 @@ export class Mailboxer extends LMDBer {
119
109
  * one transaction; false publication is an invariant failure, not a duplicate.
120
110
  */
121
111
  storeMsg(topic, msg) {
122
- const env = this.env;
123
- if (!env)
112
+ if (!this.opened)
124
113
  throw new DatabaseNotOpenError("Mailbox environment is not open");
125
114
  const raw = typeof msg === "string" ? new TextEncoder().encode(msg) : msg;
126
115
  const dig = new Diger({
127
116
  raw: Diger.digest(raw, MtrDex.Blake3_256),
128
117
  code: MtrDex.Blake3_256,
129
118
  });
130
- return env.transactionSync(() => {
119
+ return this.transaction(() => {
131
120
  const on = this.appendToTopic(topic, dig);
132
121
  if (!Number.isSafeInteger(on) || on < 0)
133
122
  throw new Error("Mailbox topic publication failed");
@@ -152,52 +141,10 @@ export class Mailboxer extends LMDBer {
152
141
  }
153
142
  }
154
143
  }
155
- /** Default primary path for Tufa-owned mailbox environments. */
156
- Object.defineProperty(Mailboxer, "TailDirPath", {
157
- enumerable: true,
158
- configurable: true,
159
- writable: true,
160
- value: "keri/mbx"
161
- });
162
- /** Default alternate path for Tufa-owned mailbox environments. */
163
- Object.defineProperty(Mailboxer, "AltTailDirPath", {
164
- enumerable: true,
165
- configurable: true,
166
- writable: true,
167
- value: ".tufa/mbx"
168
- });
169
- /** Alternate path used when opening KERIpy-compatible mailbox stores. */
170
- Object.defineProperty(Mailboxer, "CompatAltTailDirPath", {
171
- enumerable: true,
172
- configurable: true,
173
- writable: true,
174
- value: ".keri/mbx"
175
- });
176
- Object.defineProperty(Mailboxer, "TempPrefix", {
177
- enumerable: true,
178
- configurable: true,
179
- writable: true,
180
- value: "keri_mbx_"
181
- });
182
- Object.defineProperty(Mailboxer, "MaxNamedDBs", {
144
+ /** Placement of this store kind. */
145
+ Object.defineProperty(Mailboxer, "Family", {
183
146
  enumerable: true,
184
147
  configurable: true,
185
148
  writable: true,
186
- value: 8
149
+ value: { tail: "mbx", maxTables: 8 }
187
150
  });
188
- /**
189
- * Open a mailbox environment and return the ready-to-use databaser.
190
- *
191
- * Compatibility rule:
192
- * - explicit mailbox opens stay strict
193
- * - missing additive sidecars are tolerated only by higher-level habery open
194
- * flows that are inspecting compat stores readonly
195
- */
196
- export function* createMailboxer(options = {}) {
197
- const mailboxer = new Mailboxer(options);
198
- const opened = yield* mailboxer.reopen(options);
199
- if (!opened) {
200
- throw new DatabaseNotOpenError("Failed to open Mailboxer");
201
- }
202
- return mailboxer;
203
- }
@@ -23,8 +23,7 @@ var _Notice_raw, _Notice_pad;
23
23
  * - higher-level notification policy lives in `app/notifying.ts`
24
24
  */
25
25
  import { Cigar, MtrDex, Salter } from "cesr-ts";
26
- import { DatabaseNotOpenError } from "../core/errors.js";
27
- import { LMDBer } from "./core/lmdber.js";
26
+ import { StoreOwner } from "./core/store-owner.js";
28
27
  import { CesrSuber, Suber } from "./subing.js";
29
28
  const textEncoder = new TextEncoder();
30
29
  const textDecoder = new TextDecoder();
@@ -128,20 +127,9 @@ class NoticeSuber extends Suber {
128
127
  * - `.nidx` stores `rid -> dt`
129
128
  * - `.ncigs` stores detached `Cigar`s for integrity verification
130
129
  */
131
- export class Noter extends LMDBer {
132
- /** Select `.tufa/not` by default while preserving `.keri/not` compat mode. */
133
- constructor(options = {}) {
134
- const compat = options.compat ?? false;
135
- super(options, {
136
- tailDirPath: Noter.TailDirPath,
137
- cleanTailDirPath: "keri/clean/not",
138
- altTailDirPath: compat
139
- ? Noter.CompatAltTailDirPath
140
- : Noter.AltTailDirPath,
141
- altCleanTailDirPath: compat ? ".keri/clean/not" : ".tufa/clean/not",
142
- tempPrefix: Noter.TempPrefix,
143
- maxNamedDBs: Noter.MaxNamedDBs,
144
- });
130
+ export class Noter extends StoreOwner {
131
+ constructor() {
132
+ super(...arguments);
145
133
  Object.defineProperty(this, "notes", {
146
134
  enumerable: true,
147
135
  configurable: true,
@@ -163,16 +151,16 @@ export class Noter extends LMDBer {
163
151
  }
164
152
  /** Open all notice, reverse-index, and detached-signature families. */
165
153
  *reopen(options = {}) {
166
- const opened = yield* super.reopen(options);
154
+ const opened = yield* this.store.reopen(options);
167
155
  if (!opened) {
168
156
  return false;
169
157
  }
170
- this.notes = new NoticeSuber(this, {
158
+ this.notes = new NoticeSuber(this.store, {
171
159
  subkey: "nots.",
172
160
  sep: "/",
173
161
  });
174
- this.nidx = new Suber(this, { subkey: "nidx." });
175
- this.ncigs = new CesrSuber(this, {
162
+ this.nidx = new Suber(this.store, { subkey: "nidx." });
163
+ this.ncigs = new CesrSuber(this.store, {
176
164
  subkey: "ncigs.",
177
165
  ctor: Cigar,
178
166
  });
@@ -249,42 +237,10 @@ export class Noter extends LMDBer {
249
237
  return pairs;
250
238
  }
251
239
  }
252
- Object.defineProperty(Noter, "TailDirPath", {
253
- enumerable: true,
254
- configurable: true,
255
- writable: true,
256
- value: "keri/not"
257
- });
258
- Object.defineProperty(Noter, "AltTailDirPath", {
240
+ /** Placement of this store kind. */
241
+ Object.defineProperty(Noter, "Family", {
259
242
  enumerable: true,
260
243
  configurable: true,
261
244
  writable: true,
262
- value: ".tufa/not"
245
+ value: { tail: "not", maxTables: 8 }
263
246
  });
264
- Object.defineProperty(Noter, "CompatAltTailDirPath", {
265
- enumerable: true,
266
- configurable: true,
267
- writable: true,
268
- value: ".keri/not"
269
- });
270
- Object.defineProperty(Noter, "TempPrefix", {
271
- enumerable: true,
272
- configurable: true,
273
- writable: true,
274
- value: "keri_not_"
275
- });
276
- Object.defineProperty(Noter, "MaxNamedDBs", {
277
- enumerable: true,
278
- configurable: true,
279
- writable: true,
280
- value: 8
281
- });
282
- /** Open a notification sidecar and return the ready-to-use databaser. */
283
- export function* createNoter(options = {}) {
284
- const noter = new Noter(options);
285
- const opened = yield* noter.reopen(options);
286
- if (!opened) {
287
- throw new DatabaseNotOpenError("Failed to open Noter");
288
- }
289
- return noter;
290
- }