@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,574 @@
1
+ import log from 'loglevel';
2
+ import { createJsonRpcRequest } from '@enbox/dwn-clients';
3
+ import { DwnInterfaceName, DwnMethodName, getRuleSetAtPath, Message } from '@enbox/dwn-sdk-js';
4
+ // ---------------------------------------------------------------------------
5
+ // DeliveryService
6
+ // ---------------------------------------------------------------------------
7
+ /**
8
+ * Server-side service that handles two complementary features:
9
+ *
10
+ * 1. **Endpoint forwarding** — When a RecordsWrite/RecordsDelete is processed,
11
+ * forwards the original signed message to the tenant's *other* DWN service
12
+ * endpoints (peer replication without the agent mediating).
13
+ *
14
+ * 2. **Record delivery** — When a RecordsWrite/RecordsDelete is processed at a
15
+ * protocol path with `$delivery`, proactively delivers to participants' DWN
16
+ * endpoints determined from protocol `$actions` role records.
17
+ *
18
+ * Both operations are fire-and-forget: failures are logged but never propagate
19
+ * to the original request handler.
20
+ */
21
+ export class DeliveryService {
22
+ static #maxRetries = 2;
23
+ static #retryDelaysMs = [1_000, 5_000];
24
+ static #requestTimeoutMs = 10_000;
25
+ #dwn;
26
+ #didResolver;
27
+ #config;
28
+ #selfBaseUrl;
29
+ /**
30
+ * Simple TTL cache for DID-document-derived endpoint lists.
31
+ * Key: DID URI, Value: { endpoints, expiresAt }.
32
+ */
33
+ #endpointCache = new Map();
34
+ /**
35
+ * Short-lived dedup cache for recently forwarded messageCids.
36
+ * Prevents forwarding loops when multiple providers forward to each other.
37
+ * Key: `${targetDid}:${messageCid}`, Value: expiry timestamp.
38
+ */
39
+ #forwardedCids = new Map();
40
+ constructor(dwn, didResolver, config) {
41
+ this.#dwn = dwn;
42
+ this.#didResolver = didResolver;
43
+ this.#config = config;
44
+ this.#selfBaseUrl = config.baseUrl.replace(/\/+$/, '');
45
+ }
46
+ /**
47
+ * Factory method following the established server service pattern.
48
+ */
49
+ static create(dwn, didResolver, config) {
50
+ return new DeliveryService(dwn, didResolver, config);
51
+ }
52
+ // -------------------------------------------------------------------------
53
+ // MessageProcessedHook implementation
54
+ // -------------------------------------------------------------------------
55
+ /**
56
+ * Hook entry point invoked by the hooks runner after `dwn.processMessage()`.
57
+ */
58
+ onMessageProcessed(context) {
59
+ this.dispatchIfNeeded(context.tenant, context.message, context.status.code);
60
+ }
61
+ // -------------------------------------------------------------------------
62
+ // Public API — called from processMessage handler (fire-and-forget)
63
+ // -------------------------------------------------------------------------
64
+ /**
65
+ * Evaluates whether forwarding or delivery should occur for a successfully
66
+ * processed message, and dispatches outbound requests asynchronously.
67
+ *
68
+ * This method does NOT await the outbound requests — it returns immediately
69
+ * after scheduling them.
70
+ *
71
+ * @param tenant - The tenant DID that owns the DWN.
72
+ * @param message - The original signed DWN message.
73
+ * @param statusCode - The reply status code from `dwn.processMessage()`.
74
+ */
75
+ dispatchIfNeeded(tenant, message, statusCode) {
76
+ // Only act on successful writes (202) and deletes (202).
77
+ if (statusCode !== 202) {
78
+ return;
79
+ }
80
+ const iface = message.descriptor.interface;
81
+ const method = message.descriptor.method;
82
+ // Only forward RecordsWrite and RecordsDelete messages.
83
+ if (iface !== DwnInterfaceName.Records ||
84
+ (method !== DwnMethodName.Write && method !== DwnMethodName.Delete)) {
85
+ return;
86
+ }
87
+ const messageCid = message.recordId ?? '';
88
+ // Schedule forwarding (fire-and-forget).
89
+ if (this.#config.forwardingEnabled) {
90
+ this.#forwardToEndpoints(tenant, message, messageCid).catch((err) => {
91
+ log.error('DeliveryService: forwarding error', err);
92
+ });
93
+ }
94
+ // Schedule delivery (fire-and-forget).
95
+ if (this.#config.deliveryEnabled && method === DwnMethodName.Write) {
96
+ this.#deliverToParticipants(tenant, message, messageCid).catch((err) => {
97
+ log.error('DeliveryService: delivery error', err);
98
+ });
99
+ }
100
+ }
101
+ // -------------------------------------------------------------------------
102
+ // Endpoint Forwarding
103
+ // -------------------------------------------------------------------------
104
+ /**
105
+ * Forwards the message to the tenant's *other* DWN service endpoints.
106
+ * The tenant's DID document is resolved to discover all DWN endpoints,
107
+ * then the message is sent to every endpoint except this server's own URL.
108
+ */
109
+ async #forwardToEndpoints(tenant, message, messageCid) {
110
+ const endpoints = await this.#resolveDwnEndpoints(tenant);
111
+ if (endpoints.length === 0) {
112
+ return;
113
+ }
114
+ // Filter out self.
115
+ const peerEndpoints = endpoints.filter((ep) => !ep.url.startsWith(this.#selfBaseUrl));
116
+ if (peerEndpoints.length === 0) {
117
+ return;
118
+ }
119
+ const concurrency = this.#config.deliveryMaxConcurrency;
120
+ // Deduplicate: skip if this messageCid was recently forwarded to these endpoints.
121
+ const dedupKey = `fwd:${tenant}:${messageCid}`;
122
+ if (this.#isRecentlyForwarded(dedupKey)) {
123
+ log.debug(`DeliveryService: skipping duplicate forward for ${messageCid}`);
124
+ return;
125
+ }
126
+ this.#markForwarded(dedupKey);
127
+ // Sort full endpoints first — ensure full nodes receive writes before cache nodes.
128
+ peerEndpoints.sort((a, b) => {
129
+ if (a.isFull && !b.isFull) {
130
+ return -1;
131
+ }
132
+ if (!a.isFull && b.isFull) {
133
+ return 1;
134
+ }
135
+ return 0;
136
+ });
137
+ // Send to each peer endpoint with bounded concurrency.
138
+ await this.#sendToEndpoints(peerEndpoints, tenant, message, concurrency);
139
+ }
140
+ // -------------------------------------------------------------------------
141
+ // Record Delivery
142
+ // -------------------------------------------------------------------------
143
+ /**
144
+ * Delivers the message to all participant DWN endpoints determined by
145
+ * the protocol's `$delivery` directive and `$actions` role records.
146
+ */
147
+ async #deliverToParticipants(tenant, message, messageCid) {
148
+ const descriptor = message.descriptor;
149
+ // Only protocol-governed records can have $delivery.
150
+ if (!descriptor.protocol || !descriptor.protocolPath) {
151
+ return;
152
+ }
153
+ // Look up the protocol definition to check for $delivery.
154
+ const protocolDefinition = await this.#getProtocolDefinition(tenant, descriptor.protocol);
155
+ if (!protocolDefinition) {
156
+ return;
157
+ }
158
+ const ruleSet = getRuleSetAtPath(descriptor.protocolPath, protocolDefinition.structure);
159
+ if (!ruleSet || !ruleSet.$delivery) {
160
+ return;
161
+ }
162
+ // For 'direct' strategy: resolve targets and push.
163
+ if (ruleSet.$delivery === 'direct') {
164
+ const targets = await this.#resolveDeliveryTargets(tenant, protocolDefinition, ruleSet, descriptor.protocolPath, descriptor.contextId, descriptor.recipient);
165
+ if (targets.length === 0) {
166
+ return;
167
+ }
168
+ // Filter out the tenant itself (they already have the record).
169
+ const externalTargets = targets.filter((t) => t.did !== tenant);
170
+ if (externalTargets.length === 0) {
171
+ return;
172
+ }
173
+ const concurrency = this.#config.deliveryMaxConcurrency;
174
+ const allEndpoints = [];
175
+ const endpointTargetMap = new Map(); // url -> target DID
176
+ for (const target of externalTargets) {
177
+ for (const ep of target.endpoints) {
178
+ allEndpoints.push(ep);
179
+ endpointTargetMap.set(ep.url, target.did);
180
+ }
181
+ }
182
+ // Deduplicate per-target.
183
+ const uniqueEndpoints = allEndpoints.filter((ep) => {
184
+ const targetDid = endpointTargetMap.get(ep.url);
185
+ const dedupKey = `dlv:${targetDid}:${messageCid}`;
186
+ if (this.#isRecentlyForwarded(dedupKey)) {
187
+ return false;
188
+ }
189
+ this.#markForwarded(dedupKey);
190
+ return true;
191
+ });
192
+ if (uniqueEndpoints.length === 0) {
193
+ return;
194
+ }
195
+ // For delivery, the target is the participant DID (not the tenant).
196
+ // We need to send to each participant's DWN with the *participant* as the target.
197
+ await this.#sendToEndpointsGrouped(uniqueEndpoints, endpointTargetMap, message, concurrency);
198
+ }
199
+ // 'subscribe' strategy: no outbound push needed from the origin.
200
+ // Participant providers are responsible for establishing RecordsSubscribe connections.
201
+ }
202
+ // -------------------------------------------------------------------------
203
+ // Delivery Target Resolution
204
+ // -------------------------------------------------------------------------
205
+ /**
206
+ * Resolves the set of DIDs that should receive a record at the given protocol path.
207
+ * Targets are determined by querying role records in the tenant's DWN.
208
+ *
209
+ * For each `$actions` rule that references a `role`, we query for role records
210
+ * at that role's protocol path, scoped to the record's contextId. The `recipient`
211
+ * field of each matching role record is a participant DID.
212
+ */
213
+ async #resolveDeliveryTargets(tenant, protocolDefinition, ruleSet, protocolPath, contextId, recipient) {
214
+ const targetDids = new Set();
215
+ // Method 1: Explicit recipient on the record itself.
216
+ if (recipient) {
217
+ targetDids.add(recipient);
218
+ }
219
+ // Method 2: Role-based discovery from $actions rules.
220
+ const actionRules = ruleSet.$actions ?? [];
221
+ for (const rule of actionRules) {
222
+ // Role-based rules: query for role records at the role path.
223
+ if (rule.role !== undefined) {
224
+ const roleDids = await this.#queryRoleRecipients(tenant, protocolDefinition.protocol, rule.role, contextId);
225
+ for (const did of roleDids) {
226
+ targetDids.add(did);
227
+ }
228
+ }
229
+ // Method 3: Actor-based discovery — `who: "author"/"recipient"` + `of` path.
230
+ // Find the ancestor record at the `of` protocol path within the same context,
231
+ // then extract its author or recipient as a delivery target.
232
+ if (rule.who !== undefined && rule.of !== undefined && rule.who !== 'anyone') {
233
+ // Skip cross-protocol `of` references (e.g., "threads:thread") for now.
234
+ if (!rule.of.includes(':')) {
235
+ const actorDid = await this.#queryActorFromAncestor(tenant, protocolDefinition.protocol, rule.of, rule.who, contextId);
236
+ if (actorDid) {
237
+ targetDids.add(actorDid);
238
+ }
239
+ }
240
+ }
241
+ }
242
+ // Resolve endpoints for each target DID.
243
+ const targets = [];
244
+ for (const did of targetDids) {
245
+ const endpoints = await this.#resolveDwnEndpoints(did);
246
+ if (endpoints.length > 0) {
247
+ targets.push({ did, endpoints });
248
+ }
249
+ }
250
+ return targets;
251
+ }
252
+ /**
253
+ * Queries the tenant's DWN for role records at the given protocol path
254
+ * and returns the set of unique recipient DIDs.
255
+ */
256
+ async #queryRoleRecipients(tenant, protocolUri, rolePath, contextId) {
257
+ try {
258
+ // Build a RecordsQuery to find role records.
259
+ const filter = {
260
+ protocol: protocolUri,
261
+ protocolPath: rolePath,
262
+ };
263
+ // Scope to context if the role is nested (has ancestors).
264
+ if (contextId !== undefined && rolePath.includes('/')) {
265
+ // For a nested role like 'thread/participant', the role record's contextId
266
+ // shares the same prefix as the target record's contextId.
267
+ const roleDepth = rolePath.split('/').length - 1;
268
+ const contextSegments = contextId.split('/');
269
+ if (contextSegments.length >= roleDepth) {
270
+ const contextPrefix = contextSegments.slice(0, roleDepth).join('/');
271
+ filter.contextId = contextPrefix;
272
+ }
273
+ }
274
+ // Use the DWN's processMessage to query for role records.
275
+ const queryMessage = {
276
+ descriptor: {
277
+ interface: DwnInterfaceName.Records,
278
+ method: DwnMethodName.Query,
279
+ messageTimestamp: new Date().toISOString(),
280
+ filter,
281
+ },
282
+ };
283
+ const reply = await this.#dwn.processMessage(tenant, queryMessage);
284
+ if (reply.status.code !== 200 || !reply.entries) {
285
+ return [];
286
+ }
287
+ // Extract unique recipient DIDs from the role records.
288
+ const dids = new Set();
289
+ for (const entry of reply.entries) {
290
+ const recipient = entry.descriptor?.recipient
291
+ ?? entry.recipient;
292
+ if (recipient) {
293
+ dids.add(recipient);
294
+ }
295
+ }
296
+ return Array.from(dids);
297
+ }
298
+ catch (err) {
299
+ log.warn(`DeliveryService: failed to query role recipients for ${rolePath}`, err);
300
+ return [];
301
+ }
302
+ }
303
+ /**
304
+ * Queries the tenant's DWN for the ancestor record at the given protocol path
305
+ * (within the same context) and extracts the author or recipient DID.
306
+ *
307
+ * This is the delivery-side inverse of `checkActor()` in protocol authorization:
308
+ * instead of "is this DID the author/recipient?", we ask "who IS the author/recipient?".
309
+ *
310
+ * @param actorType - `"author"` or `"recipient"`.
311
+ * @returns The DID of the actor, or `undefined` if the ancestor cannot be found.
312
+ */
313
+ async #queryActorFromAncestor(tenant, protocolUri, ofPath, actorType, contextId) {
314
+ try {
315
+ const filter = {
316
+ protocol: protocolUri,
317
+ protocolPath: ofPath,
318
+ };
319
+ // Scope to the record's context. The `of` path identifies an ancestor,
320
+ // so the ancestor's contextId is a prefix of (or equal to) the current
321
+ // record's contextId. For a top-level `of` path (no slashes), the ancestor
322
+ // IS the context root — its recordId equals the first contextId segment.
323
+ if (contextId !== undefined) {
324
+ const ofDepth = ofPath.split('/').length;
325
+ const contextSegments = contextId.split('/');
326
+ // The ancestor at depth N has a contextId formed by the first N segments.
327
+ if (contextSegments.length >= ofDepth) {
328
+ filter.contextId = contextSegments.slice(0, ofDepth).join('/');
329
+ }
330
+ }
331
+ const queryMessage = {
332
+ descriptor: {
333
+ interface: DwnInterfaceName.Records,
334
+ method: DwnMethodName.Query,
335
+ messageTimestamp: new Date().toISOString(),
336
+ filter,
337
+ },
338
+ };
339
+ const reply = await this.#dwn.processMessage(tenant, queryMessage);
340
+ if (reply.status.code !== 200 || !reply.entries || reply.entries.length === 0) {
341
+ return undefined;
342
+ }
343
+ const ancestor = reply.entries[0];
344
+ if (actorType === 'author') {
345
+ return Message.getAuthor(ancestor);
346
+ }
347
+ else if (actorType === 'recipient') {
348
+ return ancestor.descriptor?.recipient;
349
+ }
350
+ return undefined;
351
+ }
352
+ catch (err) {
353
+ log.warn(`DeliveryService: failed to query ancestor at ${ofPath} for actor resolution`, err);
354
+ return undefined;
355
+ }
356
+ }
357
+ // -------------------------------------------------------------------------
358
+ // DID Resolution & Endpoint Discovery
359
+ // -------------------------------------------------------------------------
360
+ /**
361
+ * Resolves a DID and extracts DWN service endpoints from the DID document.
362
+ * Results are cached with a configurable TTL.
363
+ */
364
+ async #resolveDwnEndpoints(did) {
365
+ // Check cache.
366
+ const cached = this.#endpointCache.get(did);
367
+ if (cached && cached.expiresAt > Date.now()) {
368
+ return cached.endpoints;
369
+ }
370
+ try {
371
+ const resolution = await this.#didResolver.resolve(did);
372
+ if (!resolution.didDocument) {
373
+ return [];
374
+ }
375
+ const endpoints = DeliveryService.#extractDwnEndpoints(resolution.didDocument);
376
+ // Cache the result.
377
+ const ttlMs = this.#config.deliveryEndpointCacheTtlSeconds * 1_000;
378
+ this.#endpointCache.set(did, { endpoints, expiresAt: Date.now() + ttlMs });
379
+ return endpoints;
380
+ }
381
+ catch (err) {
382
+ log.warn(`DeliveryService: failed to resolve DID ${did}`, err);
383
+ return [];
384
+ }
385
+ }
386
+ /**
387
+ * Extracts DWN service endpoints from a DID document.
388
+ * Looks for services of type `DecentralizedWebNode` with `serviceEndpoint` entries.
389
+ *
390
+ * Supports all endpoint formats:
391
+ * - `"https://example.com"` — bare string, implicitly full
392
+ * - `["https://a.com", "https://b.com"]` — string array, implicitly full
393
+ * - `{ nodes: ["https://a.com"] }` — legacy object format, implicitly full
394
+ * - `{ url: "https://a.com", dataRetention: "cache" }` — map format with explicit retention
395
+ */
396
+ static #extractDwnEndpoints(didDocument) {
397
+ const endpoints = [];
398
+ if (!didDocument.service) {
399
+ return endpoints;
400
+ }
401
+ for (const service of didDocument.service) {
402
+ if (service.type !== 'DecentralizedWebNode') {
403
+ continue;
404
+ }
405
+ // serviceEndpoint can be a string, string[], object with nodes, or map with url.
406
+ const epValue = service.serviceEndpoint;
407
+ if (typeof epValue === 'string') {
408
+ endpoints.push({ url: epValue.replace(/\/+$/, ''), isFull: true });
409
+ }
410
+ else if (Array.isArray(epValue)) {
411
+ for (const entry of epValue) {
412
+ if (typeof entry === 'string') {
413
+ endpoints.push({ url: entry.replace(/\/+$/, ''), isFull: true });
414
+ }
415
+ else if (entry && typeof entry === 'object') {
416
+ // Map entry: { url: "...", dataRetention?: "full" | "cache" }
417
+ const mapEntry = entry;
418
+ if (typeof mapEntry.url === 'string') {
419
+ endpoints.push({
420
+ url: mapEntry.url.replace(/\/+$/, ''),
421
+ isFull: mapEntry.dataRetention !== 'cache',
422
+ });
423
+ }
424
+ }
425
+ }
426
+ }
427
+ else if (epValue && typeof epValue === 'object') {
428
+ // Legacy object format: { nodes: [...] }
429
+ if ('nodes' in epValue) {
430
+ const nodes = epValue.nodes;
431
+ if (Array.isArray(nodes)) {
432
+ for (const node of nodes) {
433
+ if (typeof node === 'string') {
434
+ endpoints.push({ url: node.replace(/\/+$/, ''), isFull: true });
435
+ }
436
+ }
437
+ }
438
+ }
439
+ // Map format at top level: { url: "...", dataRetention?: "..." }
440
+ if ('url' in epValue) {
441
+ const mapEntry = epValue;
442
+ if (typeof mapEntry.url === 'string') {
443
+ endpoints.push({
444
+ url: mapEntry.url.replace(/\/+$/, ''),
445
+ isFull: mapEntry.dataRetention !== 'cache',
446
+ });
447
+ }
448
+ }
449
+ }
450
+ }
451
+ return endpoints;
452
+ }
453
+ // -------------------------------------------------------------------------
454
+ // Protocol Definition Lookup
455
+ // -------------------------------------------------------------------------
456
+ /**
457
+ * Fetches the installed protocol definition for a given protocol URI from
458
+ * the tenant's DWN.
459
+ */
460
+ async #getProtocolDefinition(tenant, protocolUri) {
461
+ try {
462
+ const queryMessage = {
463
+ descriptor: {
464
+ interface: DwnInterfaceName.Protocols,
465
+ method: DwnMethodName.Query,
466
+ messageTimestamp: new Date().toISOString(),
467
+ filter: { protocol: protocolUri },
468
+ },
469
+ };
470
+ const reply = await this.#dwn.processMessage(tenant, queryMessage);
471
+ if (reply.status.code !== 200 || !reply.entries || reply.entries.length === 0) {
472
+ return undefined;
473
+ }
474
+ const configMessage = reply.entries[0];
475
+ return configMessage.descriptor?.definition;
476
+ }
477
+ catch (err) {
478
+ log.warn(`DeliveryService: failed to query protocol definition for ${protocolUri}`, err);
479
+ return undefined;
480
+ }
481
+ }
482
+ // -------------------------------------------------------------------------
483
+ // Outbound HTTP Dispatch
484
+ // -------------------------------------------------------------------------
485
+ /**
486
+ * Sends a DWN message to multiple endpoints with bounded concurrency.
487
+ * Used for forwarding where the target DID is the tenant.
488
+ */
489
+ async #sendToEndpoints(endpoints, tenant, message, concurrency) {
490
+ // Process in batches of `concurrency`.
491
+ for (let i = 0; i < endpoints.length; i += concurrency) {
492
+ const batch = endpoints.slice(i, i + concurrency);
493
+ await Promise.allSettled(batch.map((ep) => this.#sendMessage(ep.url, tenant, message)));
494
+ }
495
+ }
496
+ /**
497
+ * Sends a DWN message to endpoints grouped by target DID.
498
+ * Used for delivery where each endpoint maps to a specific participant DID.
499
+ */
500
+ async #sendToEndpointsGrouped(endpoints, endpointTargetMap, message, concurrency) {
501
+ for (let i = 0; i < endpoints.length; i += concurrency) {
502
+ const batch = endpoints.slice(i, i + concurrency);
503
+ await Promise.allSettled(batch.map((ep) => {
504
+ const targetDid = endpointTargetMap.get(ep.url);
505
+ return this.#sendMessage(ep.url, targetDid, message);
506
+ }));
507
+ }
508
+ }
509
+ /**
510
+ * Sends a single DWN message to a remote endpoint via JSON-RPC over HTTP.
511
+ * Follows the same retry pattern as WebhookManager.
512
+ */
513
+ async #sendMessage(endpointUrl, target, message) {
514
+ const rpcRequest = createJsonRpcRequest(crypto.randomUUID(), 'dwn.processMessage', { target, message });
515
+ const body = JSON.stringify(rpcRequest);
516
+ const headers = {
517
+ 'content-type': 'application/json',
518
+ 'dwn-request': body,
519
+ };
520
+ for (let attempt = 0; attempt <= DeliveryService.#maxRetries; attempt++) {
521
+ try {
522
+ const response = await fetch(endpointUrl, {
523
+ method: 'POST', headers, body: new Uint8Array(0), signal: AbortSignal.timeout(DeliveryService.#requestTimeoutMs),
524
+ });
525
+ if (response.ok) {
526
+ log.debug(`DeliveryService: sent to ${endpointUrl} for ${target} (${response.status})`);
527
+ return;
528
+ }
529
+ // 409 means duplicate — the remote already has this message. That's success.
530
+ if (response.status === 409) {
531
+ log.debug(`DeliveryService: ${endpointUrl} already has message for ${target} (409)`);
532
+ return;
533
+ }
534
+ log.warn(`DeliveryService: ${endpointUrl} returned ${response.status} (attempt ${attempt + 1})`);
535
+ }
536
+ catch (err) {
537
+ log.warn(`DeliveryService: fetch error to ${endpointUrl} (attempt ${attempt + 1}):`, err);
538
+ }
539
+ // Wait before retry (skip wait on last attempt).
540
+ if (attempt < DeliveryService.#maxRetries) {
541
+ await new Promise((resolve) => setTimeout(resolve, DeliveryService.#retryDelaysMs[attempt]));
542
+ }
543
+ }
544
+ log.error(`DeliveryService: delivery to ${endpointUrl} failed after ${DeliveryService.#maxRetries + 1} attempts`);
545
+ }
546
+ // -------------------------------------------------------------------------
547
+ // Deduplication Cache
548
+ // -------------------------------------------------------------------------
549
+ #isRecentlyForwarded(key) {
550
+ const expiry = this.#forwardedCids.get(key);
551
+ if (expiry === undefined) {
552
+ return false;
553
+ }
554
+ if (expiry < Date.now()) {
555
+ this.#forwardedCids.delete(key);
556
+ return false;
557
+ }
558
+ return true;
559
+ }
560
+ #markForwarded(key) {
561
+ const ttlMs = this.#config.forwardingDeduplicationTtlSeconds * 1_000;
562
+ this.#forwardedCids.set(key, Date.now() + ttlMs);
563
+ // Lazy eviction: purge expired entries when cache grows large.
564
+ if (this.#forwardedCids.size > 10_000) {
565
+ const now = Date.now();
566
+ for (const [k, v] of this.#forwardedCids) {
567
+ if (v < now) {
568
+ this.#forwardedCids.delete(k);
569
+ }
570
+ }
571
+ }
572
+ }
573
+ }
574
+ //# sourceMappingURL=delivery-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery-service.js","sourceRoot":"","sources":["../../../src/delivery-service.ts"],"names":[],"mappings":"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"}
@@ -23,7 +23,16 @@ export declare enum DwnServerErrorCode {
23
23
  ProofOfWorkManagerInvalidChallengeNonce = "ProofOfWorkManagerInvalidChallengeNonce",
24
24
  ProofOfWorkManagerInvalidResponseNonceFormat = "ProofOfWorkManagerInvalidResponseNonceFormat",
25
25
  ProofOfWorkManagerResponseNonceReused = "ProofOfWorkManagerResponseNonceReused",
26
+ ProviderAuthNotEnabled = "ProviderAuthNotEnabled",
27
+ ProviderAuthPluginLoadFailed = "ProviderAuthPluginLoadFailed",
28
+ ProviderAuthPluginNotConfigured = "ProviderAuthPluginNotConfigured",
29
+ ProviderAuthTokenInvalid = "ProviderAuthTokenInvalid",
30
+ RateLimitExceeded = "RateLimitExceeded",
26
31
  RegistrationManagerInvalidOrOutdatedTermsOfServiceHash = "RegistrationManagerInvalidOrOutdatedTermsOfServiceHash",
27
- TenantRegistrationOutdatedTermsOfService = "TenantRegistrationOutdatedTermsOfService"
32
+ RegistrationRequestMissingCredentials = "RegistrationRequestMissingCredentials",
33
+ TenantMessageQuotaExceeded = "TenantMessageQuotaExceeded",
34
+ TenantRegistrationOutdatedTermsOfService = "TenantRegistrationOutdatedTermsOfService",
35
+ TenantStorageQuotaExceeded = "TenantStorageQuotaExceeded",
36
+ TenantSuspended = "TenantSuspended"
28
37
  }
