@enbox/dwn-sdk-js 0.3.9 → 0.4.1

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 (525) hide show
  1. package/README.md +4 -4
  2. package/dist/browser.mjs +11 -11
  3. package/dist/browser.mjs.map +4 -4
  4. package/dist/esm/generated/precompiled-validators.js +783 -1206
  5. package/dist/esm/generated/precompiled-validators.js.map +1 -1
  6. package/dist/esm/src/core/dwn-constant.js +5 -0
  7. package/dist/esm/src/core/dwn-constant.js.map +1 -1
  8. package/dist/esm/src/core/dwn-error.js +13 -7
  9. package/dist/esm/src/core/dwn-error.js.map +1 -1
  10. package/dist/esm/src/core/grant-authorization.js +9 -18
  11. package/dist/esm/src/core/grant-authorization.js.map +1 -1
  12. package/dist/esm/src/core/message-reply.js.map +1 -1
  13. package/dist/esm/src/core/messages-grant-authorization.js +28 -61
  14. package/dist/esm/src/core/messages-grant-authorization.js.map +1 -1
  15. package/dist/esm/src/core/protocol-authorization-action.js +25 -27
  16. package/dist/esm/src/core/protocol-authorization-action.js.map +1 -1
  17. package/dist/esm/src/core/protocol-authorization-validation.js +31 -69
  18. package/dist/esm/src/core/protocol-authorization-validation.js.map +1 -1
  19. package/dist/esm/src/core/protocol-authorization.js +44 -118
  20. package/dist/esm/src/core/protocol-authorization.js.map +1 -1
  21. package/dist/esm/src/core/protocols-grant-authorization.js +5 -5
  22. package/dist/esm/src/core/protocols-grant-authorization.js.map +1 -1
  23. package/dist/esm/src/core/recording-validation-state-reader.js +84 -0
  24. package/dist/esm/src/core/recording-validation-state-reader.js.map +1 -0
  25. package/dist/esm/src/core/records-grant-authorization.js +11 -11
  26. package/dist/esm/src/core/records-grant-authorization.js.map +1 -1
  27. package/dist/esm/src/core/replication-apply.js +295 -0
  28. package/dist/esm/src/core/replication-apply.js.map +1 -0
  29. package/dist/esm/src/core/resumable-task-manager.js +5 -4
  30. package/dist/esm/src/core/resumable-task-manager.js.map +1 -1
  31. package/dist/esm/src/core/validation-state-reader.js +237 -0
  32. package/dist/esm/src/core/validation-state-reader.js.map +1 -0
  33. package/dist/esm/src/dwn.js +261 -16
  34. package/dist/esm/src/dwn.js.map +1 -1
  35. package/dist/esm/src/enums/dwn-interface-method.js +0 -1
  36. package/dist/esm/src/enums/dwn-interface-method.js.map +1 -1
  37. package/dist/esm/src/event-stream/durable-event-log.js +365 -0
  38. package/dist/esm/src/event-stream/durable-event-log.js.map +1 -0
  39. package/dist/esm/src/event-stream/event-emitter-wake-publisher.js +25 -0
  40. package/dist/esm/src/event-stream/event-emitter-wake-publisher.js.map +1 -0
  41. package/dist/esm/src/handlers/messages-query.js +159 -0
  42. package/dist/esm/src/handlers/messages-query.js.map +1 -0
  43. package/dist/esm/src/handlers/messages-read.js +5 -5
  44. package/dist/esm/src/handlers/messages-read.js.map +1 -1
  45. package/dist/esm/src/handlers/messages-subscribe.js +8 -8
  46. package/dist/esm/src/handlers/messages-subscribe.js.map +1 -1
  47. package/dist/esm/src/handlers/protocols-configure.js +30 -49
  48. package/dist/esm/src/handlers/protocols-configure.js.map +1 -1
  49. package/dist/esm/src/handlers/protocols-query.js +1 -1
  50. package/dist/esm/src/handlers/protocols-query.js.map +1 -1
  51. package/dist/esm/src/handlers/records-count.js +20 -11
  52. package/dist/esm/src/handlers/records-count.js.map +1 -1
  53. package/dist/esm/src/handlers/records-delete.js +20 -16
  54. package/dist/esm/src/handlers/records-delete.js.map +1 -1
  55. package/dist/esm/src/handlers/records-query.js +35 -11
  56. package/dist/esm/src/handlers/records-query.js.map +1 -1
  57. package/dist/esm/src/handlers/records-read.js +52 -42
  58. package/dist/esm/src/handlers/records-read.js.map +1 -1
  59. package/dist/esm/src/handlers/records-subscribe.js +107 -11
  60. package/dist/esm/src/handlers/records-subscribe.js.map +1 -1
  61. package/dist/esm/src/handlers/records-write.js +62 -116
  62. package/dist/esm/src/handlers/records-write.js.map +1 -1
  63. package/dist/esm/src/index.js +7 -8
  64. package/dist/esm/src/index.js.map +1 -1
  65. package/dist/esm/src/interfaces/messages-query.js +49 -0
  66. package/dist/esm/src/interfaces/messages-query.js.map +1 -0
  67. package/dist/esm/src/interfaces/protocols-configure.js +7 -3
  68. package/dist/esm/src/interfaces/protocols-configure.js.map +1 -1
  69. package/dist/esm/src/interfaces/protocols-query.js +3 -4
  70. package/dist/esm/src/interfaces/protocols-query.js.map +1 -1
  71. package/dist/esm/src/interfaces/records-count.js +4 -3
  72. package/dist/esm/src/interfaces/records-count.js.map +1 -1
  73. package/dist/esm/src/interfaces/records-delete.js +21 -4
  74. package/dist/esm/src/interfaces/records-delete.js.map +1 -1
  75. package/dist/esm/src/interfaces/records-query.js +4 -3
  76. package/dist/esm/src/interfaces/records-query.js.map +1 -1
  77. package/dist/esm/src/interfaces/records-read.js +3 -3
  78. package/dist/esm/src/interfaces/records-read.js.map +1 -1
  79. package/dist/esm/src/interfaces/records-subscribe.js +4 -3
  80. package/dist/esm/src/interfaces/records-subscribe.js.map +1 -1
  81. package/dist/esm/src/interfaces/records-write.js +27 -13
  82. package/dist/esm/src/interfaces/records-write.js.map +1 -1
  83. package/dist/esm/src/protocols/permissions.js +27 -34
  84. package/dist/esm/src/protocols/permissions.js.map +1 -1
  85. package/dist/esm/src/store/index-level.js +24 -9
  86. package/dist/esm/src/store/index-level.js.map +1 -1
  87. package/dist/esm/src/store/level-wrapper.js +7 -0
  88. package/dist/esm/src/store/level-wrapper.js.map +1 -1
  89. package/dist/esm/src/store/message-store-level.js +536 -42
  90. package/dist/esm/src/store/message-store-level.js.map +1 -1
  91. package/dist/esm/src/store/storage-controller.js +58 -49
  92. package/dist/esm/src/store/storage-controller.js.map +1 -1
  93. package/dist/esm/src/types/message-types.js.map +1 -1
  94. package/dist/esm/src/types/validation-state-reader.js +2 -0
  95. package/dist/esm/src/types/validation-state-reader.js.map +1 -0
  96. package/dist/esm/src/utils/messages.js +17 -0
  97. package/dist/esm/src/utils/messages.js.map +1 -1
  98. package/dist/esm/src/utils/record-limit-occupancy.js +244 -0
  99. package/dist/esm/src/utils/record-limit-occupancy.js.map +1 -0
  100. package/dist/esm/src/utils/records.js +50 -14
  101. package/dist/esm/src/utils/records.js.map +1 -1
  102. package/dist/esm/src/utils/replication.js +85 -0
  103. package/dist/esm/src/utils/replication.js.map +1 -0
  104. package/dist/esm/tests/core/grant-authorization.spec.js +4 -4
  105. package/dist/esm/tests/core/grant-authorization.spec.js.map +1 -1
  106. package/dist/esm/tests/core/process-message-parity.spec.js +222 -0
  107. package/dist/esm/tests/core/process-message-parity.spec.js.map +1 -0
  108. package/dist/esm/tests/core/protocol-authorization.spec.js +5 -2
  109. package/dist/esm/tests/core/protocol-authorization.spec.js.map +1 -1
  110. package/dist/esm/tests/core/records-grant-authorization.spec.js +5 -5
  111. package/dist/esm/tests/core/records-grant-authorization.spec.js.map +1 -1
  112. package/dist/esm/tests/core/replication-apply.spec.js +274 -0
  113. package/dist/esm/tests/core/replication-apply.spec.js.map +1 -0
  114. package/dist/esm/tests/core/replication-replay-property.spec.js +350 -0
  115. package/dist/esm/tests/core/replication-replay-property.spec.js.map +1 -0
  116. package/dist/esm/tests/core/validation-read-closure.spec.js +469 -0
  117. package/dist/esm/tests/core/validation-read-closure.spec.js.map +1 -0
  118. package/dist/esm/tests/core/validation-state-reader.spec.js +716 -0
  119. package/dist/esm/tests/core/validation-state-reader.spec.js.map +1 -0
  120. package/dist/esm/tests/durable-event-log.spec.js +373 -0
  121. package/dist/esm/tests/durable-event-log.spec.js.map +1 -0
  122. package/dist/esm/tests/dwn.spec.js +620 -14
  123. package/dist/esm/tests/dwn.spec.js.map +1 -1
  124. package/dist/esm/tests/features/author-delegated-grant.spec.js +9 -6
  125. package/dist/esm/tests/features/author-delegated-grant.spec.js.map +1 -1
  126. package/dist/esm/tests/features/owner-delegated-grant.spec.js +1 -4
  127. package/dist/esm/tests/features/owner-delegated-grant.spec.js.map +1 -1
  128. package/dist/esm/tests/features/owner-signature.spec.js +1 -4
  129. package/dist/esm/tests/features/owner-signature.spec.js.map +1 -1
  130. package/dist/esm/tests/features/permissions.spec.js +165 -4
  131. package/dist/esm/tests/features/permissions.spec.js.map +1 -1
  132. package/dist/esm/tests/features/protocol-composition.spec.js +8 -11
  133. package/dist/esm/tests/features/protocol-composition.spec.js.map +1 -1
  134. package/dist/esm/tests/features/protocol-create-action.spec.js +1 -4
  135. package/dist/esm/tests/features/protocol-create-action.spec.js.map +1 -1
  136. package/dist/esm/tests/features/protocol-delete-action.spec.js +3 -5
  137. package/dist/esm/tests/features/protocol-delete-action.spec.js.map +1 -1
  138. package/dist/esm/tests/features/protocol-update-action.spec.js +3 -6
  139. package/dist/esm/tests/features/protocol-update-action.spec.js.map +1 -1
  140. package/dist/esm/tests/features/records-delivery.spec.js +1 -4
  141. package/dist/esm/tests/features/records-delivery.spec.js.map +1 -1
  142. package/dist/esm/tests/features/records-immutable.spec.js +1 -4
  143. package/dist/esm/tests/features/records-immutable.spec.js.map +1 -1
  144. package/dist/esm/tests/features/records-nested-query-scope.spec.js +281 -0
  145. package/dist/esm/tests/features/records-nested-query-scope.spec.js.map +1 -0
  146. package/dist/esm/tests/features/records-prune-cross-protocol.spec.js +3 -7
  147. package/dist/esm/tests/features/records-prune-cross-protocol.spec.js.map +1 -1
  148. package/dist/esm/tests/features/records-prune.spec.js +11 -22
  149. package/dist/esm/tests/features/records-prune.spec.js.map +1 -1
  150. package/dist/esm/tests/features/records-record-limit.spec.js +441 -231
  151. package/dist/esm/tests/features/records-record-limit.spec.js.map +1 -1
  152. package/dist/esm/tests/features/records-squash.spec.js +6 -4
  153. package/dist/esm/tests/features/records-squash.spec.js.map +1 -1
  154. package/dist/esm/tests/features/records-tags.spec.js +1 -4
  155. package/dist/esm/tests/features/records-tags.spec.js.map +1 -1
  156. package/dist/esm/tests/features/resumable-tasks.spec.js +3 -5
  157. package/dist/esm/tests/features/resumable-tasks.spec.js.map +1 -1
  158. package/dist/esm/tests/fuzz/message-store.fuzz.spec.js +1 -2
  159. package/dist/esm/tests/fuzz/message-store.fuzz.spec.js.map +1 -1
  160. package/dist/esm/tests/fuzz/process-message.fuzz.spec.js +2 -4
  161. package/dist/esm/tests/fuzz/process-message.fuzz.spec.js.map +1 -1
  162. package/dist/esm/tests/fuzz/schema-validation.fuzz.spec.js +1 -1
  163. package/dist/esm/tests/fuzz/schema-validation.fuzz.spec.js.map +1 -1
  164. package/dist/esm/tests/handlers/messages-query.spec.js +246 -0
  165. package/dist/esm/tests/handlers/messages-query.spec.js.map +1 -0
  166. package/dist/esm/tests/handlers/messages-read.spec.js +2 -5
  167. package/dist/esm/tests/handlers/messages-read.spec.js.map +1 -1
  168. package/dist/esm/tests/handlers/messages-subscribe.spec.js +3 -14
  169. package/dist/esm/tests/handlers/messages-subscribe.spec.js.map +1 -1
  170. package/dist/esm/tests/handlers/protocols-configure.spec.js +27 -26
  171. package/dist/esm/tests/handlers/protocols-configure.spec.js.map +1 -1
  172. package/dist/esm/tests/handlers/protocols-query.spec.js +1 -4
  173. package/dist/esm/tests/handlers/protocols-query.spec.js.map +1 -1
  174. package/dist/esm/tests/handlers/records-count.spec.js +1 -4
  175. package/dist/esm/tests/handlers/records-count.spec.js.map +1 -1
  176. package/dist/esm/tests/handlers/records-delete.spec.js +312 -30
  177. package/dist/esm/tests/handlers/records-delete.spec.js.map +1 -1
  178. package/dist/esm/tests/handlers/records-query.spec.js +32 -9
  179. package/dist/esm/tests/handlers/records-query.spec.js.map +1 -1
  180. package/dist/esm/tests/handlers/records-read.spec.js +4 -4
  181. package/dist/esm/tests/handlers/records-read.spec.js.map +1 -1
  182. package/dist/esm/tests/handlers/records-subscribe.spec.js +33 -14
  183. package/dist/esm/tests/handlers/records-subscribe.spec.js.map +1 -1
  184. package/dist/esm/tests/handlers/records-write.spec.js +84 -38
  185. package/dist/esm/tests/handlers/records-write.spec.js.map +1 -1
  186. package/dist/esm/tests/interfaces/records-delete.spec.js +69 -2
  187. package/dist/esm/tests/interfaces/records-delete.spec.js.map +1 -1
  188. package/dist/esm/tests/interfaces/records-write.spec.js +4 -3
  189. package/dist/esm/tests/interfaces/records-write.spec.js.map +1 -1
  190. package/dist/esm/tests/protocols/permissions.spec.js +55 -6
  191. package/dist/esm/tests/protocols/permissions.spec.js.map +1 -1
  192. package/dist/esm/tests/scenarios/aggregator.spec.js +1 -4
  193. package/dist/esm/tests/scenarios/aggregator.spec.js.map +1 -1
  194. package/dist/esm/tests/scenarios/deleted-record.spec.js +1 -4
  195. package/dist/esm/tests/scenarios/deleted-record.spec.js.map +1 -1
  196. package/dist/esm/tests/scenarios/end-to-end-tests.spec.js +1 -4
  197. package/dist/esm/tests/scenarios/end-to-end-tests.spec.js.map +1 -1
  198. package/dist/esm/tests/scenarios/nested-roles.spec.js +1 -4
  199. package/dist/esm/tests/scenarios/nested-roles.spec.js.map +1 -1
  200. package/dist/esm/tests/scenarios/subscriptions.spec.js +1 -4
  201. package/dist/esm/tests/scenarios/subscriptions.spec.js.map +1 -1
  202. package/dist/esm/tests/store/message-store-level.spec.js +361 -5
  203. package/dist/esm/tests/store/message-store-level.spec.js.map +1 -1
  204. package/dist/esm/tests/store/message-store.spec.js +60 -0
  205. package/dist/esm/tests/store/message-store.spec.js.map +1 -1
  206. package/dist/esm/tests/test-event-stream.js +7 -3
  207. package/dist/esm/tests/test-event-stream.js.map +1 -1
  208. package/dist/esm/tests/test-stores.js +19 -9
  209. package/dist/esm/tests/test-stores.js.map +1 -1
  210. package/dist/esm/tests/test-suite.js +4 -4
  211. package/dist/esm/tests/test-suite.js.map +1 -1
  212. package/dist/esm/tests/utils/test-data-generator.js +25 -0
  213. package/dist/esm/tests/utils/test-data-generator.js.map +1 -1
  214. package/dist/esm/tests/utils/test-stub-generator.js.map +1 -1
  215. package/dist/esm/tests/utils/test-validation-state-reader.js +16 -0
  216. package/dist/esm/tests/utils/test-validation-state-reader.js.map +1 -0
  217. package/dist/types/generated/precompiled-validators.d.ts +6 -6
  218. package/dist/types/generated/precompiled-validators.d.ts.map +1 -1
  219. package/dist/types/src/core/core-protocol.d.ts +3 -3
  220. package/dist/types/src/core/core-protocol.d.ts.map +1 -1
  221. package/dist/types/src/core/dwn-constant.d.ts +5 -0
  222. package/dist/types/src/core/dwn-constant.d.ts.map +1 -1
  223. package/dist/types/src/core/dwn-error.d.ts +13 -7
  224. package/dist/types/src/core/dwn-error.d.ts.map +1 -1
  225. package/dist/types/src/core/grant-authorization.d.ts +5 -5
  226. package/dist/types/src/core/grant-authorization.d.ts.map +1 -1
  227. package/dist/types/src/core/message-reply.d.ts +5 -4
  228. package/dist/types/src/core/message-reply.d.ts.map +1 -1
  229. package/dist/types/src/core/messages-grant-authorization.d.ts +12 -15
  230. package/dist/types/src/core/messages-grant-authorization.d.ts.map +1 -1
  231. package/dist/types/src/core/protocol-authorization-action.d.ts +4 -5
  232. package/dist/types/src/core/protocol-authorization-action.d.ts.map +1 -1
  233. package/dist/types/src/core/protocol-authorization-validation.d.ts +13 -16
  234. package/dist/types/src/core/protocol-authorization-validation.d.ts.map +1 -1
  235. package/dist/types/src/core/protocol-authorization.d.ts +8 -33
  236. package/dist/types/src/core/protocol-authorization.d.ts.map +1 -1
  237. package/dist/types/src/core/protocols-grant-authorization.d.ts +4 -4
  238. package/dist/types/src/core/protocols-grant-authorization.d.ts.map +1 -1
  239. package/dist/types/src/core/recording-validation-state-reader.d.ts +75 -0
  240. package/dist/types/src/core/recording-validation-state-reader.d.ts.map +1 -0
  241. package/dist/types/src/core/records-grant-authorization.d.ts +8 -8
  242. package/dist/types/src/core/records-grant-authorization.d.ts.map +1 -1
  243. package/dist/types/src/core/replication-apply.d.ts +129 -0
  244. package/dist/types/src/core/replication-apply.d.ts.map +1 -0
  245. package/dist/types/src/core/resumable-task-manager.d.ts +1 -1
  246. package/dist/types/src/core/resumable-task-manager.d.ts.map +1 -1
  247. package/dist/types/src/core/validation-state-reader.d.ts +79 -0
  248. package/dist/types/src/core/validation-state-reader.d.ts.map +1 -0
  249. package/dist/types/src/dwn.d.ts +47 -13
  250. package/dist/types/src/dwn.d.ts.map +1 -1
  251. package/dist/types/src/enums/dwn-interface-method.d.ts +0 -1
  252. package/dist/types/src/enums/dwn-interface-method.d.ts.map +1 -1
  253. package/dist/types/src/event-stream/durable-event-log.d.ts +69 -0
  254. package/dist/types/src/event-stream/durable-event-log.d.ts.map +1 -0
  255. package/dist/types/src/event-stream/event-emitter-wake-publisher.d.ts +13 -0
  256. package/dist/types/src/event-stream/event-emitter-wake-publisher.d.ts.map +1 -0
  257. package/dist/types/src/handlers/messages-query.d.ts +20 -0
  258. package/dist/types/src/handlers/messages-query.d.ts.map +1 -0
  259. package/dist/types/src/handlers/messages-read.d.ts +1 -1
  260. package/dist/types/src/handlers/messages-read.d.ts.map +1 -1
  261. package/dist/types/src/handlers/messages-subscribe.d.ts.map +1 -1
  262. package/dist/types/src/handlers/protocols-configure.d.ts +0 -5
  263. package/dist/types/src/handlers/protocols-configure.d.ts.map +1 -1
  264. package/dist/types/src/handlers/records-count.d.ts +2 -1
  265. package/dist/types/src/handlers/records-count.d.ts.map +1 -1
  266. package/dist/types/src/handlers/records-delete.d.ts +2 -2
  267. package/dist/types/src/handlers/records-delete.d.ts.map +1 -1
  268. package/dist/types/src/handlers/records-query.d.ts +1 -1
  269. package/dist/types/src/handlers/records-query.d.ts.map +1 -1
  270. package/dist/types/src/handlers/records-read.d.ts +2 -1
  271. package/dist/types/src/handlers/records-read.d.ts.map +1 -1
  272. package/dist/types/src/handlers/records-subscribe.d.ts +4 -5
  273. package/dist/types/src/handlers/records-subscribe.d.ts.map +1 -1
  274. package/dist/types/src/handlers/records-write.d.ts +3 -11
  275. package/dist/types/src/handlers/records-write.d.ts.map +1 -1
  276. package/dist/types/src/index.d.ts +16 -18
  277. package/dist/types/src/index.d.ts.map +1 -1
  278. package/dist/types/src/interfaces/messages-query.d.ts +23 -0
  279. package/dist/types/src/interfaces/messages-query.d.ts.map +1 -0
  280. package/dist/types/src/interfaces/protocols-configure.d.ts +3 -3
  281. package/dist/types/src/interfaces/protocols-configure.d.ts.map +1 -1
  282. package/dist/types/src/interfaces/protocols-query.d.ts +2 -2
  283. package/dist/types/src/interfaces/protocols-query.d.ts.map +1 -1
  284. package/dist/types/src/interfaces/records-count.d.ts +3 -3
  285. package/dist/types/src/interfaces/records-count.d.ts.map +1 -1
  286. package/dist/types/src/interfaces/records-delete.d.ts +11 -3
  287. package/dist/types/src/interfaces/records-delete.d.ts.map +1 -1
  288. package/dist/types/src/interfaces/records-query.d.ts +3 -3
  289. package/dist/types/src/interfaces/records-query.d.ts.map +1 -1
  290. package/dist/types/src/interfaces/records-read.d.ts +3 -3
  291. package/dist/types/src/interfaces/records-read.d.ts.map +1 -1
  292. package/dist/types/src/interfaces/records-subscribe.d.ts +3 -3
  293. package/dist/types/src/interfaces/records-subscribe.d.ts.map +1 -1
  294. package/dist/types/src/interfaces/records-write.d.ts +15 -7
  295. package/dist/types/src/interfaces/records-write.d.ts.map +1 -1
  296. package/dist/types/src/protocols/permissions.d.ts +9 -12
  297. package/dist/types/src/protocols/permissions.d.ts.map +1 -1
  298. package/dist/types/src/store/index-level.d.ts +10 -1
  299. package/dist/types/src/store/index-level.d.ts.map +1 -1
  300. package/dist/types/src/store/level-wrapper.d.ts +5 -0
  301. package/dist/types/src/store/level-wrapper.d.ts.map +1 -1
  302. package/dist/types/src/store/message-store-level.d.ts +94 -14
  303. package/dist/types/src/store/message-store-level.d.ts.map +1 -1
  304. package/dist/types/src/store/storage-controller.d.ts +17 -14
  305. package/dist/types/src/store/storage-controller.d.ts.map +1 -1
  306. package/dist/types/src/types/message-store.d.ts +29 -1
  307. package/dist/types/src/types/message-store.d.ts.map +1 -1
  308. package/dist/types/src/types/message-types.d.ts +2 -0
  309. package/dist/types/src/types/message-types.d.ts.map +1 -1
  310. package/dist/types/src/types/messages-types.d.ts +21 -55
  311. package/dist/types/src/types/messages-types.d.ts.map +1 -1
  312. package/dist/types/src/types/method-handler.d.ts +2 -2
  313. package/dist/types/src/types/method-handler.d.ts.map +1 -1
  314. package/dist/types/src/types/permission-types.d.ts +1 -1
  315. package/dist/types/src/types/subscriptions.d.ts +50 -39
  316. package/dist/types/src/types/subscriptions.d.ts.map +1 -1
  317. package/dist/types/src/types/validation-state-reader.d.ts +116 -0
  318. package/dist/types/src/types/validation-state-reader.d.ts.map +1 -0
  319. package/dist/types/src/utils/messages.d.ts +10 -0
  320. package/dist/types/src/utils/messages.d.ts.map +1 -1
  321. package/dist/types/src/utils/record-limit-occupancy.d.ts +40 -0
  322. package/dist/types/src/utils/record-limit-occupancy.d.ts.map +1 -0
  323. package/dist/types/src/utils/records.d.ts +25 -3
  324. package/dist/types/src/utils/records.d.ts.map +1 -1
  325. package/dist/types/src/utils/replication.d.ts +22 -0
  326. package/dist/types/src/utils/replication.d.ts.map +1 -0
  327. package/dist/types/tests/core/process-message-parity.spec.d.ts +2 -0
  328. package/dist/types/tests/core/process-message-parity.spec.d.ts.map +1 -0
  329. package/dist/types/tests/core/replication-apply.spec.d.ts +2 -0
  330. package/dist/types/tests/core/replication-apply.spec.d.ts.map +1 -0
  331. package/dist/types/tests/core/replication-replay-property.spec.d.ts +2 -0
  332. package/dist/types/tests/core/replication-replay-property.spec.d.ts.map +1 -0
  333. package/dist/types/tests/core/validation-read-closure.spec.d.ts +2 -0
  334. package/dist/types/tests/core/validation-read-closure.spec.d.ts.map +1 -0
  335. package/dist/types/tests/core/validation-state-reader.spec.d.ts +2 -0
  336. package/dist/types/tests/core/validation-state-reader.spec.d.ts.map +1 -0
  337. package/dist/types/tests/durable-event-log.spec.d.ts +2 -0
  338. package/dist/types/tests/durable-event-log.spec.d.ts.map +1 -0
  339. package/dist/types/tests/dwn.spec.d.ts.map +1 -1
  340. package/dist/types/tests/features/author-delegated-grant.spec.d.ts.map +1 -1
  341. package/dist/types/tests/features/owner-delegated-grant.spec.d.ts.map +1 -1
  342. package/dist/types/tests/features/owner-signature.spec.d.ts.map +1 -1
  343. package/dist/types/tests/features/permissions.spec.d.ts.map +1 -1
  344. package/dist/types/tests/features/protocol-composition.spec.d.ts.map +1 -1
  345. package/dist/types/tests/features/protocol-create-action.spec.d.ts.map +1 -1
  346. package/dist/types/tests/features/protocol-delete-action.spec.d.ts.map +1 -1
  347. package/dist/types/tests/features/protocol-update-action.spec.d.ts.map +1 -1
  348. package/dist/types/tests/features/records-delivery.spec.d.ts.map +1 -1
  349. package/dist/types/tests/features/records-immutable.spec.d.ts.map +1 -1
  350. package/dist/types/tests/features/records-nested-query-scope.spec.d.ts +2 -0
  351. package/dist/types/tests/features/records-nested-query-scope.spec.d.ts.map +1 -0
  352. package/dist/types/tests/features/records-prune-cross-protocol.spec.d.ts.map +1 -1
  353. package/dist/types/tests/features/records-prune.spec.d.ts.map +1 -1
  354. package/dist/types/tests/features/records-record-limit.spec.d.ts.map +1 -1
  355. package/dist/types/tests/features/records-squash.spec.d.ts.map +1 -1
  356. package/dist/types/tests/features/records-tags.spec.d.ts.map +1 -1
  357. package/dist/types/tests/features/resumable-tasks.spec.d.ts.map +1 -1
  358. package/dist/types/tests/handlers/messages-query.spec.d.ts +2 -0
  359. package/dist/types/tests/handlers/messages-query.spec.d.ts.map +1 -0
  360. package/dist/types/tests/handlers/messages-read.spec.d.ts.map +1 -1
  361. package/dist/types/tests/handlers/messages-subscribe.spec.d.ts.map +1 -1
  362. package/dist/types/tests/handlers/protocols-configure.spec.d.ts.map +1 -1
  363. package/dist/types/tests/handlers/protocols-query.spec.d.ts.map +1 -1
  364. package/dist/types/tests/handlers/records-count.spec.d.ts.map +1 -1
  365. package/dist/types/tests/handlers/records-delete.spec.d.ts.map +1 -1
  366. package/dist/types/tests/handlers/records-query.spec.d.ts.map +1 -1
  367. package/dist/types/tests/handlers/records-read.spec.d.ts.map +1 -1
  368. package/dist/types/tests/handlers/records-subscribe.spec.d.ts.map +1 -1
  369. package/dist/types/tests/handlers/records-write.spec.d.ts.map +1 -1
  370. package/dist/types/tests/scenarios/deleted-record.spec.d.ts.map +1 -1
  371. package/dist/types/tests/scenarios/end-to-end-tests.spec.d.ts.map +1 -1
  372. package/dist/types/tests/scenarios/nested-roles.spec.d.ts.map +1 -1
  373. package/dist/types/tests/scenarios/subscriptions.spec.d.ts.map +1 -1
  374. package/dist/types/tests/store/message-store.spec.d.ts.map +1 -1
  375. package/dist/types/tests/test-event-stream.d.ts +1 -1
  376. package/dist/types/tests/test-event-stream.d.ts.map +1 -1
  377. package/dist/types/tests/test-stores.d.ts +5 -4
  378. package/dist/types/tests/test-stores.d.ts.map +1 -1
  379. package/dist/types/tests/test-suite.d.ts +1 -2
  380. package/dist/types/tests/test-suite.d.ts.map +1 -1
  381. package/dist/types/tests/utils/test-data-generator.d.ts +20 -1
  382. package/dist/types/tests/utils/test-data-generator.d.ts.map +1 -1
  383. package/dist/types/tests/utils/test-validation-state-reader.d.ts +15 -0
  384. package/dist/types/tests/utils/test-validation-state-reader.d.ts.map +1 -0
  385. package/package.json +2 -2
  386. package/src/core/core-protocol.ts +3 -3
  387. package/src/core/dwn-constant.ts +7 -1
  388. package/src/core/dwn-error.ts +13 -7
  389. package/src/core/grant-authorization.ts +11 -20
  390. package/src/core/message-reply.ts +6 -5
  391. package/src/core/messages-grant-authorization.ts +37 -100
  392. package/src/core/protocol-authorization-action.ts +29 -38
  393. package/src/core/protocol-authorization-validation.ts +41 -98
  394. package/src/core/protocol-authorization.ts +56 -202
  395. package/src/core/protocols-grant-authorization.ts +9 -9
  396. package/src/core/recording-validation-state-reader.ts +130 -0
  397. package/src/core/records-grant-authorization.ts +16 -16
  398. package/src/core/replication-apply.ts +412 -0
  399. package/src/core/resumable-task-manager.ts +10 -8
  400. package/src/core/validation-state-reader.ts +350 -0
  401. package/src/dwn.ts +417 -30
  402. package/src/enums/dwn-interface-method.ts +0 -1
  403. package/src/event-stream/durable-event-log.ts +509 -0
  404. package/src/event-stream/event-emitter-wake-publisher.ts +34 -0
  405. package/src/handlers/messages-query.ts +203 -0
  406. package/src/handlers/messages-read.ts +9 -10
  407. package/src/handlers/messages-subscribe.ts +12 -13
  408. package/src/handlers/protocols-configure.ts +37 -58
  409. package/src/handlers/protocols-query.ts +1 -1
  410. package/src/handlers/records-count.ts +24 -17
  411. package/src/handlers/records-delete.ts +29 -27
  412. package/src/handlers/records-query.ts +38 -17
  413. package/src/handlers/records-read.ts +63 -50
  414. package/src/handlers/records-subscribe.ts +132 -19
  415. package/src/handlers/records-write.ts +77 -168
  416. package/src/index.ts +16 -20
  417. package/src/interfaces/messages-query.ts +70 -0
  418. package/src/interfaces/protocols-configure.ts +12 -4
  419. package/src/interfaces/protocols-query.ts +4 -5
  420. package/src/interfaces/records-count.ts +9 -4
  421. package/src/interfaces/records-delete.ts +25 -5
  422. package/src/interfaces/records-query.ts +9 -4
  423. package/src/interfaces/records-read.ts +4 -4
  424. package/src/interfaces/records-subscribe.ts +9 -4
  425. package/src/interfaces/records-write.ts +41 -13
  426. package/src/protocols/permissions.ts +32 -52
  427. package/src/store/index-level.ts +30 -9
  428. package/src/store/level-wrapper.ts +9 -1
  429. package/src/store/message-store-level.ts +757 -47
  430. package/src/store/storage-controller.ts +74 -63
  431. package/src/types/message-store.ts +45 -2
  432. package/src/types/message-types.ts +3 -1
  433. package/src/types/messages-types.ts +26 -65
  434. package/src/types/method-handler.ts +3 -3
  435. package/src/types/permission-types.ts +1 -1
  436. package/src/types/subscriptions.ts +53 -42
  437. package/src/types/validation-state-reader.ts +127 -0
  438. package/src/utils/messages.ts +25 -1
  439. package/src/utils/record-limit-occupancy.ts +377 -0
  440. package/src/utils/records.ts +69 -13
  441. package/src/utils/replication.ts +122 -0
  442. package/dist/esm/src/core/record-chain.js +0 -64
  443. package/dist/esm/src/core/record-chain.js.map +0 -1
  444. package/dist/esm/src/event-stream/event-emitter-event-log.js +0 -334
  445. package/dist/esm/src/event-stream/event-emitter-event-log.js.map +0 -1
  446. package/dist/esm/src/handlers/messages-sync.js +0 -581
  447. package/dist/esm/src/handlers/messages-sync.js.map +0 -1
  448. package/dist/esm/src/interfaces/messages-sync.js +0 -54
  449. package/dist/esm/src/interfaces/messages-sync.js.map +0 -1
  450. package/dist/esm/src/smt/smt-store-level.js +0 -103
  451. package/dist/esm/src/smt/smt-store-level.js.map +0 -1
  452. package/dist/esm/src/smt/smt-store-memory.js +0 -41
  453. package/dist/esm/src/smt/smt-store-memory.js.map +0 -1
  454. package/dist/esm/src/smt/smt-utils.js +0 -129
  455. package/dist/esm/src/smt/smt-utils.js.map +0 -1
  456. package/dist/esm/src/smt/sparse-merkle-tree.js +0 -577
  457. package/dist/esm/src/smt/sparse-merkle-tree.js.map +0 -1
  458. package/dist/esm/src/state-index/state-index-level.js +0 -191
  459. package/dist/esm/src/state-index/state-index-level.js.map +0 -1
  460. package/dist/esm/src/sync/records-projection.js +0 -228
  461. package/dist/esm/src/sync/records-projection.js.map +0 -1
  462. package/dist/esm/src/types/smt-types.js +0 -5
  463. package/dist/esm/src/types/smt-types.js.map +0 -1
  464. package/dist/esm/src/types/state-index.js +0 -2
  465. package/dist/esm/src/types/state-index.js.map +0 -1
  466. package/dist/esm/tests/event-emitter-event-log.spec.js +0 -499
  467. package/dist/esm/tests/event-emitter-event-log.spec.js.map +0 -1
  468. package/dist/esm/tests/handlers/messages-sync.spec.js +0 -1771
  469. package/dist/esm/tests/handlers/messages-sync.spec.js.map +0 -1
  470. package/dist/esm/tests/smt/smt-store-level.spec.js +0 -132
  471. package/dist/esm/tests/smt/smt-store-level.spec.js.map +0 -1
  472. package/dist/esm/tests/smt/sparse-merkle-tree.spec.js +0 -732
  473. package/dist/esm/tests/smt/sparse-merkle-tree.spec.js.map +0 -1
  474. package/dist/esm/tests/state-index/state-index-level.spec.js +0 -245
  475. package/dist/esm/tests/state-index/state-index-level.spec.js.map +0 -1
  476. package/dist/esm/tests/sync/records-projection.spec.js +0 -245
  477. package/dist/esm/tests/sync/records-projection.spec.js.map +0 -1
  478. package/dist/types/src/core/record-chain.d.ts +0 -24
  479. package/dist/types/src/core/record-chain.d.ts.map +0 -1
  480. package/dist/types/src/event-stream/event-emitter-event-log.d.ts +0 -80
  481. package/dist/types/src/event-stream/event-emitter-event-log.d.ts.map +0 -1
  482. package/dist/types/src/handlers/messages-sync.d.ts +0 -83
  483. package/dist/types/src/handlers/messages-sync.d.ts.map +0 -1
  484. package/dist/types/src/interfaces/messages-sync.d.ts +0 -23
  485. package/dist/types/src/interfaces/messages-sync.d.ts.map +0 -1
  486. package/dist/types/src/smt/smt-store-level.d.ts +0 -32
  487. package/dist/types/src/smt/smt-store-level.d.ts.map +0 -1
  488. package/dist/types/src/smt/smt-store-memory.d.ts +0 -22
  489. package/dist/types/src/smt/smt-store-memory.d.ts.map +0 -1
  490. package/dist/types/src/smt/smt-utils.d.ts +0 -58
  491. package/dist/types/src/smt/smt-utils.d.ts.map +0 -1
  492. package/dist/types/src/smt/sparse-merkle-tree.d.ts +0 -124
  493. package/dist/types/src/smt/sparse-merkle-tree.d.ts.map +0 -1
  494. package/dist/types/src/state-index/state-index-level.d.ts +0 -83
  495. package/dist/types/src/state-index/state-index-level.d.ts.map +0 -1
  496. package/dist/types/src/sync/records-projection.d.ts +0 -98
  497. package/dist/types/src/sync/records-projection.d.ts.map +0 -1
  498. package/dist/types/src/types/smt-types.d.ts +0 -81
  499. package/dist/types/src/types/smt-types.d.ts.map +0 -1
  500. package/dist/types/src/types/state-index.d.ts +0 -90
  501. package/dist/types/src/types/state-index.d.ts.map +0 -1
  502. package/dist/types/tests/event-emitter-event-log.spec.d.ts +0 -2
  503. package/dist/types/tests/event-emitter-event-log.spec.d.ts.map +0 -1
  504. package/dist/types/tests/handlers/messages-sync.spec.d.ts +0 -2
  505. package/dist/types/tests/handlers/messages-sync.spec.d.ts.map +0 -1
  506. package/dist/types/tests/smt/smt-store-level.spec.d.ts +0 -2
  507. package/dist/types/tests/smt/smt-store-level.spec.d.ts.map +0 -1
  508. package/dist/types/tests/smt/sparse-merkle-tree.spec.d.ts +0 -2
  509. package/dist/types/tests/smt/sparse-merkle-tree.spec.d.ts.map +0 -1
  510. package/dist/types/tests/state-index/state-index-level.spec.d.ts +0 -2
  511. package/dist/types/tests/state-index/state-index-level.spec.d.ts.map +0 -1
  512. package/dist/types/tests/sync/records-projection.spec.d.ts +0 -2
  513. package/dist/types/tests/sync/records-projection.spec.d.ts.map +0 -1
  514. package/src/core/record-chain.ts +0 -99
  515. package/src/event-stream/event-emitter-event-log.ts +0 -430
  516. package/src/handlers/messages-sync.ts +0 -896
  517. package/src/interfaces/messages-sync.ts +0 -86
  518. package/src/smt/smt-store-level.ts +0 -143
  519. package/src/smt/smt-store-memory.ts +0 -53
  520. package/src/smt/smt-utils.ts +0 -149
  521. package/src/smt/sparse-merkle-tree.ts +0 -698
  522. package/src/state-index/state-index-level.ts +0 -239
  523. package/src/sync/records-projection.ts +0 -328
  524. package/src/types/smt-types.ts +0 -95
  525. package/src/types/state-index.ts +0 -100
