@enbox/dwn-server 0.0.3 → 0.0.5

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 (295) hide show
  1. package/LICENSE +3 -2
  2. package/README.md +112 -212
  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 +122 -3
  36. package/dist/esm/src/config.d.ts.map +1 -1
  37. package/dist/esm/src/config.js +151 -5
  38. package/dist/esm/src/config.js.map +1 -1
  39. package/dist/esm/src/connection/connection-manager.d.ts +24 -1
  40. package/dist/esm/src/connection/connection-manager.d.ts.map +1 -1
  41. package/dist/esm/src/connection/connection-manager.js +33 -2
  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 +39 -4
  48. package/dist/esm/src/connection/socket-connection.d.ts.map +1 -1
  49. package/dist/esm/src/connection/socket-connection.js +80 -9
  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 +8 -0
  60. package/dist/esm/src/dwn-server.d.ts.map +1 -1
  61. package/dist/esm/src/dwn-server.js +198 -12
  62. package/dist/esm/src/dwn-server.js.map +1 -1
  63. package/dist/esm/src/http-api.d.ts +19 -2
  64. package/dist/esm/src/http-api.d.ts.map +1 -1
  65. package/dist/esm/src/http-api.js +219 -19
  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 +106 -4
  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 +22 -4
  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 +13 -1
  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/provider-auth-plugin.d.ts +46 -0
  123. package/dist/esm/src/registration/provider-auth-plugin.d.ts.map +1 -0
  124. package/dist/esm/src/registration/provider-auth-plugin.js +29 -0
  125. package/dist/esm/src/registration/provider-auth-plugin.js.map +1 -0
  126. package/dist/esm/src/registration/registration-manager.d.ts +27 -4
  127. package/dist/esm/src/registration/registration-manager.d.ts.map +1 -1
  128. package/dist/esm/src/registration/registration-manager.js +77 -6
  129. package/dist/esm/src/registration/registration-manager.js.map +1 -1
  130. package/dist/esm/src/registration/registration-store.d.ts +83 -3
  131. package/dist/esm/src/registration/registration-store.d.ts.map +1 -1
  132. package/dist/esm/src/registration/registration-store.js +248 -11
  133. package/dist/esm/src/registration/registration-store.js.map +1 -1
  134. package/dist/esm/src/storage.d.ts +4 -4
  135. package/dist/esm/src/storage.d.ts.map +1 -1
  136. package/dist/esm/src/storage.js +100 -20
  137. package/dist/esm/src/storage.js.map +1 -1
  138. package/dist/esm/src/web5-connect/sql-ttl-cache.d.ts.map +1 -1
  139. package/dist/esm/src/web5-connect/sql-ttl-cache.js +8 -1
  140. package/dist/esm/src/web5-connect/sql-ttl-cache.js.map +1 -1
  141. package/dist/esm/src/ws-api.d.ts +17 -1
  142. package/dist/esm/src/ws-api.d.ts.map +1 -1
  143. package/dist/esm/src/ws-api.js +9 -2
  144. package/dist/esm/src/ws-api.js.map +1 -1
  145. package/package.json +18 -16
  146. package/src/admin/activity-log.ts +100 -0
  147. package/src/admin/admin-api.ts +1308 -0
  148. package/src/admin/admin-auth.ts +56 -0
  149. package/src/admin/admin-store.ts +515 -0
  150. package/src/admin/audit-log.ts +327 -0
  151. package/src/admin/index.ts +34 -0
  152. package/src/admin/types.ts +352 -0
  153. package/src/admin/webhook-manager.ts +245 -0
  154. package/src/config.ts +177 -5
  155. package/src/connection/connection-manager.ts +50 -6
  156. package/src/connection/flow-controller.ts +117 -0
  157. package/src/connection/socket-connection.ts +103 -21
  158. package/src/delivery-service.ts +740 -0
  159. package/src/dwn-error.ts +9 -0
  160. package/src/dwn-server.ts +242 -14
  161. package/src/http-api.ts +271 -30
  162. package/src/index.ts +13 -2
  163. package/src/json-rpc-api.ts +2 -1
  164. package/src/json-rpc-handlers/dwn/process-message.ts +140 -5
  165. package/src/json-rpc-handlers/subscription/ack.ts +63 -0
  166. package/src/json-rpc-handlers/subscription/close.ts +2 -6
  167. package/src/json-rpc-handlers/subscription/index.ts +1 -0
  168. package/src/lib/json-rpc-router.ts +22 -6
  169. package/src/lib/sql-utils.ts +7 -0
  170. package/src/main.ts +0 -8
  171. package/src/message-processed-hook.ts +33 -0
  172. package/src/metrics.ts +50 -1
  173. package/src/plugins/event-log-nats.ts +466 -0
  174. package/src/rate-limiter.ts +143 -0
  175. package/src/registration/jwt-provider-auth-plugin.ts +119 -0
  176. package/src/registration/open-auth-handler.ts +263 -0
  177. package/src/registration/proof-of-work-manager.ts +1 -1
  178. package/src/registration/provider-auth-plugin.ts +84 -0
  179. package/src/registration/registration-manager.ts +108 -12
  180. package/src/registration/registration-store.ts +326 -17
  181. package/src/storage.ts +121 -27
  182. package/src/web5-connect/sql-ttl-cache.ts +7 -1
  183. package/src/ws-api.ts +30 -2
  184. package/dist/esm/src/json-rpc-socket.d.ts +0 -39
  185. package/dist/esm/src/json-rpc-socket.d.ts.map +0 -1
  186. package/dist/esm/src/json-rpc-socket.js +0 -125
  187. package/dist/esm/src/json-rpc-socket.js.map +0 -1
  188. package/dist/esm/src/lib/json-rpc.d.ts +0 -54
  189. package/dist/esm/src/lib/json-rpc.d.ts.map +0 -1
  190. package/dist/esm/src/lib/json-rpc.js +0 -60
  191. package/dist/esm/src/lib/json-rpc.js.map +0 -1
  192. package/dist/esm/src/registration/proof-of-work-types.d.ts +0 -8
  193. package/dist/esm/src/registration/proof-of-work-types.d.ts.map +0 -1
  194. package/dist/esm/src/registration/proof-of-work-types.js +0 -2
  195. package/dist/esm/src/registration/proof-of-work-types.js.map +0 -1
  196. package/dist/esm/src/registration/registration-types.d.ts +0 -18
  197. package/dist/esm/src/registration/registration-types.d.ts.map +0 -1
  198. package/dist/esm/src/registration/registration-types.js +0 -2
  199. package/dist/esm/src/registration/registration-types.js.map +0 -1
  200. package/dist/esm/tests/common-scenario-validator.d.ts +0 -11
  201. package/dist/esm/tests/common-scenario-validator.d.ts.map +0 -1
  202. package/dist/esm/tests/common-scenario-validator.js +0 -113
  203. package/dist/esm/tests/common-scenario-validator.js.map +0 -1
  204. package/dist/esm/tests/connection/connection-manager.spec.d.ts +0 -2
  205. package/dist/esm/tests/connection/connection-manager.spec.d.ts.map +0 -1
  206. package/dist/esm/tests/connection/connection-manager.spec.js +0 -49
  207. package/dist/esm/tests/connection/connection-manager.spec.js.map +0 -1
  208. package/dist/esm/tests/connection/socket-connection.spec.d.ts +0 -2
  209. package/dist/esm/tests/connection/socket-connection.spec.d.ts.map +0 -1
  210. package/dist/esm/tests/connection/socket-connection.spec.js +0 -147
  211. package/dist/esm/tests/connection/socket-connection.spec.js.map +0 -1
  212. package/dist/esm/tests/cors/http-api.browser.d.ts +0 -2
  213. package/dist/esm/tests/cors/http-api.browser.d.ts.map +0 -1
  214. package/dist/esm/tests/cors/http-api.browser.js +0 -60
  215. package/dist/esm/tests/cors/http-api.browser.js.map +0 -1
  216. package/dist/esm/tests/cors/ping.browser.d.ts +0 -2
  217. package/dist/esm/tests/cors/ping.browser.d.ts.map +0 -1
  218. package/dist/esm/tests/cors/ping.browser.js +0 -7
  219. package/dist/esm/tests/cors/ping.browser.js.map +0 -1
  220. package/dist/esm/tests/dwn-process-message.spec.d.ts +0 -2
  221. package/dist/esm/tests/dwn-process-message.spec.d.ts.map +0 -1
  222. package/dist/esm/tests/dwn-process-message.spec.js +0 -172
  223. package/dist/esm/tests/dwn-process-message.spec.js.map +0 -1
  224. package/dist/esm/tests/dwn-server.spec.d.ts +0 -2
  225. package/dist/esm/tests/dwn-server.spec.d.ts.map +0 -1
  226. package/dist/esm/tests/dwn-server.spec.js +0 -48
  227. package/dist/esm/tests/dwn-server.spec.js.map +0 -1
  228. package/dist/esm/tests/http-api.spec.d.ts +0 -2
  229. package/dist/esm/tests/http-api.spec.d.ts.map +0 -1
  230. package/dist/esm/tests/http-api.spec.js +0 -782
  231. package/dist/esm/tests/http-api.spec.js.map +0 -1
  232. package/dist/esm/tests/json-rpc-socket.spec.d.ts +0 -2
  233. package/dist/esm/tests/json-rpc-socket.spec.d.ts.map +0 -1
  234. package/dist/esm/tests/json-rpc-socket.spec.js +0 -227
  235. package/dist/esm/tests/json-rpc-socket.spec.js.map +0 -1
  236. package/dist/esm/tests/plugins/data-store-sqlite.d.ts +0 -17
  237. package/dist/esm/tests/plugins/data-store-sqlite.d.ts.map +0 -1
  238. package/dist/esm/tests/plugins/data-store-sqlite.js +0 -23
  239. package/dist/esm/tests/plugins/data-store-sqlite.js.map +0 -1
  240. package/dist/esm/tests/plugins/event-log-sqlite.d.ts +0 -17
  241. package/dist/esm/tests/plugins/event-log-sqlite.d.ts.map +0 -1
  242. package/dist/esm/tests/plugins/event-log-sqlite.js +0 -23
  243. package/dist/esm/tests/plugins/event-log-sqlite.js.map +0 -1
  244. package/dist/esm/tests/plugins/event-stream-in-memory.d.ts +0 -17
  245. package/dist/esm/tests/plugins/event-stream-in-memory.d.ts.map +0 -1
  246. package/dist/esm/tests/plugins/event-stream-in-memory.js +0 -21
  247. package/dist/esm/tests/plugins/event-stream-in-memory.js.map +0 -1
  248. package/dist/esm/tests/plugins/message-store-sqlite.d.ts +0 -17
  249. package/dist/esm/tests/plugins/message-store-sqlite.d.ts.map +0 -1
  250. package/dist/esm/tests/plugins/message-store-sqlite.js +0 -23
  251. package/dist/esm/tests/plugins/message-store-sqlite.js.map +0 -1
  252. package/dist/esm/tests/plugins/resumable-task-store-sqlite.d.ts +0 -17
  253. package/dist/esm/tests/plugins/resumable-task-store-sqlite.d.ts.map +0 -1
  254. package/dist/esm/tests/plugins/resumable-task-store-sqlite.js +0 -23
  255. package/dist/esm/tests/plugins/resumable-task-store-sqlite.js.map +0 -1
  256. package/dist/esm/tests/process-handler.spec.d.ts +0 -2
  257. package/dist/esm/tests/process-handler.spec.d.ts.map +0 -1
  258. package/dist/esm/tests/process-handler.spec.js +0 -60
  259. package/dist/esm/tests/process-handler.spec.js.map +0 -1
  260. package/dist/esm/tests/registration/proof-of-work-manager.spec.d.ts +0 -2
  261. package/dist/esm/tests/registration/proof-of-work-manager.spec.d.ts.map +0 -1
  262. package/dist/esm/tests/registration/proof-of-work-manager.spec.js +0 -156
  263. package/dist/esm/tests/registration/proof-of-work-manager.spec.js.map +0 -1
  264. package/dist/esm/tests/rpc-subscribe-close.spec.d.ts +0 -2
  265. package/dist/esm/tests/rpc-subscribe-close.spec.d.ts.map +0 -1
  266. package/dist/esm/tests/rpc-subscribe-close.spec.js +0 -81
  267. package/dist/esm/tests/rpc-subscribe-close.spec.js.map +0 -1
  268. package/dist/esm/tests/scenarios/dynamic-plugin-loading.spec.d.ts +0 -2
  269. package/dist/esm/tests/scenarios/dynamic-plugin-loading.spec.d.ts.map +0 -1
  270. package/dist/esm/tests/scenarios/dynamic-plugin-loading.spec.js +0 -74
  271. package/dist/esm/tests/scenarios/dynamic-plugin-loading.spec.js.map +0 -1
  272. package/dist/esm/tests/scenarios/registration.spec.d.ts +0 -2
  273. package/dist/esm/tests/scenarios/registration.spec.d.ts.map +0 -1
  274. package/dist/esm/tests/scenarios/registration.spec.js +0 -511
  275. package/dist/esm/tests/scenarios/registration.spec.js.map +0 -1
  276. package/dist/esm/tests/scenarios/web5-connect.spec.d.ts +0 -2
  277. package/dist/esm/tests/scenarios/web5-connect.spec.d.ts.map +0 -1
  278. package/dist/esm/tests/scenarios/web5-connect.spec.js +0 -141
  279. package/dist/esm/tests/scenarios/web5-connect.spec.js.map +0 -1
  280. package/dist/esm/tests/test-dwn.d.ts +0 -7
  281. package/dist/esm/tests/test-dwn.d.ts.map +0 -1
  282. package/dist/esm/tests/test-dwn.js +0 -28
  283. package/dist/esm/tests/test-dwn.js.map +0 -1
  284. package/dist/esm/tests/utils.d.ts +0 -43
  285. package/dist/esm/tests/utils.d.ts.map +0 -1
  286. package/dist/esm/tests/utils.js +0 -107
  287. package/dist/esm/tests/utils.js.map +0 -1
  288. package/dist/esm/tests/ws-api.spec.d.ts +0 -2
  289. package/dist/esm/tests/ws-api.spec.d.ts.map +0 -1
  290. package/dist/esm/tests/ws-api.spec.js +0 -332
  291. package/dist/esm/tests/ws-api.spec.js.map +0 -1
  292. package/src/json-rpc-socket.ts +0 -156
  293. package/src/lib/json-rpc.ts +0 -126
  294. package/src/registration/proof-of-work-types.ts +0 -7
  295. package/src/registration/registration-types.ts +0 -18
