@enbox/dwn-sdk-js 0.4.0 → 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 (513) hide show
  1. package/README.md +4 -4
  2. package/dist/browser.mjs +8 -8
  3. package/dist/browser.mjs.map +4 -4
  4. package/dist/esm/generated/precompiled-validators.js +799 -885
  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 +12 -4
  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 -45
  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 +30 -68
  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 +123 -28
  28. package/dist/esm/src/core/replication-apply.js.map +1 -1
  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 +165 -132
  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 +6 -7
  64. package/dist/esm/src/index.js.map +1 -1
  65. package/dist/esm/src/interfaces/{messages-sync.js → messages-query.js} +21 -15
  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 +55 -1
  113. package/dist/esm/tests/core/replication-apply.spec.js.map +1 -1
  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 +504 -35
  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 +82 -36
  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 -2
  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 +12 -4
  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 -14
  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 +36 -0
  244. package/dist/types/src/core/replication-apply.d.ts.map +1 -1
  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 +33 -20
  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 +14 -16
  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 -37
  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-replay-property.spec.d.ts +2 -0
  330. package/dist/types/tests/core/replication-replay-property.spec.d.ts.map +1 -0
  331. package/dist/types/tests/core/validation-read-closure.spec.d.ts +2 -0
  332. package/dist/types/tests/core/validation-read-closure.spec.d.ts.map +1 -0
  333. package/dist/types/tests/core/validation-state-reader.spec.d.ts +2 -0
  334. package/dist/types/tests/core/validation-state-reader.spec.d.ts.map +1 -0
  335. package/dist/types/tests/durable-event-log.spec.d.ts +2 -0
  336. package/dist/types/tests/durable-event-log.spec.d.ts.map +1 -0
  337. package/dist/types/tests/dwn.spec.d.ts.map +1 -1
  338. package/dist/types/tests/features/author-delegated-grant.spec.d.ts.map +1 -1
  339. package/dist/types/tests/features/owner-delegated-grant.spec.d.ts.map +1 -1
  340. package/dist/types/tests/features/owner-signature.spec.d.ts.map +1 -1
  341. package/dist/types/tests/features/permissions.spec.d.ts.map +1 -1
  342. package/dist/types/tests/features/protocol-composition.spec.d.ts.map +1 -1
  343. package/dist/types/tests/features/protocol-create-action.spec.d.ts.map +1 -1
  344. package/dist/types/tests/features/protocol-delete-action.spec.d.ts.map +1 -1
  345. package/dist/types/tests/features/protocol-update-action.spec.d.ts.map +1 -1
  346. package/dist/types/tests/features/records-delivery.spec.d.ts.map +1 -1
  347. package/dist/types/tests/features/records-immutable.spec.d.ts.map +1 -1
  348. package/dist/types/tests/features/records-nested-query-scope.spec.d.ts +2 -0
  349. package/dist/types/tests/features/records-nested-query-scope.spec.d.ts.map +1 -0
  350. package/dist/types/tests/features/records-prune-cross-protocol.spec.d.ts.map +1 -1
  351. package/dist/types/tests/features/records-prune.spec.d.ts.map +1 -1
  352. package/dist/types/tests/features/records-record-limit.spec.d.ts.map +1 -1
  353. package/dist/types/tests/features/records-squash.spec.d.ts.map +1 -1
  354. package/dist/types/tests/features/records-tags.spec.d.ts.map +1 -1
  355. package/dist/types/tests/features/resumable-tasks.spec.d.ts.map +1 -1
  356. package/dist/types/tests/handlers/messages-query.spec.d.ts +2 -0
  357. package/dist/types/tests/handlers/messages-query.spec.d.ts.map +1 -0
  358. package/dist/types/tests/handlers/messages-read.spec.d.ts.map +1 -1
  359. package/dist/types/tests/handlers/messages-subscribe.spec.d.ts.map +1 -1
  360. package/dist/types/tests/handlers/protocols-configure.spec.d.ts.map +1 -1
  361. package/dist/types/tests/handlers/protocols-query.spec.d.ts.map +1 -1
  362. package/dist/types/tests/handlers/records-count.spec.d.ts.map +1 -1
  363. package/dist/types/tests/handlers/records-delete.spec.d.ts.map +1 -1
  364. package/dist/types/tests/handlers/records-query.spec.d.ts.map +1 -1
  365. package/dist/types/tests/handlers/records-read.spec.d.ts.map +1 -1
  366. package/dist/types/tests/handlers/records-subscribe.spec.d.ts.map +1 -1
  367. package/dist/types/tests/handlers/records-write.spec.d.ts.map +1 -1
  368. package/dist/types/tests/scenarios/deleted-record.spec.d.ts.map +1 -1
  369. package/dist/types/tests/scenarios/end-to-end-tests.spec.d.ts.map +1 -1
  370. package/dist/types/tests/scenarios/nested-roles.spec.d.ts.map +1 -1
  371. package/dist/types/tests/scenarios/subscriptions.spec.d.ts.map +1 -1
  372. package/dist/types/tests/store/message-store.spec.d.ts.map +1 -1
  373. package/dist/types/tests/test-event-stream.d.ts +1 -1
  374. package/dist/types/tests/test-event-stream.d.ts.map +1 -1
  375. package/dist/types/tests/test-stores.d.ts +5 -4
  376. package/dist/types/tests/test-stores.d.ts.map +1 -1
  377. package/dist/types/tests/test-suite.d.ts +1 -2
  378. package/dist/types/tests/test-suite.d.ts.map +1 -1
  379. package/dist/types/tests/utils/test-data-generator.d.ts +20 -1
  380. package/dist/types/tests/utils/test-data-generator.d.ts.map +1 -1
  381. package/dist/types/tests/utils/test-validation-state-reader.d.ts +15 -0
  382. package/dist/types/tests/utils/test-validation-state-reader.d.ts.map +1 -0
  383. package/package.json +2 -2
  384. package/src/core/core-protocol.ts +3 -3
  385. package/src/core/dwn-constant.ts +7 -1
  386. package/src/core/dwn-error.ts +12 -4
  387. package/src/core/grant-authorization.ts +11 -20
  388. package/src/core/message-reply.ts +6 -5
  389. package/src/core/messages-grant-authorization.ts +37 -70
  390. package/src/core/protocol-authorization-action.ts +29 -38
  391. package/src/core/protocol-authorization-validation.ts +39 -96
  392. package/src/core/protocol-authorization.ts +56 -202
  393. package/src/core/protocols-grant-authorization.ts +9 -9
  394. package/src/core/recording-validation-state-reader.ts +130 -0
  395. package/src/core/records-grant-authorization.ts +16 -16
  396. package/src/core/replication-apply.ts +172 -32
  397. package/src/core/resumable-task-manager.ts +10 -8
  398. package/src/core/validation-state-reader.ts +350 -0
  399. package/src/dwn.ts +285 -192
  400. package/src/enums/dwn-interface-method.ts +0 -1
  401. package/src/event-stream/durable-event-log.ts +509 -0
  402. package/src/event-stream/event-emitter-wake-publisher.ts +34 -0
  403. package/src/handlers/messages-query.ts +203 -0
  404. package/src/handlers/messages-read.ts +9 -10
  405. package/src/handlers/messages-subscribe.ts +12 -13
  406. package/src/handlers/protocols-configure.ts +37 -58
  407. package/src/handlers/protocols-query.ts +1 -1
  408. package/src/handlers/records-count.ts +24 -17
  409. package/src/handlers/records-delete.ts +29 -27
  410. package/src/handlers/records-query.ts +38 -17
  411. package/src/handlers/records-read.ts +63 -50
  412. package/src/handlers/records-subscribe.ts +132 -19
  413. package/src/handlers/records-write.ts +77 -168
  414. package/src/index.ts +14 -17
  415. package/src/interfaces/messages-query.ts +70 -0
  416. package/src/interfaces/protocols-configure.ts +12 -4
  417. package/src/interfaces/protocols-query.ts +4 -5
  418. package/src/interfaces/records-count.ts +9 -4
  419. package/src/interfaces/records-delete.ts +25 -5
  420. package/src/interfaces/records-query.ts +9 -4
  421. package/src/interfaces/records-read.ts +4 -4
  422. package/src/interfaces/records-subscribe.ts +9 -4
  423. package/src/interfaces/records-write.ts +41 -13
  424. package/src/protocols/permissions.ts +32 -52
  425. package/src/store/index-level.ts +30 -9
  426. package/src/store/level-wrapper.ts +9 -1
  427. package/src/store/message-store-level.ts +757 -47
  428. package/src/store/storage-controller.ts +74 -63
  429. package/src/types/message-store.ts +45 -2
  430. package/src/types/message-types.ts +3 -1
  431. package/src/types/messages-types.ts +26 -45
  432. package/src/types/method-handler.ts +3 -3
  433. package/src/types/permission-types.ts +1 -1
  434. package/src/types/subscriptions.ts +53 -42
  435. package/src/types/validation-state-reader.ts +127 -0
  436. package/src/utils/messages.ts +25 -1
  437. package/src/utils/record-limit-occupancy.ts +377 -0
  438. package/src/utils/records.ts +69 -13
  439. package/src/utils/replication.ts +122 -0
  440. package/dist/esm/src/core/record-chain.js +0 -64
  441. package/dist/esm/src/core/record-chain.js.map +0 -1
  442. package/dist/esm/src/event-stream/event-emitter-event-log.js +0 -334
  443. package/dist/esm/src/event-stream/event-emitter-event-log.js.map +0 -1
  444. package/dist/esm/src/handlers/messages-sync.js +0 -278
  445. package/dist/esm/src/handlers/messages-sync.js.map +0 -1
  446. package/dist/esm/src/interfaces/messages-sync.js.map +0 -1
  447. package/dist/esm/src/smt/smt-store-level.js +0 -103
  448. package/dist/esm/src/smt/smt-store-level.js.map +0 -1
  449. package/dist/esm/src/smt/smt-store-memory.js +0 -41
  450. package/dist/esm/src/smt/smt-store-memory.js.map +0 -1
  451. package/dist/esm/src/smt/smt-utils.js +0 -129
  452. package/dist/esm/src/smt/smt-utils.js.map +0 -1
  453. package/dist/esm/src/smt/sparse-merkle-tree.js +0 -577
  454. package/dist/esm/src/smt/sparse-merkle-tree.js.map +0 -1
  455. package/dist/esm/src/state-index/state-index-level.js +0 -191
  456. package/dist/esm/src/state-index/state-index-level.js.map +0 -1
  457. package/dist/esm/src/types/smt-types.js +0 -5
  458. package/dist/esm/src/types/smt-types.js.map +0 -1
  459. package/dist/esm/src/types/state-index.js +0 -2
  460. package/dist/esm/src/types/state-index.js.map +0 -1
  461. package/dist/esm/tests/event-emitter-event-log.spec.js +0 -499
  462. package/dist/esm/tests/event-emitter-event-log.spec.js.map +0 -1
  463. package/dist/esm/tests/handlers/messages-sync.spec.js +0 -1088
  464. package/dist/esm/tests/handlers/messages-sync.spec.js.map +0 -1
  465. package/dist/esm/tests/smt/smt-store-level.spec.js +0 -132
  466. package/dist/esm/tests/smt/smt-store-level.spec.js.map +0 -1
  467. package/dist/esm/tests/smt/sparse-merkle-tree.spec.js +0 -732
  468. package/dist/esm/tests/smt/sparse-merkle-tree.spec.js.map +0 -1
  469. package/dist/esm/tests/state-index/state-index-level.spec.js +0 -245
  470. package/dist/esm/tests/state-index/state-index-level.spec.js.map +0 -1
  471. package/dist/types/src/core/record-chain.d.ts +0 -24
  472. package/dist/types/src/core/record-chain.d.ts.map +0 -1
  473. package/dist/types/src/event-stream/event-emitter-event-log.d.ts +0 -80
  474. package/dist/types/src/event-stream/event-emitter-event-log.d.ts.map +0 -1
  475. package/dist/types/src/handlers/messages-sync.d.ts +0 -39
  476. package/dist/types/src/handlers/messages-sync.d.ts.map +0 -1
  477. package/dist/types/src/interfaces/messages-sync.d.ts +0 -20
  478. package/dist/types/src/interfaces/messages-sync.d.ts.map +0 -1
  479. package/dist/types/src/smt/smt-store-level.d.ts +0 -32
  480. package/dist/types/src/smt/smt-store-level.d.ts.map +0 -1
  481. package/dist/types/src/smt/smt-store-memory.d.ts +0 -22
  482. package/dist/types/src/smt/smt-store-memory.d.ts.map +0 -1
  483. package/dist/types/src/smt/smt-utils.d.ts +0 -58
  484. package/dist/types/src/smt/smt-utils.d.ts.map +0 -1
  485. package/dist/types/src/smt/sparse-merkle-tree.d.ts +0 -124
  486. package/dist/types/src/smt/sparse-merkle-tree.d.ts.map +0 -1
  487. package/dist/types/src/state-index/state-index-level.d.ts +0 -83
  488. package/dist/types/src/state-index/state-index-level.d.ts.map +0 -1
  489. package/dist/types/src/types/smt-types.d.ts +0 -81
  490. package/dist/types/src/types/smt-types.d.ts.map +0 -1
  491. package/dist/types/src/types/state-index.d.ts +0 -90
  492. package/dist/types/src/types/state-index.d.ts.map +0 -1
  493. package/dist/types/tests/event-emitter-event-log.spec.d.ts +0 -2
  494. package/dist/types/tests/event-emitter-event-log.spec.d.ts.map +0 -1
  495. package/dist/types/tests/handlers/messages-sync.spec.d.ts +0 -2
  496. package/dist/types/tests/handlers/messages-sync.spec.d.ts.map +0 -1
  497. package/dist/types/tests/smt/smt-store-level.spec.d.ts +0 -2
  498. package/dist/types/tests/smt/smt-store-level.spec.d.ts.map +0 -1
  499. package/dist/types/tests/smt/sparse-merkle-tree.spec.d.ts +0 -2
  500. package/dist/types/tests/smt/sparse-merkle-tree.spec.d.ts.map +0 -1
  501. package/dist/types/tests/state-index/state-index-level.spec.d.ts +0 -2
  502. package/dist/types/tests/state-index/state-index-level.spec.d.ts.map +0 -1
  503. package/src/core/record-chain.ts +0 -99
  504. package/src/event-stream/event-emitter-event-log.ts +0 -430
  505. package/src/handlers/messages-sync.ts +0 -403
  506. package/src/interfaces/messages-sync.ts +0 -69
  507. package/src/smt/smt-store-level.ts +0 -143
  508. package/src/smt/smt-store-memory.ts +0 -53
  509. package/src/smt/smt-utils.ts +0 -149
  510. package/src/smt/sparse-merkle-tree.ts +0 -698
  511. package/src/state-index/state-index-level.ts +0 -239
  512. package/src/types/smt-types.ts +0 -95
  513. 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,50 +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