@@ -1,36 +1,34 @@
1
1
  import type { GenericMessage } from '../types/message-types.js';
2
2
  import type { MessagesPermissionScope } from '../types/permission-types.js';
3
- import type { MessageStore } from '../types/message-store.js';
4
3
  import type { PermissionGrant } from '../protocols/permission-grant.js';
5
4
  import type { ProtocolsConfigureMessage } from '../types/protocols-types.js';
6
5
  import type { ProtocolScope } from '../utils/permission-scope.js';
6
+ import type { ValidationStateReader } from '../types/validation-state-reader.js';
7
7
  import type { DataEncodedRecordsWriteMessage, RecordsDeleteMessage, RecordsWriteMessage } from '../types/records-types.js';
8
- import type { MessagesReadMessage, MessagesSubscribeMessage, MessagesSyncMessage } from '../types/messages-types.js';
8
+ import type { MessagesQueryMessage, MessagesReadMessage, MessagesSubscribeMessage } from '../types/messages-types.js';
9
9
 
10
10
  import { DwnInterfaceName } from '../enums/dwn-interface-method.js';
11
11
  import { GrantAuthorization } from './grant-authorization.js';
12
- import { isRecordsPrimaryProjectionExcludedProtocol } from './constants.js';
13
12
  import { PermissionScopeMatcher } from '../utils/permission-scope.js';