@@ -2,15 +2,16 @@ import * as fs from 'fs';
2
2
  import Cursor from 'pg-cursor';
3
3
  import { createPool as MySQLCreatePool } from 'mysql2';
4
4
  import pg from 'pg';
5
+ import { Kysely } from 'kysely';
5
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);
@@ -139,7 +219,7 @@ function invalidStorageSchemeMessage(protocol) {
139
219
  schemes.push(value);
140
220
  }
141
221
  return ('Unknown storage protocol ' +
142
- protocol.slice(0, 1) +
222
+ protocol.slice(0, -1) +
143
223
  '! Please use one of: ' +
144
224
  schemes.join(', ') +
145
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":"AAaA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,MAAM,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAE,UAAU,IAAI,eAAe,EAAE,MAAM,QAAQ,CAAC;AACvD,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,uBAAuB,EACvB,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,aAAa,EACb,aAAa,GACd,MAAM,sBAAsB,CAAC;AAE9B,MAAM,CAAN,IAAY,SAKX;AALD,WAAY,SAAS;IACnB,mDAAS,CAAA;IACT,yDAAY,CAAA;IACZ,qDAAU,CAAA;IACV,qEAAkB,CAAA;AACpB,CAAC,EALW,SAAS,KAAT,SAAS,QAKpB;AAED,MAAM,CAAN,IAAY,YAKX;AALD,WAAY,YAAY;IACtB,+BAAe,CAAA;IACf,iCAAiB,CAAA;IACjB,+BAAe,CAAA;IACf,qCAAqB,CAAA;AACvB,CAAC,EALW,YAAY,KAAZ,YAAY,QAKvB;AAID;;;;;GAKG;AACH,MAAM,kBAAkB,GAAyB,IAAI,GAAG,EAAE,CAAC;AAE3D;;;GAGG;AACH,SAAS,kBAAkB,CAAC,aAAkB,EAAE,MAAuB;IACrE,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAErD,IAAI,QAAQ,KAAK,YAAY,CAAC,QAAQ,EAAE,CAAC;QACvC,OAAO,iBAAiB,CAAC,aAAa,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,GAAG,GAAG,aAAa,CAAC,QAAQ,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,6DAA6D;IAC7D,MAAM,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC;QACvB,gBAAgB,EAAI,aAAa,CAAC,QAAQ,EAAE;QAC5C,GAAG,EAAiB,MAAM,CAAC,SAAS;QACpC,GAAG,EAAiB,MAAM,CAAC,SAAS;QACpC,iBAAiB,EAAG,MAAM,CAAC,iBAAiB;KAC7C,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC;QAClC,IAAI,EAAK,KAAK,IAAsB,EAAE,CAAC,IAAI;QAC3C,MAAM,EAAG,MAAM;KAChB,CAAC,CAAC;IAEH,kBAAkB,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACrC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAwB,EACxB,OAIC;IAED,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAEtD,wEAAwE;IACxE,2EAA2E;IAC3E,0DAA0D;IAC1D,MAAM,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAEvC,MAAM,SAAS,GAAc,MAAM,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC3F,MAAM,UAAU,GAAe,MAAM,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IAC/F,MAAM,YAAY,GAAiB,MAAM,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC;IACvG,MAAM,kBAAkB,GAAuB,MAAM,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,kBAAkB,EAAE,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAE/H,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,kBAAkB,EAAE,UAAU,EAAE,CAAC;AACxG,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,wBAAwB,CAAC,MAAuB;IAC7D,2EAA2E;IAC3E,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QACjC,OAAO;IACT,CAAC;IAED,IAAI,QAAa,CAAC;IAClB,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,yBAAyB;IACnC,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAChD,MAAM,WAAW,GAAa,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC/F,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpC,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACrD,MAAM,EAAE,GAAG,IAAI,MAAM,CAA0B,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,2BAA2B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;YAAS,CAAC;QACT,sEAAsE;QACtE,yEAAyE;QACzE,wDAAwD;QACxD,IAAI,QAAQ,KAAK,YAAY,CAAC,QAAQ,EAAE,CAAC;YACvC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CACpB,QAAa,EACb,SAAoB;IAEpB,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,SAAS,CAAC,SAAS;YACtB,OAAO,IAAI,cAAc,CAAC;gBACxB,kBAAkB,EAAE,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,QAAQ,GAAG,YAAY;aACrE,CAAC,CAAC;QACL,KAAK,SAAS,CAAC,YAAY;YACzB,OAAO,IAAI,iBAAiB,CAAC;gBAC3B,kBAAkB,EAAG,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,QAAQ,GAAG,eAAe;gBACxE,aAAa,EAAQ,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,QAAQ,GAAG,QAAQ;aAClE,CAAC,CAAC;QACL,KAAK,SAAS,CAAC,UAAU;YACvB,OAAO,IAAI,eAAe,CAAC;gBACzB,QAAQ,EAAE,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,QAAQ,GAAG,aAAa;aAC5D,CAAC,CAAC;QACL,KAAK,SAAS,CAAC,kBAAkB;YAC/B,OAAO,IAAI,uBAAuB,CAAC;gBACjC,QAAQ,EAAE,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,QAAQ,GAAG,uBAAuB;aACtE,CAAC,CAAC;QACL;YACE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAClB,MAAuB,EACvB,aAAkB,EAClB,SAAoB;IAEpB,MAAM,OAAO,GAAG,kBAAkB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAE1D,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,SAAS,CAAC,SAAS;YACtB,OAAO,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;QACnC,KAAK,SAAS,CAAC,YAAY;YACzB,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;QACtC,KAAK,SAAS,CAAC,UAAU;YACvB,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;QACpC,KAAK,SAAS,CAAC,kBAAkB;YAC/B,OAAO,IAAI,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC5C;YACE,MAAM,IAAI,KAAK,CAAC,0BAA0B,SAAS,iBAAiB,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,YAAoB;IACtC,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5C,OAAO,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AAC1E,CAAC;AAMD,KAAK,UAAU,QAAQ,CAAC,MAAuB,EAAE,iBAAyB,EAAE,SAAoB;IAC9F,IAAI,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAClC,OAAO,MAAM,qBAAqB,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;IACnE,CAAC;IACD,4DAA4D;IAE5D,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAE5C,QAAQ,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,KAAK,YAAY,CAAC,KAAK;YACrB,OAAO,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAE5C,KAAK,YAAY,CAAC,MAAM,CAAC;QACzB,KAAK,YAAY,CAAC,KAAK,CAAC;QACxB,KAAK,YAAY,CAAC,QAAQ;YACxB,OAAO,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAElD;YACE,MAAM,2BAA2B,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,qBAAqB,CAClC,QAAgB,EAChB,SAAoB;IAEpB,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,SAAS,CAAC,SAAS;YACtB,OAAO,MAAM,YAAY,CAAC,UAAU,CAAY,QAAQ,CAAC,CAAC;QAC5D,KAAK,SAAS,CAAC,UAAU;YACvB,OAAO,MAAM,YAAY,CAAC,UAAU,CAAa,QAAQ,CAAC,CAAC;QAC7D,KAAK,SAAS,CAAC,YAAY;YACzB,OAAO,MAAM,YAAY,CAAC,UAAU,CAAe,QAAQ,CAAC,CAAC;QAC/D,KAAK,SAAS,CAAC,kBAAkB;YAC/B,OAAO,MAAM,YAAY,CAAC,UAAU,CAAqB,QAAQ,CAAC,CAAC;QACrE;YACE,MAAM,IAAI,KAAK,CAAC,4CAA4C,SAAS,cAAc,QAAQ,EAAE,CAAC,CAAC;IACnG,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,aAAkB;IAClD,QAAQ,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5C,KAAK,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;YACzB,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,6CAA6C;YAE9G,IAAI,aAAa,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7D,OAAO,CAAC,GAAG,CAAC,8CAA8C,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;gBAChF,EAAE,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACxD,CAAC;YAED,4DAA4D;YAC5D,MAAM,MAAM,GAAG,IAAI,IAAI,UAAU,CAAC;YAElC,OAAO,IAAI,aAAa,CAAC;gBACvB,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,uBAAuB,CAAC,MAAM,CAAC;aACtD,CAAC,CAAC;QACL,CAAC;QACD,KAAK,YAAY,CAAC,KAAK;YACrB,OAAO,IAAI,YAAY,CAAC;gBACtB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,eAAe,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;aAC5D,CAAC,CAAC;QACL,KAAK,YAAY,CAAC,QAAQ;YACxB,OAAO,IAAI,eAAe,CAAC;gBACzB,IAAI,EAAK,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,gBAAgB,EAAE,aAAa,CAAC,QAAQ,EAAE,EAAE,CAAC;gBAChF,MAAM,EAAG,MAAM;aAChB,CAAC,CAAC;IACP,CAAC;AACH,CAAC;AAED,SAAS,2BAA2B,CAAC,QAAgB;IACnD,MAAM,OAAO,GAAG,EAAE,CAAC;IACnB,KAAK,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,CACL,2BAA2B;QAC3B,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrB,uBAAuB;QACvB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAClB,2BAA2B,CAC5B,CAAC;AACJ,CAAC"}
@@ -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;IAyB1D;;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"}
@@ -83,7 +83,14 @@ export class SqlTtlCache {
83
83
  this.delete(key); // no need to await
84
84
  return undefined;
85
85
  }
86
- return JSON.parse(entry.value);
86
+ try {
87
+ return JSON.parse(entry.value);
88
+ }
89
+ catch {
90
+ // Corrupt entry — remove it and return undefined.
91
+ this.delete(key); // no need to await
92
+ return undefined;
93
+ }
87
94
  }
