@enbox/dwn-sdk-js 0.0.7 → 0.0.8

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 (351) hide show
  1. package/dist/browser.mjs +8 -8
  2. package/dist/browser.mjs.map +4 -4
  3. package/dist/esm/generated/precompiled-validators.js +761 -909
  4. package/dist/esm/generated/precompiled-validators.js.map +1 -1
  5. package/dist/esm/src/core/constants.js +11 -0
  6. package/dist/esm/src/core/constants.js.map +1 -0
  7. package/dist/esm/src/core/core-protocol.js +44 -0
  8. package/dist/esm/src/core/core-protocol.js.map +1 -0
  9. package/dist/esm/src/core/dwn-error.js +9 -12
  10. package/dist/esm/src/core/dwn-error.js.map +1 -1
  11. package/dist/esm/src/core/grant-authorization.js +16 -3
  12. package/dist/esm/src/core/grant-authorization.js.map +1 -1
  13. package/dist/esm/src/core/protocol-authorization-validation.js +67 -0
  14. package/dist/esm/src/core/protocol-authorization-validation.js.map +1 -1
  15. package/dist/esm/src/core/protocol-authorization.js +51 -30
  16. package/dist/esm/src/core/protocol-authorization.js.map +1 -1
  17. package/dist/esm/src/core/records-grant-authorization.js +6 -8
  18. package/dist/esm/src/core/records-grant-authorization.js.map +1 -1
  19. package/dist/esm/src/dwn.js +42 -18
  20. package/dist/esm/src/dwn.js.map +1 -1
  21. package/dist/esm/src/event-stream/event-emitter-event-log.js +204 -0
  22. package/dist/esm/src/event-stream/event-emitter-event-log.js.map +1 -0
  23. package/dist/esm/src/handlers/messages-read.js +7 -11
  24. package/dist/esm/src/handlers/messages-read.js.map +1 -1
  25. package/dist/esm/src/handlers/messages-subscribe.js +22 -24
  26. package/dist/esm/src/handlers/messages-subscribe.js.map +1 -1
  27. package/dist/esm/src/handlers/messages-sync.js +11 -15
  28. package/dist/esm/src/handlers/messages-sync.js.map +1 -1
  29. package/dist/esm/src/handlers/protocols-configure.js +37 -27
  30. package/dist/esm/src/handlers/protocols-configure.js.map +1 -1
  31. package/dist/esm/src/handlers/protocols-query.js +7 -11
  32. package/dist/esm/src/handlers/protocols-query.js.map +1 -1
  33. package/dist/esm/src/handlers/records-count.js +10 -12
  34. package/dist/esm/src/handlers/records-count.js.map +1 -1
  35. package/dist/esm/src/handlers/records-delete.js +10 -18
  36. package/dist/esm/src/handlers/records-delete.js.map +1 -1
  37. package/dist/esm/src/handlers/records-query.js +11 -15
  38. package/dist/esm/src/handlers/records-query.js.map +1 -1
  39. package/dist/esm/src/handlers/records-read.js +31 -26
  40. package/dist/esm/src/handlers/records-read.js.map +1 -1
  41. package/dist/esm/src/handlers/records-subscribe.js +39 -26
  42. package/dist/esm/src/handlers/records-subscribe.js.map +1 -1
  43. package/dist/esm/src/handlers/records-write.js +47 -105
  44. package/dist/esm/src/handlers/records-write.js.map +1 -1
  45. package/dist/esm/src/index.js +5 -2
  46. package/dist/esm/src/index.js.map +1 -1
  47. package/dist/esm/src/interfaces/messages-subscribe.js +1 -0
  48. package/dist/esm/src/interfaces/messages-subscribe.js.map +1 -1
  49. package/dist/esm/src/interfaces/protocols-configure.js +25 -3
  50. package/dist/esm/src/interfaces/protocols-configure.js.map +1 -1
  51. package/dist/esm/src/interfaces/records-count.js +1 -1
  52. package/dist/esm/src/interfaces/records-count.js.map +1 -1
  53. package/dist/esm/src/interfaces/records-delete.js +1 -1
  54. package/dist/esm/src/interfaces/records-delete.js.map +1 -1
  55. package/dist/esm/src/interfaces/records-query.js +1 -1
  56. package/dist/esm/src/interfaces/records-query.js.map +1 -1
  57. package/dist/esm/src/interfaces/records-read.js +1 -1
  58. package/dist/esm/src/interfaces/records-read.js.map +1 -1
  59. package/dist/esm/src/interfaces/records-subscribe.js +2 -1
  60. package/dist/esm/src/interfaces/records-subscribe.js.map +1 -1
  61. package/dist/esm/src/interfaces/records-write-signing.js +1 -12
  62. package/dist/esm/src/interfaces/records-write-signing.js.map +1 -1
  63. package/dist/esm/src/interfaces/records-write.js +22 -41
  64. package/dist/esm/src/interfaces/records-write.js.map +1 -1
  65. package/dist/esm/src/protocols/permission-grant.js +1 -1
  66. package/dist/esm/src/protocols/permission-grant.js.map +1 -1
  67. package/dist/esm/src/protocols/permission-request.js +1 -1
  68. package/dist/esm/src/protocols/permission-request.js.map +1 -1
  69. package/dist/esm/src/protocols/permissions.js +113 -5
  70. package/dist/esm/src/protocols/permissions.js.map +1 -1
  71. package/dist/esm/src/state-index/state-index-level.js +5 -7
  72. package/dist/esm/src/state-index/state-index-level.js.map +1 -1
  73. package/dist/esm/src/store/data-store-level.js +110 -33
  74. package/dist/esm/src/store/data-store-level.js.map +1 -1
  75. package/dist/esm/src/store/index-level.js +42 -32
  76. package/dist/esm/src/store/index-level.js.map +1 -1
  77. package/dist/esm/src/store/storage-controller.js +6 -6
  78. package/dist/esm/src/store/storage-controller.js.map +1 -1
  79. package/dist/esm/src/types/permission-types.js.map +1 -1
  80. package/dist/esm/src/types/protocols-types.js +10 -0
  81. package/dist/esm/src/types/protocols-types.js.map +1 -1
  82. package/dist/esm/src/types/records-types.js.map +1 -1
  83. package/dist/esm/src/utils/hd-key.js +0 -8
  84. package/dist/esm/src/utils/hd-key.js.map +1 -1
  85. package/dist/esm/src/utils/messages.js +16 -34
  86. package/dist/esm/src/utils/messages.js.map +1 -1
  87. package/dist/esm/src/utils/records.js +5 -43
  88. package/dist/esm/src/utils/records.js.map +1 -1
  89. package/dist/esm/tests/core/protocol-authorization.spec.js +2 -1
  90. package/dist/esm/tests/core/protocol-authorization.spec.js.map +1 -1
  91. package/dist/esm/tests/dwn.spec.js +32 -43
  92. package/dist/esm/tests/dwn.spec.js.map +1 -1
  93. package/dist/esm/tests/event-emitter-event-log.spec.js +305 -0
  94. package/dist/esm/tests/event-emitter-event-log.spec.js.map +1 -0
  95. package/dist/esm/tests/features/author-delegated-grant.spec.js +14 -7
  96. package/dist/esm/tests/features/author-delegated-grant.spec.js.map +1 -1
  97. package/dist/esm/tests/features/owner-delegated-grant.spec.js +9 -5
  98. package/dist/esm/tests/features/owner-delegated-grant.spec.js.map +1 -1
  99. package/dist/esm/tests/features/owner-signature.spec.js +14 -7
  100. package/dist/esm/tests/features/owner-signature.spec.js.map +1 -1
  101. package/dist/esm/tests/features/permissions.spec.js +12 -12
  102. package/dist/esm/tests/features/permissions.spec.js.map +1 -1
  103. package/dist/esm/tests/features/protocol-composition.spec.js +636 -5
  104. package/dist/esm/tests/features/protocol-composition.spec.js.map +1 -1
  105. package/dist/esm/tests/features/protocol-create-action.spec.js +4 -4
  106. package/dist/esm/tests/features/protocol-create-action.spec.js.map +1 -1
  107. package/dist/esm/tests/features/protocol-delete-action.spec.js +7 -7
  108. package/dist/esm/tests/features/protocol-delete-action.spec.js.map +1 -1
  109. package/dist/esm/tests/features/protocol-update-action.spec.js +4 -4
  110. package/dist/esm/tests/features/protocol-update-action.spec.js.map +1 -1
  111. package/dist/esm/tests/features/records-immutable.spec.js +315 -0
  112. package/dist/esm/tests/features/records-immutable.spec.js.map +1 -0
  113. package/dist/esm/tests/features/records-prune.spec.js +4 -4
  114. package/dist/esm/tests/features/records-prune.spec.js.map +1 -1
  115. package/dist/esm/tests/features/records-record-limit.spec.js +542 -0
  116. package/dist/esm/tests/features/records-record-limit.spec.js.map +1 -0
  117. package/dist/esm/tests/features/records-tags.spec.js +16 -4
  118. package/dist/esm/tests/features/records-tags.spec.js.map +1 -1
  119. package/dist/esm/tests/features/resumable-tasks.spec.js +7 -8
  120. package/dist/esm/tests/features/resumable-tasks.spec.js.map +1 -1
  121. package/dist/esm/tests/handlers/messages-read.spec.js +11 -5
  122. package/dist/esm/tests/handlers/messages-read.spec.js.map +1 -1
  123. package/dist/esm/tests/handlers/messages-subscribe.spec.js +169 -22
  124. package/dist/esm/tests/handlers/messages-subscribe.spec.js.map +1 -1
  125. package/dist/esm/tests/handlers/messages-sync.spec.js +103 -21
  126. package/dist/esm/tests/handlers/messages-sync.spec.js.map +1 -1
  127. package/dist/esm/tests/handlers/protocols-configure.spec.js +5 -5
  128. package/dist/esm/tests/handlers/protocols-configure.spec.js.map +1 -1
  129. package/dist/esm/tests/handlers/protocols-query.spec.js +5 -5
  130. package/dist/esm/tests/handlers/protocols-query.spec.js.map +1 -1
  131. package/dist/esm/tests/handlers/records-count.spec.js +9 -4
  132. package/dist/esm/tests/handlers/records-count.spec.js.map +1 -1
  133. package/dist/esm/tests/handlers/records-delete.spec.js +24 -25
  134. package/dist/esm/tests/handlers/records-delete.spec.js.map +1 -1
  135. package/dist/esm/tests/handlers/records-query.spec.js +68 -9
  136. package/dist/esm/tests/handlers/records-query.spec.js.map +1 -1
  137. package/dist/esm/tests/handlers/records-read.spec.js +24 -138
  138. package/dist/esm/tests/handlers/records-read.spec.js.map +1 -1
  139. package/dist/esm/tests/handlers/records-subscribe.spec.js +175 -35
  140. package/dist/esm/tests/handlers/records-subscribe.spec.js.map +1 -1
  141. package/dist/esm/tests/handlers/records-write.spec.js +173 -72
  142. package/dist/esm/tests/handlers/records-write.spec.js.map +1 -1
  143. package/dist/esm/tests/interfaces/records-write.spec.js +52 -68
  144. package/dist/esm/tests/interfaces/records-write.spec.js.map +1 -1
  145. package/dist/esm/tests/protocols/permission-grant.spec.js +6 -6
  146. package/dist/esm/tests/protocols/permission-grant.spec.js.map +1 -1
  147. package/dist/esm/tests/protocols/permission-request.spec.js +4 -4
  148. package/dist/esm/tests/protocols/permission-request.spec.js.map +1 -1
  149. package/dist/esm/tests/protocols/permissions.spec.js +4 -4
  150. package/dist/esm/tests/protocols/permissions.spec.js.map +1 -1
  151. package/dist/esm/tests/scenarios/aggregator.spec.js +4 -4
  152. package/dist/esm/tests/scenarios/aggregator.spec.js.map +1 -1
  153. package/dist/esm/tests/scenarios/deleted-record.spec.js +350 -5
  154. package/dist/esm/tests/scenarios/deleted-record.spec.js.map +1 -1
  155. package/dist/esm/tests/scenarios/end-to-end-tests.spec.js +4 -4
  156. package/dist/esm/tests/scenarios/end-to-end-tests.spec.js.map +1 -1
  157. package/dist/esm/tests/scenarios/nested-roles.spec.js +4 -4
  158. package/dist/esm/tests/scenarios/nested-roles.spec.js.map +1 -1
  159. package/dist/esm/tests/scenarios/subscriptions.spec.js +93 -40
  160. package/dist/esm/tests/scenarios/subscriptions.spec.js.map +1 -1
  161. package/dist/esm/tests/store/data-store-level.spec.js +102 -41
  162. package/dist/esm/tests/store/data-store-level.spec.js.map +1 -1
  163. package/dist/esm/tests/test-event-stream.js +12 -13
  164. package/dist/esm/tests/test-event-stream.js.map +1 -1
  165. package/dist/esm/tests/test-suite.js +6 -4
  166. package/dist/esm/tests/test-suite.js.map +1 -1
  167. package/dist/esm/tests/utils/messages.spec.js +12 -5
  168. package/dist/esm/tests/utils/messages.spec.js.map +1 -1
  169. package/dist/esm/tests/utils/records.spec.js +8 -12
  170. package/dist/esm/tests/utils/records.spec.js.map +1 -1
  171. package/dist/esm/tests/utils/test-data-generator.js +35 -2
  172. package/dist/esm/tests/utils/test-data-generator.js.map +1 -1
  173. package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js +37 -8
  174. package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js.map +1 -1
  175. package/dist/types/generated/precompiled-validators.d.ts +49 -40
  176. package/dist/types/generated/precompiled-validators.d.ts.map +1 -1
  177. package/dist/types/src/core/constants.d.ts +11 -0
  178. package/dist/types/src/core/constants.d.ts.map +1 -0
  179. package/dist/types/src/core/core-protocol.d.ts +89 -0
  180. package/dist/types/src/core/core-protocol.d.ts.map +1 -0
  181. package/dist/types/src/core/dwn-error.d.ts +9 -12
  182. package/dist/types/src/core/dwn-error.d.ts.map +1 -1
  183. package/dist/types/src/core/grant-authorization.d.ts +6 -2
  184. package/dist/types/src/core/grant-authorization.d.ts.map +1 -1
  185. package/dist/types/src/core/protocol-authorization-validation.d.ts +21 -0
  186. package/dist/types/src/core/protocol-authorization-validation.d.ts.map +1 -1
  187. package/dist/types/src/core/protocol-authorization.d.ts +19 -11
  188. package/dist/types/src/core/protocol-authorization.d.ts.map +1 -1
  189. package/dist/types/src/core/records-grant-authorization.d.ts.map +1 -1
  190. package/dist/types/src/dwn.d.ts +19 -7
  191. package/dist/types/src/dwn.d.ts.map +1 -1
  192. package/dist/types/src/event-stream/event-emitter-event-log.d.ts +50 -0
  193. package/dist/types/src/event-stream/event-emitter-event-log.d.ts.map +1 -0
  194. package/dist/types/src/handlers/messages-read.d.ts +3 -8
  195. package/dist/types/src/handlers/messages-read.d.ts.map +1 -1
  196. package/dist/types/src/handlers/messages-subscribe.d.ts +6 -10
  197. package/dist/types/src/handlers/messages-subscribe.d.ts.map +1 -1
  198. package/dist/types/src/handlers/messages-sync.d.ts +3 -8
  199. package/dist/types/src/handlers/messages-sync.d.ts.map +1 -1
  200. package/dist/types/src/handlers/protocols-configure.d.ts +3 -10
  201. package/dist/types/src/handlers/protocols-configure.d.ts.map +1 -1
  202. package/dist/types/src/handlers/protocols-query.d.ts +3 -8
  203. package/dist/types/src/handlers/protocols-query.d.ts.map +1 -1
  204. package/dist/types/src/handlers/records-count.d.ts +3 -6
  205. package/dist/types/src/handlers/records-count.d.ts.map +1 -1
  206. package/dist/types/src/handlers/records-delete.d.ts +3 -8
  207. package/dist/types/src/handlers/records-delete.d.ts.map +1 -1
  208. package/dist/types/src/handlers/records-query.d.ts +3 -8
  209. package/dist/types/src/handlers/records-query.d.ts.map +1 -1
  210. package/dist/types/src/handlers/records-read.d.ts +3 -8
  211. package/dist/types/src/handlers/records-read.d.ts.map +1 -1
  212. package/dist/types/src/handlers/records-subscribe.d.ts +8 -10
  213. package/dist/types/src/handlers/records-subscribe.d.ts.map +1 -1
  214. package/dist/types/src/handlers/records-write.d.ts +4 -25
  215. package/dist/types/src/handlers/records-write.d.ts.map +1 -1
  216. package/dist/types/src/index.d.ts +8 -4
  217. package/dist/types/src/index.d.ts.map +1 -1
  218. package/dist/types/src/interfaces/messages-subscribe.d.ts +5 -0
  219. package/dist/types/src/interfaces/messages-subscribe.d.ts.map +1 -1
  220. package/dist/types/src/interfaces/protocols-configure.d.ts.map +1 -1
  221. package/dist/types/src/interfaces/records-subscribe.d.ts +5 -0
  222. package/dist/types/src/interfaces/records-subscribe.d.ts.map +1 -1
  223. package/dist/types/src/interfaces/records-write-signing.d.ts +3 -4
  224. package/dist/types/src/interfaces/records-write-signing.d.ts.map +1 -1
  225. package/dist/types/src/interfaces/records-write.d.ts +5 -11
  226. package/dist/types/src/interfaces/records-write.d.ts.map +1 -1
  227. package/dist/types/src/protocols/permission-grant.d.ts +1 -1
  228. package/dist/types/src/protocols/permission-grant.d.ts.map +1 -1
  229. package/dist/types/src/protocols/permission-request.d.ts +1 -1
  230. package/dist/types/src/protocols/permission-request.d.ts.map +1 -1
  231. package/dist/types/src/protocols/permissions.d.ts +40 -3
  232. package/dist/types/src/protocols/permissions.d.ts.map +1 -1
  233. package/dist/types/src/state-index/state-index-level.d.ts.map +1 -1
  234. package/dist/types/src/store/data-store-level.d.ts +20 -4
  235. package/dist/types/src/store/data-store-level.d.ts.map +1 -1
  236. package/dist/types/src/store/index-level.d.ts +4 -0
  237. package/dist/types/src/store/index-level.d.ts.map +1 -1
  238. package/dist/types/src/store/storage-controller.d.ts +4 -4
  239. package/dist/types/src/store/storage-controller.d.ts.map +1 -1
  240. package/dist/types/src/types/message-types.d.ts +3 -3
  241. package/dist/types/src/types/message-types.d.ts.map +1 -1
  242. package/dist/types/src/types/messages-types.d.ts +12 -3
  243. package/dist/types/src/types/messages-types.d.ts.map +1 -1
  244. package/dist/types/src/types/method-handler.d.ts +24 -3
  245. package/dist/types/src/types/method-handler.d.ts.map +1 -1
  246. package/dist/types/src/types/permission-types.d.ts +7 -0
  247. package/dist/types/src/types/permission-types.d.ts.map +1 -1
  248. package/dist/types/src/types/protocols-types.d.ts +41 -1
  249. package/dist/types/src/types/protocols-types.d.ts.map +1 -1
  250. package/dist/types/src/types/records-types.d.ts +16 -6
  251. package/dist/types/src/types/records-types.d.ts.map +1 -1
  252. package/dist/types/src/types/subscriptions.d.ts +151 -13
  253. package/dist/types/src/types/subscriptions.d.ts.map +1 -1
  254. package/dist/types/src/utils/hd-key.d.ts +1 -9
  255. package/dist/types/src/utils/hd-key.d.ts.map +1 -1
  256. package/dist/types/src/utils/messages.d.ts +7 -5
  257. package/dist/types/src/utils/messages.d.ts.map +1 -1
  258. package/dist/types/src/utils/records.d.ts +1 -11
  259. package/dist/types/src/utils/records.d.ts.map +1 -1
  260. package/dist/types/tests/dwn.spec.d.ts.map +1 -1
  261. package/dist/types/tests/event-emitter-event-log.spec.d.ts +2 -0
  262. package/dist/types/tests/event-emitter-event-log.spec.d.ts.map +1 -0
  263. package/dist/types/tests/features/author-delegated-grant.spec.d.ts.map +1 -1
  264. package/dist/types/tests/features/owner-delegated-grant.spec.d.ts.map +1 -1
  265. package/dist/types/tests/features/owner-signature.spec.d.ts.map +1 -1
  266. package/dist/types/tests/features/protocol-composition.spec.d.ts.map +1 -1
  267. package/dist/types/tests/features/records-immutable.spec.d.ts +2 -0
  268. package/dist/types/tests/features/records-immutable.spec.d.ts.map +1 -0
  269. package/dist/types/tests/features/records-record-limit.spec.d.ts +2 -0
  270. package/dist/types/tests/features/records-record-limit.spec.d.ts.map +1 -0
  271. package/dist/types/tests/features/records-tags.spec.d.ts.map +1 -1
  272. package/dist/types/tests/features/resumable-tasks.spec.d.ts.map +1 -1
  273. package/dist/types/tests/handlers/messages-read.spec.d.ts.map +1 -1
  274. package/dist/types/tests/handlers/messages-subscribe.spec.d.ts.map +1 -1
  275. package/dist/types/tests/handlers/messages-sync.spec.d.ts.map +1 -1
  276. package/dist/types/tests/handlers/records-count.spec.d.ts.map +1 -1
  277. package/dist/types/tests/handlers/records-delete.spec.d.ts.map +1 -1
  278. package/dist/types/tests/handlers/records-query.spec.d.ts.map +1 -1
  279. package/dist/types/tests/handlers/records-read.spec.d.ts.map +1 -1
  280. package/dist/types/tests/handlers/records-subscribe.spec.d.ts.map +1 -1
  281. package/dist/types/tests/handlers/records-write.spec.d.ts.map +1 -1
  282. package/dist/types/tests/scenarios/deleted-record.spec.d.ts.map +1 -1
  283. package/dist/types/tests/scenarios/subscriptions.spec.d.ts.map +1 -1
  284. package/dist/types/tests/test-event-stream.d.ts +11 -12
  285. package/dist/types/tests/test-event-stream.d.ts.map +1 -1
  286. package/dist/types/tests/test-suite.d.ts +2 -2
  287. package/dist/types/tests/test-suite.d.ts.map +1 -1
  288. package/dist/types/tests/utils/test-data-generator.d.ts +18 -0
  289. package/dist/types/tests/utils/test-data-generator.d.ts.map +1 -1
  290. package/package.json +5 -4
  291. package/src/core/constants.ts +11 -0
  292. package/src/core/core-protocol.ts +129 -0
  293. package/src/core/dwn-error.ts +15 -12
  294. package/src/core/grant-authorization.ts +20 -3
  295. package/src/core/protocol-authorization-validation.ts +96 -0
  296. package/src/core/protocol-authorization.ts +67 -23
  297. package/src/core/records-grant-authorization.ts +6 -8
  298. package/src/dwn.ts +58 -73
  299. package/src/event-stream/event-emitter-event-log.ts +283 -0
  300. package/src/handlers/messages-read.ts +8 -9
  301. package/src/handlers/messages-subscribe.ts +24 -28
  302. package/src/handlers/messages-sync.ts +10 -16
  303. package/src/handlers/protocols-configure.ts +47 -32
  304. package/src/handlers/protocols-query.ts +6 -9
  305. package/src/handlers/records-count.ts +11 -10
  306. package/src/handlers/records-delete.ts +12 -21
  307. package/src/handlers/records-query.ts +12 -12
  308. package/src/handlers/records-read.ts +34 -22
  309. package/src/handlers/records-subscribe.ts +47 -26
  310. package/src/handlers/records-write.ts +47 -120
  311. package/src/index.ts +9 -5
  312. package/src/interfaces/messages-subscribe.ts +7 -1
  313. package/src/interfaces/protocols-configure.ts +40 -3
  314. package/src/interfaces/records-count.ts +1 -1
  315. package/src/interfaces/records-delete.ts +1 -1
  316. package/src/interfaces/records-query.ts +1 -1
  317. package/src/interfaces/records-read.ts +1 -1
  318. package/src/interfaces/records-subscribe.ts +8 -1
  319. package/src/interfaces/records-write-signing.ts +2 -22
  320. package/src/interfaces/records-write.ts +25 -48
  321. package/src/protocols/permission-grant.ts +1 -1
  322. package/src/protocols/permission-request.ts +1 -1
  323. package/src/protocols/permissions.ts +148 -6
  324. package/src/state-index/state-index-level.ts +5 -7
  325. package/src/store/data-store-level.ts +124 -34
  326. package/src/store/index-level.ts +44 -35
  327. package/src/store/storage-controller.ts +11 -11
  328. package/src/types/message-types.ts +3 -3
  329. package/src/types/messages-types.ts +12 -3
  330. package/src/types/method-handler.ts +26 -4
  331. package/src/types/mitt.d.ts +28 -0
  332. package/src/types/permission-types.ts +7 -0
  333. package/src/types/protocols-types.ts +46 -0
  334. package/src/types/records-types.ts +16 -6
  335. package/src/types/subscriptions.ts +178 -14
  336. package/src/utils/hd-key.ts +0 -9
  337. package/src/utils/messages.ts +17 -37
  338. package/src/utils/records.ts +7 -58
  339. package/dist/esm/src/event-stream/event-emitter-stream.js +0 -46
  340. package/dist/esm/src/event-stream/event-emitter-stream.js.map +0 -1
  341. package/dist/esm/tests/event-stream/event-emitter-stream.spec.js +0 -68
  342. package/dist/esm/tests/event-stream/event-emitter-stream.spec.js.map +0 -1
  343. package/dist/esm/tests/event-stream/event-stream.spec.js +0 -114
  344. package/dist/esm/tests/event-stream/event-stream.spec.js.map +0 -1
  345. package/dist/types/src/event-stream/event-emitter-stream.d.ts +0 -23
  346. package/dist/types/src/event-stream/event-emitter-stream.d.ts.map +0 -1
  347. package/dist/types/tests/event-stream/event-emitter-stream.spec.d.ts +0 -2
  348. package/dist/types/tests/event-stream/event-emitter-stream.spec.d.ts.map +0 -1
  349. package/dist/types/tests/event-stream/event-stream.spec.d.ts +0 -2
  350. package/dist/types/tests/event-stream/event-stream.spec.d.ts.map +0 -1
  351. package/src/event-stream/event-emitter-stream.ts +0 -69
