@enbox/dwn-server 0.0.2 → 0.0.4

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 (309) hide show
  1. package/LICENSE +3 -2
  2. package/README.md +115 -215
  3. package/dist/esm/src/admin/activity-log.d.ts +44 -0
  4. package/dist/esm/src/admin/activity-log.d.ts.map +1 -0
  5. package/dist/esm/src/admin/activity-log.js +85 -0
  6. package/dist/esm/src/admin/activity-log.js.map +1 -0
  7. package/dist/esm/src/admin/admin-api.d.ts +61 -0
  8. package/dist/esm/src/admin/admin-api.d.ts.map +1 -0
  9. package/dist/esm/src/admin/admin-api.js +1047 -0
  10. package/dist/esm/src/admin/admin-api.js.map +1 -0
  11. package/dist/esm/src/admin/admin-auth.d.ts +9 -0
  12. package/dist/esm/src/admin/admin-auth.d.ts.map +1 -0
  13. package/dist/esm/src/admin/admin-auth.js +45 -0
  14. package/dist/esm/src/admin/admin-auth.js.map +1 -0
  15. package/dist/esm/src/admin/admin-store.d.ts +111 -0
  16. package/dist/esm/src/admin/admin-store.d.ts.map +1 -0
  17. package/dist/esm/src/admin/admin-store.js +376 -0
  18. package/dist/esm/src/admin/admin-store.js.map +1 -0
  19. package/dist/esm/src/admin/audit-log.d.ts +94 -0
  20. package/dist/esm/src/admin/audit-log.d.ts.map +1 -0
  21. package/dist/esm/src/admin/audit-log.js +220 -0
  22. package/dist/esm/src/admin/audit-log.js.map +1 -0
  23. package/dist/esm/src/admin/index.d.ts +10 -0
  24. package/dist/esm/src/admin/index.d.ts.map +1 -0
  25. package/dist/esm/src/admin/index.js +7 -0
  26. package/dist/esm/src/admin/index.js.map +1 -0
  27. package/dist/esm/src/admin/types.d.ts +306 -0
  28. package/dist/esm/src/admin/types.d.ts.map +1 -0
  29. package/dist/esm/src/admin/types.js +2 -0
  30. package/dist/esm/src/admin/types.js.map +1 -0
  31. package/dist/esm/src/admin/webhook-manager.d.ts +55 -0
  32. package/dist/esm/src/admin/webhook-manager.d.ts.map +1 -0
  33. package/dist/esm/src/admin/webhook-manager.js +184 -0
  34. package/dist/esm/src/admin/webhook-manager.js.map +1 -0
  35. package/dist/esm/src/config.d.ts +124 -9
  36. package/dist/esm/src/config.d.ts.map +1 -1
  37. package/dist/esm/src/config.js +155 -13
  38. package/dist/esm/src/config.js.map +1 -1
  39. package/dist/esm/src/connection/connection-manager.d.ts +32 -9
  40. package/dist/esm/src/connection/connection-manager.d.ts.map +1 -1
  41. package/dist/esm/src/connection/connection-manager.js +38 -5
  42. package/dist/esm/src/connection/connection-manager.js.map +1 -1
  43. package/dist/esm/src/connection/flow-controller.d.ts +53 -0
  44. package/dist/esm/src/connection/flow-controller.d.ts.map +1 -0
  45. package/dist/esm/src/connection/flow-controller.js +101 -0
  46. package/dist/esm/src/connection/flow-controller.js.map +1 -0
  47. package/dist/esm/src/connection/socket-connection.d.ts +54 -18
  48. package/dist/esm/src/connection/socket-connection.d.ts.map +1 -1
  49. package/dist/esm/src/connection/socket-connection.js +102 -40
  50. package/dist/esm/src/connection/socket-connection.js.map +1 -1
  51. package/dist/esm/src/delivery-service.d.ts +43 -0
  52. package/dist/esm/src/delivery-service.d.ts.map +1 -0
  53. package/dist/esm/src/delivery-service.js +574 -0
  54. package/dist/esm/src/delivery-service.js.map +1 -0
  55. package/dist/esm/src/dwn-error.d.ts +10 -1
  56. package/dist/esm/src/dwn-error.d.ts.map +1 -1
  57. package/dist/esm/src/dwn-error.js +9 -0
  58. package/dist/esm/src/dwn-error.js.map +1 -1
  59. package/dist/esm/src/dwn-server.d.ts +13 -6
  60. package/dist/esm/src/dwn-server.d.ts.map +1 -1
  61. package/dist/esm/src/dwn-server.js +199 -24
  62. package/dist/esm/src/dwn-server.js.map +1 -1
  63. package/dist/esm/src/http-api.d.ts +28 -13
  64. package/dist/esm/src/http-api.d.ts.map +1 -1
  65. package/dist/esm/src/http-api.js +649 -374
  66. package/dist/esm/src/http-api.js.map +1 -1
  67. package/dist/esm/src/index.d.ts +6 -2
  68. package/dist/esm/src/index.d.ts.map +1 -1
  69. package/dist/esm/src/index.js +4 -1
  70. package/dist/esm/src/index.js.map +1 -1
  71. package/dist/esm/src/json-rpc-api.js +2 -1
  72. package/dist/esm/src/json-rpc-api.js.map +1 -1
  73. package/dist/esm/src/json-rpc-handlers/dwn/process-message.d.ts.map +1 -1
  74. package/dist/esm/src/json-rpc-handlers/dwn/process-message.js +109 -7
  75. package/dist/esm/src/json-rpc-handlers/dwn/process-message.js.map +1 -1
  76. package/dist/esm/src/json-rpc-handlers/subscription/ack.d.ts +20 -0
  77. package/dist/esm/src/json-rpc-handlers/subscription/ack.d.ts.map +1 -0
  78. package/dist/esm/src/json-rpc-handlers/subscription/ack.js +41 -0
  79. package/dist/esm/src/json-rpc-handlers/subscription/ack.js.map +1 -0
  80. package/dist/esm/src/json-rpc-handlers/subscription/close.d.ts.map +1 -1
  81. package/dist/esm/src/json-rpc-handlers/subscription/close.js +1 -1
  82. package/dist/esm/src/json-rpc-handlers/subscription/close.js.map +1 -1
  83. package/dist/esm/src/json-rpc-handlers/subscription/index.d.ts +1 -0
  84. package/dist/esm/src/json-rpc-handlers/subscription/index.d.ts.map +1 -1
  85. package/dist/esm/src/json-rpc-handlers/subscription/index.js +1 -0
  86. package/dist/esm/src/json-rpc-handlers/subscription/index.js.map +1 -1
  87. package/dist/esm/src/lib/json-rpc-router.d.ts +25 -8
  88. package/dist/esm/src/lib/json-rpc-router.d.ts.map +1 -1
  89. package/dist/esm/src/lib/json-rpc-router.js.map +1 -1
  90. package/dist/esm/src/lib/sql-utils.d.ts +6 -0
  91. package/dist/esm/src/lib/sql-utils.d.ts.map +1 -0
  92. package/dist/esm/src/lib/sql-utils.js +8 -0
  93. package/dist/esm/src/lib/sql-utils.js.map +1 -0
  94. package/dist/esm/src/main.js +0 -6
  95. package/dist/esm/src/main.js.map +1 -1
  96. package/dist/esm/src/message-processed-hook.d.ts +35 -0
  97. package/dist/esm/src/message-processed-hook.d.ts.map +1 -0
  98. package/dist/esm/src/message-processed-hook.js +2 -0
  99. package/dist/esm/src/message-processed-hook.js.map +1 -0
  100. package/dist/esm/src/metrics.d.ts +14 -2
  101. package/dist/esm/src/metrics.d.ts.map +1 -1
  102. package/dist/esm/src/metrics.js +41 -1
  103. package/dist/esm/src/metrics.js.map +1 -1
  104. package/dist/esm/src/plugins/event-log-nats.d.ts +25 -0
  105. package/dist/esm/src/plugins/event-log-nats.d.ts.map +1 -0
  106. package/dist/esm/src/plugins/event-log-nats.js +379 -0
  107. package/dist/esm/src/plugins/event-log-nats.js.map +1 -0
  108. package/dist/esm/src/rate-limiter.d.ts +60 -0
  109. package/dist/esm/src/rate-limiter.d.ts.map +1 -0
  110. package/dist/esm/src/rate-limiter.js +116 -0
  111. package/dist/esm/src/rate-limiter.js.map +1 -0
  112. package/dist/esm/src/registration/jwt-provider-auth-plugin.d.ts +53 -0
  113. package/dist/esm/src/registration/jwt-provider-auth-plugin.d.ts.map +1 -0
  114. package/dist/esm/src/registration/jwt-provider-auth-plugin.js +90 -0
  115. package/dist/esm/src/registration/jwt-provider-auth-plugin.js.map +1 -0
  116. package/dist/esm/src/registration/open-auth-handler.d.ts +37 -0
  117. package/dist/esm/src/registration/open-auth-handler.d.ts.map +1 -0
  118. package/dist/esm/src/registration/open-auth-handler.js +214 -0
  119. package/dist/esm/src/registration/open-auth-handler.js.map +1 -0
  120. package/dist/esm/src/registration/proof-of-work-manager.d.ts +1 -1
  121. package/dist/esm/src/registration/proof-of-work-manager.d.ts.map +1 -1
  122. package/dist/esm/src/registration/proof-of-work-manager.js +3 -3
  123. package/dist/esm/src/registration/proof-of-work-manager.js.map +1 -1
  124. package/dist/esm/src/registration/provider-auth-plugin.d.ts +46 -0
  125. package/dist/esm/src/registration/provider-auth-plugin.d.ts.map +1 -0
  126. package/dist/esm/src/registration/provider-auth-plugin.js +29 -0
  127. package/dist/esm/src/registration/provider-auth-plugin.js.map +1 -0
  128. package/dist/esm/src/registration/registration-manager.d.ts +28 -5
  129. package/dist/esm/src/registration/registration-manager.d.ts.map +1 -1
  130. package/dist/esm/src/registration/registration-manager.js +83 -12
  131. package/dist/esm/src/registration/registration-manager.js.map +1 -1
  132. package/dist/esm/src/registration/registration-store.d.ts +83 -3
  133. package/dist/esm/src/registration/registration-store.d.ts.map +1 -1
  134. package/dist/esm/src/registration/registration-store.js +248 -11
  135. package/dist/esm/src/registration/registration-store.js.map +1 -1
  136. package/dist/esm/src/storage.d.ts +5 -5
  137. package/dist/esm/src/storage.d.ts.map +1 -1
  138. package/dist/esm/src/storage.js +105 -24
  139. package/dist/esm/src/storage.js.map +1 -1
  140. package/dist/esm/src/web5-connect/sql-ttl-cache.d.ts.map +1 -1
  141. package/dist/esm/src/web5-connect/sql-ttl-cache.js +11 -3
  142. package/dist/esm/src/web5-connect/sql-ttl-cache.js.map +1 -1
  143. package/dist/esm/src/web5-connect/web5-connect-server.d.ts.map +1 -1
  144. package/dist/esm/src/web5-connect/web5-connect-server.js +2 -2
  145. package/dist/esm/src/web5-connect/web5-connect-server.js.map +1 -1
  146. package/dist/esm/src/ws-api.d.ts +18 -4
  147. package/dist/esm/src/ws-api.d.ts.map +1 -1
  148. package/dist/esm/src/ws-api.js +12 -16
  149. package/dist/esm/src/ws-api.js.map +1 -1
  150. package/package.json +34 -53
  151. package/src/admin/activity-log.ts +100 -0
  152. package/src/admin/admin-api.ts +1308 -0
  153. package/src/admin/admin-auth.ts +56 -0
  154. package/src/admin/admin-store.ts +515 -0
  155. package/src/admin/audit-log.ts +327 -0
  156. package/src/admin/index.ts +34 -0
  157. package/src/admin/types.ts +352 -0
  158. package/src/admin/webhook-manager.ts +245 -0
  159. package/src/config.ts +190 -22
  160. package/src/connection/connection-manager.ts +67 -17
  161. package/src/connection/flow-controller.ts +117 -0
  162. package/src/connection/socket-connection.ts +144 -67
  163. package/src/delivery-service.ts +740 -0
  164. package/src/dwn-error.ts +11 -2
  165. package/src/dwn-server.ts +254 -39
  166. package/src/http-api.ts +736 -392
  167. package/src/index.ts +13 -2
  168. package/src/json-rpc-api.ts +2 -1
  169. package/src/json-rpc-handlers/dwn/process-message.ts +149 -15
  170. package/src/json-rpc-handlers/subscription/ack.ts +63 -0
  171. package/src/json-rpc-handlers/subscription/close.ts +5 -9
  172. package/src/json-rpc-handlers/subscription/index.ts +1 -0
  173. package/src/lib/json-rpc-router.ts +26 -11
  174. package/src/lib/sql-utils.ts +7 -0
  175. package/src/main.ts +0 -8
  176. package/src/message-processed-hook.ts +33 -0
  177. package/src/metrics.ts +57 -8
  178. package/src/plugins/event-log-nats.ts +466 -0
  179. package/src/process-handlers.ts +5 -5
  180. package/src/rate-limiter.ts +143 -0
  181. package/src/registration/jwt-provider-auth-plugin.ts +119 -0
  182. package/src/registration/open-auth-handler.ts +263 -0
  183. package/src/registration/proof-of-work-manager.ts +11 -10
  184. package/src/registration/provider-auth-plugin.ts +84 -0
  185. package/src/registration/registration-manager.ts +129 -31
  186. package/src/registration/registration-store.ts +332 -22
  187. package/src/storage.ts +136 -40
  188. package/src/web5-connect/sql-ttl-cache.ts +12 -5
  189. package/src/web5-connect/web5-connect-server.ts +9 -8
  190. package/src/ws-api.ts +39 -26
  191. package/dist/cjs/index.js +0 -6811
  192. package/dist/cjs/package.json +0 -1
  193. package/dist/esm/src/json-rpc-socket.d.ts +0 -39
  194. package/dist/esm/src/json-rpc-socket.d.ts.map +0 -1
  195. package/dist/esm/src/json-rpc-socket.js +0 -125
  196. package/dist/esm/src/json-rpc-socket.js.map +0 -1
  197. package/dist/esm/src/lib/http-server-shutdown-handler.d.ts +0 -10
  198. package/dist/esm/src/lib/http-server-shutdown-handler.d.ts.map +0 -1
  199. package/dist/esm/src/lib/http-server-shutdown-handler.js +0 -65
  200. package/dist/esm/src/lib/http-server-shutdown-handler.js.map +0 -1
  201. package/dist/esm/src/lib/json-rpc.d.ts +0 -54
  202. package/dist/esm/src/lib/json-rpc.d.ts.map +0 -1
  203. package/dist/esm/src/lib/json-rpc.js +0 -60
  204. package/dist/esm/src/lib/json-rpc.js.map +0 -1
  205. package/dist/esm/src/registration/proof-of-work-types.d.ts +0 -8
  206. package/dist/esm/src/registration/proof-of-work-types.d.ts.map +0 -1
  207. package/dist/esm/src/registration/proof-of-work-types.js +0 -2
  208. package/dist/esm/src/registration/proof-of-work-types.js.map +0 -1
  209. package/dist/esm/src/registration/registration-types.d.ts +0 -18
  210. package/dist/esm/src/registration/registration-types.d.ts.map +0 -1
  211. package/dist/esm/src/registration/registration-types.js +0 -2
  212. package/dist/esm/src/registration/registration-types.js.map +0 -1
  213. package/dist/esm/tests/common-scenario-validator.d.ts +0 -11
  214. package/dist/esm/tests/common-scenario-validator.d.ts.map +0 -1
  215. package/dist/esm/tests/common-scenario-validator.js +0 -114
  216. package/dist/esm/tests/common-scenario-validator.js.map +0 -1
  217. package/dist/esm/tests/connection/connection-manager.spec.d.ts +0 -2
  218. package/dist/esm/tests/connection/connection-manager.spec.d.ts.map +0 -1
  219. package/dist/esm/tests/connection/connection-manager.spec.js +0 -47
  220. package/dist/esm/tests/connection/connection-manager.spec.js.map +0 -1
  221. package/dist/esm/tests/connection/socket-connection.spec.d.ts +0 -2
  222. package/dist/esm/tests/connection/socket-connection.spec.d.ts.map +0 -1
  223. package/dist/esm/tests/connection/socket-connection.spec.js +0 -125
  224. package/dist/esm/tests/connection/socket-connection.spec.js.map +0 -1
  225. package/dist/esm/tests/cors/http-api.browser.d.ts +0 -2
  226. package/dist/esm/tests/cors/http-api.browser.d.ts.map +0 -1
  227. package/dist/esm/tests/cors/http-api.browser.js +0 -60
  228. package/dist/esm/tests/cors/http-api.browser.js.map +0 -1
  229. package/dist/esm/tests/cors/ping.browser.d.ts +0 -2
  230. package/dist/esm/tests/cors/ping.browser.d.ts.map +0 -1
  231. package/dist/esm/tests/cors/ping.browser.js +0 -7
  232. package/dist/esm/tests/cors/ping.browser.js.map +0 -1
  233. package/dist/esm/tests/dwn-process-message.spec.d.ts +0 -2
  234. package/dist/esm/tests/dwn-process-message.spec.d.ts.map +0 -1
  235. package/dist/esm/tests/dwn-process-message.spec.js +0 -172
  236. package/dist/esm/tests/dwn-process-message.spec.js.map +0 -1
  237. package/dist/esm/tests/dwn-server.spec.d.ts +0 -2
  238. package/dist/esm/tests/dwn-server.spec.d.ts.map +0 -1
  239. package/dist/esm/tests/dwn-server.spec.js +0 -49
  240. package/dist/esm/tests/dwn-server.spec.js.map +0 -1
  241. package/dist/esm/tests/http-api.spec.d.ts +0 -2
  242. package/dist/esm/tests/http-api.spec.d.ts.map +0 -1
  243. package/dist/esm/tests/http-api.spec.js +0 -775
  244. package/dist/esm/tests/http-api.spec.js.map +0 -1
  245. package/dist/esm/tests/json-rpc-socket.spec.d.ts +0 -2
  246. package/dist/esm/tests/json-rpc-socket.spec.d.ts.map +0 -1
  247. package/dist/esm/tests/json-rpc-socket.spec.js +0 -225
  248. package/dist/esm/tests/json-rpc-socket.spec.js.map +0 -1
  249. package/dist/esm/tests/plugins/data-store-sqlite.d.ts +0 -17
  250. package/dist/esm/tests/plugins/data-store-sqlite.d.ts.map +0 -1
  251. package/dist/esm/tests/plugins/data-store-sqlite.js +0 -23
  252. package/dist/esm/tests/plugins/data-store-sqlite.js.map +0 -1
  253. package/dist/esm/tests/plugins/event-log-sqlite.d.ts +0 -17
  254. package/dist/esm/tests/plugins/event-log-sqlite.d.ts.map +0 -1
  255. package/dist/esm/tests/plugins/event-log-sqlite.js +0 -23
  256. package/dist/esm/tests/plugins/event-log-sqlite.js.map +0 -1
  257. package/dist/esm/tests/plugins/event-stream-in-memory.d.ts +0 -17
  258. package/dist/esm/tests/plugins/event-stream-in-memory.d.ts.map +0 -1
  259. package/dist/esm/tests/plugins/event-stream-in-memory.js +0 -21
  260. package/dist/esm/tests/plugins/event-stream-in-memory.js.map +0 -1
  261. package/dist/esm/tests/plugins/message-store-sqlite.d.ts +0 -17
  262. package/dist/esm/tests/plugins/message-store-sqlite.d.ts.map +0 -1
  263. package/dist/esm/tests/plugins/message-store-sqlite.js +0 -23
  264. package/dist/esm/tests/plugins/message-store-sqlite.js.map +0 -1
  265. package/dist/esm/tests/plugins/resumable-task-store-sqlite.d.ts +0 -17
  266. package/dist/esm/tests/plugins/resumable-task-store-sqlite.d.ts.map +0 -1
  267. package/dist/esm/tests/plugins/resumable-task-store-sqlite.js +0 -23
  268. package/dist/esm/tests/plugins/resumable-task-store-sqlite.js.map +0 -1
  269. package/dist/esm/tests/process-handler.spec.d.ts +0 -2
  270. package/dist/esm/tests/process-handler.spec.d.ts.map +0 -1
  271. package/dist/esm/tests/process-handler.spec.js +0 -60
  272. package/dist/esm/tests/process-handler.spec.js.map +0 -1
  273. package/dist/esm/tests/registration/proof-of-work-manager.spec.d.ts +0 -2
  274. package/dist/esm/tests/registration/proof-of-work-manager.spec.d.ts.map +0 -1
  275. package/dist/esm/tests/registration/proof-of-work-manager.spec.js +0 -157
  276. package/dist/esm/tests/registration/proof-of-work-manager.spec.js.map +0 -1
  277. package/dist/esm/tests/rpc-subscribe-close.spec.d.ts +0 -2
  278. package/dist/esm/tests/rpc-subscribe-close.spec.d.ts.map +0 -1
  279. package/dist/esm/tests/rpc-subscribe-close.spec.js +0 -81
  280. package/dist/esm/tests/rpc-subscribe-close.spec.js.map +0 -1
  281. package/dist/esm/tests/scenarios/dynamic-plugin-loading.spec.d.ts +0 -2
  282. package/dist/esm/tests/scenarios/dynamic-plugin-loading.spec.d.ts.map +0 -1
  283. package/dist/esm/tests/scenarios/dynamic-plugin-loading.spec.js +0 -73
  284. package/dist/esm/tests/scenarios/dynamic-plugin-loading.spec.js.map +0 -1
  285. package/dist/esm/tests/scenarios/registration.spec.d.ts +0 -2
  286. package/dist/esm/tests/scenarios/registration.spec.d.ts.map +0 -1
  287. package/dist/esm/tests/scenarios/registration.spec.js +0 -507
  288. package/dist/esm/tests/scenarios/registration.spec.js.map +0 -1
  289. package/dist/esm/tests/scenarios/web5-connect.spec.d.ts +0 -2
  290. package/dist/esm/tests/scenarios/web5-connect.spec.d.ts.map +0 -1
  291. package/dist/esm/tests/scenarios/web5-connect.spec.js +0 -137
  292. package/dist/esm/tests/scenarios/web5-connect.spec.js.map +0 -1
  293. package/dist/esm/tests/test-dwn.d.ts +0 -7
  294. package/dist/esm/tests/test-dwn.d.ts.map +0 -1
  295. package/dist/esm/tests/test-dwn.js +0 -34
  296. package/dist/esm/tests/test-dwn.js.map +0 -1
  297. package/dist/esm/tests/utils.d.ts +0 -46
  298. package/dist/esm/tests/utils.d.ts.map +0 -1
  299. package/dist/esm/tests/utils.js +0 -116
  300. package/dist/esm/tests/utils.js.map +0 -1
  301. package/dist/esm/tests/ws-api.spec.d.ts +0 -2
  302. package/dist/esm/tests/ws-api.spec.d.ts.map +0 -1
  303. package/dist/esm/tests/ws-api.spec.js +0 -327
  304. package/dist/esm/tests/ws-api.spec.js.map +0 -1
  305. package/src/json-rpc-socket.ts +0 -155
  306. package/src/lib/http-server-shutdown-handler.ts +0 -79
  307. package/src/lib/json-rpc.ts +0 -126
  308. package/src/registration/proof-of-work-types.ts +0 -7
  309. package/src/registration/registration-types.ts +0 -18