88
95
  /**
89
96
  * Deletes a cache entry.
@@ -1 +1 @@
1
- {"version":3,"file":"sql-ttl-cache.js","sourceRoot":"","sources":["../../../../src/web5-connect/sql-ttl-cache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sql-ttl-cache.js","sourceRoot":"","sources":["../../../../src/web5-connect/sql-ttl-cache.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC;;GAEG;AACH,MAAM,OAAO,WAAW;IACd,MAAM,CAAU,cAAc,GAAG,cAAc,CAAC;IAChD,MAAM,CAAU,wBAAwB,GAAG,EAAE,CAAC;IAE9C,UAAU,CAAU;IACpB,EAAE,CAAwB;IAC1B,YAAY,CAAiB;IAErC,YAAoB,UAAmB;QACrC,IAAI,CAAC,EAAE,GAAG,IAAI,MAAM,CAAgB,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAmB;QAC5C,MAAM,YAAY,GAAG,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC;QAEjD,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;QAEhC,OAAO,YAAY,CAAC;IACtB,CAAC;IAEO,KAAK,CAAC,UAAU;QAEtB,mCAAmC;QACnC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;QACxF,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM;iBACjB,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC;iBACvC,WAAW,EAAE,CAAC,8HAA8H;gBAC7I,0EAA0E;iBACzE,SAAS,CAAC,KAAK,EAAE,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;iBACjE,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;iBACxD,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;iBAC3D,OAAO,EAAE,CAAC;YAEb,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM;iBACjB,WAAW,CAAC,cAAc,CAAC;gBAC5B,uHAAuH;iBACtH,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC;iBAC9B,MAAM,CAAC,QAAQ,CAAC;iBAChB,OAAO,EAAE,CAAC;QACf,CAAC;QAED,0BAA0B;QAC1B,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACK,iBAAiB;QACvB,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;YACzC,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACrC,CAAC,EAAE,WAAW,CAAC,wBAAwB,GAAG,IAAI,CAAC,CAAC;IAClD,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,MAAM,CAAC,GAAW,EAAE,KAAa,EAAE,GAAW;QACzD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;QAEzC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAE3C,MAAM,IAAI,CAAC,EAAE;aACV,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC;aACtC,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;aAC5C,OAAO,EAAE,CAAC;IACf,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,GAAG,CAAC,GAAW;QAC1B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE;aACzB,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC;aACtC,MAAM,CAAC,KAAK,CAAC;aACb,MAAM,CAAC,OAAO,CAAC;aACf,MAAM,CAAC,QAAQ,CAAC;aAChB,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC;aACtB,OAAO,EAAE,CAAC;QAEb,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAExB,yDAAyD;QACzD,MAAM,MAAM,GAAG,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;QAC5F,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,mBAAmB;YACrC,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,kDAAkD;YAClD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,mBAAmB;YACrC,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,MAAM,CAAC,GAAW;QAC7B,MAAM,IAAI,CAAC,EAAE;aACV,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC;aACtC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC;aACtB,OAAO,EAAE,CAAC;IACf,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,qBAAqB;QAChC,MAAM,IAAI,CAAC,EAAE;aACV,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC;aACtC,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;aAChC,OAAO,EAAE,CAAC;IACf,CAAC"}
@@ -1,11 +1,27 @@
1
1
  import type { Dwn } from '@enbox/dwn-sdk-js';
2
+ import type { ActivityLog } from './admin/activity-log.js';
3
+ import type { AdminStore } from './admin/admin-store.js';
2
4
  import type { ConnectionManager } from './connection/connection-manager.js';
5
+ import type { DwnServerConfig } from './config.js';
6
+ import type { MessageProcessedHook } from './message-processed-hook.js';
7
+ import type { RateLimiter } from './rate-limiter.js';
8
+ import type { RegistrationStore } from './registration/registration-store.js';
3
9
  import type { HttpApi } from './http-api.js';
4
10
  export declare class WsApi {
5
11
  #private;
6
12
  dwn: Dwn;
7
- constructor(httpApi: HttpApi, dwn: Dwn, connectionManager?: ConnectionManager);
13
+ constructor(httpApi: HttpApi, dwn: Dwn, connectionManager?: ConnectionManager, maxInFlight?: number, activityLog?: ActivityLog, options?: {
14
+ adminStore?: AdminStore;
15
+ registrationStore?: RegistrationStore;
16
+ config?: DwnServerConfig;
17
+ tenantRateLimiter?: RateLimiter;
18
+ messageProcessedHooks?: MessageProcessedHook[];
19
+ });
8
20
  start(): void;
21
+ /**
22
+ * Returns the connection manager. Used by the admin API for connection introspection.
23
+ */
24
+ get connectionManager(): ConnectionManager;
9
25
  close(): Promise<void>;