- MessagesGrantAuthorization.authorizeProtocolSyncScope(scopes, syncMessage.descriptor.protocol);
103
- }
104
-
105
- private static authorizeProtocolSyncScope(
106
- scopes: MessagesPermissionScope[],
107
- protocol: string | undefined
108
- ): void {
109
- if (isRecordsPrimaryProjectionExcludedProtocol(protocol)) {
110
- throw new DwnError(
111
- DwnErrorCode.MessagesGrantAuthorizationProtocolSyncInfrastructureProtocol,
112
- `Protocol-scoped MessagesSync cannot authorize infrastructure protocol ${protocol}`
113
- );
114
- }
115
-
116
- if (!MessagesGrantAuthorization.someScopeMatches(scopes, { protocol })) {
117
- throw new DwnError(
118
- DwnErrorCode.MessagesGrantAuthorizationMismatchedProtocol,
119
- `No permission grant scope matches protocol ${protocol}`
120
- );
121
- }
88
+ MessagesGrantAuthorization.authorizeFilterScope(incomingMessage, scopes);
122
89
  }
123
90
 
124
- private static authorizeSubscribeScope(
125
- subscribeMessage: MessagesSubscribeMessage,
91
+ private static authorizeFilterScope(
92
+ messagesMessage: MessagesQueryMessage | MessagesSubscribeMessage,
126
93
  scopes: MessagesPermissionScope[]
127
94
  ): void {
128
- const { filters } = subscribeMessage.descriptor;
95
+ const { filters } = messagesMessage.descriptor;
129
96
 
130
97
  if (filters.length === 0 && !MessagesGrantAuthorization.hasUnscopedGrant(scopes)) {
131
98
  throw new DwnError(
@@ -165,7 +132,7 @@ export class MessagesGrantAuthorization {
165
132
  expectedGrantor: string,
166
133
  expectedGrantee: string,
167
134
  permissionGrants: PermissionGrant[],
168
- messageStore: MessageStore,
135
+ validationStateReader: ValidationStateReader,
169
136
  deliveryTimestamp: string,
170
137
  }): Promise<void> {
171
138
  const {
@@ -173,7 +140,7 @@ export class MessagesGrantAuthorization {
173
140
  expectedGrantor,
174
141
  expectedGrantee,
175
142
  permissionGrants,
176
- messageStore,
143
+ validationStateReader,
177
144
  deliveryTimestamp,
178
145
  } = input;
179
146
 
@@ -185,12 +152,12 @@ export class MessagesGrantAuthorization {
185
152
  },
186
153
  };
187
154
 
188
- await MessagesGrantAuthorization.authorizeSubscribeOrSync({
155
+ await MessagesGrantAuthorization.authorizeQueryOrSubscribe({
189
156
  incomingMessage: deliveryMessage,
190
157
  expectedGrantor,
191
158
  expectedGrantee,
192
159
  permissionGrants,
193
- messageStore,
160
+ validationStateReader,
194
161
  });
195
162
  }
196
163
 
@@ -199,14 +166,14 @@ export class MessagesGrantAuthorization {
199
166
  * unresolved, revoked, expired, or interface/method-mismatched grants fail the request.
200
167
  */
201
168
  private static async performBaseValidationForGrantSet(input: {
202
- incomingMessage: MessagesReadMessage | MessagesSubscribeMessage | MessagesSyncMessage,
169
+ incomingMessage: MessagesQueryMessage | MessagesReadMessage | MessagesSubscribeMessage,
203
170
  expectedGrantor: string,
204
171
  expectedGrantee: string,
205
172
  permissionGrants: PermissionGrant[],
206
- messageStore: MessageStore,
173
+ validationStateReader: ValidationStateReader,
207
174
  }): Promise<void> {
208
175
  const {
209
- incomingMessage, expectedGrantor, expectedGrantee, permissionGrants, messageStore
176
+ incomingMessage, expectedGrantor, expectedGrantee, permissionGrants, validationStateReader
210
177
  } = input;
211
178
 
212
179
  for (const permissionGrant of permissionGrants) {
@@ -215,7 +182,7 @@ export class MessagesGrantAuthorization {
215
182
  expectedGrantor,
216
183
  expectedGrantee,
217
184
  permissionGrant,
218
- messageStore
185
+ validationStateReader
219
186
  });
220
187
  }
221
188
  }
@@ -227,7 +194,7 @@ export class MessagesGrantAuthorization {
227
194
  tenant: string,
228
195
  messageToGet: GenericMessage,
229
196
  incomingScope: MessagesPermissionScope,
230
- messageStore: MessageStore,
197
+ validationStateReader: ValidationStateReader,
231
198
  ): Promise<boolean> {
232
199
  if (incomingScope.protocol === undefined) {
233
200
  return true;
@@ -238,7 +205,7 @@ export class MessagesGrantAuthorization {
238
205
  tenant,
239
206
  messageToGet as RecordsWriteMessage | RecordsDeleteMessage,
240
207
  incomingScope,
241
- messageStore
208
+ validationStateReader
242
209
  );
243
210
  }
244
211
 
@@ -256,12 +223,12 @@ export class MessagesGrantAuthorization {
256
223
  tenant: string,
257
224
  recordsMessage: RecordsWriteMessage | RecordsDeleteMessage,
258
225
  incomingScope: MessagesPermissionScope,
259
- messageStore: MessageStore,
226
+ validationStateReader: ValidationStateReader,
260
227
  ): Promise<boolean> {
261
228
  const recordsWriteMessage = await MessagesGrantAuthorization.getAssociatedRecordsWrite(
262
229
  tenant,
263
230
  recordsMessage,
264
- messageStore
231
+ validationStateReader
265
232
  );
266
233
 
267
234
  if (recordsWriteMessage.descriptor.protocol === PermissionsProtocol.uri) {
@@ -269,7 +236,7 @@ export class MessagesGrantAuthorization {
269
236
  tenant,
270
237
  recordsWriteMessage,
271
238
  incomingScope,
272
- messageStore
239
+ validationStateReader
273
240
  );
274
241
  }
275
242
 
@@ -280,7 +247,7 @@ export class MessagesGrantAuthorization {
280
247
  tenant: string,
281
248
  recordsWriteMessage: RecordsWriteMessage,
282
249
  incomingScope: MessagesPermissionScope,
283
- messageStore: MessageStore,
250
+ validationStateReader: ValidationStateReader,
284
251
  ): Promise<boolean> {
285
252
  if (MessagesGrantAuthorization.isSubtreeScope(incomingScope)) {
286
253
  return false;
@@ -288,7 +255,7 @@ export class MessagesGrantAuthorization {
288
255
 
289
256
  const permissionScope = await PermissionsProtocol.getScopeFromPermissionRecord(
290
257
  tenant,
291
- messageStore,
258
+ validationStateReader,
292
259
  recordsWriteMessage as DataEncodedRecordsWriteMessage
293
260
  );
294
261
 
@@ -309,13 +276,13 @@ export class MessagesGrantAuthorization {
309
276
  private static async getAssociatedRecordsWrite(
310
277
  tenant: string,
311
278
  recordsMessage: RecordsWriteMessage | RecordsDeleteMessage,
312
- messageStore: MessageStore,
279
+ validationStateReader: ValidationStateReader,
313
280
  ): Promise<RecordsWriteMessage> {
314
281
  if (Records.isRecordsWrite(recordsMessage)) {
315
282
  return recordsMessage;
316
283
  }
317
284
 
318
- return RecordsWrite.fetchNewestRecordsWrite(messageStore, tenant, recordsMessage.descriptor.recordId);
285
+ return validationStateReader.fetchNewestRecordsWrite(tenant, recordsMessage.descriptor.recordId);
319
286
  }
320
287
 
321
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