@enbox/dwn-server 0.0.2 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (309) hide show
  1. package/LICENSE +3 -2
  2. package/README.md +115 -215
  3. package/dist/esm/src/admin/activity-log.d.ts +44 -0
  4. package/dist/esm/src/admin/activity-log.d.ts.map +1 -0
  5. package/dist/esm/src/admin/activity-log.js +85 -0
  6. package/dist/esm/src/admin/activity-log.js.map +1 -0
  7. package/dist/esm/src/admin/admin-api.d.ts +61 -0
  8. package/dist/esm/src/admin/admin-api.d.ts.map +1 -0
  9. package/dist/esm/src/admin/admin-api.js +1047 -0
  10. package/dist/esm/src/admin/admin-api.js.map +1 -0
  11. package/dist/esm/src/admin/admin-auth.d.ts +9 -0
  12. package/dist/esm/src/admin/admin-auth.d.ts.map +1 -0
  13. package/dist/esm/src/admin/admin-auth.js +45 -0
  14. package/dist/esm/src/admin/admin-auth.js.map +1 -0
  15. package/dist/esm/src/admin/admin-store.d.ts +111 -0
  16. package/dist/esm/src/admin/admin-store.d.ts.map +1 -0
  17. package/dist/esm/src/admin/admin-store.js +376 -0
  18. package/dist/esm/src/admin/admin-store.js.map +1 -0
  19. package/dist/esm/src/admin/audit-log.d.ts +94 -0
  20. package/dist/esm/src/admin/audit-log.d.ts.map +1 -0
  21. package/dist/esm/src/admin/audit-log.js +220 -0
  22. package/dist/esm/src/admin/audit-log.js.map +1 -0
  23. package/dist/esm/src/admin/index.d.ts +10 -0
  24. package/dist/esm/src/admin/index.d.ts.map +1 -0
  25. package/dist/esm/src/admin/index.js +7 -0
  26. package/dist/esm/src/admin/index.js.map +1 -0
  27. package/dist/esm/src/admin/types.d.ts +306 -0
  28. package/dist/esm/src/admin/types.d.ts.map +1 -0
  29. package/dist/esm/src/admin/types.js +2 -0
  30. package/dist/esm/src/admin/types.js.map +1 -0
  31. package/dist/esm/src/admin/webhook-manager.d.ts +55 -0
  32. package/dist/esm/src/admin/webhook-manager.d.ts.map +1 -0
  33. package/dist/esm/src/admin/webhook-manager.js +184 -0
  34. package/dist/esm/src/admin/webhook-manager.js.map +1 -0
  35. package/dist/esm/src/config.d.ts +124 -9
  36. package/dist/esm/src/config.d.ts.map +1 -1
  37. package/dist/esm/src/config.js +155 -13
  38. package/dist/esm/src/config.js.map +1 -1
  39. package/dist/esm/src/connection/connection-manager.d.ts +32 -9
  40. package/dist/esm/src/connection/connection-manager.d.ts.map +1 -1
  41. package/dist/esm/src/connection/connection-manager.js +38 -5
  42. package/dist/esm/src/connection/connection-manager.js.map +1 -1
  43. package/dist/esm/src/connection/flow-controller.d.ts +53 -0
  44. package/dist/esm/src/connection/flow-controller.d.ts.map +1 -0
  45. package/dist/esm/src/connection/flow-controller.js +101 -0
  46. package/dist/esm/src/connection/flow-controller.js.map +1 -0
  47. package/dist/esm/src/connection/socket-connection.d.ts +54 -18
  48. package/dist/esm/src/connection/socket-connection.d.ts.map +1 -1
  49. package/dist/esm/src/connection/socket-connection.js +102 -40
  50. package/dist/esm/src/connection/socket-connection.js.map +1 -1
  51. package/dist/esm/src/delivery-service.d.ts +43 -0
  52. package/dist/esm/src/delivery-service.d.ts.map +1 -0
  53. package/dist/esm/src/delivery-service.js +574 -0
  54. package/dist/esm/src/delivery-service.js.map +1 -0
  55. package/dist/esm/src/dwn-error.d.ts +10 -1
  56. package/dist/esm/src/dwn-error.d.ts.map +1 -1
  57. package/dist/esm/src/dwn-error.js +9 -0
  58. package/dist/esm/src/dwn-error.js.map +1 -1
  59. package/dist/esm/src/dwn-server.d.ts +13 -6
  60. package/dist/esm/src/dwn-server.d.ts.map +1 -1
  61. package/dist/esm/src/dwn-server.js +199 -24
  62. package/dist/esm/src/dwn-server.js.map +1 -1
  63. package/dist/esm/src/http-api.d.ts +28 -13
  64. package/dist/esm/src/http-api.d.ts.map +1 -1
  65. package/dist/esm/src/http-api.js +649 -374
  66. package/dist/esm/src/http-api.js.map +1 -1
  67. package/dist/esm/src/index.d.ts +6 -2
  68. package/dist/esm/src/index.d.ts.map +1 -1
  69. package/dist/esm/src/index.js +4 -1
  70. package/dist/esm/src/index.js.map +1 -1
  71. package/dist/esm/src/json-rpc-api.js +2 -1
  72. package/dist/esm/src/json-rpc-api.js.map +1 -1
  73. package/dist/esm/src/json-rpc-handlers/dwn/process-message.d.ts.map +1 -1
  74. package/dist/esm/src/json-rpc-handlers/dwn/process-message.js +109 -7
  75. package/dist/esm/src/json-rpc-handlers/dwn/process-message.js.map +1 -1
  76. package/dist/esm/src/json-rpc-handlers/subscription/ack.d.ts +20 -0
  77. package/dist/esm/src/json-rpc-handlers/subscription/ack.d.ts.map +1 -0
  78. package/dist/esm/src/json-rpc-handlers/subscription/ack.js +41 -0
  79. package/dist/esm/src/json-rpc-handlers/subscription/ack.js.map +1 -0
  80. package/dist/esm/src/json-rpc-handlers/subscription/close.d.ts.map +1 -1
  81. package/dist/esm/src/json-rpc-handlers/subscription/close.js +1 -1
  82. package/dist/esm/src/json-rpc-handlers/subscription/close.js.map +1 -1
  83. package/dist/esm/src/json-rpc-handlers/subscription/index.d.ts +1 -0
  84. package/dist/esm/src/json-rpc-handlers/subscription/index.d.ts.map +1 -1
  85. package/dist/esm/src/json-rpc-handlers/subscription/index.js +1 -0
  86. package/dist/esm/src/json-rpc-handlers/subscription/index.js.map +1 -1
  87. package/dist/esm/src/lib/json-rpc-router.d.ts +25 -8
  88. package/dist/esm/src/lib/json-rpc-router.d.ts.map +1 -1
  89. package/dist/esm/src/lib/json-rpc-router.js.map +1 -1
  90. package/dist/esm/src/lib/sql-utils.d.ts +6 -0
  91. package/dist/esm/src/lib/sql-utils.d.ts.map +1 -0
  92. package/dist/esm/src/lib/sql-utils.js +8 -0
  93. package/dist/esm/src/lib/sql-utils.js.map +1 -0
  94. package/dist/esm/src/main.js +0 -6
  95. package/dist/esm/src/main.js.map +1 -1
  96. package/dist/esm/src/message-processed-hook.d.ts +35 -0
  97. package/dist/esm/src/message-processed-hook.d.ts.map +1 -0
  98. package/dist/esm/src/message-processed-hook.js +2 -0
  99. package/dist/esm/src/message-processed-hook.js.map +1 -0
  100. package/dist/esm/src/metrics.d.ts +14 -2
  101. package/dist/esm/src/metrics.d.ts.map +1 -1
  102. package/dist/esm/src/metrics.js +41 -1
  103. package/dist/esm/src/metrics.js.map +1 -1
  104. package/dist/esm/src/plugins/event-log-nats.d.ts +25 -0
  105. package/dist/esm/src/plugins/event-log-nats.d.ts.map +1 -0
  106. package/dist/esm/src/plugins/event-log-nats.js +379 -0
  107. package/dist/esm/src/plugins/event-log-nats.js.map +1 -0
  108. package/dist/esm/src/rate-limiter.d.ts +60 -0
  109. package/dist/esm/src/rate-limiter.d.ts.map +1 -0
  110. package/dist/esm/src/rate-limiter.js +116 -0
  111. package/dist/esm/src/rate-limiter.js.map +1 -0
  112. package/dist/esm/src/registration/jwt-provider-auth-plugin.d.ts +53 -0
  113. package/dist/esm/src/registration/jwt-provider-auth-plugin.d.ts.map +1 -0
  114. package/dist/esm/src/registration/jwt-provider-auth-plugin.js +90 -0
  115. package/dist/esm/src/registration/jwt-provider-auth-plugin.js.map +1 -0
  116. package/dist/esm/src/registration/open-auth-handler.d.ts +37 -0
  117. package/dist/esm/src/registration/open-auth-handler.d.ts.map +1 -0
  118. package/dist/esm/src/registration/open-auth-handler.js +214 -0
  119. package/dist/esm/src/registration/open-auth-handler.js.map +1 -0
  120. package/dist/esm/src/registration/proof-of-work-manager.d.ts +1 -1
  121. package/dist/esm/src/registration/proof-of-work-manager.d.ts.map +1 -1
  122. package/dist/esm/src/registration/proof-of-work-manager.js +3 -3
  123. package/dist/esm/src/registration/proof-of-work-manager.js.map +1 -1
  124. package/dist/esm/src/registration/provider-auth-plugin.d.ts +46 -0
  125. package/dist/esm/src/registration/provider-auth-plugin.d.ts.map +1 -0
  126. package/dist/esm/src/registration/provider-auth-plugin.js +29 -0
  127. package/dist/esm/src/registration/provider-auth-plugin.js.map +1 -0
  128. package/dist/esm/src/registration/registration-manager.d.ts +28 -5
  129. package/dist/esm/src/registration/registration-manager.d.ts.map +1 -1
  130. package/dist/esm/src/registration/registration-manager.js +83 -12
  131. package/dist/esm/src/registration/registration-manager.js.map +1 -1
  132. package/dist/esm/src/registration/registration-store.d.ts +83 -3
  133. package/dist/esm/src/registration/registration-store.d.ts.map +1 -1
  134. package/dist/esm/src/registration/registration-store.js +248 -11
  135. package/dist/esm/src/registration/registration-store.js.map +1 -1
  136. package/dist/esm/src/storage.d.ts +5 -5
  137. package/dist/esm/src/storage.d.ts.map +1 -1
  138. package/dist/esm/src/storage.js +105 -24
  139. package/dist/esm/src/storage.js.map +1 -1
  140. package/dist/esm/src/web5-connect/sql-ttl-cache.d.ts.map +1 -1
  141. package/dist/esm/src/web5-connect/sql-ttl-cache.js +11 -3
  142. package/dist/esm/src/web5-connect/sql-ttl-cache.js.map +1 -1
  143. package/dist/esm/src/web5-connect/web5-connect-server.d.ts.map +1 -1
  144. package/dist/esm/src/web5-connect/web5-connect-server.js +2 -2
  145. package/dist/esm/src/web5-connect/web5-connect-server.js.map +1 -1
  146. package/dist/esm/src/ws-api.d.ts +18 -4
  147. package/dist/esm/src/ws-api.d.ts.map +1 -1
  148. package/dist/esm/src/ws-api.js +12 -16
  149. package/dist/esm/src/ws-api.js.map +1 -1
  150. package/package.json +34 -53
  151. package/src/admin/activity-log.ts +100 -0
  152. package/src/admin/admin-api.ts +1308 -0
  153. package/src/admin/admin-auth.ts +56 -0
  154. package/src/admin/admin-store.ts +515 -0
  155. package/src/admin/audit-log.ts +327 -0
  156. package/src/admin/index.ts +34 -0
  157. package/src/admin/types.ts +352 -0
  158. package/src/admin/webhook-manager.ts +245 -0
  159. package/src/config.ts +190 -22
  160. package/src/connection/connection-manager.ts +67 -17
  161. package/src/connection/flow-controller.ts +117 -0
  162. package/src/connection/socket-connection.ts +144 -67
  163. package/src/delivery-service.ts +740 -0
  164. package/src/dwn-error.ts +11 -2
  165. package/src/dwn-server.ts +254 -39
  166. package/src/http-api.ts +736 -392
  167. package/src/index.ts +13 -2
  168. package/src/json-rpc-api.ts +2 -1
  169. package/src/json-rpc-handlers/dwn/process-message.ts +149 -15
  170. package/src/json-rpc-handlers/subscription/ack.ts +63 -0
  171. package/src/json-rpc-handlers/subscription/close.ts +5 -9
  172. package/src/json-rpc-handlers/subscription/index.ts +1 -0
  173. package/src/lib/json-rpc-router.ts +26 -11
  174. package/src/lib/sql-utils.ts +7 -0
  175. package/src/main.ts +0 -8
  176. package/src/message-processed-hook.ts +33 -0
  177. package/src/metrics.ts +57 -8
  178. package/src/plugins/event-log-nats.ts +466 -0
  179. package/src/process-handlers.ts +5 -5
  180. package/src/rate-limiter.ts +143 -0
  181. package/src/registration/jwt-provider-auth-plugin.ts +119 -0
  182. package/src/registration/open-auth-handler.ts +263 -0
  183. package/src/registration/proof-of-work-manager.ts +11 -10
  184. package/src/registration/provider-auth-plugin.ts +84 -0
  185. package/src/registration/registration-manager.ts +129 -31
  186. package/src/registration/registration-store.ts +332 -22
  187. package/src/storage.ts +136 -40
  188. package/src/web5-connect/sql-ttl-cache.ts +12 -5
  189. package/src/web5-connect/web5-connect-server.ts +9 -8
  190. package/src/ws-api.ts +39 -26
  191. package/dist/cjs/index.js +0 -6811
  192. package/dist/cjs/package.json +0 -1
  193. package/dist/esm/src/json-rpc-socket.d.ts +0 -39
  194. package/dist/esm/src/json-rpc-socket.d.ts.map +0 -1
  195. package/dist/esm/src/json-rpc-socket.js +0 -125
  196. package/dist/esm/src/json-rpc-socket.js.map +0 -1
  197. package/dist/esm/src/lib/http-server-shutdown-handler.d.ts +0 -10
  198. package/dist/esm/src/lib/http-server-shutdown-handler.d.ts.map +0 -1
  199. package/dist/esm/src/lib/http-server-shutdown-handler.js +0 -65
  200. package/dist/esm/src/lib/http-server-shutdown-handler.js.map +0 -1
  201. package/dist/esm/src/lib/json-rpc.d.ts +0 -54
  202. package/dist/esm/src/lib/json-rpc.d.ts.map +0 -1
  203. package/dist/esm/src/lib/json-rpc.js +0 -60
  204. package/dist/esm/src/lib/json-rpc.js.map +0 -1
  205. package/dist/esm/src/registration/proof-of-work-types.d.ts +0 -8
  206. package/dist/esm/src/registration/proof-of-work-types.d.ts.map +0 -1
  207. package/dist/esm/src/registration/proof-of-work-types.js +0 -2
  208. package/dist/esm/src/registration/proof-of-work-types.js.map +0 -1
  209. package/dist/esm/src/registration/registration-types.d.ts +0 -18
  210. package/dist/esm/src/registration/registration-types.d.ts.map +0 -1
  211. package/dist/esm/src/registration/registration-types.js +0 -2
  212. package/dist/esm/src/registration/registration-types.js.map +0 -1
  213. package/dist/esm/tests/common-scenario-validator.d.ts +0 -11
  214. package/dist/esm/tests/common-scenario-validator.d.ts.map +0 -1
  215. package/dist/esm/tests/common-scenario-validator.js +0 -114
  216. package/dist/esm/tests/common-scenario-validator.js.map +0 -1
  217. package/dist/esm/tests/connection/connection-manager.spec.d.ts +0 -2
  218. package/dist/esm/tests/connection/connection-manager.spec.d.ts.map +0 -1
  219. package/dist/esm/tests/connection/connection-manager.spec.js +0 -47
  220. package/dist/esm/tests/connection/connection-manager.spec.js.map +0 -1
  221. package/dist/esm/tests/connection/socket-connection.spec.d.ts +0 -2
  222. package/dist/esm/tests/connection/socket-connection.spec.d.ts.map +0 -1
  223. package/dist/esm/tests/connection/socket-connection.spec.js +0 -125
  224. package/dist/esm/tests/connection/socket-connection.spec.js.map +0 -1
  225. package/dist/esm/tests/cors/http-api.browser.d.ts +0 -2
  226. package/dist/esm/tests/cors/http-api.browser.d.ts.map +0 -1
  227. package/dist/esm/tests/cors/http-api.browser.js +0 -60
  228. package/dist/esm/tests/cors/http-api.browser.js.map +0 -1
  229. package/dist/esm/tests/cors/ping.browser.d.ts +0 -2
  230. package/dist/esm/tests/cors/ping.browser.d.ts.map +0 -1
  231. package/dist/esm/tests/cors/ping.browser.js +0 -7
  232. package/dist/esm/tests/cors/ping.browser.js.map +0 -1
  233. package/dist/esm/tests/dwn-process-message.spec.d.ts +0 -2
  234. package/dist/esm/tests/dwn-process-message.spec.d.ts.map +0 -1
  235. package/dist/esm/tests/dwn-process-message.spec.js +0 -172
  236. package/dist/esm/tests/dwn-process-message.spec.js.map +0 -1
  237. package/dist/esm/tests/dwn-server.spec.d.ts +0 -2
  238. package/dist/esm/tests/dwn-server.spec.d.ts.map +0 -1
  239. package/dist/esm/tests/dwn-server.spec.js +0 -49
  240. package/dist/esm/tests/dwn-server.spec.js.map +0 -1
  241. package/dist/esm/tests/http-api.spec.d.ts +0 -2
  242. package/dist/esm/tests/http-api.spec.d.ts.map +0 -1
  243. package/dist/esm/tests/http-api.spec.js +0 -775
  244. package/dist/esm/tests/http-api.spec.js.map +0 -1
  245. package/dist/esm/tests/json-rpc-socket.spec.d.ts +0 -2
  246. package/dist/esm/tests/json-rpc-socket.spec.d.ts.map +0 -1
  247. package/dist/esm/tests/json-rpc-socket.spec.js +0 -225
  248. package/dist/esm/tests/json-rpc-socket.spec.js.map +0 -1
  249. package/dist/esm/tests/plugins/data-store-sqlite.d.ts +0 -17
  250. package/dist/esm/tests/plugins/data-store-sqlite.d.ts.map +0 -1
  251. package/dist/esm/tests/plugins/data-store-sqlite.js +0 -23
  252. package/dist/esm/tests/plugins/data-store-sqlite.js.map +0 -1
  253. package/dist/esm/tests/plugins/event-log-sqlite.d.ts +0 -17
  254. package/dist/esm/tests/plugins/event-log-sqlite.d.ts.map +0 -1
  255. package/dist/esm/tests/plugins/event-log-sqlite.js +0 -23
  256. package/dist/esm/tests/plugins/event-log-sqlite.js.map +0 -1
  257. package/dist/esm/tests/plugins/event-stream-in-memory.d.ts +0 -17
  258. package/dist/esm/tests/plugins/event-stream-in-memory.d.ts.map +0 -1
  259. package/dist/esm/tests/plugins/event-stream-in-memory.js +0 -21
  260. package/dist/esm/tests/plugins/event-stream-in-memory.js.map +0 -1
  261. package/dist/esm/tests/plugins/message-store-sqlite.d.ts +0 -17
  262. package/dist/esm/tests/plugins/message-store-sqlite.d.ts.map +0 -1
  263. package/dist/esm/tests/plugins/message-store-sqlite.js +0 -23
  264. package/dist/esm/tests/plugins/message-store-sqlite.js.map +0 -1
  265. package/dist/esm/tests/plugins/resumable-task-store-sqlite.d.ts +0 -17
  266. package/dist/esm/tests/plugins/resumable-task-store-sqlite.d.ts.map +0 -1
  267. package/dist/esm/tests/plugins/resumable-task-store-sqlite.js +0 -23
  268. package/dist/esm/tests/plugins/resumable-task-store-sqlite.js.map +0 -1
  269. package/dist/esm/tests/process-handler.spec.d.ts +0 -2
  270. package/dist/esm/tests/process-handler.spec.d.ts.map +0 -1
  271. package/dist/esm/tests/process-handler.spec.js +0 -60
  272. package/dist/esm/tests/process-handler.spec.js.map +0 -1
  273. package/dist/esm/tests/registration/proof-of-work-manager.spec.d.ts +0 -2
  274. package/dist/esm/tests/registration/proof-of-work-manager.spec.d.ts.map +0 -1
  275. package/dist/esm/tests/registration/proof-of-work-manager.spec.js +0 -157
  276. package/dist/esm/tests/registration/proof-of-work-manager.spec.js.map +0 -1
  277. package/dist/esm/tests/rpc-subscribe-close.spec.d.ts +0 -2
  278. package/dist/esm/tests/rpc-subscribe-close.spec.d.ts.map +0 -1
  279. package/dist/esm/tests/rpc-subscribe-close.spec.js +0 -81
  280. package/dist/esm/tests/rpc-subscribe-close.spec.js.map +0 -1
  281. package/dist/esm/tests/scenarios/dynamic-plugin-loading.spec.d.ts +0 -2
  282. package/dist/esm/tests/scenarios/dynamic-plugin-loading.spec.d.ts.map +0 -1
  283. package/dist/esm/tests/scenarios/dynamic-plugin-loading.spec.js +0 -73
  284. package/dist/esm/tests/scenarios/dynamic-plugin-loading.spec.js.map +0 -1
  285. package/dist/esm/tests/scenarios/registration.spec.d.ts +0 -2
  286. package/dist/esm/tests/scenarios/registration.spec.d.ts.map +0 -1
  287. package/dist/esm/tests/scenarios/registration.spec.js +0 -507
  288. package/dist/esm/tests/scenarios/registration.spec.js.map +0 -1
  289. package/dist/esm/tests/scenarios/web5-connect.spec.d.ts +0 -2
  290. package/dist/esm/tests/scenarios/web5-connect.spec.d.ts.map +0 -1
  291. package/dist/esm/tests/scenarios/web5-connect.spec.js +0 -137
  292. package/dist/esm/tests/scenarios/web5-connect.spec.js.map +0 -1
  293. package/dist/esm/tests/test-dwn.d.ts +0 -7
  294. package/dist/esm/tests/test-dwn.d.ts.map +0 -1
  295. package/dist/esm/tests/test-dwn.js +0 -34
  296. package/dist/esm/tests/test-dwn.js.map +0 -1
  297. package/dist/esm/tests/utils.d.ts +0 -46
  298. package/dist/esm/tests/utils.d.ts.map +0 -1
  299. package/dist/esm/tests/utils.js +0 -116
  300. package/dist/esm/tests/utils.js.map +0 -1
  301. package/dist/esm/tests/ws-api.spec.d.ts +0 -2
  302. package/dist/esm/tests/ws-api.spec.d.ts.map +0 -1
  303. package/dist/esm/tests/ws-api.spec.js +0 -327
  304. package/dist/esm/tests/ws-api.spec.js.map +0 -1
  305. package/src/json-rpc-socket.ts +0 -155
  306. package/src/lib/http-server-shutdown-handler.ts +0 -79
  307. package/src/lib/json-rpc.ts +0 -126
  308. package/src/registration/proof-of-work-types.ts +0 -7
  309. package/src/registration/registration-types.ts +0 -18
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Token-bucket rate limiter with per-key state tracking and automatic cleanup.
3
+ *
4
+ * Each key (IP address or tenant DID) has its own bucket that refills at a
5
+ * fixed rate. When a request arrives, a token is consumed. If the bucket is
6
+ * empty, the request is rejected with a retry-after hint.
7
+ *
8
+ * Stale buckets are periodically purged to prevent unbounded memory growth.
9
+ *
10
+ * @see https://github.com/enboxorg/enbox/issues/326
11
+ */
12
+ export class RateLimiter {
13
+ #refillRate;
14
+ #maxTokens;
15
+ #buckets = new Map();
16
+ #cleanupInterval;
17
+ /** Stale buckets older than 5 minutes are purged. */
18
+ static STALE_THRESHOLD_MS = 5 * 60 * 1000;
19
+ /** Cleanup runs every 60 seconds. */
20
+ static CLEANUP_INTERVAL_MS = 60 * 1000;
21
+ constructor(config) {
22
+ this.#refillRate = config.refillRate;
23
+ this.#maxTokens = config.maxTokens;
24
+ // Start periodic cleanup.
25
+ this.#cleanupInterval = setInterval(() => {
26
+ this.#cleanup();
27
+ }, RateLimiter.CLEANUP_INTERVAL_MS);
28
+ }
29
+ /**
30
+ * Attempts to consume a token for the given key.
31
+ * @returns `{ allowed: true }` if the request is permitted, or
32
+ * `{ allowed: false, retryAfterMs }` if the rate limit is exceeded.
33
+ */
34
+ consume(key) {
35
+ const now = Date.now();
36
+ let bucket = this.#buckets.get(key);
37
+ if (bucket === undefined) {
38
+ bucket = { tokens: this.#maxTokens, lastRefill: now };
39
+ this.#buckets.set(key, bucket);
40
+ }
41
+ // Refill tokens based on elapsed time.
42
+ const elapsed = (now - bucket.lastRefill) / 1000;
43
+ bucket.tokens = Math.min(this.#maxTokens, bucket.tokens + elapsed * this.#refillRate);
44
+ bucket.lastRefill = now;
45
+ if (bucket.tokens >= 1) {
46
+ bucket.tokens -= 1;
47
+ return { allowed: true };
48
+ }
49
+ // Calculate how long until one token is available.
50
+ const deficit = 1 - bucket.tokens;
51
+ const retryAfterMs = Math.ceil((deficit / this.#refillRate) * 1000);
52
+ return { allowed: false, retryAfterMs };
53
+ }
54
+ /**
55
+ * Returns the number of keys currently being tracked.
56
+ */
57
+ get size() {
58
+ return this.#buckets.size;
59
+ }
60
+ /**
61
+ * Returns the current token count for a key, or `undefined` if not tracked.
62
+ */
63
+ getTokens(key) {
64
+ const bucket = this.#buckets.get(key);
65
+ if (bucket === undefined) {
66
+ return undefined;
67
+ }
68
+ // Refill to return current state.
69
+ const elapsed = (Date.now() - bucket.lastRefill) / 1000;
70
+ return Math.min(this.#maxTokens, bucket.tokens + elapsed * this.#refillRate);
71
+ }
72
+ /**
73
+ * Reconfigures the rate limiter with new settings. Existing buckets are
74
+ * retained but will use the new `refillRate` and `maxTokens` going forward.
75
+ *
76
+ * @see https://github.com/enboxorg/enbox/issues/389
77
+ */
78
+ reconfigure(config) {
79
+ this.#refillRate = config.refillRate;
80
+ this.#maxTokens = config.maxTokens;
81
+ }
82
+ /**
83
+ * Returns the current configuration of this rate limiter.
84
+ */
85
+ get config() {
86
+ return {
87
+ refillRate: this.#refillRate,
88
+ maxTokens: this.#maxTokens,
89
+ };
90
+ }
91
+ /**
92
+ * Stops the periodic cleanup timer. Call this when shutting down.
93
+ */
94
+ destroy() {
95
+ if (this.#cleanupInterval) {
96
+ clearInterval(this.#cleanupInterval);
97
+ this.#cleanupInterval = undefined;
98
+ }
99
+ this.#buckets.clear();
100
+ }
101
+ /**
102
+ * Removes buckets that have been at max capacity for longer than the stale threshold.
103
+ */
104
+ #cleanup() {
105
+ const now = Date.now();
106
+ for (const [key, bucket] of this.#buckets) {
107
+ const elapsed = (now - bucket.lastRefill) / 1000;
108
+ const currentTokens = Math.min(this.#maxTokens, bucket.tokens + elapsed * this.#refillRate);
109
+ const timeSinceLastUse = now - bucket.lastRefill;
110
+ if (currentTokens >= this.#maxTokens && timeSinceLastUse > RateLimiter.STALE_THRESHOLD_MS) {
111
+ this.#buckets.delete(key);
112
+ }
113
+ }
114
+ }
115
+ }
116
+ //# sourceMappingURL=rate-limiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../../src/rate-limiter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import type { ProviderAuthPlugin, ProviderAuthValidationResult } from './provider-auth-plugin.js';
2
+ /**
3
+ * Options for creating a {@link JwtProviderAuthPlugin}.
4
+ * Exactly one of `secret` or `jwksUrl` must be provided.
5
+ */
6
+ export type JwtProviderAuthPluginOptions = {
7
+ /** HMAC shared secret for HS256/HS384/HS512 tokens. */
8
+ secret?: string;
9
+ /** JWKS endpoint URL for RS256/ES256/EdDSA tokens. */
10
+ jwksUrl?: string;
11
+ /** Expected JWT `iss` claim. If set, tokens without a matching issuer are rejected. */
12
+ issuer?: string;
13
+ /** Expected JWT `aud` claim. If set, tokens without a matching audience are rejected. */
14
+ audience?: string;
15
+ };
16
+ /**
17
+ * Built-in {@link ProviderAuthPlugin} that validates JWT registration tokens.
18
+ *
19
+ * Supports two modes:
20
+ * - **HMAC secret** (`DWN_PROVIDER_AUTH_JWT_SECRET`): symmetric HS256 verification.
21
+ * - **JWKS URL** (`DWN_PROVIDER_AUTH_JWT_JWKS_URL`): asymmetric verification via
22
+ * a remote JWKS endpoint (RS256, ES256, EdDSA, etc.). Keys are cached and
23
+ * rotated automatically by `jose`.
24
+ *
25
+ * The JWT payload may include:
26
+ * - `sub` — mapped to `accountId` in the validation result.
27
+ * - `metadata` — arbitrary provider-defined object stored with the tenant.
28
+ *
29
+ * This plugin ships with `@enbox/dwn-server` and requires no external code.
30
+ * Providers who need custom validation logic can implement their own
31
+ * {@link ProviderAuthPlugin} instead.
32
+ */
33
+ export declare class JwtProviderAuthPlugin implements ProviderAuthPlugin {
34
+ #private;
35
+ private constructor();
36
+ /**
37
+ * Create a {@link JwtProviderAuthPlugin} from options.
38
+ *
39
+ * @param options - Must include exactly one of `secret` or `jwksUrl`.
40
+ * @throws If neither `secret` nor `jwksUrl` is provided.
41
+ */
42
+ static create(options: JwtProviderAuthPluginOptions): Promise<JwtProviderAuthPlugin>;
43
+ /**
44
+ * Create a {@link JwtProviderAuthPlugin} from environment variables.
45
+ *
46
+ * Reads `DWN_PROVIDER_AUTH_JWT_SECRET`, `DWN_PROVIDER_AUTH_JWT_JWKS_URL`,
47
+ * and optionally `DWN_PROVIDER_AUTH_JWT_ISSUER` / `DWN_PROVIDER_AUTH_JWT_AUDIENCE`.
48
+ */
49
+ static fromEnv(): Promise<JwtProviderAuthPlugin>;
50
+ /** @inheritdoc */
51
+ validateRegistrationToken(token: string): Promise<ProviderAuthValidationResult>;
52
+ }
53
+ //# sourceMappingURL=jwt-provider-auth-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt-provider-auth-plugin.d.ts","sourceRoot":"","sources":["../../../../src/registration/jwt-provider-auth-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AAKlG;;;GAGG;AACH,MAAM,MAAM,4BAA4B,GAAG;IACzC,uDAAuD;IACvD,MAAM,CAAC,EAAG,MAAM,CAAC;IACjB,sDAAsD;IACtD,OAAO,CAAC,EAAG,MAAM,CAAC;IAClB,uFAAuF;IACvF,MAAM,CAAC,EAAG,MAAM,CAAC;IACjB,yFAAyF;IACzF,QAAQ,CAAC,EAAG,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,qBAAsB,YAAW,kBAAkB;;IAK9D,OAAO;IAUP;;;;;OAKG;WACiB,MAAM,CAAC,OAAO,EAAE,4BAA4B,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAiBjG;;;;;OAKG;WACiB,OAAO,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAS7D,kBAAkB;IACL,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,4BAA4B,CAAC;CA2B7F"}
@@ -0,0 +1,90 @@
1
+ import * as jose from 'jose';
2
+ import log from 'loglevel';
3
+ /**
4
+ * Built-in {@link ProviderAuthPlugin} that validates JWT registration tokens.
5
+ *
6
+ * Supports two modes:
7
+ * - **HMAC secret** (`DWN_PROVIDER_AUTH_JWT_SECRET`): symmetric HS256 verification.
8
+ * - **JWKS URL** (`DWN_PROVIDER_AUTH_JWT_JWKS_URL`): asymmetric verification via
9
+ * a remote JWKS endpoint (RS256, ES256, EdDSA, etc.). Keys are cached and
10
+ * rotated automatically by `jose`.
11
+ *
12
+ * The JWT payload may include:
13
+ * - `sub` — mapped to `accountId` in the validation result.
14
+ * - `metadata` — arbitrary provider-defined object stored with the tenant.
15
+ *
16
+ * This plugin ships with `@enbox/dwn-server` and requires no external code.
17
+ * Providers who need custom validation logic can implement their own
18
+ * {@link ProviderAuthPlugin} instead.
19
+ */
20
+ export class JwtProviderAuthPlugin {
21
+ #getKey;
22
+ #issuer;
23
+ #audience;
24
+ constructor(getKey, issuer, audience) {
25
+ this.#getKey = getKey;
26
+ this.#issuer = issuer;
27
+ this.#audience = audience;
28
+ }
29
+ /**
30
+ * Create a {@link JwtProviderAuthPlugin} from options.
31
+ *
32
+ * @param options - Must include exactly one of `secret` or `jwksUrl`.
33
+ * @throws If neither `secret` nor `jwksUrl` is provided.
34
+ */
35
+ static async create(options) {
36
+ if (!options.secret && !options.jwksUrl) {
37
+ throw new Error('JwtProviderAuthPlugin: exactly one of `secret` or `jwksUrl` must be provided.');
38
+ }
39
+ let getKey;
40
+ if (options.secret) {
41
+ getKey = new TextEncoder().encode(options.secret);
42
+ }
43
+ else {
44
+ getKey = jose.createRemoteJWKSet(new URL(options.jwksUrl));
45
+ }
46
+ return new JwtProviderAuthPlugin(getKey, options.issuer, options.audience);
47
+ }
48
+ /**
49
+ * Create a {@link JwtProviderAuthPlugin} from environment variables.
50
+ *
51
+ * Reads `DWN_PROVIDER_AUTH_JWT_SECRET`, `DWN_PROVIDER_AUTH_JWT_JWKS_URL`,
52
+ * and optionally `DWN_PROVIDER_AUTH_JWT_ISSUER` / `DWN_PROVIDER_AUTH_JWT_AUDIENCE`.
53
+ */
54
+ static async fromEnv() {
55
+ return JwtProviderAuthPlugin.create({
56
+ secret: process.env.DWN_PROVIDER_AUTH_JWT_SECRET,
57
+ jwksUrl: process.env.DWN_PROVIDER_AUTH_JWT_JWKS_URL,
58
+ issuer: process.env.DWN_PROVIDER_AUTH_JWT_ISSUER,
59
+ audience: process.env.DWN_PROVIDER_AUTH_JWT_AUDIENCE,
60
+ });
61
+ }
62
+ /** @inheritdoc */
63
+ async validateRegistrationToken(token) {
64
+ try {
65
+ const verifyOptions = {};
66
+ if (this.#issuer !== undefined) {
67
+ verifyOptions.issuer = this.#issuer;
68
+ }
69
+ if (this.#audience !== undefined) {
70
+ verifyOptions.audience = this.#audience;
71
+ }
72
+ const { payload } = await jose.jwtVerify(token, this.#getKey, verifyOptions);
73
+ return {
74
+ isValid: true,
75
+ accountId: typeof payload.sub === 'string' ? payload.sub : undefined,
76
+ metadata: typeof payload.metadata === 'object' && payload.metadata !== null
77
+ ? payload.metadata
78
+ : undefined,
79
+ };
80
+ }
81
+ catch (error) {
82
+ log.debug('JWT validation failed:', error.message);
83
+ return {
84
+ isValid: false,
85
+ detail: error.message,
86
+ };
87
+ }
88
+ }
89
+ }
90
+ //# sourceMappingURL=jwt-provider-auth-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt-provider-auth-plugin.js","sourceRoot":"","sources":["../../../../src/registration/jwt-provider-auth-plugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,GAAG,MAAM,UAAU,CAAC;AAiB3B;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,qBAAqB;IAChC,OAAO,CAAoC;IAC3C,OAAO,CAAqB;IAC5B,SAAS,CAAqB;IAE9B,YACE,MAAyC,EACzC,MAAe,EACf,QAAiB;QAEjB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAqC;QAC9D,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;QACJ,CAAC;QAED,IAAI,MAAW,CAAC;QAChB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,OAAQ,CAAC,CAAC,CAAC;QAC9D,CAAC;QAED,OAAO,IAAI,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC7E,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,KAAK,CAAC,OAAO;QACzB,OAAO,qBAAqB,CAAC,MAAM,CAAC;YAClC,MAAM,EAAK,OAAO,CAAC,GAAG,CAAC,4BAA4B;YACnD,OAAO,EAAI,OAAO,CAAC,GAAG,CAAC,8BAA8B;YACrD,MAAM,EAAK,OAAO,CAAC,GAAG,CAAC,4BAA4B;YACnD,QAAQ,EAAG,OAAO,CAAC,GAAG,CAAC,8BAA8B;SACtD,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB;IACX,KAAK,CAAC,yBAAyB,CAAC,KAAa;QAClD,IAAI,CAAC;YACH,MAAM,aAAa,GAA0B,EAAE,CAAC;YAChD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC/B,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;YACtC,CAAC;YACD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBACjC,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;YAC1C,CAAC;YAED,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,OAAc,EAAE,aAAa,CAAC,CAAC;YAEpF,OAAO;gBACL,OAAO,EAAK,IAAI;gBAChB,SAAS,EAAG,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;gBACrE,QAAQ,EAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI;oBAC3E,CAAC,CAAC,OAAO,CAAC,QAAmC;oBAC7C,CAAC,CAAC,SAAS;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,KAAK,CAAC,wBAAwB,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;YAC9D,OAAO;gBACL,OAAO,EAAG,KAAK;gBACf,MAAM,EAAK,KAAe,CAAC,OAAO;aACnC,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,37 @@
1
+ export declare class OpenAuthHandler {
2
+ #private;
3
+ private constructor();
4
+ /**
5
+ * Create an {@link OpenAuthHandler}.
6
+ *
7
+ * @param secret - HMAC shared secret (same as `DWN_PROVIDER_AUTH_JWT_SECRET`).
8
+ * @param issuer - JWT issuer claim (typically the DWN server's base URL).
9
+ * @param tokenTtlSeconds - Registration token lifetime in seconds. Default: 1 year.
10
+ */
11
+ static create(secret: string, issuer: string, tokenTtlSeconds?: number): OpenAuthHandler;
12
+ /**
13
+ * Handle `GET /provider-auth/authorize`.
14
+ *
15
+ * In open-auth mode this immediately generates a code and redirects back
16
+ * to the `redirect_uri` with `code` and `state` query parameters.
17
+ * No user interaction is required.
18
+ */
19
+ handleAuthorize(url: URL): Response;
20
+ /**
21
+ * Handle `POST /provider-auth/token`.
22
+ *
23
+ * Exchanges an authorization code for a JWT registration token.
24
+ * Request body: `{ code: string, redirectUri: string }`.
25
+ */
26
+ handleToken(req: Request): Promise<Response>;
27
+ /**
28
+ * Handle `POST /provider-auth/refresh`.
29
+ *
30
+ * Exchanges a refresh token for a new registration token.
31
+ * Request body: `{ refreshToken: string }`.
32
+ */
33
+ handleRefresh(req: Request): Promise<Response>;
34
+ /** Stops the periodic cleanup timer and clears all pending codes. */
35
+ destroy(): void;
36
+ }
37
+ //# sourceMappingURL=open-auth-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-auth-handler.d.ts","sourceRoot":"","sources":["../../../../src/registration/open-auth-handler.ts"],"names":[],"mappings":"AA6BA,qBAAa,eAAe;;IAU1B,OAAO;IAeP;;;;;;OAMG;WACW,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,SAAqB,GAAG,eAAe;IAQ3G;;;;;;OAMG;IACI,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,QAAQ;IAgD1C;;;;;OAKG;IACU,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IAqDzD;;;;;OAKG;IACU,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IA0D3D,qEAAqE;IAC9D,OAAO,IAAI,IAAI;CAcvB"}
@@ -0,0 +1,214 @@
1
+ import * as jose from 'jose';
2
+ import log from 'loglevel';
3
+ /**
4
+ * Built-in "open auth" handler for DWN servers that want registration
5
+ * without any user authentication (open-to-all).
6
+ *
7
+ * Implements the provider-auth-v0 authorize / token / refresh endpoints
8
+ * locally on the DWN server. The authorize endpoint immediately returns
9
+ * an authorization code (no user interaction), the token endpoint exchanges
10
+ * it for a JWT registration token, and the refresh endpoint issues a new token.
11
+ *
12
+ * This is the simplest possible auth backend — suitable for free/public DWN
13
+ * providers. Providers who want real authentication (passkey, OIDC, etc.)
14
+ * host their own auth service and point `providerAuth.authorizeUrl` /
15
+ * `tokenUrl` to it instead.
16
+ *
17
+ * The JWTs issued here are verified by {@link JwtProviderAuthPlugin} using
18
+ * the same shared secret (`DWN_PROVIDER_AUTH_JWT_SECRET`).
19
+ */
20
+ /**
21
+ * Maximum number of pending authorization codes held in memory.
22
+ * When the limit is reached, new authorize requests are rejected with 503.
23
+ */
24
+ const MAX_PENDING_CODES = 10_000;
25
+ /** Interval (ms) at which expired authorization codes are purged. */
26
+ const CLEANUP_INTERVAL_MS = 60_000;
27
+ export class OpenAuthHandler {
28
+ #secret;
29
+ #issuer;
30
+ /** Pending authorization codes. Maps code → { redirectUri, expiresAt }. */
31
+ #pendingCodes;
32
+ /** Registration token TTL in seconds. Default: 1 year. */
33
+ #tokenTtlSeconds;
34
+ /** Periodic cleanup timer for expired codes. */
35
+ #cleanupTimer;
36
+ constructor(secret, issuer, tokenTtlSeconds) {
37
+ this.#secret = secret;
38
+ this.#issuer = issuer;
39
+ this.#pendingCodes = new Map();
40
+ this.#tokenTtlSeconds = tokenTtlSeconds;
41
+ // Periodically purge expired codes so memory does not grow unbounded
42
+ // even when no new authorize requests arrive.
43
+ this.#cleanupTimer = setInterval(() => this.#cleanExpiredCodes(), CLEANUP_INTERVAL_MS);
44
+ // Allow the process to exit even if the timer is still running.
45
+ if (this.#cleanupTimer.unref) {
46
+ this.#cleanupTimer.unref();
47
+ }
48
+ }
49
+ /**
50
+ * Create an {@link OpenAuthHandler}.
51
+ *
52
+ * @param secret - HMAC shared secret (same as `DWN_PROVIDER_AUTH_JWT_SECRET`).
53
+ * @param issuer - JWT issuer claim (typically the DWN server's base URL).
54
+ * @param tokenTtlSeconds - Registration token lifetime in seconds. Default: 1 year.
55
+ */
56
+ static create(secret, issuer, tokenTtlSeconds = 365 * 24 * 60 * 60) {
57
+ return new OpenAuthHandler(new TextEncoder().encode(secret), issuer, tokenTtlSeconds);
58
+ }
59
+ /**
60
+ * Handle `GET /provider-auth/authorize`.
61
+ *
62
+ * In open-auth mode this immediately generates a code and redirects back
63
+ * to the `redirect_uri` with `code` and `state` query parameters.
64
+ * No user interaction is required.
65
+ */
66
+ handleAuthorize(url) {
67
+ const redirectUri = url.searchParams.get('redirect_uri');
68
+ const state = url.searchParams.get('state');
69
+ if (!redirectUri) {
70
+ return Response.json({ error: 'missing redirect_uri parameter' }, { status: 400 });
71
+ }
72
+ // Reject new codes when the map is at capacity to prevent memory exhaustion.
73
+ if (this.#pendingCodes.size >= MAX_PENDING_CODES) {
74
+ log.warn(`OpenAuthHandler: pending codes map is full (${MAX_PENDING_CODES}), rejecting authorize request`);
75
+ return Response.json({ error: 'server is busy, try again later' }, { status: 503 });
76
+ }
77
+ // Generate a random authorization code.
78
+ const code = crypto.randomUUID();
79
+ // Store the code with a 10-minute expiry.
80
+ this.#pendingCodes.set(code, {
81
+ redirectUri,
82
+ expiresAt: Date.now() + 10 * 60 * 1000,
83
+ });
84
+ // Periodically clean up expired codes (simple inline sweep).
85
+ this.#cleanExpiredCodes();
86
+ // Build redirect URL.
87
+ const redirect = new URL(redirectUri);
88
+ redirect.searchParams.set('code', code);
89
+ if (state) {
90
+ redirect.searchParams.set('state', state);
91
+ }
92
+ log.debug(`OpenAuthHandler: issued code ${code.slice(0, 8)}… for redirect to ${redirectUri}`);
93
+ return Response.json({
94
+ code,
95
+ state: state ?? undefined,
96
+ redirectUri: redirect.toString(),
97
+ });
98
+ }
99
+ /**
100
+ * Handle `POST /provider-auth/token`.
101
+ *
102
+ * Exchanges an authorization code for a JWT registration token.
103
+ * Request body: `{ code: string, redirectUri: string }`.
104
+ */
105
+ async handleToken(req) {
106
+ let body;
107
+ try {
108
+ body = await req.json();
109
+ }
110
+ catch {
111
+ return Response.json({ error: 'invalid JSON body' }, { status: 400 });
112
+ }
113
+ const { code, redirectUri } = body;
114
+ if (!code || !redirectUri) {
115
+ return Response.json({ error: 'missing code or redirectUri' }, { status: 400 });
116
+ }
117
+ // Validate the authorization code.
118
+ const pending = this.#pendingCodes.get(code);
119
+ if (!pending) {
120
+ return Response.json({ error: 'invalid or expired code' }, { status: 400 });
121
+ }
122
+ if (pending.redirectUri !== redirectUri) {
123
+ return Response.json({ error: 'redirect_uri mismatch' }, { status: 400 });
124
+ }
125
+ if (Date.now() > pending.expiresAt) {
126
+ this.#pendingCodes.delete(code);
127
+ return Response.json({ error: 'code expired' }, { status: 400 });
128
+ }
129
+ // Consume the code (one-time use).
130
+ this.#pendingCodes.delete(code);
131
+ // Generate an account ID for this session (open auth = anonymous accounts).
132
+ const accountId = crypto.randomUUID();
133
+ // Issue JWT registration token.
134
+ const registrationToken = await this.#signToken(accountId, this.#tokenTtlSeconds);
135
+ // Issue refresh token with longer TTL (2x).
136
+ const refreshToken = await this.#signToken(accountId, this.#tokenTtlSeconds * 2, 'refresh');
137
+ log.debug(`OpenAuthHandler: exchanged code for account ${accountId.slice(0, 8)}…`);
138
+ return Response.json({
139
+ registrationToken,
140
+ refreshToken,
141
+ expiresIn: this.#tokenTtlSeconds,
142
+ tokenType: 'bearer',
143
+ });
144
+ }
145
+ /**
146
+ * Handle `POST /provider-auth/refresh`.
147
+ *
148
+ * Exchanges a refresh token for a new registration token.
149
+ * Request body: `{ refreshToken: string }`.
150
+ */
151
+ async handleRefresh(req) {
152
+ let body;
153
+ try {
154
+ body = await req.json();
155
+ }
156
+ catch {
157
+ return Response.json({ error: 'invalid JSON body' }, { status: 400 });
158
+ }
159
+ if (!body.refreshToken) {
160
+ return Response.json({ error: 'missing refreshToken' }, { status: 400 });
161
+ }
162
+ // Verify the refresh token.
163
+ let payload;
164
+ try {
165
+ const result = await jose.jwtVerify(body.refreshToken, this.#secret, {
166
+ issuer: this.#issuer,
167
+ });
168
+ payload = result.payload;
169
+ }
170
+ catch (error) {
171
+ return Response.json({ error: `invalid refresh token: ${error.message}` }, { status: 400 });
172
+ }
173
+ if (payload.purpose !== 'refresh') {
174
+ return Response.json({ error: 'token is not a refresh token' }, { status: 400 });
175
+ }
176
+ const accountId = payload.sub ?? crypto.randomUUID();
177
+ // Issue new tokens.
178
+ const registrationToken = await this.#signToken(accountId, this.#tokenTtlSeconds);
179
+ const refreshToken = await this.#signToken(accountId, this.#tokenTtlSeconds * 2, 'refresh');
180
+ log.debug(`OpenAuthHandler: refreshed token for account ${accountId.slice(0, 8)}…`);
181
+ return Response.json({
182
+ registrationToken,
183
+ refreshToken,
184
+ expiresIn: this.#tokenTtlSeconds,
185
+ tokenType: 'bearer',
186
+ });
187
+ }
188
+ /** Sign a JWT with the shared secret. */
189
+ async #signToken(accountId, ttlSeconds, purpose = 'registration') {
190
+ return new jose.SignJWT({ purpose })
191
+ .setProtectedHeader({ alg: 'HS256' })
192
+ .setIssuer(this.#issuer)
193
+ .setAudience(this.#issuer)
194
+ .setSubject(accountId)
195
+ .setIssuedAt()
196
+ .setExpirationTime(`${ttlSeconds}s`)
197
+ .sign(this.#secret);
198
+ }
199
+ /** Stops the periodic cleanup timer and clears all pending codes. */
200
+ destroy() {
201
+ clearInterval(this.#cleanupTimer);
202
+ this.#pendingCodes.clear();
203
+ }
204
+ /** Remove expired authorization codes from the pending map. */
205
+ #cleanExpiredCodes() {
206
+ const now = Date.now();
207
+ for (const [code, data] of this.#pendingCodes) {
208
+ if (now > data.expiresAt) {
209
+ this.#pendingCodes.delete(code);
210
+ }
211
+ }
212
+ }
213
+ }
214
+ //# sourceMappingURL=open-auth-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-auth-handler.js","sourceRoot":"","sources":["../../../../src/registration/open-auth-handler.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { ProofOfWorkChallengeModel } from "./proof-of-work-types.js";
1
+ import type { ProofOfWorkChallengeModel } from '@enbox/dwn-clients';
2
2
  /**
3
3
  * Manages proof-of-work challenge difficulty and lifecycle based on solve rate.
4
4
  * Can have multiple instances each having their own desired solve rate and difficulty.
@@ -1 +1 @@
1
- {"version":3,"file":"proof-of-work-manager.d.ts","sourceRoot":"","sources":["../../../../src/registration/proof-of-work-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAG1E;;;GAGG;AACH,qBAAa,kBAAkB;IAE7B,gBAAuB,8BAA8B,sEAAsE;IAG3H,OAAO,CAAC,eAAe,CAIrB;IAIF,OAAO,CAAC,uBAAuB,CAAkC;IAGjE,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,4BAA4B,CAAS;IAC7C,OAAO,CAAC,sCAAsC,CAAS;IACvD,OAAO,CAAC,sCAAsC,CAAS;IACvD,OAAO,CAAC,0BAA0B,CAAS;IAE3C;;OAEG;IACI,kCAAkC,EAAE,MAAM,CAAC;IAElD;;OAEG;IACI,wCAAwC,EAAE,MAAM,CAAC;IAExD;;OAEG;IACH,IAAW,8BAA8B,IAAI,MAAM,CAElD;IAED;;OAEG;IACH,IAAW,0BAA0B,IAAI,MAAM,CAE9C;IAED,OAAO;IAoBP;;;;;;;OAOG;WACiB,MAAM,CAAC,KAAK,EAAE;QAChC,0BAA0B,EAAE,MAAM,CAAC;QACnC,SAAS,EAAE,OAAO,CAAC;QACnB,8BAA8B,CAAC,EAAE,MAAM,CAAC;QACxC,4BAA4B,CAAC,EAAE,MAAM,CAAC;QACtC,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,kCAAkC,CAAC,EAAE,MAAM,CAAC;QAC5C,wCAAwC,CAAC,EAAE,MAAM,CAAA;KAClD,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAwB/B;;OAEG;IACI,KAAK,IAAI,IAAI;IAKb,uBAAuB,IAAI,yBAAyB;IAO3D;;OAEG;IACU,iBAAiB,CAAC,WAAW,EAAE;QAC1C,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkCjB;;;OAGG;IACU,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpE,OAAO,CAAC,iCAAiC;IAUzC,OAAO,CAAC,wCAAwC;IAUhD,OAAO,CAAC,mCAAmC;IAS3C,OAAO,CAAC,qBAAqB;IAoB7B;;;;;;;OAOG;YACW,8BAA8B;IAyD5C;;OAEG;IACH,OAAO,CAAC,+BAA+B,CAAa;IAEpD;;OAEG;WACW,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAK/C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;CAQjC"}
1
+ {"version":3,"file":"proof-of-work-manager.d.ts","sourceRoot":"","sources":["../../../../src/registration/proof-of-work-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAKpE;;;GAGG;AACH,qBAAa,kBAAkB;IAE7B,gBAAuB,8BAA8B,sEAAsE;IAG3H,OAAO,CAAC,eAAe,CAIrB;IAIF,OAAO,CAAC,uBAAuB,CAAkC;IAGjE,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,4BAA4B,CAAS;IAC7C,OAAO,CAAC,sCAAsC,CAAS;IACvD,OAAO,CAAC,sCAAsC,CAAS;IACvD,OAAO,CAAC,0BAA0B,CAAS;IAE3C;;OAEG;IACI,kCAAkC,EAAE,MAAM,CAAC;IAElD;;OAEG;IACI,wCAAwC,EAAE,MAAM,CAAC;IAExD;;OAEG;IACH,IAAW,8BAA8B,IAAI,MAAM,CAElD;IAED;;OAEG;IACH,IAAW,0BAA0B,IAAI,MAAM,CAE9C;IAED,OAAO;IAoBP;;;;;;;OAOG;WACiB,MAAM,CAAC,KAAK,EAAE;QAChC,0BAA0B,EAAE,MAAM,CAAC;QACnC,SAAS,EAAE,OAAO,CAAC;QACnB,8BAA8B,CAAC,EAAE,MAAM,CAAC;QACxC,4BAA4B,CAAC,EAAE,MAAM,CAAC;QACtC,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,kCAAkC,CAAC,EAAE,MAAM,CAAC;QAC5C,wCAAwC,CAAC,EAAE,MAAM,CAAA;KAClD,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAwB/B;;OAEG;IACI,KAAK,IAAI,IAAI;IAKb,uBAAuB,IAAI,yBAAyB;IAO3D;;OAEG;IACU,iBAAiB,CAAC,WAAW,EAAE;QAC1C,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkCjB;;;OAGG;IACU,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpE,OAAO,CAAC,iCAAiC;IAUzC,OAAO,CAAC,wCAAwC;IAUhD,OAAO,CAAC,mCAAmC;IAS3C,OAAO,CAAC,qBAAqB;IAoB7B;;;;;;;OAOG;YACW,8BAA8B;IAyD5C;;OAEG;IACH,OAAO,CAAC,+BAA+B,CAAa;IAEpD;;OAEG;WACW,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAK/C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;CAQjC"}
@@ -1,5 +1,5 @@
1
- import { DwnServerError, DwnServerErrorCode } from "../dwn-error.js";
2
- import { ProofOfWork } from "./proof-of-work.js";
1
+ import { ProofOfWork } from './proof-of-work.js';
2
+ import { DwnServerError, DwnServerErrorCode } from '../dwn-error.js';
3
3
  /**
4
4
  * Manages proof-of-work challenge difficulty and lifecycle based on solve rate.
5
5
  * Can have multiple instances each having their own desired solve rate and difficulty.
@@ -10,7 +10,7 @@ export class ProofOfWorkManager {
10
10
  // Challenge nonces that can be used for proof-of-work.
11
11
  challengeNonces;
12
12
  // There is opportunity to improve implementation here.
13
- // TODO: https://github.com/TBD54566975/dwn-server/issues/101
13
+ // TODO: https://github.com/enboxorg/enbox/issues/101
14
14
  proofOfWorkOfLastMinute = new Map(); // proofOfWorkId -> timestamp of proof-of-work
15
15
  // Seed to generate the challenge nonce from, this allows all DWN instances in a cluster to generate the same challenge.
16
16
  challengeSeed;
@@ -1 +1 @@
1
- {"version":3,"file":"proof-of-work-manager.js","sourceRoot":"","sources":["../../../../src/registration/proof-of-work-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proof-of-work-manager.js","sourceRoot":"","sources":["../../../../src/registration/proof-of-work-manager.ts"],"names":[],"mappings":"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"}