10
26
  }
11
27
  //# sourceMappingURL=ws-api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ws-api.d.ts","sourceRoot":"","sources":["../../../src/ws-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAG7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,KAAK,EAAE,OAAO,EAAU,MAAM,eAAe,CAAC;AAIrD,qBAAa,KAAK;;IAChB,GAAG,EAAE,GAAG,CAAC;gBAGG,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,iBAAiB,CAAC,EAAE,iBAAiB;IAU7E,KAAK,IAAI,IAAI;IAIP,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
1
+ {"version":3,"file":"ws-api.d.ts","sourceRoot":"","sources":["../../../src/ws-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAG7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,KAAK,EAAE,OAAO,EAAU,MAAM,eAAe,CAAC;AAIrD,qBAAa,KAAK;;IAChB,GAAG,EAAE,GAAG,CAAC;gBAIP,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,iBAAiB,CAAC,EAAE,iBAAiB,EACjE,WAAW,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,EAC/C,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAG,UAAU,CAAC;QACzB,iBAAiB,CAAC,EAAG,iBAAiB,CAAC;QACvC,MAAM,CAAC,EAAG,eAAe,CAAC;QAC1B,iBAAiB,CAAC,EAAG,WAAW,CAAC;QACjC,qBAAqB,CAAC,EAAG,oBAAoB,EAAE,CAAC;KACjD;IAgBH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,IAAI,iBAAiB,IAAI,iBAAiB,CAEzC;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
@@ -2,9 +2,10 @@ import { InMemoryConnectionManager } from './connection/connection-manager.js';
2
2
  export class WsApi {
3
3
  dwn;
4
4
  #connectionManager;
5
- constructor(httpApi, dwn, connectionManager) {
5
+ constructor(httpApi, dwn, connectionManager, maxInFlight, activityLog, options) {
6
6
  this.dwn = dwn;
7
- this.#connectionManager = connectionManager || new InMemoryConnectionManager(dwn);
7
+ this.#connectionManager = connectionManager ||
8
+ new InMemoryConnectionManager(dwn, new Map(), maxInFlight, activityLog, options?.adminStore, options?.registrationStore, options?.config, options?.tenantRateLimiter, options?.messageProcessedHooks);
8
9
  // Wire up the WebSocket open event from Bun.serve() to the connection manager.
9
10
  httpApi.onWebSocketConnection = (ws) => {
10
11
  this.#connectionManager.connect(ws);
@@ -13,6 +14,12 @@ export class WsApi {
13
14
  start() {
14
15
  // No additional setup needed — Bun.serve() handles WebSocket lifecycle.
15
16
  }
17
+ /**
18
+ * Returns the connection manager. Used by the admin API for connection introspection.
19
+ */
20
+ get connectionManager() {
21
+ return this.#connectionManager;
22
+ }
16
23
  async close() {
17
24
  await this.#connectionManager.closeAll();
18
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ws-api.js","sourceRoot":"","sources":["../../../src/ws-api.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAE/E,MAAM,OAAO,KAAK;IAChB,GAAG,CAAM;IACT,kBAAkB,CAAoB;IAEtC,YAAY,OAAgB,EAAE,GAAQ,EAAE,iBAAqC;QAC3E,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,kBAAkB,GAAG,iBAAiB,IAAI,IAAI,yBAAyB,CAAC,GAAG,CAAC,CAAC;QAElF,+EAA+E;QAC/E,OAAO,CAAC,qBAAqB,GAAG,CAAC,EAA2B,EAAQ,EAAE;YACpE,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACtC,CAAC,CAAC;IACJ,CAAC;IAED,KAAK;QACH,wEAAwE;IAC1E,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC;IAC3C,CAAC;CACF"}
1
+ {"version":3,"file":"ws-api.js","sourceRoot":"","sources":["../../../src/ws-api.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAE/E,MAAM,OAAO,KAAK;IAChB,GAAG,CAAM;IACT,kBAAkB,CAAoB;IAEtC,YACE,OAAgB,EAAE,GAAQ,EAAE,iBAAqC,EACjE,WAAoB,EAAE,WAAyB,EAC/C,OAMC;QAED,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,kBAAkB,GAAG,iBAAiB;YACzC,IAAI,yBAAyB,CAC3B,GAAG,EAAE,IAAI,GAAG,EAAE,EAAE,WAAW,EAAE,WAAW,EACxC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAC5F,OAAO,EAAE,qBAAqB,CAC/B,CAAC;QAEJ,+EAA+E;QAC/E,OAAO,CAAC,qBAAqB,GAAG,CAAC,EAA2B,EAAQ,EAAE;YACpE,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACtC,CAAC,CAAC;IACJ,CAAC;IAED,KAAK;QACH,wEAAwE;IAC1E,CAAC;IAED;;OAEG;IACH,IAAI,iBAAiB;QACnB,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC;IAC3C,CAAC;CACF"}
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "@enbox/dwn-server",
3
3
  "type": "module",
4
- "version": "0.0.3",
4
+ "version": "0.0.5",
5
+ "license": "Apache-2.0",
5
6
  "files": [
6
7
  "dist",
7
8
  "src"
@@ -29,12 +30,16 @@
29
30
  "access": "public"
30
31
  },
31
32
  "dependencies": {
32
- "@enbox/common": "workspace:*",
33
- "@enbox/crypto": "workspace:*",
34
- "@enbox/dids": "workspace:*",
35
- "@enbox/dwn-sdk-js": "workspace:*",
36
- "@enbox/dwn-sql-store": "workspace:*",
33
+ "@enbox/common": "0.0.5",
34
+ "@enbox/crypto": "0.0.6",
35
+ "@enbox/dids": "0.0.7",
36
+ "@enbox/dwn-clients": "0.0.7",
37
+ "@enbox/dwn-sdk-js": "0.1.0",
38
+ "@enbox/dwn-sql-store": "0.0.9",
39
+ "@nats-io/jetstream": "^3.3.1",
40
+ "@nats-io/transport-node": "^3.3.1",
37
41
  "bytes": "3.1.2",
42
+ "jose": "^6.1.3",
38
43
  "kysely": "^0.26.3",
39
44
  "loglevel": "^1.8.1",
40
45
  "loglevel-plugin-prefix": "^0.8.4",
@@ -45,24 +50,21 @@
45
50
  "uuid": "9.0.0",
46
51
  "ws": "8.18.0"
47
52
  },
53
+ "optionalDependencies": {
54
+ "@enbox/dwn-server-admin-ui": "0.1.0"
55
+ },
48
56
  "devDependencies": {
49
57
  "@types/bun": "^1.3.9",
50
58
  "@types/bytes": "3.1.1",
51
- "@types/chai": "4.3.4",
52
- "@types/chai-as-promised": "7.1.5",
53
- "@types/mocha": "10.0.1",
54
- "@types/node": "18.11.18",
59
+ "@types/node": "20.14.8",
55
60
  "@types/sinon": "17.0.3",
56
61
  "@types/ws": "8.5.10",
57
62
  "@typescript-eslint/eslint-plugin": "8.32.1",
58
63
  "@typescript-eslint/parser": "8.32.1",
59
- "c8": "8.0.1",
60
- "chai": "4.3.6",
61
- "chai-as-promised": "7.1.1",
64
+ "bun-types": "^1.2.4",
62
65
  "crypto-browserify": "^3.12.0",
63
66
  "esbuild": "0.16.17",
64
67
  "eslint": "9.7.0",
65
- "eslint-plugin-mocha": "^10.4.3",
66
68
  "eslint-plugin-todo-plz": "^1.3.0",
67
69
  "http-proxy": "^1.18.1",
68
70
  "husky": "^8.0.0",
@@ -71,7 +73,6 @@
71
73
  "karma-esbuild": "2.2.5",
72
74
  "karma-mocha": "^2.0.1",
73
75
  "lint-staged": "^15.2.9",
74
- "mocha": "^10.2.0",
75
76
  "multiformats": "11.0.2",
76
77
  "puppeteer": "^22.11.2",
77
78
  "rimraf": "^5.0.0",
@@ -84,7 +85,8 @@
84
85
  "clean": "rimraf dist && rimraf generated/*",
85
86
  "lint": "eslint . --max-warnings 0",
86
87
  "lint:fix": "eslint . --fix",
87
- "test": "bun run build:esm && cp -R tests/fixtures dist/esm/tests && bunx --bun mocha",
88
+ "test:node": "bun test .test.ts",
89
+ "test:node:coverage": "bun test --coverage --coverage-reporter=text --coverage-reporter=lcov --coverage-dir=coverage .test.ts",
88
90
  "server": "bun run build:esm && bun dist/esm/src/main.js"
89
91
  },
90
92
  "husky": {
@@ -0,0 +1,100 @@
1
+ import type { AdminActivityEvent } from './types.js';
2
+
3
+ /** Default maximum number of events retained in the ring buffer. */
4
+ export const DEFAULT_ACTIVITY_LOG_CAPACITY = 10_000;
5
+
6
+ /**
7
+ * In-memory ring buffer that captures recent DWN request activity.
8
+ *
9
+ * Events are assigned a monotonically increasing `id` that acts as a cursor.
10
+ * When the buffer reaches capacity, the oldest events are evicted. This is
11
+ * **not** a persistent audit log — it is designed for real-time admin
12
+ * observability.
13
+ */
14
+ export class ActivityLog {
15
+ readonly #capacity: number;
16
+ readonly #buffer: AdminActivityEvent[];
17
+ #nextId = 1;
18
+
19
+ constructor(capacity: number = DEFAULT_ACTIVITY_LOG_CAPACITY) {
20
+ this.#capacity = Math.max(1, capacity);
21
+ this.#buffer = [];
22
+ }
23
+
24
+ /**
25
+ * Records a new activity event. If the buffer is full, the oldest event is
26
+ * evicted.
27
+ */
28
+ public record(event: Omit<AdminActivityEvent, 'id' | 'timestamp'>): void {
29
+ const entry: AdminActivityEvent = {
30
+ id : this.#nextId++,
31
+ timestamp : new Date().toISOString(),
32
+ tenant : event.tenant,
33
+ interface : event.interface,
34
+ method : event.method,
35
+ statusCode : event.statusCode,
36
+ transport : event.transport,
37
+ dataSizeBytes : event.dataSizeBytes,
38
+ };
39
+
40
+ if (this.#buffer.length >= this.#capacity) {
41
+ this.#buffer.shift();
42
+ }
43
+
44
+ this.#buffer.push(entry);
45
+ }
46
+
47
+ /**
48
+ * Returns recent events, optionally filtered by a cursor (returns events
49
+ * with `id > since`) and limited to `limit` entries.
50
+ */
51
+ public getEvents(options?: {
52
+ since? : number;
53
+ limit? : number;
54
+ }): { events: AdminActivityEvent[]; cursor?: number } {
55
+ const since = options?.since ?? 0;
56
+ const limit = options?.limit ?? 50;
57
+
58
+ // Binary search for the start index (events are ordered by id).
59
+ let startIdx = 0;
60
+ if (since > 0 && this.#buffer.length > 0) {
61
+ let lo = 0;
62
+ let hi = this.#buffer.length;
63
+ while (lo < hi) {
64
+ const mid = (lo + hi) >>> 1;
65
+ if (this.#buffer[mid].id <= since) {
66
+ lo = mid + 1;
67
+ } else {
68
+ hi = mid;
69
+ }
70
+ }
71
+ startIdx = lo;
72
+ }
73
+
74
+ const events = this.#buffer.slice(startIdx, startIdx + limit);
75
+ const cursor = events.length > 0 ? events[events.length - 1].id : undefined;
76
+
77
+ return { events, cursor };
78
+ }
79
+
80
+ /**
81
+ * Returns the current number of events in the buffer.
82
+ */
83
+ public get size(): number {
84
+ return this.#buffer.length;
85
+ }
86
+
87
+ /**
88
+ * Returns the configured capacity of the ring buffer.
89
+ */
90
+ public get capacity(): number {
91
+ return this.#capacity;
92
+ }
93
+
94
+ /**
95
+ * Clears all events from the buffer.
96
+ */
97
+ public clear(): void {
98
+ this.#buffer.length = 0;
99
+ }
100
+ }