@@ -12,13 +12,9 @@ import { RecordsWrite } from '../interfaces/records-write.js';
12
12
  import { DwnError, DwnErrorCode } from '../core/dwn-error.js';
13
13
  import { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';
14
14
  export class RecordsReadHandler {
15
- didResolver;
16
- messageStore;
17
- dataStore;
18
- constructor(didResolver, messageStore, dataStore) {
19
- this.didResolver = didResolver;
20
- this.messageStore = messageStore;
21
- this.dataStore = dataStore;
15
+ deps;
16
+ constructor(deps) {
17
+ this.deps = deps;
22
18
  }
23
19
  async handle({ tenant, message }) {
24
20
  let recordsRead;
@@ -31,7 +27,7 @@ export class RecordsReadHandler {
31
27
  // authentication
32
28
  try {
33
29
  if (recordsRead.author !== undefined) {
34
- await authenticate(message.authorization, this.didResolver);
30
+ await authenticate(message.authorization, this.deps.didResolver);
35
31
  }
36
32
  }
37
33
  catch (e) {
@@ -45,26 +41,37 @@ export class RecordsReadHandler {
45
41
  ...Records.convertFilter(message.descriptor.filter)
46
42
  };
47
43
  const messageSort = Records.convertDateSort(message.descriptor.dateSort);
48
- const { messages: existingMessages } = await this.messageStore.query(tenant, [query], messageSort, { limit: 1 });
44
+ const { messages: existingMessages } = await this.deps.messageStore.query(tenant, [query], messageSort, { limit: 1 });
49
45
  if (existingMessages.length === 0) {
50
46
  return {
51
47
  status: { code: 404, detail: 'Not Found' }
52
48
  };
53
49
  }
54
50
  const matchedMessage = existingMessages[0];
55
- // if the matched message is a RecordsDelete, we mark the record as not-found and return both the RecordsDelete and the initial RecordsWrite
56
- // TODO: https://github.com/enboxorg/enbox/issues/222
57
- // Consider performing authorization checks like when records exists before returning RecordsDelete and initial RecordsWrite of a deleted record
51
+ // If the matched message is a RecordsDelete, authorize against the newest RecordsWrite
52
+ // (for parity with the live-record path which authorizes against the latest write),
53
+ // then return 404 with both the RecordsDelete and the initial RecordsWrite.
58
54
  if (matchedMessage.descriptor.method === DwnMethodName.Delete) {
59
55
  const recordsDeleteMessage = matchedMessage;
60
- const initialWrite = await RecordsWrite.fetchInitialRecordsWriteMessage(this.messageStore, tenant, recordsDeleteMessage.descriptor.recordId);
56
+ const recordId = recordsDeleteMessage.descriptor.recordId;
57
+ const initialWrite = await RecordsWrite.fetchInitialRecordsWriteMessage(this.deps.messageStore, tenant, recordId);
61
58
  if (initialWrite === undefined) {
62
- return messageReplyFromError(new DwnError(DwnErrorCode.RecordsReadInitialWriteNotFound, 'Initial write for deleted record not found'), 400);
59
+ return messageReplyFromError(new DwnError(DwnErrorCode.RecordsReadInitialWriteNotFound, 'initial write for deleted record not found'), 400);
63
60
  }
64
- // Perform authorization before returning the delete and initial write messages
65
- const parsedInitialWrite = await RecordsWrite.parse(initialWrite);
61
+ // Authorize against the newest RecordsWrite so that mutable properties like `published`
62
+ // reflect the record's state at the time of deletion, not just the initial write.
63
+ let newestWrite;
66
64
  try {
67
- await RecordsReadHandler.authorizeRecordsRead(tenant, recordsRead, parsedInitialWrite, this.messageStore);
65
+ newestWrite = await RecordsWrite.fetchNewestRecordsWrite(this.deps.messageStore, tenant, recordId);
66
+ }
67
+ catch {
68
+ // If newest write is not found (should not happen since initial write exists),
69
+ // fall back to the initial write for authorization.
70
+ newestWrite = initialWrite;
71
+ }
72
+ const parsedNewestWrite = await RecordsWrite.parse(newestWrite);
73
+ try {
74
+ await RecordsReadHandler.authorizeRecordsRead(tenant, recordsRead, parsedNewestWrite, this.deps.messageStore, this.deps.coreProtocols);
68
75
  }
69
76
  catch (error) {
70
77
  return messageReplyFromError(error, 401);
@@ -73,14 +80,15 @@ export class RecordsReadHandler {
73
80
  status: { code: 404, detail: 'Not Found' },
74
81
  entry: {
75
82
  recordsDelete: recordsDeleteMessage,
76
- initialWrite
83
+ initialWrite,
77
84
  }
78
85
  };
79
86
  }
80
87
  // else the matched message is a RecordsWrite
81
88
  const matchedRecordsWrite = matchedMessage;
82
89
  try {
83
- await RecordsReadHandler.authorizeRecordsRead(tenant, recordsRead, await RecordsWrite.parse(matchedRecordsWrite), this.messageStore);
90
+ const parsedWrite = await RecordsWrite.parse(matchedRecordsWrite);
91
+ await RecordsReadHandler.authorizeRecordsRead(tenant, recordsRead, parsedWrite, this.deps.messageStore, this.deps.coreProtocols);
84
92
  }
85
93
  catch (error) {
86
94
  return messageReplyFromError(error, 401);
@@ -92,7 +100,7 @@ export class RecordsReadHandler {
92
100
  delete matchedRecordsWrite.encodedData;
93
101
  }
94
102
  else {
95
- const result = await this.dataStore.get(tenant, matchedRecordsWrite.recordId, matchedRecordsWrite.descriptor.dataCid);
103
+ const result = await this.deps.dataStore.get(tenant, matchedRecordsWrite.recordId, matchedRecordsWrite.descriptor.dataCid);
96
104
  if (result?.dataStream === undefined) {
97
105
  return {
98
106
  status: { code: 404, detail: 'Not Found' }
@@ -109,7 +117,7 @@ export class RecordsReadHandler {
109
117
  };
110
118
  // attach initial write if latest RecordsWrite is not initial write
111
119
  if (!await RecordsWrite.isInitialWrite(matchedRecordsWrite)) {
112
- const initialWriteQueryResult = await this.messageStore.query(tenant, [{ recordId: matchedRecordsWrite.recordId, isLatestBaseState: false, method: DwnMethodName.Write }]);
120
+ const initialWriteQueryResult = await this.deps.messageStore.query(tenant, [{ recordId: matchedRecordsWrite.recordId, isLatestBaseState: false, method: DwnMethodName.Write }]);
113
121
  const initialWrite = initialWriteQueryResult.messages[0];
114
122
  delete initialWrite.encodedData; // just defensive because technically should already be deleted when a later RecordsWrite is written
115
123
  recordsReadReply.entry.initialWrite = initialWrite;
@@ -120,7 +128,7 @@ export class RecordsReadHandler {
120
128
  /**
121
129
  * @param messageStore Used to check if the grant has been revoked.
122
130
  */
123
- static async authorizeRecordsRead(tenant, recordsRead, matchedRecordsWrite, messageStore) {
131
+ static async authorizeRecordsRead(tenant, recordsRead, matchedRecordsWrite, messageStore, coreProtocols) {
124
132
  if (Message.isSignedByAuthorDelegate(recordsRead.message)) {
125
133
  await recordsRead.authorizeDelegate(matchedRecordsWrite.message, messageStore);
126
134
  }
@@ -149,11 +157,8 @@ export class RecordsReadHandler {
149
157
  messageStore
150
158
  });
151
159
  }
152
- else if (descriptor.protocol !== undefined) {
153
- await ProtocolAuthorization.authorizeRead(tenant, recordsRead, matchedRecordsWrite, messageStore);
154
- }
155
160
  else {
156
- throw new DwnError(DwnErrorCode.RecordsReadAuthorizationFailed, 'message failed authorization');
161
+ await ProtocolAuthorization.authorizeRead(tenant, recordsRead, matchedRecordsWrite, messageStore, coreProtocols);
157
162
  }
158
163
  }
159
164
  }
@@ -1 +1 @@
1
- {"version":3,"file":"records-read.js","sourceRoot":"","sources":["../../../../src/handlers/records-read.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"records-read.js","sourceRoot":"","sources":["../../../../src/handlers/records-read.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,5 @@
1
1
  import { authenticate } from '../core/auth.js';
2
2
  import { DateSort } from '../types/records-types.js';
3
- import { FilterUtility } from '../utils/filter.js';
4
3
  import { Message } from '../core/message.js';
5
4
  import { messageReplyFromError } from '../core/message-reply.js';
6
5
  import { ProtocolAuthorization } from '../core/protocol-authorization.js';
@@ -11,17 +10,13 @@ import { SortDirection } from '../types/query-types.js';
11
10
  import { DwnError, DwnErrorCode } from '../core/dwn-error.js';
12
11
  import { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';
13
12
  export class RecordsSubscribeHandler {
14
- didResolver;
15
- messageStore;
16
- eventStream;
17
- constructor(didResolver, messageStore, eventStream) {
18
- this.didResolver = didResolver;
19
- this.messageStore = messageStore;
20
- this.eventStream = eventStream;
13
+ deps;
14
+ constructor(deps) {
15
+ this.deps = deps;
21
16
  }
22
17
  async handle({ tenant, message, subscriptionHandler }) {
23
- if (this.eventStream === undefined) {
24
- return messageReplyFromError(new DwnError(DwnErrorCode.RecordsSubscribeEventStreamUnimplemented, 'Subscriptions are not supported'), 501);
18
+ if (this.deps.eventLog === undefined) {
19
+ return messageReplyFromError(new DwnError(DwnErrorCode.RecordsSubscribeEventLogUnimplemented, 'Subscriptions are not supported'), 501);
25
20
  }
26
21
  let recordsSubscribe;
27
22
  try {
@@ -43,8 +38,8 @@ export class RecordsSubscribeHandler {
43
38
  else {
44
39
  // authentication and authorization
45
40
  try {
46
- await authenticate(message.authorization, this.didResolver);
47
- await RecordsSubscribeHandler.authorizeRecordsSubscribe(tenant, recordsSubscribe, this.messageStore);
41
+ await authenticate(message.authorization, this.deps.didResolver);
42
+ await RecordsSubscribeHandler.authorizeRecordsSubscribe(tenant, recordsSubscribe, this.deps.messageStore, this.deps.coreProtocols);
48
43
  }
49
44
  catch (error) {
50
45
  return messageReplyFromError(error, 401);
@@ -58,27 +53,45 @@ export class RecordsSubscribeHandler {
58
53
  queryFilters = RecordsSubscribeHandler.buildNonOwnerQueryFilters(recordsSubscribe);
59
54
  }
60
55
  }
61
- // Step 1: Register event listener FIRST to ensure no events are missed between query and subscribe
62
- const listener = (eventTenant, event, eventIndexes) => {
63
- if (tenant === eventTenant && FilterUtility.matchAnyFilter(eventIndexes, eventFilters)) {
64
- subscriptionHandler(event);
65
- }
66
- };
67
56
  const messageCid = await Message.getCid(message);
68
- const subscription = await this.eventStream.subscribe(tenant, messageCid, listener);
57
+ const { cursor: eventLogCursor } = recordsSubscribe.message.descriptor;
58
+ if (eventLogCursor !== undefined) {
59
+ // ---- Cursor mode: catch-up from EventLog + EOSE + live ----
60
+ // All catch-up, buffering, dedup, and EOSE delivery are handled by the
61
+ // EventLog implementation. The handler just passes the cursor and filters.
62
+ // The subscriptionHandler receives SubscriptionMessage (event + EOSE) directly.
63
+ try {
64
+ const subscription = await this.deps.eventLog.subscribe(tenant, messageCid, subscriptionHandler, {
65
+ cursor: eventLogCursor,
66
+ filters: eventFilters,
67
+ });
68
+ return {
69
+ status: { code: 200, detail: 'OK' },
70
+ subscription,
71
+ };
72
+ }
73
+ catch (error) {
74
+ return messageReplyFromError(error, 500);
75
+ }
76
+ }
77
+ // ---- No cursor: existing behavior (initial snapshot from MessageStore) ----
78
+ // Step 1: Register event listener FIRST to ensure no events are missed between query and subscribe
79
+ const subscription = await this.deps.eventLog.subscribe(tenant, messageCid, subscriptionHandler, {
80
+ filters: eventFilters,
81
+ });
69
82
  // Step 2: Query for initial snapshot of matching records
70
83
  let entries;
71
- let cursor;
84
+ let paginationCursor;
72
85
  try {
73
86
  const { dateSort, pagination } = recordsSubscribe.message.descriptor;
74
87
  const messageSort = RecordsSubscribeHandler.convertDateSort(dateSort);
75
- const queryResult = await this.messageStore.query(tenant, queryFilters, messageSort, pagination);
88
+ const queryResult = await this.deps.messageStore.query(tenant, queryFilters, messageSort, pagination);
76
89
  entries = queryResult.messages;
77
- cursor = queryResult.cursor;
90
+ paginationCursor = queryResult.cursor;
78
91
  // attach initialWrite for non-initial writes
79
92
  for (const entry of entries) {
80
93
  if (!await RecordsWrite.isInitialWrite(entry)) {
81
- const initialWriteResult = await this.messageStore.query(tenant, [{ recordId: entry.recordId, isLatestBaseState: false, method: DwnMethodName.Write }]);
94
+ const initialWriteResult = await this.deps.messageStore.query(tenant, [{ recordId: entry.recordId, isLatestBaseState: false, method: DwnMethodName.Write }]);
82
95
  const initialWrite = initialWriteResult.messages[0];
83
96
  delete initialWrite.encodedData;
84
97
  entry.initialWrite = initialWrite;
@@ -95,7 +108,7 @@ export class RecordsSubscribeHandler {
95
108
  status: { code: 200, detail: 'OK' },
96
109
  subscription,
97
110
  entries,
98
- cursor
111
+ cursor: paginationCursor,
99
112
  };
100
113
  }
101
114
  /**
@@ -259,7 +272,7 @@ export class RecordsSubscribeHandler {
259
272
  /**
260
273
  * @param messageStore Used to check if the grant has been revoked.
261
274
  */
262
- static async authorizeRecordsSubscribe(tenant, recordsSubscribe, messageStore) {
275
+ static async authorizeRecordsSubscribe(tenant, recordsSubscribe, messageStore, coreProtocols) {
263
276
  if (Message.isSignedByAuthorDelegate(recordsSubscribe.message)) {
264
277
  await recordsSubscribe.authorizeDelegate(messageStore);
265
278
  }
@@ -267,7 +280,7 @@ export class RecordsSubscribeHandler {
267
280
  // this is because we dynamically filter out records that the caller is not authorized to see.
268
281
  // Currently only run protocol authorization if message deliberately invokes a protocol role.
269
282
  if (Records.shouldProtocolAuthorize(recordsSubscribe.signaturePayload)) {
270
- await ProtocolAuthorization.authorizeQueryOrSubscribe(tenant, recordsSubscribe, messageStore);
283
+ await ProtocolAuthorization.authorizeQueryOrSubscribe(tenant, recordsSubscribe, messageStore, coreProtocols);
271
284
  }
272
285
  }
273
286
  }
@@ -1 +1 @@
1
- {"version":3,"file":"records-subscribe.js","sourceRoot":"","sources":["../../../../src/handlers/records-subscribe.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"records-subscribe.js","sourceRoot":"","sources":["../../../../src/handlers/records-subscribe.ts"],"names":[],"mappings":"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"}
@@ -13,34 +13,23 @@ import { StorageController } from '../store/storage-controller.js';
13
13
  import { DwnError, DwnErrorCode } from '../core/dwn-error.js';
14
14
  import { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';
15
15
  export class RecordsWriteHandler {
16
- didResolver;
17
- messageStore;
18
- dataStore;
19
- stateIndex;
20
- eventStream;
21
- constructor(didResolver, messageStore, dataStore, stateIndex, eventStream) {
22
- this.didResolver = didResolver;
23
- this.messageStore = messageStore;
24
- this.dataStore = dataStore;
25
- this.stateIndex = stateIndex;
26
- this.eventStream = eventStream;
16
+ deps;
17
+ constructor(deps) {
18
+ this.deps = deps;
27
19
  }
28
20
  async handle({ tenant, message, dataStream }) {
29
21
  let recordsWrite;
30
22
  try {
31
23
  recordsWrite = await RecordsWrite.parse(message);
32
- // Protocol-authorized record specific validation
33
- if (message.descriptor.protocol !== undefined) {
34
- await ProtocolAuthorization.validateReferentialIntegrity(tenant, recordsWrite, this.messageStore);
35
- }
24
+ await ProtocolAuthorization.validateReferentialIntegrity(tenant, recordsWrite, this.deps.messageStore, this.deps.coreProtocols);
36
25
  }
37
26
  catch (e) {
38
27
  return messageReplyFromError(e, 400);
39
28
  }
40
29
  // authentication & authorization
41
30
  try {
42
- await authenticate(message.authorization, this.didResolver, message.attestation);
43
- await RecordsWriteHandler.authorizeRecordsWrite(tenant, recordsWrite, this.messageStore);
31
+ await authenticate(message.authorization, this.deps.didResolver, message.attestation);
32
+ await this.authorizeRecordsWrite(tenant, recordsWrite, this.deps.messageStore);
44
33
  }
45
34
  catch (e) {
46
35
  return messageReplyFromError(e, 401);
@@ -50,7 +39,7 @@ export class RecordsWriteHandler {
50
39
  interface: DwnInterfaceName.Records,
51
40
  recordId: message.recordId
52
41
  };
53
- const { messages: existingMessages } = await this.messageStore.query(tenant, [query]);
42
+ const { messages: existingMessages } = await this.deps.messageStore.query(tenant, [query]);
54
43
  // if the incoming write is not the initial write, then it must not modify any immutable properties defined by the initial write
55
44
  const newMessageIsInitialWrite = await recordsWrite.isInitialWrite();
56
45
  let initialWrite;
@@ -78,15 +67,21 @@ export class RecordsWriteHandler {
78
67
  status: { code: 409, detail: 'Conflict' }
79
68
  };
80
69
  }
70
+ // Look up the core protocol (if any) for the incoming message so that lifecycle hooks
71
+ // can be dispatched generically rather than checking for specific protocol URIs.
72
+ const coreProtocol = message.descriptor.protocol !== undefined
73
+ ? this.deps.coreProtocols?.get(message.descriptor.protocol)
74
+ : undefined;
81
75
  try {
82
76
  if (newestExistingMessage?.descriptor.method === DwnMethodName.Delete) {
83
77
  throw new DwnError(DwnErrorCode.RecordsWriteNotAllowedAfterDelete, 'RecordsWrite is not allowed after a RecordsDelete.');
84
78
  }
85
- // NOTE: We want to perform additional validation before storing the RecordsWrite.
86
- // This is necessary for core DWN RecordsWrite that needs additional processing and allows us to fail before the storing and post processing.
87
- //
88
- // Example: Ensures that the protocol tag of a permission revocation RecordsWrite and the parent grant's scoped protocol match.
89
- await this.preProcessingForCoreRecordsWrite(tenant, message);
79
+ // Dispatch pre-processing hooks to the core protocol, if applicable.
80
+ // This allows core protocols to perform cross-record validation before storage
81
+ // (e.g. ensuring revocation tag consistency with the parent grant's scoped protocol).
82
+ if (coreProtocol?.preProcessWrite !== undefined) {
83
+ await coreProtocol.preProcessWrite(tenant, message, this.deps.messageStore);
84
+ }
90
85
  // NOTE: We allow isLatestBaseState to be true ONLY if the incoming message comes with data, or if the incoming message is NOT an initial write
91
86
  // This would allow an initial write to be written to the DB without data, but having it not queryable,
92
87
  // because query implementation filters on `isLatestBaseState` being `true`
@@ -109,13 +104,13 @@ export class RecordsWriteHandler {
109
104
  }
110
105
  }
111
106
  const indexes = await recordsWrite.constructIndexes(isLatestBaseState);
112
- await this.messageStore.put(tenant, messageWithOptionalEncodedData, indexes);
113
- await this.stateIndex.insert(tenant, await Message.getCid(message), indexes);
107
+ await this.deps.messageStore.put(tenant, messageWithOptionalEncodedData, indexes);
108
+ await this.deps.stateIndex.insert(tenant, await Message.getCid(message), indexes);
114
109
  // NOTE: We only emit a `RecordsWrite` when the message is the latest base state.
115
110
  // Because we allow a `RecordsWrite` which is not the latest state to be written, but not queried, we shouldn't emit it either.
116
111
  // It will be emitted as a part of a subsequent next write, if it is the latest base state.
117
- if (this.eventStream !== undefined && isLatestBaseState) {
118
- this.eventStream.emit(tenant, { message, initialWrite }, indexes);
112
+ if (this.deps.eventLog !== undefined && isLatestBaseState) {
113
+ await this.deps.eventLog.emit(tenant, { message, initialWrite }, indexes);
119
114
  }
120
115
  }
121
116
  catch (error) {
@@ -125,8 +120,8 @@ export class RecordsWriteHandler {
125
120
  error.code === DwnErrorCode.RecordsWriteNotAllowedAfterDelete ||
126
121
  error.code === DwnErrorCode.RecordsWriteDataCidMismatch ||
127
122
  error.code === DwnErrorCode.RecordsWriteDataSizeMismatch ||
128
- error.code.startsWith('PermissionsProtocolValidate') ||
129
- error.code.startsWith('SchemaValidator')) {
123
+ error.code.startsWith('SchemaValidator') ||
124
+ this.deps.coreProtocols?.mapErrorToStatusCode(error.code) !== undefined) {
130
125
  return messageReplyFromError(error, 400);
131
126
  }
132
127
  }
@@ -142,76 +137,20 @@ export class RecordsWriteHandler {
142
137
  { code: 202, detail: 'Accepted' }
143
138
  };
144
139
  // delete all existing messages of the same record that are not newest, except for the initial write
145
- await StorageController.deleteAllOlderMessagesButKeepInitialWrite(tenant, existingMessages, newestMessage, this.messageStore, this.dataStore, this.stateIndex);
146
- await this.postProcessingForCoreRecordsWrite(tenant, recordsWrite);
140
+ await StorageController.deleteAllOlderMessagesButKeepInitialWrite(tenant, existingMessages, newestMessage, this.deps.messageStore, this.deps.dataStore, this.deps.stateIndex);
141
+ // Dispatch post-processing hooks to the core protocol, if applicable.
142
+ // This allows core protocols to perform cascading side effects after a successful write
143
+ // (e.g. deleting messages authorized by a revoked grant).
144
+ if (coreProtocol?.postProcessWrite !== undefined) {
145
+ await coreProtocol.postProcessWrite(tenant, recordsWrite, {
146
+ messageStore: this.deps.messageStore,
147
+ dataStore: this.deps.dataStore,
148
+ stateIndex: this.deps.stateIndex,
149
+ });
150
+ }
147
151
  return messageReply;
148
152
  }
149
153
  ;
150
- /**
151
- * Performs additional necessary validation before storing the RecordsWrite if it is a core DWN RecordsWrite that needs additional processing.
152
- * For instance: a Permission revocation RecordsWrite.
153
- */
154
- async preProcessingForCoreRecordsWrite(tenant, recordsWriteMessage) {
155
- // we validate the protocol tag of the revocation message against the grant's scoped protocol
156
- // to do this we will fetch the grant, and compare the the scoped protocol value to the protocol tag of the revocation message
157
- if (recordsWriteMessage.descriptor.protocol === PermissionsProtocol.uri &&
158
- recordsWriteMessage.descriptor.protocolPath === PermissionsProtocol.revocationPath) {
159
- // get the parentId of the revocation message, which is the permissionGrantId
160
- // fetch the grant in order to get the grant's protocol
161
- const permissionGrantId = recordsWriteMessage.descriptor.parentId;
162
- const grant = await PermissionsProtocol.fetchGrant(tenant, this.messageStore, permissionGrantId);
163
- // get the protocol values of the revocation message from the protocol tag and the protocol from the grant scope if they are defined
164
- // compare the two values ensuring they must match
165
- const revokeTagProtocol = recordsWriteMessage.descriptor.tags?.protocol;
166
- const grantProtocol = 'protocol' in grant.scope ? grant.scope.protocol : undefined;
167
- if (grantProtocol !== revokeTagProtocol) {
168
- throw new DwnError(DwnErrorCode.PermissionsProtocolValidateRevocationProtocolTagMismatch, `Revocation protocol ${revokeTagProtocol} does not match grant protocol ${grantProtocol}`);
169
- }
170
- }
171
- }
172
- static validateSchemaForCoreRecordsWrite(recordsWriteMessage, dataBytes) {
173
- if (recordsWriteMessage.descriptor.protocol === PermissionsProtocol.uri) {
174
- PermissionsProtocol.validateSchema(recordsWriteMessage, dataBytes);
175
- }
176
- }
177
- /**
178
- * Performs additional necessary tasks if the RecordsWrite handled is a core DWN RecordsWrite that need additional processing.
179
- * For instance: when a Permission revocation is written, all messages authorized by the revoked grant
180
- * that were created after the revocation timestamp are deleted from all stores.
181
- */
182
- async postProcessingForCoreRecordsWrite(tenant, recordsWrite) {
183
- if (recordsWrite.message.descriptor.protocol !== PermissionsProtocol.uri ||
184
- recordsWrite.message.descriptor.protocolPath !== PermissionsProtocol.revocationPath) {
185
- return;
186
- }
187
- // Delete all messages authorized by the revoked grant that were created after the revocation.
188
- // `permissionGrantId` is indexed via the RecordsWriteDescriptor spread in constructIndexes().
189
- const permissionGrantId = recordsWrite.message.descriptor.parentId;
190
- const grantAuthorizedMessagesQuery = {
191
- permissionGrantId,
192
- dateCreated: { gte: recordsWrite.message.descriptor.messageTimestamp },
193
- };
194
- const { messages: grantAuthorizedMessages } = await this.messageStore.query(tenant, [grantAuthorizedMessagesQuery]);
195
- if (grantAuthorizedMessages.length === 0) {
196
- return;
197
- }
198
- // Delete data from the data store first to avoid orphaned data blobs in case of crash.
199
- // Only RecordsWrite messages with data larger than maxDataSizeAllowedToBeEncoded have data in the data store.
200
- for (const message of grantAuthorizedMessages) {
201
- if (message.descriptor.method === DwnMethodName.Write) {
202
- const recordsWriteMessage = message;
203
- if (recordsWriteMessage.descriptor.dataSize > DwnConstant.maxDataSizeAllowedToBeEncoded) {
204
- await this.dataStore.delete(tenant, recordsWriteMessage.recordId, recordsWriteMessage.descriptor.dataCid);
205
- }
206
- }
207
- }
208
- // Compute CIDs for all messages to delete.
209
- const messageCids = await Promise.all(grantAuthorizedMessages.map((message) => Message.getCid(message)));
210
- // Delete from state index before message store so we don't have orphaned state entries.
211
- await this.stateIndex.delete(tenant, messageCids);
212
- // Finally delete all messages from the message store.
213
- await Promise.all(messageCids.map((cid) => this.messageStore.delete(tenant, cid)));
214
- }
215
154
  /**
216
155
  * Returns a `RecordsQueryReplyEntry` with a copy of the incoming message and the incoming data encoded to `Base64URL`.
217
156
  */
@@ -228,7 +167,13 @@ export class RecordsWriteHandler {
228
167
  const dataBytes = await DataStream.toBytes(dataStream);
229
168
  const dataCid = await Cid.computeDagPbCidFromBytes(dataBytes);
230
169
  RecordsWriteHandler.validateDataIntegrity(message.descriptor.dataCid, message.descriptor.dataSize, dataCid, dataBytes.length);
231
- RecordsWriteHandler.validateSchemaForCoreRecordsWrite(message, dataBytes);
170
+ // Dispatch schema validation to the core protocol, if applicable.
171
+ const coreProtocol = message.descriptor.protocol !== undefined
172
+ ? this.deps.coreProtocols?.get(message.descriptor.protocol)
173
+ : undefined;
174
+ if (coreProtocol?.validateRecord !== undefined) {
175
+ coreProtocol.validateRecord(message, dataBytes);
176
+ }
232
177
  messageWithOptionalEncodedData = await this.cloneAndAddEncodedData(message, dataBytes);
233
178
  }
234
179
  else {
@@ -238,13 +183,13 @@ export class RecordsWriteHandler {
238
183
  // perform storage and CID computation in parallel
239
184
  const [dataCid, DataStorePutResult] = await Promise.all([
240
185
  Cid.computeDagPbCidFromStream(dataStreamCopy1),
241
- this.dataStore.put(tenant, message.recordId, message.descriptor.dataCid, dataStreamCopy2)
186
+ this.deps.dataStore.put(tenant, message.recordId, message.descriptor.dataCid, dataStreamCopy2)
242
187
  ]);
243
188
  RecordsWriteHandler.validateDataIntegrity(message.descriptor.dataCid, message.descriptor.dataSize, dataCid, DataStorePutResult.dataSize);
244
189
  }
245
190
  catch (error) {
246
191
  // unwind/delete data if we have issue with storage or the data failed integrity validation
247
- await this.dataStore.delete(tenant, message.recordId, message.descriptor.dataCid);
192
+ await this.deps.dataStore.delete(tenant, message.recordId, message.descriptor.dataCid);
248
193
  throw error;
249
194
  }
250
195
  }
@@ -270,7 +215,7 @@ export class RecordsWriteHandler {
270
215
  else {
271
216
  // else just make sure the data is in the data store
272
217
  // attempt to retrieve the data from the previous message
273
- const DataStoreGetResult = await this.dataStore.get(tenant, newestExistingWrite.recordId, message.descriptor.dataCid);
218
+ const DataStoreGetResult = await this.deps.dataStore.get(tenant, newestExistingWrite.recordId, message.descriptor.dataCid);
274
219
  if (DataStoreGetResult === undefined) {
275
220
  throw new DwnError(DwnErrorCode.RecordsWriteMissingDataInPrevious, `No dataStream was provided and unable to get data from previous message`);
276
221
  }
@@ -293,7 +238,7 @@ export class RecordsWriteHandler {
293
238
  throw new DwnError(DwnErrorCode.RecordsWriteDataSizeMismatch, `actual data size ${actualDataSize} bytes does not match dataSize in descriptor: ${expectedDataSize}`);
294
239
  }
295
240
  }
296
- static async authorizeRecordsWrite(tenant, recordsWrite, messageStore) {
241
+ async authorizeRecordsWrite(tenant, recordsWrite, messageStore) {
297
242
  // if owner signature is given (`owner` is not `undefined`), it must be the same as the tenant DID
298
243
  if (recordsWrite.owner !== undefined && recordsWrite.owner !== tenant) {
299
244
  throw new DwnError(DwnErrorCode.RecordsWriteOwnerAndTenantMismatch, `Owner ${recordsWrite.owner} must be the same as tenant ${tenant} when specified.`);
@@ -323,11 +268,8 @@ export class RecordsWriteHandler {
323
268
  messageStore
324
269
  });
325
270
  }
326
- else if (recordsWrite.message.descriptor.protocol !== undefined) {
327
- await ProtocolAuthorization.authorizeWrite(tenant, recordsWrite, messageStore);
328
- }
329
271
  else {
330
- throw new DwnError(DwnErrorCode.RecordsWriteAuthorizationFailed, 'message failed authorization');
272
+ await ProtocolAuthorization.authorizeWrite(tenant, recordsWrite, messageStore, this.deps.coreProtocols);
331
273
  }
332
274
  }
333
275
  }