14
13
  import { PermissionsProtocol } from '../protocols/permissions.js';
15
14
  import { Records } from '../utils/records.js';
16
- import { RecordsWrite } from '../interfaces/records-write.js';
17
15
  import { DwnError, DwnErrorCode } from './dwn-error.js';
18
16
 
19
17
  export class MessagesGrantAuthorization {
20
18
 
21
19
  public static async fetchPermissionGrants(
22
20
  tenant: string,
23
- messageStore: MessageStore,
21
+ validationStateReader: ValidationStateReader,
24
22
  permissionGrantIds: string[]
25
23
  ): Promise<PermissionGrant[]> {
26
24
  return Promise.all(
27
- permissionGrantIds.map(permissionGrantId => PermissionsProtocol.fetchGrant(tenant, messageStore, permissionGrantId))
25
+ permissionGrantIds.map(permissionGrantId => validationStateReader.fetchGrant(tenant, permissionGrantId))
28
26
  );
29
27
  }
30
28
 
31
29
  /**
32
30
  * Authorizes a MessagesReadMessage using the given permission grant.
33
- * @param messageStore Used to check if the given grant has been revoked; and to fetch related RecordsWrites if needed.
31
+ * @param validationStateReader Used to check grant revocation and fetch related RecordsWrites if needed.
34
32
  */
35
33
  public static async authorizeMessagesRead(input: {
36
34
  messagesReadMessage: MessagesReadMessage,
@@ -38,10 +36,10 @@ export class MessagesGrantAuthorization {
38
36
  expectedGrantor: string,
39
37
  expectedGrantee: string,
40
38
  permissionGrants: PermissionGrant[],
41
- messageStore: MessageStore,
39
+ validationStateReader: ValidationStateReader,
42
40
  }): Promise<void> {
43
41
  const {
44
- messagesReadMessage, messageToRead, expectedGrantor, expectedGrantee, permissionGrants, messageStore
42
+ messagesReadMessage, messageToRead, expectedGrantor, expectedGrantee, permissionGrants, validationStateReader
45
43
  } = input;
46
44
 
47
45
  await MessagesGrantAuthorization.performBaseValidationForGrantSet({
@@ -49,12 +47,12 @@ export class MessagesGrantAuthorization {
49
47
  expectedGrantor,
50
48
  expectedGrantee,
51
49
  permissionGrants,
52
- messageStore
50
+ validationStateReader
53
51
  });
54
52
 
55
53
  for (const permissionGrant of permissionGrants) {
56
54
  const scope = permissionGrant.scope as MessagesPermissionScope;
57
- if (await MessagesGrantAuthorization.isScopeAuthorized(expectedGrantor, messageToRead, scope, messageStore)) {
55
+ if (await MessagesGrantAuthorization.isScopeAuthorized(expectedGrantor, messageToRead, scope, validationStateReader)) {
58
56
  return;
59
57
  }
60
58
  }
@@ -63,18 +61,18 @@ export class MessagesGrantAuthorization {
63
61
  }
64
62
 
65
63
  /**
66
- * Authorizes the scope of a permission grant for MessagesSubscribe or MessagesSync.
67
- * @param messageStore Used to check if the grant has been revoked.
64
+ * Authorizes the scope of a permission grant for MessagesQuery or MessagesSubscribe.
65
+ * @param validationStateReader Used to check if the grant has been revoked.
68
66
  */
69
- public static async authorizeSubscribeOrSync(input: {
70
- incomingMessage: MessagesSubscribeMessage | MessagesSyncMessage,
67
+ public static async authorizeQueryOrSubscribe(input: {
68
+ incomingMessage: MessagesQueryMessage | MessagesSubscribeMessage,
71
69
  expectedGrantor: string,
72
70
  expectedGrantee: string,
73
71
  permissionGrants: PermissionGrant[],
74
- messageStore: MessageStore,
72
+ validationStateReader: ValidationStateReader,
75
73
  }): Promise<void> {
76
74
  const {
77
- incomingMessage, expectedGrantor, expectedGrantee, permissionGrants, messageStore
75
+ incomingMessage, expectedGrantor, expectedGrantee, permissionGrants, validationStateReader
78
76
  } = input;
79
77
 
80
78
  await MessagesGrantAuthorization.performBaseValidationForGrantSet({
@@ -82,80 +80,19 @@ export class MessagesGrantAuthorization {
82
80
  expectedGrantor,
83
81
  expectedGrantee,
84
82
  permissionGrants,
85
- messageStore
83
+ validationStateReader
86
84
  });
87
85
 
88
86
  const scopes = permissionGrants.map(permissionGrant => permissionGrant.scope as MessagesPermissionScope);
89
87
 
90
- if ('action' in incomingMessage.descriptor) {
91
- MessagesGrantAuthorization.authorizeSyncScope(incomingMessage as MessagesSyncMessage, scopes);
92
- return;
93
- }
94
-
95
- MessagesGrantAuthorization.authorizeSubscribeScope(incomingMessage as MessagesSubscribeMessage, scopes);
96
- }
97
-
98
- private static authorizeSyncScope(
99
- syncMessage: MessagesSyncMessage,
100
- scopes: MessagesPermissionScope[]
101
- ): void {
102
- const { projectionScopes, protocol } = syncMessage.descriptor;
103
-
104
- if (projectionScopes === undefined) {
105
- MessagesGrantAuthorization.authorizeProtocolSyncScope(scopes, protocol);
106
- return;
107
- }
108
-
109
- MessagesGrantAuthorization.authorizeProjectionScopes(scopes, projectionScopes);
110
- }
111
-
112
- private static authorizeProtocolSyncScope(
113
- scopes: MessagesPermissionScope[],
114
- protocol: string | undefined
115
- ): void {
116
- if (isRecordsPrimaryProjectionExcludedProtocol(protocol)) {
117
- throw new DwnError(
118
- DwnErrorCode.MessagesGrantAuthorizationProtocolSyncInfrastructureProtocol,
119
- `Protocol-scoped MessagesSync cannot authorize infrastructure protocol ${protocol}`
120
- );
121
- }
122
-
123
- if (!MessagesGrantAuthorization.someScopeMatches(scopes, { protocol })) {
124
- throw new DwnError(
125
- DwnErrorCode.MessagesGrantAuthorizationMismatchedProtocol,
126
- `No permission grant scope matches protocol ${protocol}`
127
- );
128
- }
129
- }
130
-
131
- private static authorizeProjectionScopes(
132
- scopes: MessagesPermissionScope[],
133
- projectionScopes: ProtocolScope[],
134
- ): void {
135
- for (const projectionScope of projectionScopes) {
136
- if (isRecordsPrimaryProjectionExcludedProtocol(projectionScope.protocol)) {
137
- throw new DwnError(
138
- DwnErrorCode.MessagesGrantAuthorizationProjectionInfrastructureProtocol,
139
- `Projected MessagesSync cannot authorize infrastructure protocol ${projectionScope.protocol}`
140
- );
141
- }
142
-
143
- if (MessagesGrantAuthorization.someScopeMatches(scopes, projectionScope)) {
144
- continue;
145
- }
146
-
147
- throw new DwnError(
148
- DwnErrorCode.MessagesGrantAuthorizationProjectionScopeMismatch,
149
- `No permission grant scope matches projection scope ${JSON.stringify(projectionScope)}`
150
- );
151
- }
88
+ MessagesGrantAuthorization.authorizeFilterScope(incomingMessage, scopes);
152
89
  }
153
90
 
154
- private static authorizeSubscribeScope(
155
- subscribeMessage: MessagesSubscribeMessage,
91
+ private static authorizeFilterScope(
92
+ messagesMessage: MessagesQueryMessage | MessagesSubscribeMessage,
156
93
  scopes: MessagesPermissionScope[]
157
94
  ): void {
158
- const { filters } = subscribeMessage.descriptor;
95
+ const { filters } = messagesMessage.descriptor;
159
96
 
160
97
  if (filters.length === 0 && !MessagesGrantAuthorization.hasUnscopedGrant(scopes)) {
161
98
  throw new DwnError(
@@ -195,7 +132,7 @@ export class MessagesGrantAuthorization {
195
132
  expectedGrantor: string,
196
133
  expectedGrantee: string,
197
134
  permissionGrants: PermissionGrant[],
198
- messageStore: MessageStore,
135
+ validationStateReader: ValidationStateReader,
199
136
  deliveryTimestamp: string,
200
137
  }): Promise<void> {
201
138
  const {
@@ -203,7 +140,7 @@ export class MessagesGrantAuthorization {
203
140
  expectedGrantor,
204
141
  expectedGrantee,
205
142
  permissionGrants,
206
- messageStore,
143
+ validationStateReader,
207
144
  deliveryTimestamp,
208
145
  } = input;
209
146
 
@@ -215,12 +152,12 @@ export class MessagesGrantAuthorization {
215
152
  },
216
153
  };
217
154
 
218
- await MessagesGrantAuthorization.authorizeSubscribeOrSync({
155
+ await MessagesGrantAuthorization.authorizeQueryOrSubscribe({
219
156
  incomingMessage: deliveryMessage,
220
157
  expectedGrantor,
221
158
  expectedGrantee,
222
159
  permissionGrants,
223
- messageStore,
160
+ validationStateReader,
224
161
  });
225
162
  }
226
163
 
@@ -229,14 +166,14 @@ export class MessagesGrantAuthorization {
229
166
  * unresolved, revoked, expired, or interface/method-mismatched grants fail the request.
230
167
  */
231
168
  private static async performBaseValidationForGrantSet(input: {
232
- incomingMessage: MessagesReadMessage | MessagesSubscribeMessage | MessagesSyncMessage,
169
+ incomingMessage: MessagesQueryMessage | MessagesReadMessage | MessagesSubscribeMessage,
233
170
  expectedGrantor: string,
234
171
  expectedGrantee: string,
235
172
  permissionGrants: PermissionGrant[],
236
- messageStore: MessageStore,
173
+ validationStateReader: ValidationStateReader,
237
174
  }): Promise<void> {
238
175
  const {
239
- incomingMessage, expectedGrantor, expectedGrantee, permissionGrants, messageStore
176
+ incomingMessage, expectedGrantor, expectedGrantee, permissionGrants, validationStateReader
240
177
  } = input;
241
178
 
242
179
  for (const permissionGrant of permissionGrants) {
@@ -245,7 +182,7 @@ export class MessagesGrantAuthorization {
245
182
  expectedGrantor,
246
183
  expectedGrantee,
247
184
  permissionGrant,
248
- messageStore
185
+ validationStateReader
249
186
  });
250
187
  }
251
188
  }
@@ -257,7 +194,7 @@ export class MessagesGrantAuthorization {
257
194
  tenant: string,
258
195
  messageToGet: GenericMessage,
259
196
  incomingScope: MessagesPermissionScope,
260
- messageStore: MessageStore,
197
+ validationStateReader: ValidationStateReader,
261
198
  ): Promise<boolean> {
262
199
  if (incomingScope.protocol === undefined) {
263
200
  return true;
@@ -268,7 +205,7 @@ export class MessagesGrantAuthorization {
268
205
  tenant,
269
206
  messageToGet as RecordsWriteMessage | RecordsDeleteMessage,
270
207
  incomingScope,
271
- messageStore
208
+ validationStateReader
272
209
  );
273
210
  }
274
211
 
@@ -286,12 +223,12 @@ export class MessagesGrantAuthorization {
286
223
  tenant: string,
287
224
  recordsMessage: RecordsWriteMessage | RecordsDeleteMessage,
288
225
  incomingScope: MessagesPermissionScope,
289
- messageStore: MessageStore,
226
+ validationStateReader: ValidationStateReader,
290
227
  ): Promise<boolean> {
291
228
  const recordsWriteMessage = await MessagesGrantAuthorization.getAssociatedRecordsWrite(
292
229
  tenant,
293
230
  recordsMessage,
294
- messageStore
231
+ validationStateReader
295
232
  );
296
233
 
297
234
  if (recordsWriteMessage.descriptor.protocol === PermissionsProtocol.uri) {
@@ -299,7 +236,7 @@ export class MessagesGrantAuthorization {
299
236
  tenant,
300
237
  recordsWriteMessage,
301
238
  incomingScope,
302
- messageStore
239
+ validationStateReader
303
240
  );
304
241
  }
305
242
 
@@ -310,7 +247,7 @@ export class MessagesGrantAuthorization {
310
247
  tenant: string,
311
248
  recordsWriteMessage: RecordsWriteMessage,
312
249
  incomingScope: MessagesPermissionScope,
313
- messageStore: MessageStore,
250
+ validationStateReader: ValidationStateReader,
314
251
  ): Promise<boolean> {
315
252
  if (MessagesGrantAuthorization.isSubtreeScope(incomingScope)) {
316
253
  return false;
@@ -318,7 +255,7 @@ export class MessagesGrantAuthorization {
318
255
 
319
256
  const permissionScope = await PermissionsProtocol.getScopeFromPermissionRecord(
320
257
  tenant,
321
- messageStore,
258
+ validationStateReader,
322
259
  recordsWriteMessage as DataEncodedRecordsWriteMessage
323
260
  );
324
261
 
@@ -339,13 +276,13 @@ export class MessagesGrantAuthorization {
339
276
  private static async getAssociatedRecordsWrite(
340
277
  tenant: string,
341
278
  recordsMessage: RecordsWriteMessage | RecordsDeleteMessage,
342
- messageStore: MessageStore,
279
+ validationStateReader: ValidationStateReader,
343
280
  ): Promise<RecordsWriteMessage> {
344
281
  if (Records.isRecordsWrite(recordsMessage)) {
345
282
  return recordsMessage;
346
283
  }
347
284
 
348
- return RecordsWrite.fetchNewestRecordsWrite(messageStore, tenant, recordsMessage.descriptor.recordId);
285
+ return validationStateReader.fetchNewestRecordsWrite(tenant, recordsMessage.descriptor.recordId);
349
286
  }
350
287
 
351
288
  private static getRecordsScopeTarget(recordsWriteMessage: RecordsWriteMessage): ProtocolScope {
@@ -1,22 +1,18 @@
1
- import type { Filter } from '../types/query-types.js';
2
- import type { MessageStore } from '../types/message-store.js';
3
1
  import type { RecordsCount } from '../interfaces/records-count.js';
4
2
  import type { RecordsDelete } from '../interfaces/records-delete.js';
5
3
  import type { RecordsQuery } from '../interfaces/records-query.js';
6
4
  import type { RecordsRead } from '../interfaces/records-read.js';
7
5
  import type { RecordsSubscribe } from '../interfaces/records-subscribe.js';
8
6
  import type { RecordsWriteMessage } from '../types/records-types.js';
7
+ import type { ValidationStateReader } from '../types/validation-state-reader.js';
9
8
  import type { ProtocolActionRule, ProtocolDefinition, ProtocolRuleSet } from '../types/protocols-types.js';
10
9
 
11
- import { FilterUtility } from '../utils/filter.js';
10
+ import { DwnMethodName } from '../enums/dwn-interface-method.js';
12
11
  import { RecordsWrite } from '../interfaces/records-write.js';
13
12
  import { DwnError, DwnErrorCode } from './dwn-error.js';
14
- import { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';
15
13
  import { getRuleSetAtPath, isCrossProtocolRef, parseCrossProtocolRef } from '../utils/protocols.js';
16
14
  import { ProtocolAction, ProtocolActor } from '../types/protocols-types.js';
17
15
 
18
- import type { FetchProtocolDefinitionFn } from './protocol-authorization.js';
19
-
20
16
  /**
21
17
  * Check if the incoming message is invoking a role. If so, validate the invoked role.
22
18
  * For cross-protocol role invocation, the role record may live in a different protocol
@@ -28,9 +24,8 @@ export async function verifyInvokedRole(
28
24
  protocolUri: string,
29
25
  contextId: string | undefined,
30
26
  protocolDefinition: ProtocolDefinition,
31
- messageStore: MessageStore,
32
- fetchProtocolDefinition: FetchProtocolDefinitionFn,
33
- governingTimestamp?: string,
27
+ validationStateReader: ValidationStateReader,
28
+ protocolDefinitionTimestamp?: string,
34
29
  ): Promise<void> {
35
30
  const protocolRole = incomingMessage.signaturePayload?.protocolRole;
36
31
 
@@ -64,8 +59,8 @@ export async function verifyInvokedRole(
64
59
  roleProtocolPath = parsed.protocolPath;
65
60
 
66
61
  // Fetch the referenced protocol's definition to validate the role exists
67
- const refDefinition = await fetchProtocolDefinition(
68
- tenant, roleProtocolUri, messageStore, governingTimestamp
62
+ const refDefinition = await validationStateReader.fetchProtocolDefinition(
63
+ tenant, roleProtocolUri, protocolDefinitionTimestamp
69
64
  );
70
65
  const roleRuleSet = getRuleSetAtPath(roleProtocolPath, refDefinition.structure);
71
66
  if (!roleRuleSet?.$role) {
@@ -85,16 +80,6 @@ export async function verifyInvokedRole(
85
80
  }
86
81
  }
87
82
 
88
- // Construct a filter to fetch the invoked role record
89
- const roleRecordFilter: Filter = {
90
- interface : DwnInterfaceName.Records,
91
- method : DwnMethodName.Write,
92
- protocol : roleProtocolUri,
93
- protocolPath : roleProtocolPath,
94
- recipient : incomingMessage.author!,
95
- isLatestBaseState : true,
96
- };
97
-
98
83
  const ancestorSegmentCountOfRolePath = roleProtocolPath.split('/').length - 1;
99
84
  if (contextId === undefined && ancestorSegmentCountOfRolePath > 0) {
100
85
  throw new DwnError(
@@ -103,22 +88,26 @@ export async function verifyInvokedRole(
103
88
  );
104
89
  }
105
90
 
106
- // Compute `contextId` prefix filter for fetching the invoked role record if the role path is not at the root level.
91
+ // Compute `contextId` prefix for fetching the invoked role record if the role path is not at the root level.
107
92
  // e.g. if invoked role path is `Thread/Participant`, and the `contextId` of the message is `threadX/messageY/attachmentZ`,
108
- // then we need to add a prefix filter as `threadX` for the `contextId`
93
+ // then we need to use the prefix `threadX` for the `contextId`
109
94
  // because the `contextId` of the Participant record would be in the form of be `threadX/participantA`
95
+ let contextIdPrefix: string | undefined;
110
96
  if (ancestorSegmentCountOfRolePath > 0) {
111
97
  const contextIdSegments = contextId!.split('/'); // NOTE: currently contextId segment count is never shorter than the role path count.
112
- const contextIdPrefix = contextIdSegments.slice(0, ancestorSegmentCountOfRolePath).join('/');
113
- const contextIdPrefixFilter = FilterUtility.constructPrefixFilterAsRangeFilter(contextIdPrefix);
114
-
115
- roleRecordFilter.contextId = contextIdPrefixFilter;
98
+ contextIdPrefix = contextIdSegments.slice(0, ancestorSegmentCountOfRolePath).join('/');
116
99
  }
117
100
 
101
+ // fetch the invoked role record
102
+ const matchingRoleRecordExists = await validationStateReader.hasMatchingRoleRecord({
103
+ tenant,
104
+ protocol : roleProtocolUri,
105
+ protocolPath : roleProtocolPath,
106
+ recipient : incomingMessage.author!,
107
+ contextIdPrefix,
108
+ });
118
109
 
119
- const { messages: matchingMessages } = await messageStore.query(tenant, [roleRecordFilter]);
120
-
121
- if (matchingMessages.length === 0) {
110
+ if (!matchingRoleRecordExists) {
122
111
  throw new DwnError(
123
112
  DwnErrorCode.ProtocolAuthorizationMatchingRoleRecordNotFound,
124
113
  `No matching role record found for protocol path ${roleProtocolPath}`
@@ -139,14 +128,14 @@ export async function verifyInvokedRole(
139
128
  export async function getActionsSeekingARuleMatch(
140
129
  tenant: string,
141
130
  incomingMessage: RecordsCount | RecordsDelete | RecordsQuery | RecordsRead | RecordsSubscribe | RecordsWrite,
142
- messageStore: MessageStore,
131
+ validationStateReader: ValidationStateReader,
143
132
  ): Promise<ProtocolAction[]> {
144
133
 
145
134
  switch (incomingMessage.message.descriptor.method) {
146
- case DwnMethodName.Delete:
135
+ case DwnMethodName.Delete: {
147
136
  const recordsDelete = incomingMessage as RecordsDelete;
148
137
  const recordId = recordsDelete.message.descriptor.recordId;
149
- const initialWrite = await RecordsWrite.fetchInitialRecordsWrite(messageStore, tenant, recordId);
138
+ const initialWrite = await validationStateReader.fetchInitialRecordsWrite(tenant, recordId);
150
139
 
151
140
  // if there is no initial write, then no action rule can authorize the incoming message, because we won't know who the original author is
152
141
  // NOTE: purely defensive programming: currently not reachable
@@ -155,7 +144,7 @@ export async function getActionsSeekingARuleMatch(
155
144
  return [];
156
145
  }
157
146
 
158
- const actionsThatWouldAuthorizeDelete = [];
147
+ const actionsThatWouldAuthorizeDelete: ProtocolAction[] = [];
159
148
  const prune = recordsDelete.message.descriptor.prune;
160
149
  if (prune) {
161
150
  actionsThatWouldAuthorizeDelete.push(ProtocolAction.CoPrune);
@@ -174,6 +163,7 @@ export async function getActionsSeekingARuleMatch(
174
163
  }
175
164
 
176
165
  return actionsThatWouldAuthorizeDelete;
166
+ }
177
167
 
178
168
  case DwnMethodName.Count:
179
169
  return [ProtocolAction.Read];
@@ -187,7 +177,7 @@ export async function getActionsSeekingARuleMatch(
187
177
  case DwnMethodName.Subscribe:
188
178
  return [ProtocolAction.Read];
189
179
 
190
- case DwnMethodName.Write:
180
+ case DwnMethodName.Write: {
191
181
  const incomingRecordsWrite = incomingMessage as RecordsWrite;
192
182
 
193
183
  if (await incomingRecordsWrite.isInitialWrite()) {
@@ -201,7 +191,7 @@ export async function getActionsSeekingARuleMatch(
201
191
  // else incoming RecordsWrite not an initial write
202
192
 
203
193
  const recordId = (incomingMessage as RecordsWrite).message.recordId;
204
- const initialWrite = await RecordsWrite.fetchInitialRecordsWrite(messageStore, tenant, recordId);
194
+ const initialWrite = await validationStateReader.fetchInitialRecordsWrite(tenant, recordId);
205
195
 
206
196
  // if there is no initial write to update from, then no action rule can authorize the incoming message
207
197
  if (initialWrite === undefined) {
@@ -217,6 +207,7 @@ export async function getActionsSeekingARuleMatch(
217
207
  }
218
208
  }
219
209
  }
210
+ }
220
211
 
221
212
  // purely defensive programming: should not be reachable
222
213
  // setting to empty array will prevent any message from being authorized
@@ -233,11 +224,11 @@ export async function authorizeAgainstAllowedActions(
233
224
  incomingMessage: RecordsCount | RecordsDelete | RecordsQuery | RecordsRead | RecordsSubscribe | RecordsWrite,
234
225
  ruleSet: ProtocolRuleSet,
235
226
  recordChain: RecordsWriteMessage[],
236
- messageStore: MessageStore,
227
+ validationStateReader: ValidationStateReader,
237
228
  protocolDefinition?: ProtocolDefinition,
238
229
  ): Promise<void> {
239
230
  const incomingMessageMethod = incomingMessage.message.descriptor.method;
240
- const actionsSeekingARuleMatch = await getActionsSeekingARuleMatch(tenant, incomingMessage, messageStore);
231
+ const actionsSeekingARuleMatch = await getActionsSeekingARuleMatch(tenant, incomingMessage, validationStateReader);
241
232
  const author = incomingMessage.author;
242
233
  const actionRules = ruleSet.$actions;
243
234