@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,581 +0,0 @@
1
- import { authenticate } from '../core/auth.js';
2
- import { DwnConstant } from '../core/dwn-constant.js';
3
- import { Encoder } from '../utils/encoder.js';
4
- import { hashToHex } from '../smt/smt-utils.js';
5
- import { Message } from '../core/message.js';
6
- import { messageReplyFromError } from '../core/message-reply.js';
7
- import { MessagesGrantAuthorization } from '../core/messages-grant-authorization.js';
8
- import { MessagesSync } from '../interfaces/messages-sync.js';
9
- import { Records } from '../utils/records.js';
10
- import { RecordsProjection } from '../sync/records-projection.js';
11
- import { RecordsWrite } from '../interfaces/records-write.js';
12
- import { SortDirection } from '../types/query-types.js';
13
- import { DwnError, DwnErrorCode } from '../core/dwn-error.js';
14
- import { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';
15
- /**
16
- * Maximum inline data size for diff responses — aligned with the
17
- * {@link DwnConstant.maxDataSizeAllowedToBeEncoded} threshold (30 KB).
18
- * RecordsWrite data payloads smaller than this are base64url-encoded and
19
- * included directly in the diff reply. Larger payloads must be fetched
20
- * separately via MessagesRead.
21
- */
22
- const DEFAULT_MAX_INLINE_DATA_SIZE = DwnConstant.maxDataSizeAllowedToBeEncoded;
23
- export class MessagesSyncHandler {
24
- deps;
25
- constructor(deps) {
26
- this.deps = deps;
27
- }
28
- async handle({ tenant, message }) {
29
- let messagesSync;
30
- try {
31
- messagesSync = await MessagesSync.parse(message);
32
- }
33
- catch (e) {
34
- return messageReplyFromError(e, 400);
35
- }
36
- try {
37
- await authenticate(message.authorization, this.deps.didResolver);
38
- await MessagesSyncHandler.authorizeMessagesSync(tenant, messagesSync, this.deps.messageStore);
39
- }
40
- catch (e) {
41
- return messageReplyFromError(e, 401);
42
- }
43
- const { action } = message.descriptor;
44
- const projectionScopes = MessagesSyncHandler.getProjectionScopes(message);
45
- try {
46
- switch (action) {
47
- case 'root': {
48
- return await this.handleRoot(tenant, message, projectionScopes);
49
- }
50
- case 'subtree': {
51
- return await this.handleSubtree(tenant, message, projectionScopes);
52
- }
53
- case 'leaves': {
54
- return await this.handleLeaves(tenant, message, projectionScopes);
55
- }
56
- case 'diff': {
57
- return await this.handleDiff(tenant, message);
58
- }
59
- default: {
60
- return {
61
- status: { code: 400, detail: `Unknown action: ${action}` },
62
- };
63
- }
64
- }
65
- }
66
- catch (e) {
67
- return messageReplyFromError(e, 500);
68
- }
69
- }
70
- async handleRoot(tenant, message, projectionScopes) {
71
- const root = await this.getRootHex(tenant, message.descriptor.protocol, projectionScopes);
72
- return {
73
- status: { code: 200, detail: 'OK' },
74
- root: root,
75
- };
76
- }
77
- async getRootHex(tenant, protocol, projectionScopes) {
78
- if (projectionScopes === undefined) {
79
- const rootHash = await this.getIndexedRootHash(tenant, protocol);
80
- return hashToHex(rootHash);
81
- }
82
- return this.withProjectionSnapshot(tenant, projectionScopes, snapshot => snapshot.getRootHex());
83
- }
84
- async getIndexedRootHash(tenant, protocol) {
85
- if (protocol === undefined) {
86
- return this.deps.stateIndex.getRoot(tenant);
87
- }
88
- return this.deps.stateIndex.getProtocolRoot(tenant, protocol);
89
- }
90
- async handleSubtree(tenant, message, projectionScopes) {
91
- const bitPath = MessagesSyncHandler.parseBitPrefix(message.descriptor.prefix);
92
- const hash = await this.getSubtreeHash(tenant, message.descriptor.protocol, projectionScopes, bitPath);
93
- return {
94
- status: { code: 200, detail: 'OK' },
95
- hash: hashToHex(hash),
96
- };
97
- }
98
- async handleLeaves(tenant, message, projectionScopes) {
99
- const bitPath = MessagesSyncHandler.parseBitPrefix(message.descriptor.prefix);
100
- const leaves = await this.getLeaves(tenant, message.descriptor.protocol, projectionScopes, bitPath);
101
- return {
102
- status: { code: 200, detail: 'OK' },
103
- entries: leaves,
104
- };
105
- }
106
- async getSubtreeHash(tenant, protocol, projectionScopes, bitPath) {
107
- if (projectionScopes === undefined) {
108
- return this.getIndexedSubtreeHash(tenant, protocol, bitPath);
109
- }
110
- return this.withProjectionSnapshot(tenant, projectionScopes, snapshot => snapshot.getSubtreeHash(bitPath));
111
- }
112
- async getLeaves(tenant, protocol, projectionScopes, bitPath) {
113
- if (projectionScopes === undefined) {
114
- return this.getIndexedLeaves(tenant, protocol, bitPath);
115
- }
116
- return this.withProjectionSnapshot(tenant, projectionScopes, snapshot => snapshot.getLeaves(bitPath));
117
- }
118
- async getIndexedSubtreeHash(tenant, protocol, bitPath) {
119
- return MessagesSyncHandler.getIndexedSubtreeHashFromStateIndex(this.deps.stateIndex, tenant, protocol, bitPath);
120
- }
121
- async getIndexedLeaves(tenant, protocol, bitPath) {
122
- return MessagesSyncHandler.getIndexedLeavesFromStateIndex(this.deps.stateIndex, tenant, protocol, bitPath);
123
- }
124
- /**
125
- * Handle the 'diff' action: the client sends its subtree hashes at a given
126
- * depth, and the server compares them against its own tree to compute the
127
- * set difference in a single round-trip.
128
- *
129
- * Response includes:
130
- * - `onlyRemote`: messages the server has that the client doesn't, with
131
- * inline data for small payloads.
132
- * - `onlyLocal`: bit prefixes where the client has entries the server
133
- * doesn't (client can enumerate its own leaves for these prefixes).
134
- */
135
- async handleDiff(tenant, message) {
136
- const { protocol, hashes: clientHashes, depth } = message.descriptor;
137
- const projectionScopes = MessagesSyncHandler.getProjectionScopes(message);
138
- if (!clientHashes || depth === undefined) {
139
- return {
140
- status: { code: 400, detail: 'diff action requires hashes and depth' },
141
- };
142
- }
143
- const stateIndex = this.deps.stateIndex;
144
- const projectionSnapshot = await this.createProjectionSnapshot(tenant, projectionScopes);
145
- const onlyRemoteCids = [];
146
- const onlyLocalPrefixes = [];
147
- try {
148
- // Get the default (empty subtree) hash at the given depth so we can
149
- // filter out client entries that represent empty subtrees.
150
- const defaultHashHex = await this.getDefaultHashHex(depth);
151
- // Build the set of all prefixes at the given depth that either side has.
152
- // Filter out client prefixes whose hash equals the default (empty subtree)
153
- // hash — these represent empty subtrees and should be treated the same as
154
- // omitted prefixes.
155
- const allPrefixes = new Set();
156
- for (const [pfx, hash] of Object.entries(clientHashes)) {
157
- if (hash !== defaultHashHex) {
158
- allPrefixes.add(pfx);
159
- }
160
- }
161
- // Enumerate server-side non-empty prefixes by walking the server's
162
- // tree to the given depth and collecting leaf prefixes.
163
- const serverHashes = await this.collectSubtreeHashes(tenant, protocol, projectionSnapshot, depth);
164
- for (const prefix of Object.keys(serverHashes)) {
165
- allPrefixes.add(prefix);
166
- }
167
- // Compare each prefix's hash between client and server.
168
- for (const pfx of allPrefixes) {
169
- const clientHash = clientHashes[pfx]; // undefined if client has empty subtree
170
- const serverHash = serverHashes[pfx]; // undefined if server has empty subtree
171
- if (clientHash === serverHash) {
172
- // Identical subtree — skip.
173
- continue;
174
- }
175
- if (serverHash === undefined) {
176
- // Client has entries the server doesn't.
177
- onlyLocalPrefixes.push(pfx);
178
- continue;
179
- }
180
- const bitPath = MessagesSyncHandler.parseBitPrefix(pfx);
181
- const serverLeaves = await MessagesSyncHandler.getServerLeaves(stateIndex, tenant, protocol, projectionSnapshot, bitPath);
182
- onlyRemoteCids.push(...serverLeaves);
183
- if (clientHash !== undefined) {
184
- // Both sides have entries but they differ. The client will enumerate
185
- // its own leaves for this prefix and de-duplicate server leaves.
186
- onlyLocalPrefixes.push(pfx);
187
- }
188
- }
189
- }
190
- finally {
191
- await projectionSnapshot?.close();
192
- }
193
- // Build response entries with inline message data where possible.
194
- const onlyRemote = await this.buildDiffEntries(tenant, onlyRemoteCids);
195
- const dependencies = projectionScopes === undefined
196
- ? []
197
- : await this.buildProjectedDependencyEntries(tenant, onlyRemote);
198
- return {
199
- status: { code: 200, detail: 'OK' },
200
- onlyRemote,
201
- onlyLocal: onlyLocalPrefixes,
202
- ...(dependencies.length > 0 ? { dependencies } : {}),
203
- };
204
- }
205
- /**
206
- * Walk the server's SMT to the given depth and collect all non-empty
207
- * subtree hashes as a `{ prefix: hexHash }` map.
208
- */
209
- async collectSubtreeHashes(tenant, protocol, projectionSnapshot, depth) {
210
- const stateIndex = this.deps.stateIndex;
211
- const result = {};
212
- const walk = async (prefix, currentDepth) => {
213
- const bitPath = MessagesSyncHandler.parseBitPrefix(prefix);
214
- const hash = await MessagesSyncHandler.getServerSubtreeHash(stateIndex, tenant, protocol, projectionSnapshot, bitPath);
215
- const hexHash = hashToHex(hash);
216
- const defaultHashHex = await this.getDefaultHashHex(currentDepth);
217
- if (hexHash === defaultHashHex) {
218
- // Empty subtree — don't include in the result.
219
- return;
220
- }
221
- if (currentDepth >= depth) {
222
- // Reached target depth with a non-empty subtree.
223
- result[prefix] = hexHash;
224
- return;
225
- }
226
- // Recurse into children.
227
- await Promise.all([
228
- walk(prefix + '0', currentDepth + 1),
229
- walk(prefix + '1', currentDepth + 1),
230
- ]);
231
- };
232
- await walk('', 0);
233
- return result;
234
- }
235
- async createProjectionSnapshot(tenant, projectionScopes) {
236
- if (projectionScopes === undefined) {
237
- return undefined;
238
- }
239
- return RecordsProjection.createSnapshot({
240
- tenant,
241
- messageStore: this.deps.messageStore,
242
- scopes: projectionScopes,
243
- });
244
- }
245
- static async getServerLeaves(stateIndex, tenant, protocol, projectionSnapshot, bitPath) {
246
- if (projectionSnapshot === undefined) {
247
- return MessagesSyncHandler.getIndexedLeavesFromStateIndex(stateIndex, tenant, protocol, bitPath);
248
- }
249
- return projectionSnapshot.getLeaves(bitPath);
250
- }
251
- static async getServerSubtreeHash(stateIndex, tenant, protocol, projectionSnapshot, bitPath) {
252
- if (projectionSnapshot === undefined) {
253
- return MessagesSyncHandler.getIndexedSubtreeHashFromStateIndex(stateIndex, tenant, protocol, bitPath);
254
- }
255
- return projectionSnapshot.getSubtreeHash(bitPath);
256
- }
257
- static async getIndexedLeavesFromStateIndex(stateIndex, tenant, protocol, bitPath) {
258
- if (protocol === undefined) {
259
- return stateIndex.getLeaves(tenant, bitPath);
260
- }
261
- return stateIndex.getProtocolLeaves(tenant, protocol, bitPath);
262
- }
263
- static async getIndexedSubtreeHashFromStateIndex(stateIndex, tenant, protocol, bitPath) {
264
- if (protocol === undefined) {
265
- return stateIndex.getSubtreeHash(tenant, bitPath);
266
- }
267
- return stateIndex.getProtocolSubtreeHash(tenant, protocol, bitPath);
268
- }
269
- /**
270
- * Get the hex-encoded default hash for a given depth. Lazily cached.
271
- */
272
- _defaultHashHexCache;
273
- async getDefaultHashHex(depth) {
274
- if (this._defaultHashHexCache === undefined) {
275
- const { initDefaultHashes } = await import('../smt/smt-utils.js');
276
- const defaults = await initDefaultHashes();
277
- this._defaultHashHexCache = new Map();
278
- for (let d = 0; d <= 256; d++) {
279
- this._defaultHashHexCache.set(d, hashToHex(defaults[d]));
280
- }
281
- }
282
- return this._defaultHashHexCache.get(depth) ?? '';
283
- }
284
- /**
285
- * Build diff response entries for the given messageCids.
286
- * Reads each message from the MessageStore and, for small RecordsWrite
287
- * payloads, inlines the data as base64url.
288
- */
289
- async buildDiffEntries(tenant, messageCids) {
290
- const entries = [];
291
- for (const messageCid of messageCids) {
292
- const { message, encodedData: inlineData, data } = await this.readMessageByCid(tenant, messageCid);
293
- if (!message) {
294
- // Message was deleted between diff computation and read — skip.
295
- continue;
296
- }
297
- const entry = { messageCid, message };
298
- // Use inline data from the MessageStore if available (small payloads).
299
- if (inlineData) {
300
- entry.encodedData = inlineData;
301
- }
302
- else if (data) {
303
- // Data is in the DataStore — inline it if small enough.
304
- const bytes = await MessagesSyncHandler.streamToBytes(data);
305
- if (bytes.byteLength <= DEFAULT_MAX_INLINE_DATA_SIZE) {
306
- entry.encodedData = Encoder.bytesToBase64Url(bytes);
307
- }
308
- // Large payloads are NOT inlined — client fetches via MessagesRead.
309
- }
310
- entries.push(entry);
311
- }
312
- return entries;
313
- }
314
- async buildProjectedDependencyEntries(tenant, primaryEntries) {
315
- const dependenciesByCid = new Map();
316
- const configsByProtocol = new Map();
317
- for (const primaryEntry of primaryEntries) {
318
- const protocolMetadata = MessagesSyncHandler.recordsWriteProtocolMetadata(primaryEntry.message);
319
- if (protocolMetadata !== undefined) {
320
- await this.addProtocolConfigClosureDependencies(tenant, protocolMetadata.protocol, protocolMetadata.messageTimestamp, primaryEntry.messageCid, configsByProtocol, dependenciesByCid);
321
- continue;
322
- }
323
- const initialWrite = await this.readRecordsDeleteInitialWrite(tenant, primaryEntry.message);
324
- if (initialWrite === undefined) {
325
- continue;
326
- }
327
- await MessagesSyncHandler.addRecordsInitialWriteDependency(primaryEntry.messageCid, initialWrite, dependenciesByCid);
328
- const initialWriteMetadata = MessagesSyncHandler.recordsWriteProtocolMetadata(initialWrite);
329
- if (initialWriteMetadata === undefined) {
330
- continue;
331
- }
332
- await this.addProtocolConfigClosureDependencies(tenant, initialWriteMetadata.protocol, initialWriteMetadata.messageTimestamp, primaryEntry.messageCid, configsByProtocol, dependenciesByCid);
333
- }
334
- return [...dependenciesByCid.values()];
335
- }
336
- async readRecordsDeleteInitialWrite(tenant, message) {
337
- const recordId = MessagesSyncHandler.recordsDeleteRecordId(message);
338
- if (recordId === undefined) {
339
- return undefined;
340
- }
341
- const { messages } = await this.deps.messageStore.query(tenant, [{
342
- interface: DwnInterfaceName.Records,
343
- method: DwnMethodName.Write,
344
- recordId,
345
- }]);
346
- const initialWrite = await RecordsWrite.getInitialWrite(messages);
347
- return initialWrite === undefined ? undefined : MessagesSyncHandler.toWireMessage(initialWrite);
348
- }
349
- static async addRecordsInitialWriteDependency(rootMessageCid, dependency, dependenciesByCid) {
350
- const dependencyCid = await Message.getCid(dependency);
351
- if (dependenciesByCid.has(dependencyCid)) {
352
- return;
353
- }
354
- dependenciesByCid.set(dependencyCid, {
355
- dependencyClass: 'recordsInitialWrite',
356
- messageCid: dependencyCid,
357
- message: dependency,
358
- rootMessageCid,
359
- });
360
- }
361
- async addProtocolConfigClosureDependencies(tenant, rootProtocol, rootMessageTimestamp, rootMessageCid, configsByProtocol, dependenciesByCid) {
362
- // Dependency hints are not part of the projected root; they are advisory
363
- // bootstrap data for the receiver. Bound each closure to the primary
364
- // RecordsWrite timestamp because protocol authorization uses the definition
365
- // active when that record was created, not whatever config is newest today.
366
- const visitedProtocols = new Set();
367
- const pendingProtocols = [rootProtocol];
368
- for (let protocol = MessagesSyncHandler.takeNextUnvisitedProtocol(pendingProtocols, visitedProtocols); protocol !== undefined; protocol = MessagesSyncHandler.takeNextUnvisitedProtocol(pendingProtocols, visitedProtocols)) {
369
- const configs = await this.getCachedGoverningProtocolsConfigure(tenant, protocol, rootMessageTimestamp, configsByProtocol);
370
- await MessagesSyncHandler.addProtocolConfigDependencies({
371
- configs,
372
- rootMessageCid,
373
- visitedProtocols,
374
- pendingProtocols,
375
- dependenciesByCid,
376
- });
377
- }
378
- }
379
- async getCachedGoverningProtocolsConfigure(tenant, protocol, messageTimestamp, configsByProtocol) {
380
- const configCacheKey = JSON.stringify([protocol, messageTimestamp]);
381
- const cachedConfigs = configsByProtocol.get(configCacheKey);
382
- if (cachedConfigs !== undefined) {
383
- return cachedConfigs;
384
- }
385
- const configs = await this.readGoverningProtocolsConfigure(tenant, protocol, messageTimestamp);
386
- configsByProtocol.set(configCacheKey, configs);
387
- return configs;
388
- }
389
- static async addProtocolConfigDependencies({ configs, rootMessageCid, visitedProtocols, pendingProtocols, dependenciesByCid, }) {
390
- for (const dependency of configs) {
391
- await MessagesSyncHandler.addProtocolConfigDependency(rootMessageCid, dependency, dependenciesByCid);
392
- MessagesSyncHandler.queueUnvisitedProtocols(MessagesSyncHandler.protocolsConfigureUses(dependency), visitedProtocols, pendingProtocols);
393
- }
394
- }
395
- static async addProtocolConfigDependency(rootMessageCid, dependency, dependenciesByCid) {
396
- const dependencyCid = await Message.getCid(dependency);
397
- if (dependenciesByCid.has(dependencyCid)) {
398
- return;
399
- }
400
- dependenciesByCid.set(dependencyCid, {
401
- dependencyClass: 'protocolsConfigure',
402
- messageCid: dependencyCid,
403
- message: dependency,
404
- rootMessageCid,
405
- });
406
- }
407
- static takeNextUnvisitedProtocol(pendingProtocols, visitedProtocols) {
408
- while (pendingProtocols.length > 0) {
409
- const protocol = pendingProtocols.shift();
410
- if (visitedProtocols.has(protocol)) {
411
- continue;
412
- }
413
- visitedProtocols.add(protocol);
414
- return protocol;
415
- }
416
- return undefined;
417
- }
418
- static queueUnvisitedProtocols(protocols, visitedProtocols, pendingProtocols) {
419
- for (const protocol of protocols) {
420
- if (!visitedProtocols.has(protocol)) {
421
- pendingProtocols.push(protocol);
422
- }
423
- }
424
- }
425
- static protocolsConfigureUses(message) {
426
- if (message.descriptor.interface !== DwnInterfaceName.Protocols ||
427
- message.descriptor.method !== DwnMethodName.Configure) {
428
- return [];
429
- }
430
- const uses = message.descriptor.definition?.uses;
431
- return uses === undefined
432
- ? []
433
- : Object.values(uses).filter((protocol) => typeof protocol === 'string');
434
- }
435
- async readGoverningProtocolsConfigure(tenant, protocol, messageTimestamp) {
436
- const { messages } = await this.deps.messageStore.query(tenant, [{
437
- interface: DwnInterfaceName.Protocols,
438
- method: DwnMethodName.Configure,
439
- protocol,
440
- messageTimestamp: { lte: messageTimestamp },
441
- }], { messageTimestamp: SortDirection.Descending });
442
- const governingMessage = await Message.getNewestMessage(messages);
443
- return governingMessage === undefined ? [] : [governingMessage];
444
- }
445
- static recordsWriteProtocolMetadata(message) {
446
- if (message?.descriptor.interface !== DwnInterfaceName.Records ||
447
- message.descriptor.method !== DwnMethodName.Write) {
448
- return undefined;
449
- }
450
- const protocol = message.descriptor.protocol;
451
- return typeof protocol === 'string'
452
- ? { protocol, messageTimestamp: message.descriptor.messageTimestamp }
453
- : undefined;
454
- }
455
- static recordsDeleteRecordId(message) {
456
- if (message?.descriptor.interface !== DwnInterfaceName.Records ||
457
- message.descriptor.method !== DwnMethodName.Delete) {
458
- return undefined;
459
- }
460
- const recordId = message.descriptor.recordId;
461
- return typeof recordId === 'string' ? recordId : undefined;
462
- }
463
- static toWireMessage(message) {
464
- const { encodedData: _encodedData, initialWrite: _initialWrite, ...wireMessage } = message;
465
- return wireMessage;
466
- }
467
- /**
468
- * Read a message and its data from the MessageStore + DataStore by CID.
469
- */
470
- async readMessageByCid(tenant, messageCid) {
471
- const storedMessage = await this.deps.messageStore.get(tenant, messageCid);
472
- if (!storedMessage) {
473
- return {};
474
- }
475
- // Extract and strip `encodedData` from the stored message.
476
- // `encodedData` is an internal storage optimization for small payloads
477
- // that are stored inline in the MessageStore rather than in the DataStore.
478
- // It must not be included in the wire-format message (the recipient's
479
- // DWN would reject it as an unexpected top-level property).
480
- let inlineEncodedData;
481
- if (MessagesSyncHandler.hasEncodedData(storedMessage)) {
482
- inlineEncodedData = storedMessage.encodedData;
483
- delete storedMessage.encodedData;
484
- }
485
- let data;
486
- // Check if this is a RecordsWrite with data that is small enough to inline.
487
- if (inlineEncodedData === undefined && Records.isRecordsWrite(storedMessage)) {
488
- const { dataCid, dataSize } = storedMessage.descriptor;
489
- if (dataSize <= DEFAULT_MAX_INLINE_DATA_SIZE) {
490
- // Some stores may have small payload bytes in DataStore instead of encodedData.
491
- if (this.deps.dataStore) {
492
- // DataStore uses recordId, not messageCid. For RecordsWrite,
493
- // recordId is a top-level message property.
494
- const dataResult = await this.deps.dataStore.get(tenant, storedMessage.recordId, dataCid);
495
- if (dataResult?.dataStream) {
496
- data = dataResult.dataStream;
497
- }
498
- }
499
- }
500
- }
501
- return { message: storedMessage, encodedData: inlineEncodedData, data };
502
- }
503
- static hasEncodedData(message) {
504
- return 'encodedData' in message && typeof message.encodedData === 'string';
505
- }
506
- static getProjectionScopes(message) {
507
- const { projectionScopes } = message.descriptor;
508
- if (projectionScopes === undefined) {
509
- return undefined;
510
- }
511
- return projectionScopes;
512
- }
513
- async withProjectionSnapshot(tenant, scopes, fn) {
514
- const snapshot = await RecordsProjection.createSnapshot({
515
- tenant: tenant,
516
- messageStore: this.deps.messageStore,
517
- scopes: scopes,
518
- });
519
- try {
520
- return await fn(snapshot);
521
- }
522
- finally {
523
- await snapshot.close();
524
- }
525
- }
526
- /**
527
- * Read a ReadableStream to completion and return the bytes.
528
- */
529
- static async streamToBytes(stream) {
530
- const reader = stream.getReader();
531
- const chunks = [];
532
- let totalSize = 0;
533
- for (;;) {
534
- const { done, value } = await reader.read();
535
- if (done) {
536
- break;
537
- }
538
- chunks.push(value);
539
- totalSize += value.byteLength;
540
- }
541
- const result = new Uint8Array(totalSize);
542
- let offset = 0;
543
- for (const chunk of chunks) {
544
- result.set(chunk, offset);
545
- offset += chunk.byteLength;
546
- }
547
- return result;
548
- }
549
- /**
550
- * Parse a bit prefix string (e.g. "0110101") into a boolean array.
551
- */
552
- static parseBitPrefix(prefix) {
553
- if (!/^[01]*$/.test(prefix)) {
554
- throw new DwnError(DwnErrorCode.MessagesSyncInvalidPrefix, `Invalid prefix: must contain only '0' and '1' characters, got: ${prefix}`);
555
- }
556
- if (prefix.length > 256) {
557
- throw new DwnError(DwnErrorCode.MessagesSyncInvalidPrefix, `Invalid prefix: length must be <= 256, got: ${prefix.length}`);
558
- }
559
- return Array.from(prefix, (ch) => ch === '1');
560
- }
561
- static async authorizeMessagesSync(tenant, messagesSync, messageStore) {
562
- if (messagesSync.author === tenant) {
563
- return;
564
- }
565
- const permissionGrantIds = Message.getPermissionGrantIds(messagesSync.signaturePayload);
566
- if (messagesSync.author !== undefined && permissionGrantIds.length > 0) {
567
- const permissionGrants = await MessagesGrantAuthorization.fetchPermissionGrants(tenant, messageStore, permissionGrantIds);
568
- await MessagesGrantAuthorization.authorizeSubscribeOrSync({
569
- incomingMessage: messagesSync.message,
570
- expectedGrantor: tenant,
571
- expectedGrantee: messagesSync.author,
572
- permissionGrants,
573
- messageStore
574
- });
575
- }
576
- else {
577
- throw new DwnError(DwnErrorCode.MessagesSyncAuthorizationFailed, 'message failed authorization');
578
- }
579
- }
580
- }
581
- //# sourceMappingURL=messages-sync.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"messages-sync.js","sourceRoot":"","sources":["../../../../src/handlers/messages-sync.ts"],"names":[],"mappings":"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"}