@enbox/dwn-server 0.0.3 → 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 (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 +16 -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
@@ -10,6 +10,7 @@ import { DwnServerError, DwnServerErrorCode } from '../dwn-error.js';
10
10
  */
11
11
  export class RegistrationManager {
12
12
  proofOfWorkManager;
13
+ providerAuthPlugin;
13
14
  registrationStore;
14
15
  termsOfServiceHash;
15
16
  termsOfService;
@@ -61,6 +62,10 @@ export class RegistrationManager {
61
62
  const sqlDialect = getDialectFromUrl(new URL(registrationStoreUrl));
62
63
  const registrationStore = await RegistrationStore.create(sqlDialect);
63
64
  registrationManager.registrationStore = registrationStore;
65
+ // Store optional provider auth plugin.
66
+ if (input.providerAuthPlugin !== undefined) {
67
+ registrationManager.providerAuthPlugin = input.providerAuthPlugin;
68
+ }
64
69
  return registrationManager;
65
70
  }
66
71
  /**
@@ -71,12 +76,59 @@ export class RegistrationManager {
71
76
  return proofOfWorkChallenge;
72
77
  }
73
78
  /**
74
- * Handles a registration request.
79
+ * Handles a registration request by dispatching to the appropriate handler
80
+ * based on the credentials provided.
75
81
  */
76
82
  async handleRegistrationRequest(registrationRequest) {
77
- // Ensure the supplied terms of service hash matches the one we require.
78
- if (registrationRequest.registrationData.termsOfServiceHash !== this.termsOfServiceHash) {
79
- throw new DwnServerError(DwnServerErrorCode.RegistrationManagerInvalidOrOutdatedTermsOfServiceHash, `Expecting terms-of-service hash ${this.termsOfServiceHash}, but got ${registrationRequest.registrationData.termsOfServiceHash}.`);
83
+ if (registrationRequest.providerAuth?.registrationToken !== undefined) {
84
+ await this.handleProviderAuthRegistration(registrationRequest);
85
+ }
86
+ else if (registrationRequest.proofOfWork !== undefined) {
87
+ await this.handleProofOfWorkRegistration(registrationRequest);
88
+ }
89
+ else {
90
+ throw new DwnServerError(DwnServerErrorCode.RegistrationRequestMissingCredentials, 'Registration request must include either providerAuth or proofOfWork credentials.');
91
+ }
92
+ }
93
+ /**
94
+ * Handles a provider-auth registration request.
95
+ */
96
+ async handleProviderAuthRegistration(registrationRequest) {
97
+ if (this.providerAuthPlugin === undefined) {
98
+ throw new DwnServerError(DwnServerErrorCode.ProviderAuthNotEnabled, 'Provider auth registration is not enabled on this server.');
99
+ }
100
+ const token = registrationRequest.providerAuth.registrationToken;
101
+ const validationResult = await this.providerAuthPlugin.validateRegistrationToken(token);
102
+ if (!validationResult.isValid) {
103
+ throw new DwnServerError(DwnServerErrorCode.ProviderAuthTokenInvalid, validationResult.detail ?? 'Provider auth registration token is invalid.');
104
+ }
105
+ // Validate ToS only when the server has ToS configured AND the request includes a hash.
106
+ if (this.termsOfServiceHash !== undefined && registrationRequest.registrationData.termsOfServiceHash !== undefined) {
107
+ if (registrationRequest.registrationData.termsOfServiceHash !== this.termsOfServiceHash) {
108
+ throw new DwnServerError(DwnServerErrorCode.RegistrationManagerInvalidOrOutdatedTermsOfServiceHash, `Expecting terms-of-service hash ${this.termsOfServiceHash}, ` +
109
+ `but got ${registrationRequest.registrationData.termsOfServiceHash}.`);
110
+ }
111
+ }
112
+ await this.registrationStore.insertOrUpdateTenantRegistration({
113
+ did: registrationRequest.registrationData.did,
114
+ termsOfServiceHash: registrationRequest.registrationData.termsOfServiceHash,
115
+ accountId: validationResult.accountId,
116
+ registrationType: 'provider-auth',
117
+ metadata: validationResult.metadata !== undefined
118
+ ? JSON.stringify(validationResult.metadata)
119
+ : undefined,
120
+ });
121
+ }
122
+ /**
123
+ * Handles a proof-of-work registration request.
124
+ */
125
+ async handleProofOfWorkRegistration(registrationRequest) {
126
+ // Validate ToS only when the server has ToS configured.
127
+ if (this.termsOfServiceHash !== undefined) {
128
+ if (registrationRequest.registrationData.termsOfServiceHash !== this.termsOfServiceHash) {
129
+ throw new DwnServerError(DwnServerErrorCode.RegistrationManagerInvalidOrOutdatedTermsOfServiceHash, `Expecting terms-of-service hash ${this.termsOfServiceHash}, ` +
130
+ `but got ${registrationRequest.registrationData.termsOfServiceHash}.`);
131
+ }
80
132
  }
81
133
  const { challengeNonce, responseNonce } = registrationRequest.proofOfWork;
82
134
  await this.proofOfWorkManager.verifyProofOfWork({
@@ -85,7 +137,11 @@ export class RegistrationManager {
85
137
  requestData: JSON.stringify(registrationRequest.registrationData),
86
138
  });
87
139
  // Store tenant registration data in database.
88
- await this.recordTenantRegistration(registrationRequest.registrationData);
140
+ await this.recordTenantRegistration({
141
+ did: registrationRequest.registrationData.did,
142
+ termsOfServiceHash: registrationRequest.registrationData.termsOfServiceHash,
143
+ registrationType: 'proof-of-work',
144
+ });
89
145
  }
90
146
  /**
91
147
  * Records the given registration data in the database.
@@ -109,7 +165,15 @@ export class RegistrationManager {
109
165
  detail: 'Not a registered tenant.'
110
166
  };
111
167
  }
112
- if (tenantRegistration.termsOfServiceHash !== this.termsOfServiceHash) {
168
+ if (tenantRegistration.suspended) {
169
+ return {
170
+ isActiveTenant: false,
171
+ detail: 'Tenant is suspended.'
172
+ };
173
+ }
174
+ // Only enforce ToS hash check when the server has a ToS configured.
175
+ if (this.termsOfServiceHash !== undefined &&
176
+ tenantRegistration.termsOfServiceHash !== this.termsOfServiceHash) {
113
177
  return {
114
178
  isActiveTenant: false,
115
179
  detail: 'Agreed terms-of-service is outdated.'
@@ -117,5 +181,12 @@ export class RegistrationManager {
117
181
  }
118
182
  return { isActiveTenant: true };
119
183
  }
184
+ /**
185
+ * Returns the underlying RegistrationStore, if initialized.
186
+ * Used by the admin API to access tenant data.
187
+ */
188
+ getRegistrationStore() {
189
+ return this.registrationStore;
190
+ }
120
191
  }
121
192
  //# sourceMappingURL=registration-manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"registration-manager.js","sourceRoot":"","sources":["../../../../src/registration/registration-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registration-manager.js","sourceRoot":"","sources":["../../../../src/registration/registration-manager.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,11 @@
1
1
  import type { Dialect } from '@enbox/dwn-sql-store';
2
- import type { RegistrationData } from './registration-types.js';
2
+ import type { TenantQuota } from '../admin/types.js';
3
3
  /**
4
4
  * The RegistrationStore is responsible for storing and retrieving tenant registration information.
5
5
  */
6
6
  export declare class RegistrationStore {
7
7
  private static readonly registeredTenantTableName;
8
+ private static readonly tenantQuotasTableName;
8
9
  private db;
9
10
  private constructor();
10
11
  /**
@@ -15,10 +16,89 @@ export declare class RegistrationStore {
15
16
  /**
16
17
  * Inserts or updates the tenant registration information.
17
18
  */
18
- insertOrUpdateTenantRegistration(registrationData: RegistrationData): Promise<void>;
19
+ insertOrUpdateTenantRegistration(registrationData: {
20
+ did: string;
21
+ termsOfServiceHash?: string;
22
+ accountId?: string;
23
+ registrationType?: string;
24
+ metadata?: string;
25
+ }): Promise<void>;
19
26
  /**
20
27
  * Retrieves the tenant registration information.
21
28
  */
22
- getTenantRegistration(tenantDid: string): Promise<RegistrationData | undefined>;
29
+ getTenantRegistration(tenantDid: string): Promise<RegisteredTenantRow | undefined>;
30
+ /**
31
+ * Returns a paginated list of registered tenants with optional search and status filtering.
32
+ *
33
+ * @see https://github.com/enboxorg/enbox/issues/390
34
+ */
35
+ listTenants(options?: {
36
+ cursor?: string;
37
+ limit?: number;
38
+ search?: string;
39
+ status?: 'active' | 'suspended';
40
+ }): Promise<{
41
+ tenants: RegisteredTenantRow[];
42
+ cursor?: string;
43
+ }>;
44
+ /**
45
+ * Returns the total count of registered tenants matching optional filters.
46
+ */
47
+ getTenantCount(options?: {
48
+ search?: string;
49
+ status?: 'active' | 'suspended';
50
+ }): Promise<number>;
51
+ /**
52
+ * Inserts a new tenant registration. Returns `false` if the tenant already exists.
53
+ *
54
+ * @see https://github.com/enboxorg/enbox/issues/393
55
+ */
56
+ createTenant(did: string): Promise<boolean>;
57
+ /**
58
+ * Suspends a tenant. Returns `true` if the tenant was found and suspended.
59
+ */
60
+ suspendTenant(did: string): Promise<boolean>;
61
+ /**
62
+ * Unsuspends a tenant. Returns `true` if the tenant was found and unsuspended.
63
+ */
64
+ unsuspendTenant(did: string): Promise<boolean>;
65
+ /**
66
+ * Deletes a tenant registration. Returns `true` if the tenant was found and deleted.
67
+ */
68
+ deleteTenant(did: string): Promise<boolean>;
69
+ /**
70
+ * Returns all tenant registrations associated with the given account ID.
71
+ *
72
+ * @see https://github.com/enboxorg/enbox/issues/404
73
+ */
74
+ getTenantsForAccount(accountId: string): Promise<RegisteredTenantRow[]>;
75
+ /**
76
+ * Returns the count of suspended tenants.
77
+ */
78
+ getSuspendedCount(): Promise<number>;
79
+ /**
80
+ * Returns the quota for a tenant, or `undefined` if no per-tenant quota is set.
81
+ */
82
+ getQuota(did: string): Promise<TenantQuota | undefined>;
83
+ /**
84
+ * Sets (inserts or updates) the quota for a tenant.
85
+ */
86
+ setQuota(quota: TenantQuota): Promise<void>;
87
+ /**
88
+ * Deletes the per-tenant quota. Returns `true` if a quota existed and was deleted.
89
+ */
90
+ deleteQuota(did: string): Promise<boolean>;
91
+ }
92
+ /**
93
+ * A row in the `registeredTenants` table.
94
+ */
95
+ export interface RegisteredTenantRow {
96
+ did: string;
97
+ termsOfServiceHash: string;
98
+ suspended?: number;
99
+ accountId?: string;
100
+ registrationType?: string;
101
+ registeredAt?: string;
102
+ metadata?: string;
23
103
  }
24
104
  //# sourceMappingURL=registration-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registration-store.d.ts","sourceRoot":"","sources":["../../../../src/registration/registration-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAIhE;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAuB;IAExE,OAAO,CAAC,EAAE,CAA+B;IAEzC,OAAO;IAIP;;OAEG;WACiB,MAAM,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC;YAQ7D,UAAU;IASxB;;OAEG;IACU,gCAAgC,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAahG;;OAEG;IACU,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;CAc7F"}
1
+ {"version":3,"file":"registration-store.d.ts","sourceRoot":"","sources":["../../../../src/registration/registration-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMrD;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAuB;IACxE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAkB;IAE/D,OAAO,CAAC,EAAE,CAA+B;IAEzC,OAAO;IAIP;;OAEG;WACiB,MAAM,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC;YAQ7D,UAAU;IA2CxB;;OAEG;IACU,gCAAgC,CAAC,gBAAgB,EAAE;QAC9D,GAAG,EAAE,MAAM,CAAC;QACZ,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,IAAI,CAAC;IA0CjB;;OAEG;IACU,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;IAkB/F;;;;OAIG;IACU,WAAW,CAAC,OAAO,CAAC,EAAE;QACjC,MAAM,CAAC,EAAG,MAAM,CAAC;QACjB,KAAK,CAAC,EAAG,MAAM,CAAC;QAChB,MAAM,CAAC,EAAG,MAAM,CAAC;QACjB,MAAM,CAAC,EAAG,QAAQ,GAAG,WAAW,CAAC;KAClC,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAkChE;;OAEG;IACU,cAAc,CAAC,OAAO,CAAC,EAAE;QACpC,MAAM,CAAC,EAAG,MAAM,CAAC;QACjB,MAAM,CAAC,EAAG,QAAQ,GAAG,WAAW,CAAC;KAClC,GAAG,OAAO,CAAC,MAAM,CAAC;IAmBnB;;;;OAIG;IACU,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAaxD;;OAEG;IACU,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUzD;;OAEG;IACU,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU3D;;OAEG;IACU,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASxD;;;;OAIG;IACU,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IASpF;;OAEG;IACU,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAcjD;;OAEG;IACU,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAkBpE;;OAEG;IACU,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBxD;;OAEG;IACU,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAQxD;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAG,MAAM,CAAC;IACb,kBAAkB,EAAG,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAG,MAAM,CAAC;IACpB,SAAS,CAAC,EAAG,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAG,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAG,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAG,MAAM,CAAC;CACpB"}
@@ -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":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC;;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;aACjB,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;IACf,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
1
  import type { Dialect } from '@enbox/dwn-sql-store';
2
2
  import type { DidResolver } from '@enbox/dids';
3
3
  import type { DwnServerConfig } from './config.js';
4
- import type { DataStore, DwnConfig, EventLog, EventStream, MessageStore, ResumableTaskStore, TenantGate } from '@enbox/dwn-sdk-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,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,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,UAAU,EACX,MAAM,mBAAmB,CAAC;AA0B3B,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,EAAG,eAAe,EACxB,OAAO,EAAG;IACR,WAAW,CAAC,EAAG,WAAW,CAAC;IAC3B,UAAU,CAAC,EAAG,UAAU,CAAC;IACzB,WAAW,CAAC,EAAG,WAAW,CAAC;CAC5B,GACA,OAAO,CAAC,SAAS,CAAC,CAQpB;AAwGD,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,GAAG,GAAG,OAAO,CA4B7D"}
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"}