29
38
  //# sourceMappingURL=dwn-error.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dwn-error.d.ts","sourceRoot":"","sources":["../../../src/dwn-error.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,cAAe,SAAQ,KAAK;IAE9B,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM;IAOjB;;OAEG;IACI,MAAM,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;CAMnD;AAED;;GAEG;AACH,oBAAY,kBAAkB;IAC5B,qCAAqC,0CAA0C;IAC/E,uCAAuC,4CAA4C;IACnF,oCAAoC,yCAAyC;IAC7E,oCAAoC,yCAAyC;IAC7E,uCAAuC,4CAA4C;IACnF,4CAA4C,iDAAiD;IAC7F,qCAAqC,0CAA0C;IAC/E,sDAAsD,2DAA2D;IACjH,wCAAwC,6CAA6C;CACtF"}
1
+ {"version":3,"file":"dwn-error.d.ts","sourceRoot":"","sources":["../../../src/dwn-error.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,cAAe,SAAQ,KAAK;IAE9B,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM;IAOjB;;OAEG;IACI,MAAM,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;CAMnD;AAED;;GAEG;AACH,oBAAY,kBAAkB;IAC5B,qCAAqC,0CAA0C;IAC/E,uCAAuC,4CAA4C;IACnF,oCAAoC,yCAAyC;IAC7E,oCAAoC,yCAAyC;IAC7E,uCAAuC,4CAA4C;IACnF,4CAA4C,iDAAiD;IAC7F,qCAAqC,0CAA0C;IAC/E,sBAAsB,2BAA2B;IACjD,4BAA4B,iCAAiC;IAC7D,+BAA+B,oCAAoC;IACnE,wBAAwB,6BAA6B;IACrD,iBAAiB,sBAAsB;IACvC,sDAAsD,2DAA2D;IACjH,qCAAqC,0CAA0C;IAC/E,0BAA0B,+BAA+B;IACzD,wCAAwC,6CAA6C;IACrF,0BAA0B,+BAA+B;IACzD,eAAe,oBAAoB;CACpC"}
@@ -30,7 +30,16 @@ export var DwnServerErrorCode;
30
30
  DwnServerErrorCode["ProofOfWorkManagerInvalidChallengeNonce"] = "ProofOfWorkManagerInvalidChallengeNonce";
31
31
  DwnServerErrorCode["ProofOfWorkManagerInvalidResponseNonceFormat"] = "ProofOfWorkManagerInvalidResponseNonceFormat";
32
32
  DwnServerErrorCode["ProofOfWorkManagerResponseNonceReused"] = "ProofOfWorkManagerResponseNonceReused";
33
+ DwnServerErrorCode["ProviderAuthNotEnabled"] = "ProviderAuthNotEnabled";
34
+ DwnServerErrorCode["ProviderAuthPluginLoadFailed"] = "ProviderAuthPluginLoadFailed";
35
+ DwnServerErrorCode["ProviderAuthPluginNotConfigured"] = "ProviderAuthPluginNotConfigured";
36
+ DwnServerErrorCode["ProviderAuthTokenInvalid"] = "ProviderAuthTokenInvalid";
37
+ DwnServerErrorCode["RateLimitExceeded"] = "RateLimitExceeded";
33
38
  DwnServerErrorCode["RegistrationManagerInvalidOrOutdatedTermsOfServiceHash"] = "RegistrationManagerInvalidOrOutdatedTermsOfServiceHash";
39
+ DwnServerErrorCode["RegistrationRequestMissingCredentials"] = "RegistrationRequestMissingCredentials";
40
+ DwnServerErrorCode["TenantMessageQuotaExceeded"] = "TenantMessageQuotaExceeded";
34
41
  DwnServerErrorCode["TenantRegistrationOutdatedTermsOfService"] = "TenantRegistrationOutdatedTermsOfService";
42
+ DwnServerErrorCode["TenantStorageQuotaExceeded"] = "TenantStorageQuotaExceeded";
43
+ DwnServerErrorCode["TenantSuspended"] = "TenantSuspended";
35
44
  })(DwnServerErrorCode || (DwnServerErrorCode = {}));