@@ -1,9 +1,11 @@
1
- import { Kysely } from 'kysely';
1
+ import { Kysely, sql } from 'kysely';
2
+ import { escapeLikeWildcards } from '../lib/sql-utils.js';
2
3
  /**
3
4
  * The RegistrationStore is responsible for storing and retrieving tenant registration information.
4
5
  */
5
6
  export class RegistrationStore {
6
7
  static registeredTenantTableName = 'registeredTenants';
8
+ static tenantQuotasTableName = 'tenantQuotas';
7
9
  db;
8
10
  constructor(sqlDialect) {
9
11
  this.db = new Kysely({ dialect: sqlDialect });
@@ -12,9 +14,9 @@ export class RegistrationStore {
12
14
  * Creates a new RegistrationStore instance.
13
15
  */
14
16
  static async create(sqlDialect) {
15
- const proofOfWorkManager = new RegistrationStore(sqlDialect);
16
- await proofOfWorkManager.initialize();
17
- return proofOfWorkManager;
17
+ const store = new RegistrationStore(sqlDialect);
18
+ await store.initialize();
19
+ return store;
18
20
  }
19
21
  async initialize() {
20
22
  await this.db.schema
@@ -22,19 +24,79 @@ export class RegistrationStore {
22
24
  .ifNotExists()
23
25
  .addColumn('did', 'text', (column) => column.primaryKey())
24
26
  .addColumn('termsOfServiceHash', 'text')
27
+ .addColumn('suspended', 'integer', (column) => column.defaultTo(0))
28
+ .execute();
29
+ // Add the `suspended` column to existing tables that don't have it yet.
30
+ // Kysely doesn't support `ADD COLUMN IF NOT EXISTS` across all dialects, so we
31
+ // catch and ignore the "column already exists" error.
32
+ try {
33
+ await this.db.schema
34
+ .alterTable(RegistrationStore.registeredTenantTableName)
35
+ .addColumn('suspended', 'integer', (column) => column.defaultTo(0))
36
+ .execute();
37
+ }
38
+ catch {
39
+ // Column already exists — expected for new installations.
40
+ }
41
+ // Add provider-auth columns (idempotent migration). https://github.com/enboxorg/enbox/issues/404
42
+ for (const col of ['accountId', 'registrationType', 'registeredAt', 'metadata']) {
43
+ try {
44
+ await this.db.schema
45
+ .alterTable(RegistrationStore.registeredTenantTableName)
46
+ .addColumn(col, 'text')
47
+ .execute();
48
+ }
49
+ catch {
50
+ // Column already exists — expected.
51
+ }
52
+ }
53
+ // Per-tenant storage quotas table.
54
+ await this.db.schema
55
+ .createTable(RegistrationStore.tenantQuotasTableName)
56
+ .ifNotExists()
57
+ .addColumn('did', 'text', (column) => column.primaryKey())
58
+ .addColumn('maxMessages', 'integer', (column) => column.defaultTo(0))
59
+ .addColumn('maxStorageBytes', 'bigint', (column) => column.defaultTo(0))
25
60
  .execute();
26
61
  }
27
62
  /**
28
63
  * Inserts or updates the tenant registration information.
29
64
  */
30
65
  async insertOrUpdateTenantRegistration(registrationData) {
66
+ const insertValues = {
67
+ did: registrationData.did,
68
+ termsOfServiceHash: registrationData.termsOfServiceHash ?? '',
69
+ suspended: 0,
70
+ registeredAt: new Date().toISOString(),
71
+ };
72
+ if (registrationData.accountId !== undefined) {
73
+ insertValues.accountId = registrationData.accountId;
74
+ }
75
+ if (registrationData.registrationType !== undefined) {
76
+ insertValues.registrationType = registrationData.registrationType;
77
+ }
78
+ if (registrationData.metadata !== undefined) {
79
+ insertValues.metadata = registrationData.metadata;
80
+ }
31
81
  await this.db
32
82
  .insertInto(RegistrationStore.registeredTenantTableName)
33
- .values(registrationData)
34
- .onConflict((oc) => oc.column('did').doUpdateSet((eb) => ({
35
- termsOfServiceHash: eb.ref('excluded.termsOfServiceHash'),
36
- })))
37
- // Executes the query. No error is thrown if the query doesn’t affect any rows (ie. if the insert or update didn’t change anything).
83
+ .values(insertValues)
84
+ .onConflict((oc) => oc.column('did').doUpdateSet((eb) => {
85
+ const updateSet = {
86
+ termsOfServiceHash: eb.ref('excluded.termsOfServiceHash'),
87
+ };
88
+ // Do NOT overwrite registeredAt on update.
89
+ if (registrationData.accountId !== undefined) {
90
+ updateSet.accountId = registrationData.accountId;
91
+ }
92
+ if (registrationData.registrationType !== undefined) {
93
+ updateSet.registrationType = registrationData.registrationType;
94
+ }
95
+ if (registrationData.metadata !== undefined) {
96
+ updateSet.metadata = registrationData.metadata;
97
+ }
98
+ return updateSet;
99
+ }))
38
100
  .executeTakeFirst();
39
101
  }
40
102
  /**
@@ -43,8 +105,7 @@ export class RegistrationStore {
43
105
  async getTenantRegistration(tenantDid) {
44
106
  const result = await this.db
45
107
  .selectFrom(RegistrationStore.registeredTenantTableName)
46
- .select('did')
47
- .select('termsOfServiceHash')
108
+ .select(['did', 'termsOfServiceHash', 'suspended', 'accountId', 'registrationType', 'registeredAt', 'metadata'])
48
109
  .where('did', '=', tenantDid)
49
110
  .execute();
50
111
  if (result.length === 0) {
@@ -52,5 +113,181 @@ export class RegistrationStore {
52
113
  }
53
114
  return result[0];
54
115
  }
116
+ // ---------------------------------------------------------------------------
117
+ // Admin operations
118
+ // ---------------------------------------------------------------------------
119
+ /**
120
+ * Returns a paginated list of registered tenants with optional search and status filtering.
121
+ *
122
+ * @see https://github.com/enboxorg/enbox/issues/390
123
+ */
124
+ async listTenants(options) {
125
+ const limit = options?.limit ?? 20;
126
+ let query = this.db
127
+ .selectFrom(RegistrationStore.registeredTenantTableName)
128
+ .select(['did', 'termsOfServiceHash', 'suspended', 'accountId', 'registrationType', 'registeredAt', 'metadata'])
129
+ .orderBy('did', 'asc')
130
+ .limit(limit + 1); // fetch one extra to detect next page
131
+ if (options?.cursor) {
132
+ query = query.where('did', '>', options.cursor);
133
+ }
134
+ if (options?.search) {
135
+ query = query.where('did', 'like', `%${escapeLikeWildcards(options.search)}%`);
136
+ }
137
+ if (options?.status === 'suspended') {
138
+ query = query.where('suspended', '=', 1);
139
+ }
140
+ else if (options?.status === 'active') {
141
+ query = query.where('suspended', '=', 0);
142
+ }
143
+ const results = await query.execute();
144
+ let cursor;
145
+ if (results.length > limit) {
146
+ results.pop();
147
+ cursor = results[results.length - 1].did;
148
+ }
149
+ return { tenants: results, cursor };
150
+ }
151
+ /**
152
+ * Returns the total count of registered tenants matching optional filters.
153
+ */
154
+ async getTenantCount(options) {
155
+ let query = this.db
156
+ .selectFrom(RegistrationStore.registeredTenantTableName)
157
+ .select(sql `count(*)`.as('count'));
158
+ if (options?.search) {
159
+ query = query.where('did', 'like', `%${escapeLikeWildcards(options.search)}%`);
160
+ }
161
+ if (options?.status === 'suspended') {
162
+ query = query.where('suspended', '=', 1);
163
+ }
164
+ else if (options?.status === 'active') {
165
+ query = query.where('suspended', '=', 0);
166
+ }
167
+ const result = await query.executeTakeFirstOrThrow();
168
+ return Number(result.count);
169
+ }
170
+ /**
171
+ * Inserts a new tenant registration. Returns `false` if the tenant already exists.
172
+ *
173
+ * @see https://github.com/enboxorg/enbox/issues/393
174
+ */
175
+ async createTenant(did) {
176
+ try {
177
+ await this.db
178
+ .insertInto(RegistrationStore.registeredTenantTableName)
179
+ .values({ did, termsOfServiceHash: '', suspended: 0 })
180
+ .execute();
181
+ return true;
182
+ }
183
+ catch {
184
+ // Unique constraint violation — tenant already exists.
185
+ return false;
186
+ }
187
+ }
188
+ /**
189
+ * Suspends a tenant. Returns `true` if the tenant was found and suspended.
190
+ */
191
+ async suspendTenant(did) {
192
+ const result = await this.db
193
+ .updateTable(RegistrationStore.registeredTenantTableName)
194
+ .set({ suspended: 1 })
195
+ .where('did', '=', did)
196
+ .executeTakeFirst();
197
+ return Number(result.numUpdatedRows) > 0;
198
+ }
199
+ /**
200
+ * Unsuspends a tenant. Returns `true` if the tenant was found and unsuspended.
201
+ */
202
+ async unsuspendTenant(did) {
203
+ const result = await this.db
204
+ .updateTable(RegistrationStore.registeredTenantTableName)
205
+ .set({ suspended: 0 })
206
+ .where('did', '=', did)
207
+ .executeTakeFirst();
208
+ return Number(result.numUpdatedRows) > 0;
209
+ }
210
+ /**
211
+ * Deletes a tenant registration. Returns `true` if the tenant was found and deleted.
212
+ */
213
+ async deleteTenant(did) {
214
+ const result = await this.db
215
+ .deleteFrom(RegistrationStore.registeredTenantTableName)
216
+ .where('did', '=', did)
217
+ .executeTakeFirst();
218
+ return Number(result.numDeletedRows) > 0;
219
+ }
220
+ /**
221
+ * Returns all tenant registrations associated with the given account ID.
222
+ *
223
+ * @see https://github.com/enboxorg/enbox/issues/404
224
+ */
225
+ async getTenantsForAccount(accountId) {
226
+ return this.db
227
+ .selectFrom(RegistrationStore.registeredTenantTableName)
228
+ .select(['did', 'termsOfServiceHash', 'suspended', 'accountId', 'registrationType', 'registeredAt', 'metadata'])
229
+ .where('accountId', '=', accountId)
230
+ .orderBy('did', 'asc')
231
+ .execute();
232
+ }
233
+ /**
234
+ * Returns the count of suspended tenants.
235
+ */
236
+ async getSuspendedCount() {
237
+ const result = await this.db
238
+ .selectFrom(RegistrationStore.registeredTenantTableName)
239
+ .select(sql `count(*)`.as('count'))
240
+ .where('suspended', '=', 1)
241
+ .executeTakeFirstOrThrow();
242
+ return Number(result.count);
243
+ }
244
+ // ---------------------------------------------------------------------------
245
+ // Tenant quota operations
246
+ // ---------------------------------------------------------------------------
247
+ /**
248
+ * Returns the quota for a tenant, or `undefined` if no per-tenant quota is set.
249
+ */
250
+ async getQuota(did) {
251
+ const result = await this.db
252
+ .selectFrom(RegistrationStore.tenantQuotasTableName)
253
+ .select(['did', 'maxMessages', 'maxStorageBytes'])
254
+ .where('did', '=', did)
255
+ .executeTakeFirst();
256
+ if (result === undefined) {
257
+ return undefined;
258
+ }
259
+ return {
260
+ did: result.did,
261
+ maxMessages: Number(result.maxMessages),
262
+ maxStorageBytes: Number(result.maxStorageBytes),
263
+ };
264
+ }
265
+ /**
266
+ * Sets (inserts or updates) the quota for a tenant.
267
+ */
268
+ async setQuota(quota) {
269
+ await this.db
270
+ .insertInto(RegistrationStore.tenantQuotasTableName)
271
+ .values({
272
+ did: quota.did,
273
+ maxMessages: quota.maxMessages,
274
+ maxStorageBytes: quota.maxStorageBytes,
275
+ })
276
+ .onConflict((oc) => oc.column('did').doUpdateSet({
277
+ maxMessages: quota.maxMessages,
278
+ maxStorageBytes: quota.maxStorageBytes,
279
+ }))
280
+ .executeTakeFirst();
281
+ }
282
+ /**
283
+ * Deletes the per-tenant quota. Returns `true` if a quota existed and was deleted.
284
+ */
285
+ async deleteQuota(did) {
286
+ const result = await this.db
287
+ .deleteFrom(RegistrationStore.tenantQuotasTableName)
288
+ .where('did', '=', did)
289
+ .executeTakeFirst();
290
+ return Number(result.numDeletedRows) > 0;
291
+ }
55
292
  }
56
293
  //# sourceMappingURL=registration-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"registration-store.js","sourceRoot":"","sources":["../../../../src/registration/registration-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIhC;;GAEG;AACH,MAAM,OAAO,iBAAiB;IACpB,MAAM,CAAU,yBAAyB,GAAG,mBAAmB,CAAC;IAEhE,EAAE,CAA+B;IAEzC,YAAqB,UAAmB;QACtC,IAAI,CAAC,EAAE,GAAG,IAAI,MAAM,CAAuB,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;IACtE,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAmB;QAC5C,MAAM,kBAAkB,GAAG,IAAI,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAE7D,MAAM,kBAAkB,CAAC,UAAU,EAAE,CAAC;QAEtC,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM;aACnB,WAAW,CAAC,iBAAiB,CAAC,yBAAyB,CAAC;aACxD,WAAW,EAAE;aACb,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;aACzD,SAAS,CAAC,oBAAoB,EAAE,MAAM,CAAC;aACvC,OAAO,EAAE,CAAC;IACb,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,gCAAgC,CAAC,gBAAkC;QAC9E,MAAM,IAAI,CAAC,EAAE;aACV,UAAU,CAAC,iBAAiB,CAAC,yBAAyB,CAAC;aACvD,MAAM,CAAC,gBAAgB,CAAC;aACxB,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,CACjB,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpC,kBAAkB,EAAE,EAAE,CAAC,GAAG,CAAC,6BAA6B,CAAC;SAC1D,CAAC,CAAC,CACJ;YACD,oIAAoI;aACnI,gBAAgB,EAAE,CAAC;IACxB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,qBAAqB,CAAC,SAAiB;QAClD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE;aACzB,UAAU,CAAC,iBAAiB,CAAC,yBAAyB,CAAC;aACvD,MAAM,CAAC,KAAK,CAAC;aACb,MAAM,CAAC,oBAAoB,CAAC;aAC5B,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,CAAC;aAC5B,OAAO,EAAE,CAAC;QAEb,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC"}
1
+ {"version":3,"file":"registration-store.js","sourceRoot":"","sources":["../../../../src/registration/registration-store.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,11 @@
1
- import type { DidResolver } from '@enbox/dids';
2
- import type { DataStore, DwnConfig, EventLog, EventStream, MessageStore, ResumableTaskStore, TenantGate } from '@enbox/dwn-sdk-js';
3
1
  import type { Dialect } from '@enbox/dwn-sql-store';
2
+ import type { DidResolver } from '@enbox/dids';
4
3
  import type { DwnServerConfig } from './config.js';
4
+ import type { DataStore, DwnConfig, EventLog, MessageStore, ResumableTaskStore, StateIndex, TenantGate } from '@enbox/dwn-sdk-js';
5
5
  export declare enum StoreType {
6
6
  DataStore = 0,
7
7
  MessageStore = 1,
8
- EventLog = 2,
8
+ StateIndex = 2,
9
9
  ResumableTaskStore = 3
10
10
  }
11
11
  export declare enum BackendTypes {
@@ -14,11 +14,11 @@ export declare enum BackendTypes {
14
14
  MYSQL = "mysql",
15
15
  POSTGRES = "postgres"
16
16
  }
17
- export type DwnStore = DataStore | EventLog | MessageStore | ResumableTaskStore;
17
+ export type DwnStore = DataStore | StateIndex | MessageStore | ResumableTaskStore;
18
18
  export declare function getDwnConfig(config: DwnServerConfig, options: {
19
19
  didResolver?: DidResolver;
20
20
  tenantGate?: TenantGate;
21
- eventStream?: EventStream;
21
+ eventLog?: EventLog;
22
22
  }): Promise<DwnConfig>;
23
23
  export declare function getDialectFromUrl(connectionUrl: URL): Dialect;
24
24
  //# sourceMappingURL=storage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EACV,SAAS,EACT,SAAS,EACT,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,UAAU,EACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAyBnD,oBAAY,SAAS;IACnB,SAAS,IAAA;IACT,YAAY,IAAA;IACZ,QAAQ,IAAA;IACR,kBAAkB,IAAA;CACnB;AAED,oBAAY,YAAY;IACtB,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,QAAQ,aAAa;CACtB;AAED,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,YAAY,GAAG,kBAAkB,CAAC;AAEhF,wBAAsB,YAAY,CAChC,MAAM,EAAI,eAAe,EACzB,OAAO,EAAG;IACR,WAAW,CAAC,EAAG,WAAW,CAAC;IAC3B,UAAU,CAAC,EAAI,UAAU,CAAC;IAC1B,WAAW,CAAC,EAAG,WAAW,CAAC;CAC5B,GACA,OAAO,CAAC,SAAS,CAAC,CAQpB;AAwGD,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,GAAG,GAAG,OAAO,CA2B7D"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EACV,SAAS,EACT,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,kBAAkB,EAClB,UAAU,EACV,UAAU,EACX,MAAM,mBAAmB,CAAC;AA6B3B,oBAAY,SAAS;IACnB,SAAS,IAAA;IACT,YAAY,IAAA;IACZ,UAAU,IAAA;IACV,kBAAkB,IAAA;CACnB;AAED,oBAAY,YAAY;IACtB,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,QAAQ,aAAa;CACtB;AAED,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,GAAG,kBAAkB,CAAC;AA4ClF,wBAAsB,YAAY,CAChC,MAAM,EAAG,eAAe,EACxB,OAAO,EAAG;IACR,WAAW,CAAC,EAAG,WAAW,CAAC;IAC3B,UAAU,CAAC,EAAG,UAAU,CAAC;IACzB,QAAQ,CAAC,EAAG,QAAQ,CAAC;CACtB,GACA,OAAO,CAAC,SAAS,CAAC,CAcpB;AAmJD,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,GAAG,GAAG,OAAO,CA4B7D"}
@@ -1,16 +1,17 @@
1
1
  import * as fs from 'fs';
2
2
  import Cursor from 'pg-cursor';
3
- import Database from 'better-sqlite3';
4
- import pg from 'pg';
5
3
  import { createPool as MySQLCreatePool } from 'mysql2';
4
+ import pg from 'pg';
5
+ import { Kysely } from 'kysely';
6
+ import { createBunSqliteDatabase } from '@enbox/dwn-sql-store';
6
7
  import { PluginLoader } from './plugin-loader.js';
7
- import { DataStoreLevel, EventLogLevel, MessageStoreLevel, ResumableTaskStoreLevel, } from '@enbox/dwn-sdk-js';
8
- import { DataStoreSql, EventLogSql, MessageStoreSql, MysqlDialect, PostgresDialect, ResumableTaskStoreSql, SqliteDialect, } from '@enbox/dwn-sql-store';
8
+ import { DataStoreLevel, MessageStoreLevel, ResumableTaskStoreLevel, StateIndexLevel, } from '@enbox/dwn-sdk-js';
9
+ import { DataStoreSql, MessageStoreSql, MysqlDialect, PostgresDialect, ResumableTaskStoreSql, runDwnStoreMigrations, SqliteDialect, StateIndexSql, } from '@enbox/dwn-sql-store';
9
10
  export var StoreType;
10
11
  (function (StoreType) {
11
12
  StoreType[StoreType["DataStore"] = 0] = "DataStore";
12
13
  StoreType[StoreType["MessageStore"] = 1] = "MessageStore";
13
- StoreType[StoreType["EventLog"] = 2] = "EventLog";
14
+ StoreType[StoreType["StateIndex"] = 2] = "StateIndex";
14
15
  StoreType[StoreType["ResumableTaskStore"] = 3] = "ResumableTaskStore";
15
16
  })(StoreType || (StoreType = {}));
16
17
  export var BackendTypes;
@@ -20,13 +21,92 @@ export var BackendTypes;
20
21
  BackendTypes["MYSQL"] = "mysql";
21
22
  BackendTypes["POSTGRES"] = "postgres";
22
23
  })(BackendTypes || (BackendTypes = {}));
24
+ /**
25
+ * Cache of shared PostgreSQL dialects keyed by connection URL. When multiple
26
+ * DWN stores share the same Postgres URL, they reuse a single dialect (and
27
+ * thus a single `pg.Pool`) instead of each creating their own. This reduces
28
+ * connection count from 4 × pool_max to 1 × pool_max per DWN process.
29
+ */
30
+ const sharedDialectCache = new Map();
31
+ /**
32
+ * Returns a (potentially cached) dialect for the given Postgres connection URL.
33
+ * Non-Postgres URLs always return a fresh dialect (no caching).
34
+ */
35
+ function getOrCreateDialect(connectionUrl, config) {
36
+ const protocol = connectionUrl.protocol.slice(0, -1);
37
+ if (protocol !== BackendTypes.POSTGRES) {
38
+ return getDialectFromUrl(connectionUrl);
39
+ }
40
+ const key = connectionUrl.toString();
41
+ const cached = sharedDialectCache.get(key);
42
+ if (cached !== undefined) {
43
+ return cached;
44
+ }
45
+ // Create a single pg.Pool instance with configurable sizing.
46
+ const pool = new pg.Pool({
47
+ connectionString: connectionUrl.toString(),
48
+ min: config.pgPoolMin,
49
+ max: config.pgPoolMax,
50
+ idleTimeoutMillis: config.pgPoolIdleTimeout,
51
+ });
52
+ const dialect = new PostgresDialect({
53
+ pool: async () => pool,
54
+ cursor: Cursor,
55
+ });
56
+ sharedDialectCache.set(key, dialect);
57
+ return dialect;
58
+ }
23
59
  export async function getDwnConfig(config, options) {
24
- const { tenantGate, eventStream, didResolver } = options;
25
- const dataStore = await getStore(config.dataStore, StoreType.DataStore);
26
- const eventLog = await getStore(config.eventLog, StoreType.EventLog);
27
- const messageStore = await getStore(config.messageStore, StoreType.MessageStore);
28
- const resumableTaskStore = await getStore(config.resumableTaskStore, StoreType.ResumableTaskStore);
29
- return { didResolver, eventStream, eventLog, dataStore, messageStore, resumableTaskStore, tenantGate };
60
+ const { tenantGate, eventLog, didResolver } = options;
61
+ // Run SQL schema migrations before creating stores. Uses the data store
62
+ // connection to determine the dialect — all SQL stores typically share the
63
+ // same database. Non-SQL backends (level://) are skipped.
64
+ await runSqlMigrationsIfNeeded(config);
65
+ const dataStore = await getStore(config, config.dataStore, StoreType.DataStore);
66
+ const stateIndex = await getStore(config, config.stateIndex, StoreType.StateIndex);
67
+ const messageStore = await getStore(config, config.messageStore, StoreType.MessageStore);
68
+ const resumableTaskStore = await getStore(config, config.resumableTaskStore, StoreType.ResumableTaskStore);
69
+ return { didResolver, eventLog, stateIndex, dataStore, messageStore, resumableTaskStore, tenantGate };
70
+ }
71
+ /**
72
+ * Runs DWN SQL schema migrations if the data store is configured with a SQL
73
+ * backend. Creates a temporary Kysely instance, runs all pending migrations,
74
+ * then destroys it. The subsequent store `open()` calls will reuse the shared
75
+ * dialect/pool and find the schema already in place.
76
+ */
77
+ async function runSqlMigrationsIfNeeded(config) {
78
+ // Skip if the data store config is a file path (plugin) or non-SQL backend
79
+ if (isFilePath(config.dataStore)) {
80
+ return;
81
+ }
82
+ let storeUrl;
83
+ try {
84
+ storeUrl = new URL(config.dataStore);
85
+ }
86
+ catch {
87
+ return; // Not a valid URL — skip
88
+ }
89
+ const protocol = storeUrl.protocol.slice(0, -1);
90
+ const sqlBackends = [BackendTypes.SQLITE, BackendTypes.MYSQL, BackendTypes.POSTGRES];
91
+ if (!sqlBackends.includes(protocol)) {
92
+ return;
93
+ }
94
+ const dialect = getOrCreateDialect(storeUrl, config);
95
+ const db = new Kysely({ dialect });
96
+ try {
97
+ const applied = await runDwnStoreMigrations(db, dialect);
98
+ if (applied.length > 0) {
99
+ console.log(`DWN migrations applied: ${applied.join(', ')}`);
100
+ }
101
+ }
102
+ finally {
103
+ // Don't destroy the Kysely instance if using a shared Postgres pool —
104
+ // the pool is cached in sharedDialectCache and will be reused by stores.
105
+ // Only destroy for non-cached dialects (SQLite, MySQL).
106
+ if (protocol !== BackendTypes.POSTGRES) {
107
+ await db.destroy();
108
+ }
109
+ }
30
110
  }
31
111
  function getLevelStore(storeURI, storeType) {
32
112
  switch (storeType) {
@@ -39,9 +119,9 @@ function getLevelStore(storeURI, storeType) {
39
119
  blockstoreLocation: storeURI.host + storeURI.pathname + '/MESSAGESTORE',
40
120
  indexLocation: storeURI.host + storeURI.pathname + '/INDEX',
41
121
  });
42
- case StoreType.EventLog:
43
- return new EventLogLevel({
44
- location: storeURI.host + storeURI.pathname + '/EVENTLOG',
122
+ case StoreType.StateIndex:
123
+ return new StateIndexLevel({
124
+ location: storeURI.host + storeURI.pathname + '/STATEINDEX',
45
125
  });
46
126
  case StoreType.ResumableTaskStore:
47
127
  return new ResumableTaskStoreLevel({
@@ -51,15 +131,15 @@ function getLevelStore(storeURI, storeType) {
51
131
  throw new Error('Unexpected level store type');
52
132
  }
53
133
  }
54
- function getSqlStore(connectionUrl, storeType) {
55
- const dialect = getDialectFromUrl(connectionUrl);
134
+ function getSqlStore(config, connectionUrl, storeType) {
135
+ const dialect = getOrCreateDialect(connectionUrl, config);
56
136
  switch (storeType) {
57
137
  case StoreType.DataStore:
58
138
  return new DataStoreSql(dialect);
59
139
  case StoreType.MessageStore:
60
140
  return new MessageStoreSql(dialect);
61
- case StoreType.EventLog:
62
- return new EventLogSql(dialect);
141
+ case StoreType.StateIndex:
142
+ return new StateIndexSql(dialect);
63
143
  case StoreType.ResumableTaskStore:
64
144
  return new ResumableTaskStoreSql(dialect);
65
145
  default:
@@ -73,7 +153,7 @@ function isFilePath(configString) {
73
153
  const filePathPrefixes = ['/', './', '../'];
74
154
  return filePathPrefixes.some(prefix => configString.startsWith(prefix));
75
155
  }
76
- async function getStore(storeConfigString, storeType) {
156
+ async function getStore(config, storeConfigString, storeType) {
77
157
  if (isFilePath(storeConfigString)) {
78
158
  return await loadStoreFromFilePath(storeConfigString, storeType);
79
159
  }
@@ -85,7 +165,7 @@ async function getStore(storeConfigString, storeType) {
85
165
  case BackendTypes.SQLITE:
86
166
  case BackendTypes.MYSQL:
87
167
  case BackendTypes.POSTGRES:
88
- return getSqlStore(storeURI, storeType);
168
+ return getSqlStore(config, storeURI, storeType);
89
169
  default:
90
170
  throw invalidStorageSchemeMessage(storeURI.protocol);
91
171
  }
@@ -97,7 +177,7 @@ async function loadStoreFromFilePath(filePath, storeType) {
97
177
  switch (storeType) {
98
178
  case StoreType.DataStore:
99
179
  return await PluginLoader.loadPlugin(filePath);
100
- case StoreType.EventLog:
180
+ case StoreType.StateIndex:
101
181
  return await PluginLoader.loadPlugin(filePath);
102
182
  case StoreType.MessageStore:
103
183
  return await PluginLoader.loadPlugin(filePath);
@@ -109,7 +189,7 @@ async function loadStoreFromFilePath(filePath, storeType) {
109
189
  }
110
190
  export function getDialectFromUrl(connectionUrl) {
111
191
  switch (connectionUrl.protocol.slice(0, -1)) {
112
- case BackendTypes.SQLITE:
192
+ case BackendTypes.SQLITE: {
113
193
  const path = connectionUrl.host + connectionUrl.pathname;
114
194
  console.log('SQL-lite relative path:', path ? path : undefined); // NOTE, using ? for lose equality comparison
115
195
  if (connectionUrl.host && !fs.existsSync(connectionUrl.host)) {
@@ -119,8 +199,9 @@ export function getDialectFromUrl(connectionUrl) {
119
199
  // Use in-memory database if no path is provided (for tests)
120
200
  const dbPath = path || ':memory:';
121
201
  return new SqliteDialect({
122
- database: async () => new Database(dbPath),
202
+ database: async () => createBunSqliteDatabase(dbPath),
123
203
  });
204
+ }
124
205
  case BackendTypes.MYSQL:
125
206
  return new MysqlDialect({
126
207
  pool: async () => MySQLCreatePool(connectionUrl.toString()),
@@ -138,7 +219,7 @@ function invalidStorageSchemeMessage(protocol) {
138
219
  schemes.push(value);
139
220
  }
140
221
  return ('Unknown storage protocol ' +
141
- protocol.slice(0, 1) +
222
+ protocol.slice(0, -1) +
142
223
  '! Please use one of: ' +
143
224
  schemes.join(', ') +
144
225
  '. For details, see README');
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/storage.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sql-ttl-cache.d.ts","sourceRoot":"","sources":["../../../../src/web5-connect/sql-ttl-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAGpD;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAkB;IACxD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAM;IAEtD,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,EAAE,CAAwB;IAClC,OAAO,CAAC,YAAY,CAAiB;IAErC,OAAO;IAKP;;OAEG;WACiB,MAAM,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;YAQvD,UAAU;IA0BxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;;OAGG;IACU,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW3E;;OAEG;IACU,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAwB1D;;OAEG;IACU,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO/C;;OAEG;IACU,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;CAMpD"}
1
+ {"version":3,"file":"sql-ttl-cache.d.ts","sourceRoot":"","sources":["../../../../src/web5-connect/sql-ttl-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAGpD;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAkB;IACxD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAM;IAEtD,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,EAAE,CAAwB;IAClC,OAAO,CAAC,YAAY,CAAiB;IAErC,OAAO;IAKP;;OAEG;WACiB,MAAM,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;YAQvD,UAAU;IA0BxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;;OAGG;IACU,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW3E;;OAEG;IACU,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IA+B1D;;OAEG;IACU,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO/C;;OAEG;IACU,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;CAMpD"}
@@ -30,7 +30,7 @@ export class SqlTtlCache {
30
30
  // 512 chars to accommodate potentially large `state` in Web5 Connect flow
31
31
  .addColumn('key', 'varchar(512)', (column) => column.primaryKey())
32
32
  .addColumn('value', 'text', (column) => column.notNull())
33
- .addColumn('expiry', 'integer', (column) => column.notNull())
33
+ .addColumn('expiry', 'bigint', (column) => column.notNull())
34
34
  .execute();
35
35
  await this.db.schema
36
36
  .createIndex('index_expiry')
@@ -78,11 +78,19 @@ export class SqlTtlCache {
78
78
  }
79
79
  const entry = result[0];
80
80
  // if the entry is expired, don't return it and delete it
81
- if (Date.now() >= entry.expiry) {
81
+ const expiry = typeof entry.expiry === 'string' ? parseInt(entry.expiry, 10) : entry.expiry;
82
+ if (Date.now() >= expiry) {
83
+ this.delete(key); // no need to await
84
+ return undefined;
85
+ }
86
+ try {
87
+ return JSON.parse(entry.value);
88
+ }
89
+ catch {
90
+ // Corrupt entry — remove it and return undefined.
82
91
  this.delete(key); // no need to await
83
92
  return undefined;
84
93
  }
85
- return JSON.parse(entry.value);
86
94
  }
87
95
  /**
88
96
  * Deletes a cache entry.