36
45
  //# sourceMappingURL=dwn-error.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dwn-error.js","sourceRoot":"","sources":["../../../src/dwn-error.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,KAAK;IAE9B;IADT,YACS,IAAY,EACnB,OAAe;QAEf,KAAK,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;QAHtB,SAAI,GAAJ,IAAI,CAAQ;QAKnB,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;IAED;;OAEG;IACI,MAAM;QACX,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC;IACJ,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,kBAUX;AAVD,WAAY,kBAAkB;IAC5B,qGAA+E,CAAA;IAC/E,yGAAmF,CAAA;IACnF,mGAA6E,CAAA;IAC7E,mGAA6E,CAAA;IAC7E,yGAAmF,CAAA;IACnF,mHAA6F,CAAA;IAC7F,qGAA+E,CAAA;IAC/E,uIAAiH,CAAA;IACjH,2GAAqF,CAAA;AACvF,CAAC,EAVW,kBAAkB,KAAlB,kBAAkB,QAU7B"}
1
+ {"version":3,"file":"dwn-error.js","sourceRoot":"","sources":["../../../src/dwn-error.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,KAAK;IAE9B;IADT,YACS,IAAY,EACnB,OAAe;QAEf,KAAK,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;QAHtB,SAAI,GAAJ,IAAI,CAAQ;QAKnB,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;IAED;;OAEG;IACI,MAAM;QACX,OAAO;YACL,IAAI,EAAM,IAAI,CAAC,IAAI;YACnB,OAAO,EAAG,IAAI,CAAC,OAAO;SACvB,CAAC;IACJ,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,kBAmBX;AAnBD,WAAY,kBAAkB;IAC5B,qGAA+E,CAAA;IAC/E,yGAAmF,CAAA;IACnF,mGAA6E,CAAA;IAC7E,mGAA6E,CAAA;IAC7E,yGAAmF,CAAA;IACnF,mHAA6F,CAAA;IAC7F,qGAA+E,CAAA;IAC/E,uEAAiD,CAAA;IACjD,mFAA6D,CAAA;IAC7D,yFAAmE,CAAA;IACnE,2EAAqD,CAAA;IACrD,6DAAuC,CAAA;IACvC,uIAAiH,CAAA;IACjH,qGAA+E,CAAA;IAC/E,+EAAyD,CAAA;IACzD,2GAAqF,CAAA;IACrF,+EAAyD,CAAA;IACzD,yDAAmC,CAAA;AACrC,CAAC,EAnBW,kBAAkB,KAAlB,kBAAkB,QAmB7B"}