@enbox/dwn-sdk-js 0.0.6 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (527) hide show
  1. package/dist/browser.mjs +8 -8
  2. package/dist/browser.mjs.map +4 -4
  3. package/dist/esm/generated/precompiled-validators.js +762 -911
  4. package/dist/esm/generated/precompiled-validators.js.map +1 -1
  5. package/dist/esm/src/core/abstract-message.js +4 -0
  6. package/dist/esm/src/core/abstract-message.js.map +1 -1
  7. package/dist/esm/src/core/auth.js +22 -33
  8. package/dist/esm/src/core/auth.js.map +1 -1
  9. package/dist/esm/src/core/constants.js +11 -0
  10. package/dist/esm/src/core/constants.js.map +1 -0
  11. package/dist/esm/src/core/core-protocol.js +44 -0
  12. package/dist/esm/src/core/core-protocol.js.map +1 -0
  13. package/dist/esm/src/core/dwn-constant.js +7 -7
  14. package/dist/esm/src/core/dwn-constant.js.map +1 -1
  15. package/dist/esm/src/core/dwn-error.js +10 -12
  16. package/dist/esm/src/core/dwn-error.js.map +1 -1
  17. package/dist/esm/src/core/grant-authorization.js +50 -52
  18. package/dist/esm/src/core/grant-authorization.js.map +1 -1
  19. package/dist/esm/src/core/message.js +85 -116
  20. package/dist/esm/src/core/message.js.map +1 -1
  21. package/dist/esm/src/core/messages-grant-authorization.js +63 -78
  22. package/dist/esm/src/core/messages-grant-authorization.js.map +1 -1
  23. package/dist/esm/src/core/protocol-authorization-action.js +266 -0
  24. package/dist/esm/src/core/protocol-authorization-action.js.map +1 -0
  25. package/dist/esm/src/core/protocol-authorization-validation.js +321 -0
  26. package/dist/esm/src/core/protocol-authorization-validation.js.map +1 -0
  27. package/dist/esm/src/core/protocol-authorization.js +144 -741
  28. package/dist/esm/src/core/protocol-authorization.js.map +1 -1
  29. package/dist/esm/src/core/protocols-grant-authorization.js +24 -38
  30. package/dist/esm/src/core/protocols-grant-authorization.js.map +1 -1
  31. package/dist/esm/src/core/record-chain.js +64 -0
  32. package/dist/esm/src/core/record-chain.js.map +1 -0
  33. package/dist/esm/src/core/records-grant-authorization.js +53 -72
  34. package/dist/esm/src/core/records-grant-authorization.js.map +1 -1
  35. package/dist/esm/src/core/resumable-task-manager.js +50 -65
  36. package/dist/esm/src/core/resumable-task-manager.js.map +1 -1
  37. package/dist/esm/src/core/tenant-gate.js +2 -13
  38. package/dist/esm/src/core/tenant-gate.js.map +1 -1
  39. package/dist/esm/src/dwn.js +108 -101
  40. package/dist/esm/src/dwn.js.map +1 -1
  41. package/dist/esm/src/event-stream/event-emitter-event-log.js +204 -0
  42. package/dist/esm/src/event-stream/event-emitter-event-log.js.map +1 -0
  43. package/dist/esm/src/handlers/messages-read.js +67 -81
  44. package/dist/esm/src/handlers/messages-read.js.map +1 -1
  45. package/dist/esm/src/handlers/messages-subscribe.js +51 -63
  46. package/dist/esm/src/handlers/messages-subscribe.js.map +1 -1
  47. package/dist/esm/src/handlers/messages-sync.js +75 -89
  48. package/dist/esm/src/handlers/messages-sync.js.map +1 -1
  49. package/dist/esm/src/handlers/protocols-configure.js +153 -163
  50. package/dist/esm/src/handlers/protocols-configure.js.map +1 -1
  51. package/dist/esm/src/handlers/protocols-query.js +52 -55
  52. package/dist/esm/src/handlers/protocols-query.js.map +1 -1
  53. package/dist/esm/src/handlers/records-count.js +97 -85
  54. package/dist/esm/src/handlers/records-count.js.map +1 -1
  55. package/dist/esm/src/handlers/records-delete.js +75 -93
  56. package/dist/esm/src/handlers/records-delete.js.map +1 -1
  57. package/dist/esm/src/handlers/records-query.js +116 -105
  58. package/dist/esm/src/handlers/records-query.js.map +1 -1
  59. package/dist/esm/src/handlers/records-read.js +130 -132
  60. package/dist/esm/src/handlers/records-read.js.map +1 -1
  61. package/dist/esm/src/handlers/records-subscribe.js +164 -104
  62. package/dist/esm/src/handlers/records-subscribe.js.map +1 -1
  63. package/dist/esm/src/handlers/records-write.js +213 -280
  64. package/dist/esm/src/handlers/records-write.js.map +1 -1
  65. package/dist/esm/src/index.js +5 -2
  66. package/dist/esm/src/index.js.map +1 -1
  67. package/dist/esm/src/interfaces/messages-read.js +24 -32
  68. package/dist/esm/src/interfaces/messages-read.js.map +1 -1
  69. package/dist/esm/src/interfaces/messages-subscribe.js +28 -41
  70. package/dist/esm/src/interfaces/messages-subscribe.js.map +1 -1
  71. package/dist/esm/src/interfaces/messages-sync.js +26 -40
  72. package/dist/esm/src/interfaces/messages-sync.js.map +1 -1
  73. package/dist/esm/src/interfaces/protocols-configure.js +87 -65
  74. package/dist/esm/src/interfaces/protocols-configure.js.map +1 -1
  75. package/dist/esm/src/interfaces/protocols-query.js +55 -68
  76. package/dist/esm/src/interfaces/protocols-query.js.map +1 -1
  77. package/dist/esm/src/interfaces/records-count.js +50 -66
  78. package/dist/esm/src/interfaces/records-count.js.map +1 -1
  79. package/dist/esm/src/interfaces/records-delete.js +45 -55
  80. package/dist/esm/src/interfaces/records-delete.js.map +1 -1
  81. package/dist/esm/src/interfaces/records-query.js +60 -76
  82. package/dist/esm/src/interfaces/records-query.js.map +1 -1
  83. package/dist/esm/src/interfaces/records-read.js +51 -67
  84. package/dist/esm/src/interfaces/records-read.js.map +1 -1
  85. package/dist/esm/src/interfaces/records-subscribe.js +53 -68
  86. package/dist/esm/src/interfaces/records-subscribe.js.map +1 -1
  87. package/dist/esm/src/interfaces/records-write-query.js +102 -0
  88. package/dist/esm/src/interfaces/records-write-query.js.map +1 -0
  89. package/dist/esm/src/interfaces/records-write-signing.js +81 -0
  90. package/dist/esm/src/interfaces/records-write-signing.js.map +1 -0
  91. package/dist/esm/src/interfaces/records-write.js +396 -610
  92. package/dist/esm/src/interfaces/records-write.js.map +1 -1
  93. package/dist/esm/src/jose/algorithms/signing/ed25519.js +10 -19
  94. package/dist/esm/src/jose/algorithms/signing/ed25519.js.map +1 -1
  95. package/dist/esm/src/jose/jws/general/builder.js +23 -35
  96. package/dist/esm/src/jose/jws/general/builder.js.map +1 -1
  97. package/dist/esm/src/jose/jws/general/verifier.js +56 -69
  98. package/dist/esm/src/jose/jws/general/verifier.js.map +1 -1
  99. package/dist/esm/src/protocols/permission-grant.js +43 -14
  100. package/dist/esm/src/protocols/permission-grant.js.map +1 -1
  101. package/dist/esm/src/protocols/permission-request.js +28 -14
  102. package/dist/esm/src/protocols/permission-request.js.map +1 -1
  103. package/dist/esm/src/protocols/permissions.js +325 -227
  104. package/dist/esm/src/protocols/permissions.js.map +1 -1
  105. package/dist/esm/src/smt/smt-store-level.js +42 -64
  106. package/dist/esm/src/smt/smt-store-level.js.map +1 -1
  107. package/dist/esm/src/smt/smt-store-memory.js +19 -45
  108. package/dist/esm/src/smt/smt-store-memory.js.map +1 -1
  109. package/dist/esm/src/smt/smt-utils.js +28 -45
  110. package/dist/esm/src/smt/smt-utils.js.map +1 -1
  111. package/dist/esm/src/smt/sparse-merkle-tree.js +426 -471
  112. package/dist/esm/src/smt/sparse-merkle-tree.js.map +1 -1
  113. package/dist/esm/src/state-index/state-index-level.js +113 -150
  114. package/dist/esm/src/state-index/state-index-level.js.map +1 -1
  115. package/dist/esm/src/store/blockstore-level.js +54 -156
  116. package/dist/esm/src/store/blockstore-level.js.map +1 -1
  117. package/dist/esm/src/store/blockstore-mock.js +48 -153
  118. package/dist/esm/src/store/blockstore-mock.js.map +1 -1
  119. package/dist/esm/src/store/data-store-level.js +137 -100
  120. package/dist/esm/src/store/data-store-level.js.map +1 -1
  121. package/dist/esm/src/store/index-level-compound.js +246 -0
  122. package/dist/esm/src/store/index-level-compound.js.map +1 -0
  123. package/dist/esm/src/store/index-level.js +307 -715
  124. package/dist/esm/src/store/index-level.js.map +1 -1
  125. package/dist/esm/src/store/level-wrapper.js +143 -244
  126. package/dist/esm/src/store/level-wrapper.js.map +1 -1
  127. package/dist/esm/src/store/message-store-level.js +71 -94
  128. package/dist/esm/src/store/message-store-level.js.map +1 -1
  129. package/dist/esm/src/store/resumable-task-store-level.js +62 -101
  130. package/dist/esm/src/store/resumable-task-store-level.js.map +1 -1
  131. package/dist/esm/src/store/storage-controller.js +131 -146
  132. package/dist/esm/src/store/storage-controller.js.map +1 -1
  133. package/dist/esm/src/types/permission-types.js.map +1 -1
  134. package/dist/esm/src/types/protocols-types.js +10 -0
  135. package/dist/esm/src/types/protocols-types.js.map +1 -1
  136. package/dist/esm/src/types/records-types.js.map +1 -1
  137. package/dist/esm/src/utils/abort.js +8 -19
  138. package/dist/esm/src/utils/abort.js.map +1 -1
  139. package/dist/esm/src/utils/array.js +15 -49
  140. package/dist/esm/src/utils/array.js.map +1 -1
  141. package/dist/esm/src/utils/cid.js +29 -77
  142. package/dist/esm/src/utils/cid.js.map +1 -1
  143. package/dist/esm/src/utils/data-stream.js +37 -65
  144. package/dist/esm/src/utils/data-stream.js.map +1 -1
  145. package/dist/esm/src/utils/encryption.js +136 -162
  146. package/dist/esm/src/utils/encryption.js.map +1 -1
  147. package/dist/esm/src/utils/filter.js +1 -12
  148. package/dist/esm/src/utils/filter.js.map +1 -1
  149. package/dist/esm/src/utils/hd-key.js +45 -71
  150. package/dist/esm/src/utils/hd-key.js.map +1 -1
  151. package/dist/esm/src/utils/jws.js +9 -20
  152. package/dist/esm/src/utils/jws.js.map +1 -1
  153. package/dist/esm/src/utils/memory-cache.js +12 -23
  154. package/dist/esm/src/utils/memory-cache.js.map +1 -1
  155. package/dist/esm/src/utils/messages.js +21 -33
  156. package/dist/esm/src/utils/messages.js.map +1 -1
  157. package/dist/esm/src/utils/private-key-signer.js +9 -17
  158. package/dist/esm/src/utils/private-key-signer.js.map +1 -1
  159. package/dist/esm/src/utils/protocols.js +62 -70
  160. package/dist/esm/src/utils/protocols.js.map +1 -1
  161. package/dist/esm/src/utils/records.js +103 -166
  162. package/dist/esm/src/utils/records.js.map +1 -1
  163. package/dist/esm/src/utils/secp256k1.js +60 -96
  164. package/dist/esm/src/utils/secp256k1.js.map +1 -1
  165. package/dist/esm/src/utils/secp256r1.js +54 -71
  166. package/dist/esm/src/utils/secp256r1.js.map +1 -1
  167. package/dist/esm/src/utils/time.js +5 -18
  168. package/dist/esm/src/utils/time.js.map +1 -1
  169. package/dist/esm/src/utils/url.js +3 -3
  170. package/dist/esm/src/utils/url.js.map +1 -1
  171. package/dist/esm/tests/core/auth.spec.js +3 -12
  172. package/dist/esm/tests/core/auth.spec.js.map +1 -1
  173. package/dist/esm/tests/core/message.spec.js +50 -59
  174. package/dist/esm/tests/core/message.spec.js.map +1 -1
  175. package/dist/esm/tests/core/protocol-authorization.spec.js +10 -18
  176. package/dist/esm/tests/core/protocol-authorization.spec.js.map +1 -1
  177. package/dist/esm/tests/dwn.spec.js +65 -89
  178. package/dist/esm/tests/dwn.spec.js.map +1 -1
  179. package/dist/esm/tests/event-emitter-event-log.spec.js +305 -0
  180. package/dist/esm/tests/event-emitter-event-log.spec.js.map +1 -0
  181. package/dist/esm/tests/features/author-delegated-grant.spec.js +337 -347
  182. package/dist/esm/tests/features/author-delegated-grant.spec.js.map +1 -1
  183. package/dist/esm/tests/features/owner-delegated-grant.spec.js +160 -172
  184. package/dist/esm/tests/features/owner-delegated-grant.spec.js.map +1 -1
  185. package/dist/esm/tests/features/owner-signature.spec.js +78 -82
  186. package/dist/esm/tests/features/owner-signature.spec.js.map +1 -1
  187. package/dist/esm/tests/features/permissions.spec.js +449 -184
  188. package/dist/esm/tests/features/permissions.spec.js.map +1 -1
  189. package/dist/esm/tests/features/protocol-composition.spec.js +981 -360
  190. package/dist/esm/tests/features/protocol-composition.spec.js.map +1 -1
  191. package/dist/esm/tests/features/protocol-create-action.spec.js +45 -54
  192. package/dist/esm/tests/features/protocol-create-action.spec.js.map +1 -1
  193. package/dist/esm/tests/features/protocol-delete-action.spec.js +99 -108
  194. package/dist/esm/tests/features/protocol-delete-action.spec.js.map +1 -1
  195. package/dist/esm/tests/features/protocol-update-action.spec.js +108 -117
  196. package/dist/esm/tests/features/protocol-update-action.spec.js.map +1 -1
  197. package/dist/esm/tests/features/records-immutable.spec.js +315 -0
  198. package/dist/esm/tests/features/records-immutable.spec.js.map +1 -0
  199. package/dist/esm/tests/features/records-prune.spec.js +178 -194
  200. package/dist/esm/tests/features/records-prune.spec.js.map +1 -1
  201. package/dist/esm/tests/features/records-record-limit.spec.js +542 -0
  202. package/dist/esm/tests/features/records-record-limit.spec.js.map +1 -0
  203. package/dist/esm/tests/features/records-tags.spec.js +456 -463
  204. package/dist/esm/tests/features/records-tags.spec.js.map +1 -1
  205. package/dist/esm/tests/features/resumable-tasks.spec.js +88 -98
  206. package/dist/esm/tests/features/resumable-tasks.spec.js.map +1 -1
  207. package/dist/esm/tests/handlers/messages-read.spec.js +215 -210
  208. package/dist/esm/tests/handlers/messages-read.spec.js.map +1 -1
  209. package/dist/esm/tests/handlers/messages-subscribe.spec.js +309 -171
  210. package/dist/esm/tests/handlers/messages-subscribe.spec.js.map +1 -1
  211. package/dist/esm/tests/handlers/messages-sync.spec.js +272 -199
  212. package/dist/esm/tests/handlers/messages-sync.spec.js.map +1 -1
  213. package/dist/esm/tests/handlers/protocols-configure.spec.js +247 -241
  214. package/dist/esm/tests/handlers/protocols-configure.spec.js.map +1 -1
  215. package/dist/esm/tests/handlers/protocols-query.spec.js +159 -172
  216. package/dist/esm/tests/handlers/protocols-query.spec.js.map +1 -1
  217. package/dist/esm/tests/handlers/records-count.spec.js +101 -105
  218. package/dist/esm/tests/handlers/records-count.spec.js.map +1 -1
  219. package/dist/esm/tests/handlers/records-delete.spec.js +266 -279
  220. package/dist/esm/tests/handlers/records-delete.spec.js.map +1 -1
  221. package/dist/esm/tests/handlers/records-query.spec.js +984 -996
  222. package/dist/esm/tests/handlers/records-query.spec.js.map +1 -1
  223. package/dist/esm/tests/handlers/records-read.spec.js +542 -671
  224. package/dist/esm/tests/handlers/records-read.spec.js.map +1 -1
  225. package/dist/esm/tests/handlers/records-subscribe.spec.js +433 -302
  226. package/dist/esm/tests/handlers/records-subscribe.spec.js.map +1 -1
  227. package/dist/esm/tests/handlers/records-write.spec.js +1216 -1140
  228. package/dist/esm/tests/handlers/records-write.spec.js.map +1 -1
  229. package/dist/esm/tests/interfaces/messages-get.spec.js +39 -48
  230. package/dist/esm/tests/interfaces/messages-get.spec.js.map +1 -1
  231. package/dist/esm/tests/interfaces/messages-subscribe.spec.js +4 -13
  232. package/dist/esm/tests/interfaces/messages-subscribe.spec.js.map +1 -1
  233. package/dist/esm/tests/interfaces/protocols-configure.spec.js +212 -88
  234. package/dist/esm/tests/interfaces/protocols-configure.spec.js.map +1 -1
  235. package/dist/esm/tests/interfaces/protocols-query.spec.js +8 -17
  236. package/dist/esm/tests/interfaces/protocols-query.spec.js.map +1 -1
  237. package/dist/esm/tests/interfaces/records-delete.spec.js +8 -17
  238. package/dist/esm/tests/interfaces/records-delete.spec.js.map +1 -1
  239. package/dist/esm/tests/interfaces/records-query.spec.js +20 -29
  240. package/dist/esm/tests/interfaces/records-query.spec.js.map +1 -1
  241. package/dist/esm/tests/interfaces/records-read.spec.js +42 -51
  242. package/dist/esm/tests/interfaces/records-read.spec.js.map +1 -1
  243. package/dist/esm/tests/interfaces/records-subscribe.spec.js +16 -25
  244. package/dist/esm/tests/interfaces/records-subscribe.spec.js.map +1 -1
  245. package/dist/esm/tests/interfaces/records-write.spec.js +190 -219
  246. package/dist/esm/tests/interfaces/records-write.spec.js.map +1 -1
  247. package/dist/esm/tests/jose/jws/general.spec.js +36 -45
  248. package/dist/esm/tests/jose/jws/general.spec.js.map +1 -1
  249. package/dist/esm/tests/protocols/permission-grant.spec.js +44 -50
  250. package/dist/esm/tests/protocols/permission-grant.spec.js.map +1 -1
  251. package/dist/esm/tests/protocols/permission-request.spec.js +23 -32
  252. package/dist/esm/tests/protocols/permission-request.spec.js.map +1 -1
  253. package/dist/esm/tests/protocols/permissions.spec.js +49 -55
  254. package/dist/esm/tests/protocols/permissions.spec.js.map +1 -1
  255. package/dist/esm/tests/scenarios/aggregator.spec.js +127 -138
  256. package/dist/esm/tests/scenarios/aggregator.spec.js.map +1 -1
  257. package/dist/esm/tests/scenarios/deleted-record.spec.js +372 -36
  258. package/dist/esm/tests/scenarios/deleted-record.spec.js.map +1 -1
  259. package/dist/esm/tests/scenarios/end-to-end-tests.spec.js +55 -64
  260. package/dist/esm/tests/scenarios/end-to-end-tests.spec.js.map +1 -1
  261. package/dist/esm/tests/scenarios/nested-roles.spec.js +66 -76
  262. package/dist/esm/tests/scenarios/nested-roles.spec.js.map +1 -1
  263. package/dist/esm/tests/scenarios/subscriptions.spec.js +451 -354
  264. package/dist/esm/tests/scenarios/subscriptions.spec.js.map +1 -1
  265. package/dist/esm/tests/smt/smt-store-level.spec.js +76 -87
  266. package/dist/esm/tests/smt/smt-store-level.spec.js.map +1 -1
  267. package/dist/esm/tests/smt/sparse-merkle-tree.spec.js +344 -353
  268. package/dist/esm/tests/smt/sparse-merkle-tree.spec.js.map +1 -1
  269. package/dist/esm/tests/state-index/state-index-level.spec.js +117 -126
  270. package/dist/esm/tests/state-index/state-index-level.spec.js.map +1 -1
  271. package/dist/esm/tests/store/blockstore-level.spec.js +44 -99
  272. package/dist/esm/tests/store/blockstore-level.spec.js.map +1 -1
  273. package/dist/esm/tests/store/blockstore-mock.spec.js +40 -120
  274. package/dist/esm/tests/store/blockstore-mock.spec.js.map +1 -1
  275. package/dist/esm/tests/store/data-store-level.spec.js +160 -108
  276. package/dist/esm/tests/store/data-store-level.spec.js.map +1 -1
  277. package/dist/esm/tests/store/index-level.spec.js +404 -414
  278. package/dist/esm/tests/store/index-level.spec.js.map +1 -1
  279. package/dist/esm/tests/store/message-store-level.spec.js +13 -22
  280. package/dist/esm/tests/store/message-store-level.spec.js.map +1 -1
  281. package/dist/esm/tests/store/message-store.spec.js +229 -238
  282. package/dist/esm/tests/store/message-store.spec.js.map +1 -1
  283. package/dist/esm/tests/test-event-stream.js +12 -13
  284. package/dist/esm/tests/test-event-stream.js.map +1 -1
  285. package/dist/esm/tests/test-stores.js +16 -13
  286. package/dist/esm/tests/test-stores.js.map +1 -1
  287. package/dist/esm/tests/test-suite.js +8 -15
  288. package/dist/esm/tests/test-suite.js.map +1 -1
  289. package/dist/esm/tests/utils/cid.spec.js +24 -33
  290. package/dist/esm/tests/utils/cid.spec.js.map +1 -1
  291. package/dist/esm/tests/utils/data-stream.spec.js +48 -57
  292. package/dist/esm/tests/utils/data-stream.spec.js.map +1 -1
  293. package/dist/esm/tests/utils/encryption-callbacks.spec.js +45 -54
  294. package/dist/esm/tests/utils/encryption-callbacks.spec.js.map +1 -1
  295. package/dist/esm/tests/utils/encryption.spec.js +229 -82
  296. package/dist/esm/tests/utils/encryption.spec.js.map +1 -1
  297. package/dist/esm/tests/utils/filters.spec.js +46 -55
  298. package/dist/esm/tests/utils/filters.spec.js.map +1 -1
  299. package/dist/esm/tests/utils/hd-key.spec.js +10 -19
  300. package/dist/esm/tests/utils/hd-key.spec.js.map +1 -1
  301. package/dist/esm/tests/utils/jws.spec.js +3 -12
  302. package/dist/esm/tests/utils/jws.spec.js.map +1 -1
  303. package/dist/esm/tests/utils/memory-cache.spec.js +9 -18
  304. package/dist/esm/tests/utils/memory-cache.spec.js.map +1 -1
  305. package/dist/esm/tests/utils/messages.spec.js +18 -20
  306. package/dist/esm/tests/utils/messages.spec.js.map +1 -1
  307. package/dist/esm/tests/utils/poller.js +22 -33
  308. package/dist/esm/tests/utils/poller.js.map +1 -1
  309. package/dist/esm/tests/utils/private-key-signer.spec.js +15 -24
  310. package/dist/esm/tests/utils/private-key-signer.spec.js.map +1 -1
  311. package/dist/esm/tests/utils/records.spec.js +14 -27
  312. package/dist/esm/tests/utils/records.spec.js.map +1 -1
  313. package/dist/esm/tests/utils/secp256k1.spec.js +16 -25
  314. package/dist/esm/tests/utils/secp256k1.spec.js.map +1 -1
  315. package/dist/esm/tests/utils/secp256r1.spec.js +18 -27
  316. package/dist/esm/tests/utils/secp256r1.spec.js.map +1 -1
  317. package/dist/esm/tests/utils/test-data-generator.js +446 -467
  318. package/dist/esm/tests/utils/test-data-generator.js.map +1 -1
  319. package/dist/esm/tests/validation/json-schemas/definitions.spec.js +2 -11
  320. package/dist/esm/tests/validation/json-schemas/definitions.spec.js.map +1 -1
  321. package/dist/esm/tests/validation/json-schemas/jwk/general-jwk.spec.js +4 -13
  322. package/dist/esm/tests/validation/json-schemas/jwk/general-jwk.spec.js.map +1 -1
  323. package/dist/esm/tests/validation/json-schemas/jwk/public-jwk.spec.js +8 -17
  324. package/dist/esm/tests/validation/json-schemas/jwk/public-jwk.spec.js.map +1 -1
  325. package/dist/esm/tests/validation/json-schemas/jwk-verification-method.spec.js +3 -12
  326. package/dist/esm/tests/validation/json-schemas/jwk-verification-method.spec.js.map +1 -1
  327. package/dist/esm/tests/validation/json-schemas/protocols/protocols-configure.spec.js +4 -13
  328. package/dist/esm/tests/validation/json-schemas/protocols/protocols-configure.spec.js.map +1 -1
  329. package/dist/esm/tests/validation/json-schemas/records/records-query.spec.js +2 -11
  330. package/dist/esm/tests/validation/json-schemas/records/records-query.spec.js.map +1 -1
  331. package/dist/esm/tests/validation/json-schemas/records/records-read.spec.js +2 -11
  332. package/dist/esm/tests/validation/json-schemas/records/records-read.spec.js.map +1 -1
  333. package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js +44 -24
  334. package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js.map +1 -1
  335. package/dist/types/generated/precompiled-validators.d.ts +49 -40
  336. package/dist/types/generated/precompiled-validators.d.ts.map +1 -1
  337. package/dist/types/src/core/constants.d.ts +11 -0
  338. package/dist/types/src/core/constants.d.ts.map +1 -0
  339. package/dist/types/src/core/core-protocol.d.ts +89 -0
  340. package/dist/types/src/core/core-protocol.d.ts.map +1 -0
  341. package/dist/types/src/core/dwn-error.d.ts +9 -12
  342. package/dist/types/src/core/dwn-error.d.ts.map +1 -1
  343. package/dist/types/src/core/grant-authorization.d.ts +6 -2
  344. package/dist/types/src/core/grant-authorization.d.ts.map +1 -1
  345. package/dist/types/src/core/protocol-authorization-action.d.ts +42 -0
  346. package/dist/types/src/core/protocol-authorization-action.d.ts.map +1 -0
  347. package/dist/types/src/core/protocol-authorization-validation.d.ts +81 -0
  348. package/dist/types/src/core/protocol-authorization-validation.d.ts.map +1 -0
  349. package/dist/types/src/core/protocol-authorization.d.ts +24 -106
  350. package/dist/types/src/core/protocol-authorization.d.ts.map +1 -1
  351. package/dist/types/src/core/record-chain.d.ts +24 -0
  352. package/dist/types/src/core/record-chain.d.ts.map +1 -0
  353. package/dist/types/src/core/records-grant-authorization.d.ts.map +1 -1
  354. package/dist/types/src/dwn.d.ts +19 -7
  355. package/dist/types/src/dwn.d.ts.map +1 -1
  356. package/dist/types/src/event-stream/event-emitter-event-log.d.ts +50 -0
  357. package/dist/types/src/event-stream/event-emitter-event-log.d.ts.map +1 -0
  358. package/dist/types/src/handlers/messages-read.d.ts +3 -8
  359. package/dist/types/src/handlers/messages-read.d.ts.map +1 -1
  360. package/dist/types/src/handlers/messages-subscribe.d.ts +6 -10
  361. package/dist/types/src/handlers/messages-subscribe.d.ts.map +1 -1
  362. package/dist/types/src/handlers/messages-sync.d.ts +3 -8
  363. package/dist/types/src/handlers/messages-sync.d.ts.map +1 -1
  364. package/dist/types/src/handlers/protocols-configure.d.ts +3 -10
  365. package/dist/types/src/handlers/protocols-configure.d.ts.map +1 -1
  366. package/dist/types/src/handlers/protocols-query.d.ts +3 -8
  367. package/dist/types/src/handlers/protocols-query.d.ts.map +1 -1
  368. package/dist/types/src/handlers/records-count.d.ts +3 -6
  369. package/dist/types/src/handlers/records-count.d.ts.map +1 -1
  370. package/dist/types/src/handlers/records-delete.d.ts +3 -8
  371. package/dist/types/src/handlers/records-delete.d.ts.map +1 -1
  372. package/dist/types/src/handlers/records-query.d.ts +3 -8
  373. package/dist/types/src/handlers/records-query.d.ts.map +1 -1
  374. package/dist/types/src/handlers/records-read.d.ts +3 -8
  375. package/dist/types/src/handlers/records-read.d.ts.map +1 -1
  376. package/dist/types/src/handlers/records-subscribe.d.ts +8 -10
  377. package/dist/types/src/handlers/records-subscribe.d.ts.map +1 -1
  378. package/dist/types/src/handlers/records-write.d.ts +4 -24
  379. package/dist/types/src/handlers/records-write.d.ts.map +1 -1
  380. package/dist/types/src/index.d.ts +8 -4
  381. package/dist/types/src/index.d.ts.map +1 -1
  382. package/dist/types/src/interfaces/messages-subscribe.d.ts +5 -0
  383. package/dist/types/src/interfaces/messages-subscribe.d.ts.map +1 -1
  384. package/dist/types/src/interfaces/protocols-configure.d.ts.map +1 -1
  385. package/dist/types/src/interfaces/records-subscribe.d.ts +5 -0
  386. package/dist/types/src/interfaces/records-subscribe.d.ts.map +1 -1
  387. package/dist/types/src/interfaces/records-write-query.d.ts +33 -0
  388. package/dist/types/src/interfaces/records-write-query.d.ts.map +1 -0
  389. package/dist/types/src/interfaces/records-write-signing.d.ts +34 -0
  390. package/dist/types/src/interfaces/records-write-signing.d.ts.map +1 -0
  391. package/dist/types/src/interfaces/records-write.d.ts +13 -53
  392. package/dist/types/src/interfaces/records-write.d.ts.map +1 -1
  393. package/dist/types/src/protocols/permission-grant.d.ts +1 -1
  394. package/dist/types/src/protocols/permission-grant.d.ts.map +1 -1
  395. package/dist/types/src/protocols/permission-request.d.ts +1 -1
  396. package/dist/types/src/protocols/permission-request.d.ts.map +1 -1
  397. package/dist/types/src/protocols/permissions.d.ts +40 -3
  398. package/dist/types/src/protocols/permissions.d.ts.map +1 -1
  399. package/dist/types/src/state-index/state-index-level.d.ts.map +1 -1
  400. package/dist/types/src/store/data-store-level.d.ts +20 -4
  401. package/dist/types/src/store/data-store-level.d.ts.map +1 -1
  402. package/dist/types/src/store/index-level-compound.d.ts +70 -0
  403. package/dist/types/src/store/index-level-compound.d.ts.map +1 -0
  404. package/dist/types/src/store/index-level.d.ts +4 -58
  405. package/dist/types/src/store/index-level.d.ts.map +1 -1
  406. package/dist/types/src/store/storage-controller.d.ts +4 -4
  407. package/dist/types/src/store/storage-controller.d.ts.map +1 -1
  408. package/dist/types/src/types/message-types.d.ts +3 -3
  409. package/dist/types/src/types/message-types.d.ts.map +1 -1
  410. package/dist/types/src/types/messages-types.d.ts +12 -3
  411. package/dist/types/src/types/messages-types.d.ts.map +1 -1
  412. package/dist/types/src/types/method-handler.d.ts +24 -3
  413. package/dist/types/src/types/method-handler.d.ts.map +1 -1
  414. package/dist/types/src/types/permission-types.d.ts +7 -0
  415. package/dist/types/src/types/permission-types.d.ts.map +1 -1
  416. package/dist/types/src/types/protocols-types.d.ts +41 -1
  417. package/dist/types/src/types/protocols-types.d.ts.map +1 -1
  418. package/dist/types/src/types/records-types.d.ts +16 -6
  419. package/dist/types/src/types/records-types.d.ts.map +1 -1
  420. package/dist/types/src/types/subscriptions.d.ts +151 -13
  421. package/dist/types/src/types/subscriptions.d.ts.map +1 -1
  422. package/dist/types/src/utils/hd-key.d.ts +1 -9
  423. package/dist/types/src/utils/hd-key.d.ts.map +1 -1
  424. package/dist/types/src/utils/messages.d.ts +7 -5
  425. package/dist/types/src/utils/messages.d.ts.map +1 -1
  426. package/dist/types/src/utils/protocols.d.ts +5 -0
  427. package/dist/types/src/utils/protocols.d.ts.map +1 -1
  428. package/dist/types/src/utils/records.d.ts +1 -11
  429. package/dist/types/src/utils/records.d.ts.map +1 -1
  430. package/dist/types/tests/dwn.spec.d.ts.map +1 -1
  431. package/dist/types/tests/event-emitter-event-log.spec.d.ts +2 -0
  432. package/dist/types/tests/event-emitter-event-log.spec.d.ts.map +1 -0
  433. package/dist/types/tests/features/author-delegated-grant.spec.d.ts.map +1 -1
  434. package/dist/types/tests/features/owner-delegated-grant.spec.d.ts.map +1 -1
  435. package/dist/types/tests/features/owner-signature.spec.d.ts.map +1 -1
  436. package/dist/types/tests/features/permissions.spec.d.ts.map +1 -1
  437. package/dist/types/tests/features/protocol-composition.spec.d.ts.map +1 -1
  438. package/dist/types/tests/features/records-immutable.spec.d.ts +2 -0
  439. package/dist/types/tests/features/records-immutable.spec.d.ts.map +1 -0
  440. package/dist/types/tests/features/records-record-limit.spec.d.ts +2 -0
  441. package/dist/types/tests/features/records-record-limit.spec.d.ts.map +1 -0
  442. package/dist/types/tests/features/records-tags.spec.d.ts.map +1 -1
  443. package/dist/types/tests/features/resumable-tasks.spec.d.ts.map +1 -1
  444. package/dist/types/tests/handlers/messages-read.spec.d.ts.map +1 -1
  445. package/dist/types/tests/handlers/messages-subscribe.spec.d.ts.map +1 -1
  446. package/dist/types/tests/handlers/messages-sync.spec.d.ts.map +1 -1
  447. package/dist/types/tests/handlers/records-count.spec.d.ts.map +1 -1
  448. package/dist/types/tests/handlers/records-delete.spec.d.ts.map +1 -1
  449. package/dist/types/tests/handlers/records-query.spec.d.ts.map +1 -1
  450. package/dist/types/tests/handlers/records-read.spec.d.ts.map +1 -1
  451. package/dist/types/tests/handlers/records-subscribe.spec.d.ts.map +1 -1
  452. package/dist/types/tests/handlers/records-write.spec.d.ts.map +1 -1
  453. package/dist/types/tests/scenarios/deleted-record.spec.d.ts.map +1 -1
  454. package/dist/types/tests/scenarios/subscriptions.spec.d.ts.map +1 -1
  455. package/dist/types/tests/test-event-stream.d.ts +11 -12
  456. package/dist/types/tests/test-event-stream.d.ts.map +1 -1
  457. package/dist/types/tests/test-suite.d.ts +2 -2
  458. package/dist/types/tests/test-suite.d.ts.map +1 -1
  459. package/dist/types/tests/utils/test-data-generator.d.ts +18 -0
  460. package/dist/types/tests/utils/test-data-generator.d.ts.map +1 -1
  461. package/package.json +5 -4
  462. package/src/core/constants.ts +11 -0
  463. package/src/core/core-protocol.ts +129 -0
  464. package/src/core/dwn-error.ts +15 -12
  465. package/src/core/grant-authorization.ts +20 -3
  466. package/src/core/protocol-authorization-action.ts +377 -0
  467. package/src/core/protocol-authorization-validation.ts +487 -0
  468. package/src/core/protocol-authorization.ts +111 -856
  469. package/src/core/record-chain.ts +99 -0
  470. package/src/core/records-grant-authorization.ts +6 -8
  471. package/src/dwn.ts +58 -73
  472. package/src/event-stream/event-emitter-event-log.ts +283 -0
  473. package/src/handlers/messages-read.ts +8 -9
  474. package/src/handlers/messages-subscribe.ts +24 -28
  475. package/src/handlers/messages-sync.ts +10 -16
  476. package/src/handlers/protocols-configure.ts +47 -32
  477. package/src/handlers/protocols-query.ts +6 -9
  478. package/src/handlers/records-count.ts +11 -10
  479. package/src/handlers/records-delete.ts +12 -21
  480. package/src/handlers/records-query.ts +12 -12
  481. package/src/handlers/records-read.ts +34 -22
  482. package/src/handlers/records-subscribe.ts +47 -26
  483. package/src/handlers/records-write.ts +47 -104
  484. package/src/index.ts +9 -5
  485. package/src/interfaces/messages-subscribe.ts +7 -1
  486. package/src/interfaces/protocols-configure.ts +73 -8
  487. package/src/interfaces/records-count.ts +1 -1
  488. package/src/interfaces/records-delete.ts +1 -1
  489. package/src/interfaces/records-query.ts +1 -1
  490. package/src/interfaces/records-read.ts +1 -1
  491. package/src/interfaces/records-subscribe.ts +8 -1
  492. package/src/interfaces/records-write-query.ts +139 -0
  493. package/src/interfaces/records-write-signing.ts +123 -0
  494. package/src/interfaces/records-write.ts +66 -261
  495. package/src/protocols/permission-grant.ts +1 -1
  496. package/src/protocols/permission-request.ts +1 -1
  497. package/src/protocols/permissions.ts +148 -6
  498. package/src/state-index/state-index-level.ts +5 -7
  499. package/src/store/data-store-level.ts +124 -34
  500. package/src/store/index-level-compound.ts +324 -0
  501. package/src/store/index-level.ts +68 -341
  502. package/src/store/storage-controller.ts +11 -11
  503. package/src/types/message-types.ts +3 -3
  504. package/src/types/messages-types.ts +12 -3
  505. package/src/types/method-handler.ts +26 -4
  506. package/src/types/mitt.d.ts +28 -0
  507. package/src/types/permission-types.ts +7 -0
  508. package/src/types/protocols-types.ts +46 -0
  509. package/src/types/records-types.ts +16 -6
  510. package/src/types/subscriptions.ts +178 -14
  511. package/src/utils/hd-key.ts +0 -9
  512. package/src/utils/messages.ts +17 -37
  513. package/src/utils/protocols.ts +8 -0
  514. package/src/utils/records.ts +8 -59
  515. package/dist/esm/src/event-stream/event-emitter-stream.js +0 -60
  516. package/dist/esm/src/event-stream/event-emitter-stream.js.map +0 -1
  517. package/dist/esm/tests/event-stream/event-emitter-stream.spec.js +0 -77
  518. package/dist/esm/tests/event-stream/event-emitter-stream.spec.js.map +0 -1
  519. package/dist/esm/tests/event-stream/event-stream.spec.js +0 -123
  520. package/dist/esm/tests/event-stream/event-stream.spec.js.map +0 -1
  521. package/dist/types/src/event-stream/event-emitter-stream.d.ts +0 -23
  522. package/dist/types/src/event-stream/event-emitter-stream.d.ts.map +0 -1
  523. package/dist/types/tests/event-stream/event-emitter-stream.spec.d.ts +0 -2
  524. package/dist/types/tests/event-stream/event-emitter-stream.spec.d.ts.map +0 -1
  525. package/dist/types/tests/event-stream/event-stream.spec.d.ts +0 -2
  526. package/dist/types/tests/event-stream/event-stream.spec.d.ts.map +0 -1
  527. package/src/event-stream/event-emitter-stream.ts +0 -69
@@ -1,9 +1,7 @@
1
- import type { DataStore } from '../types/data-store.js';
2
- import type { DidResolver } from '@enbox/dids';
3
1
  import type { GenericMessage } from '../types/message-types.js';
4
2
  import type { MessageStore } from '../types/message-store.js';
5
- import type { MethodHandler } from '../types/method-handler.js';
6
3
  import type { RecordsQueryReplyEntry } from '../types/records-types.js';
4
+ import type { HandlerDependencies, MethodHandler } from '../types/method-handler.js';
7
5
  import type { MessagesReadMessage, MessagesReadReply, MessagesReadReplyEntry } from '../types/messages-types.js';
8
6
 
9
7
  import { authenticate } from '../core/auth.js';
@@ -19,7 +17,8 @@ import { DwnError, DwnErrorCode } from '../core/dwn-error.js';
19
17
  type HandleArgs = { tenant: string, message: MessagesReadMessage };
20
18
 
21
19
  export class MessagesReadHandler implements MethodHandler {
22
- constructor(private didResolver: DidResolver, private messageStore: MessageStore, private dataStore: DataStore) {}
20
+
21
+ constructor(private deps: HandlerDependencies) {}
23
22
 
24
23
  public async handle({ tenant, message }: HandleArgs): Promise<MessagesReadReply> {
25
24
  let messagesRead: MessagesRead;
@@ -31,18 +30,18 @@ export class MessagesReadHandler implements MethodHandler {
31
30
  }
32
31
 
33
32
  try {
34
- await authenticate(message.authorization, this.didResolver);
33
+ await authenticate(message.authorization, this.deps.didResolver);
35
34
  } catch (e) {
36
35
  return messageReplyFromError(e, 401);
37
36
  }
38
37
 
39
- const messageResult = await this.messageStore.get(tenant, message.descriptor.messageCid);
38
+ const messageResult = await this.deps.messageStore.get(tenant, message.descriptor.messageCid);
40
39
  if (messageResult === undefined) {
41
40
  return { status: { code: 404, detail: 'Not Found' } };
42
41
  }
43
42
 
44
43
  try {
45
- await MessagesReadHandler.authorizeMessagesRead(tenant, messagesRead, messageResult, this.messageStore);
44
+ await MessagesReadHandler.authorizeMessagesRead(tenant, messagesRead, messageResult, this.deps.messageStore);
46
45
  } catch (error) {
47
46
  return messageReplyFromError(error, 401);
48
47
  }
@@ -59,7 +58,7 @@ export class MessagesReadHandler implements MethodHandler {
59
58
  delete recordsWrite.encodedData;
60
59
  } else {
61
60
  // otherwise check the data store for the associated data
62
- const result = await this.dataStore.get(tenant, recordsWrite.recordId, recordsWrite.descriptor.dataCid);
61
+ const result = await this.deps.dataStore!.get(tenant, recordsWrite.recordId, recordsWrite.descriptor.dataCid);
63
62
  if (result?.dataStream !== undefined) {
64
63
  entry.data = result.dataStream;
65
64
  }
@@ -100,4 +99,4 @@ export class MessagesReadHandler implements MethodHandler {
100
99
  throw new DwnError(DwnErrorCode.MessagesReadAuthorizationFailed, 'protocol message failed authorization');
101
100
  }
102
101
  }
103
- }
102
+ }
@@ -1,11 +1,9 @@
1
- import type { DidResolver } from '@enbox/dids';
2
1
  import type { MessageStore } from '../types/message-store.js';
3
- import type { MethodHandler } from '../types/method-handler.js';
4
- import type { EventListener, EventStream } from '../types/subscriptions.js';
5
- import type { MessagesSubscribeMessage, MessagesSubscribeReply, MessageSubscriptionHandler } from '../types/messages-types.js';
2
+ import type { SubscriptionListener } from '../types/subscriptions.js';
3
+ import type { HandlerDependencies, MethodHandler } from '../types/method-handler.js';
4
+ import type { MessagesSubscribeMessage, MessagesSubscribeReply } from '../types/messages-types.js';
6
5
 
7
6
  import { authenticate } from '../core/auth.js';
8
- import { FilterUtility } from '../utils/filter.js';
9
7
  import { Message } from '../core/message.js';
10
8
  import { messageReplyFromError } from '../core/message-reply.js';
11
9
  import { Messages } from '../utils/messages.js';
@@ -15,11 +13,8 @@ import { PermissionsProtocol } from '../protocols/permissions.js';
15
13
  import { DwnError, DwnErrorCode } from '../core/dwn-error.js';
16
14
 
17
15
  export class MessagesSubscribeHandler implements MethodHandler {
18
- constructor(
19
- private didResolver: DidResolver,
20
- private messageStore: MessageStore,
21
- private eventStream?: EventStream
22
- ) {}
16
+
17
+ constructor(private deps: HandlerDependencies) {}
23
18
 
24
19
  public async handle({
25
20
  tenant,
@@ -28,11 +23,11 @@ export class MessagesSubscribeHandler implements MethodHandler {
28
23
  }: {
29
24
  tenant: string;
30
25
  message: MessagesSubscribeMessage;
31
- subscriptionHandler: MessageSubscriptionHandler;
26
+ subscriptionHandler: SubscriptionListener;
32
27
  }): Promise<MessagesSubscribeReply> {
33
- if (this.eventStream === undefined) {
28
+ if (this.deps.eventLog === undefined) {
34
29
  return messageReplyFromError(new DwnError(
35
- DwnErrorCode.MessagesSubscribeEventStreamUnimplemented,
30
+ DwnErrorCode.MessagesSubscribeEventLogUnimplemented,
36
31
  'Subscriptions are not supported'
37
32
  ), 501);
38
33
  }
@@ -45,28 +40,29 @@ export class MessagesSubscribeHandler implements MethodHandler {
45
40
  }
46
41
 
47
42
  try {
48
- await authenticate(message.authorization, this.didResolver);
49
- await MessagesSubscribeHandler.authorizeMessagesSubscribe(tenant, messagesSubscribe, this.messageStore);
43
+ await authenticate(message.authorization, this.deps.didResolver);
44
+ await MessagesSubscribeHandler.authorizeMessagesSubscribe(tenant, messagesSubscribe, this.deps.messageStore);
50
45
  } catch (error) {
51
46
  return messageReplyFromError(error, 401);
52
47
  }
53
48
 
54
- const { filters } = message.descriptor;
55
- const messagesFilters = Messages.convertFilters(filters);
49
+ const { filters, cursor: eventLogCursor } = message.descriptor;
50
+ const messagesFilters = Messages.convertFilters(filters, this.deps.coreProtocols);
56
51
  const messageCid = await Message.getCid(message);
57
52
 
58
- const listener: EventListener = (eventTenant, event, eventIndexes):void => {
59
- if (tenant === eventTenant && FilterUtility.matchAnyFilter(eventIndexes, messagesFilters)) {
60
- subscriptionHandler(event);
61
- }
62
- };
63
-
64
- const subscription = await this.eventStream.subscribe(tenant, messageCid, listener);
53
+ try {
54
+ const subscription = await this.deps.eventLog.subscribe(tenant, messageCid, subscriptionHandler, {
55
+ cursor : eventLogCursor,
56
+ filters : messagesFilters,
57
+ });
65
58
 
66
- return {
67
- status: { code: 200, detail: 'OK' },
68
- subscription,
69
- };
59
+ return {
60
+ status: { code: 200, detail: 'OK' },
61
+ subscription,
62
+ };
63
+ } catch (error) {
64
+ return messageReplyFromError(error, 500);
65
+ }
70
66
  }
71
67
 
72
68
  private static async authorizeMessagesSubscribe(tenant: string, messagesSubscribe: MessagesSubscribe, messageStore: MessageStore): Promise<void> {
@@ -1,7 +1,5 @@
1
- import type { DidResolver } from '@enbox/dids';
2
1
  import type { MessageStore } from '../types/message-store.js';
3
- import type { MethodHandler } from '../types/method-handler.js';
4
- import type { StateIndex } from '../types/state-index.js';
2
+ import type { HandlerDependencies, MethodHandler } from '../types/method-handler.js';
5
3
  import type { MessagesSyncMessage, MessagesSyncReply } from '../types/messages-types.js';
6
4
 
7
5
  import { authenticate } from '../core/auth.js';
@@ -15,11 +13,7 @@ import { DwnError, DwnErrorCode } from '../core/dwn-error.js';
15
13
 
16
14
  export class MessagesSyncHandler implements MethodHandler {
17
15
 
18
- constructor(
19
- private didResolver: DidResolver,
20
- private messageStore: MessageStore,
21
- private stateIndex: StateIndex,
22
- ) { }
16
+ constructor(private deps: HandlerDependencies) { }
23
17
 
24
18
  public async handle({
25
19
  tenant,
@@ -34,8 +28,8 @@ export class MessagesSyncHandler implements MethodHandler {
34
28
  }
35
29
 
36
30
  try {
37
- await authenticate(message.authorization, this.didResolver);
38
- await MessagesSyncHandler.authorizeMessagesSync(tenant, messagesSync, this.messageStore);
31
+ await authenticate(message.authorization, this.deps.didResolver);
32
+ await MessagesSyncHandler.authorizeMessagesSync(tenant, messagesSync, this.deps.messageStore);
39
33
  } catch (e) {
40
34
  return messageReplyFromError(e, 401);
41
35
  }
@@ -46,8 +40,8 @@ export class MessagesSyncHandler implements MethodHandler {
46
40
  switch (action) {
47
41
  case 'root': {
48
42
  const rootHash = protocol !== undefined
49
- ? await this.stateIndex.getProtocolRoot(tenant, protocol)
50
- : await this.stateIndex.getRoot(tenant);
43
+ ? await this.deps.stateIndex!.getProtocolRoot(tenant, protocol)
44
+ : await this.deps.stateIndex!.getRoot(tenant);
51
45
  return {
52
46
  status : { code: 200, detail: 'OK' },
53
47
  root : hashToHex(rootHash),
@@ -57,8 +51,8 @@ export class MessagesSyncHandler implements MethodHandler {
57
51
  case 'subtree': {
58
52
  const bitPath = MessagesSyncHandler.parseBitPrefix(prefix!);
59
53
  const hash = protocol !== undefined
60
- ? await this.stateIndex.getProtocolSubtreeHash(tenant, protocol, bitPath)
61
- : await this.stateIndex.getSubtreeHash(tenant, bitPath);
54
+ ? await this.deps.stateIndex!.getProtocolSubtreeHash(tenant, protocol, bitPath)
55
+ : await this.deps.stateIndex!.getSubtreeHash(tenant, bitPath);
62
56
  return {
63
57
  status : { code: 200, detail: 'OK' },
64
58
  hash : hashToHex(hash),
@@ -68,8 +62,8 @@ export class MessagesSyncHandler implements MethodHandler {
68
62
  case 'leaves': {
69
63
  const bitPath = MessagesSyncHandler.parseBitPrefix(prefix!);
70
64
  const leaves = protocol !== undefined
71
- ? await this.stateIndex.getProtocolLeaves(tenant, protocol, bitPath)
72
- : await this.stateIndex.getLeaves(tenant, bitPath);
65
+ ? await this.deps.stateIndex!.getProtocolLeaves(tenant, protocol, bitPath)
66
+ : await this.deps.stateIndex!.getLeaves(tenant, bitPath);
73
67
  return {
74
68
  status : { code: 200, detail: 'OK' },
75
69
  entries : leaves,
@@ -1,9 +1,6 @@
1
- import type { DidResolver } from '@enbox/dids';
2
- import type { EventStream } from '../types/subscriptions.js';
3
1
  import type { GenericMessageReply } from '../types/message-types.js';
4
2
  import type { MessageStore } from '../types//message-store.js';
5
- import type { MethodHandler } from '../types/method-handler.js';
6
- import type { StateIndex } from '../types/state-index.js';
3
+ import type { HandlerDependencies, MethodHandler } from '../types/method-handler.js';
7
4
  import type { ProtocolDefinition, ProtocolRuleSet, ProtocolsConfigureMessage } from '../types/protocols-types.js';
8
5
 
9
6
  import { authenticate } from '../core/auth.js';
@@ -18,12 +15,7 @@ import { getRuleSetAtPath, parseCrossProtocolRef } from '../utils/protocols.js';
18
15
 
19
16
  export class ProtocolsConfigureHandler implements MethodHandler {
20
17
 
21
- constructor(
22
- private didResolver: DidResolver,
23
- private messageStore: MessageStore,
24
- private stateIndex: StateIndex,
25
- private eventStream?: EventStream
26
- ) { }
18
+ constructor(private deps: HandlerDependencies) { }
27
19
 
28
20
  public async handle({
29
21
  tenant,
@@ -38,8 +30,8 @@ export class ProtocolsConfigureHandler implements MethodHandler {
38
30
 
39
31
  // authentication & authorization
40
32
  try {
41
- await authenticate(message.authorization, this.didResolver);
42
- await ProtocolsConfigureHandler.authorizeProtocolsConfigure(tenant, protocolsConfigure, this.messageStore);
33
+ await authenticate(message.authorization, this.deps.didResolver);
34
+ await ProtocolsConfigureHandler.authorizeProtocolsConfigure(tenant, protocolsConfigure, this.deps.messageStore);
43
35
  } catch (e) {
44
36
  return messageReplyFromError(e, 401);
45
37
  }
@@ -48,7 +40,7 @@ export class ProtocolsConfigureHandler implements MethodHandler {
48
40
  // `$ref` paths must exist in the referenced protocols, and cross-protocol roles must exist.
49
41
  try {
50
42
  await ProtocolsConfigureHandler.validateCompositionDependencies(
51
- tenant, message.descriptor.definition, this.messageStore
43
+ tenant, message.descriptor.definition, this.deps.messageStore
52
44
  );
53
45
  } catch (e) {
54
46
  return messageReplyFromError(e, 400);
@@ -60,7 +52,7 @@ export class ProtocolsConfigureHandler implements MethodHandler {
60
52
  method : DwnMethodName.Configure,
61
53
  protocol : message.descriptor.definition.protocol
62
54
  };
63
- const { messages: existingMessages } = await this.messageStore.query(tenant, [ query ]);
55
+ const { messages: existingMessages } = await this.deps.messageStore.query(tenant, [ query ]);
64
56
 
65
57
  // find newest message, and if the incoming message is the newest
66
58
  let newestMessage = await Message.getNewestMessage(existingMessages);
@@ -75,13 +67,13 @@ export class ProtocolsConfigureHandler implements MethodHandler {
75
67
  if (incomingMessageIsNewest) {
76
68
  const indexes = ProtocolsConfigureHandler.constructIndexes(protocolsConfigure, true);
77
69
 
78
- await this.messageStore.put(tenant, message, indexes);
70
+ await this.deps.messageStore.put(tenant, message, indexes);
79
71
  const messageCid = await Message.getCid(message);
80
- await this.stateIndex.insert(tenant, messageCid, indexes);
72
+ await this.deps.stateIndex!.insert(tenant, messageCid, indexes);
81
73
 
82
- // only emit if the event stream is set
83
- if (this.eventStream !== undefined) {
84
- this.eventStream.emit(tenant, { message }, indexes);
74
+ // only emit if the event log is set
75
+ if (this.deps.eventLog !== undefined) {
76
+ await this.deps.eventLog.emit(tenant, { message }, indexes);
85
77
  }
86
78
 
87
79
  messageReply = {
@@ -91,9 +83,9 @@ export class ProtocolsConfigureHandler implements MethodHandler {
91
83
  // incoming message is older — still store it as a historical version (not the latest)
92
84
  const indexes = ProtocolsConfigureHandler.constructIndexes(protocolsConfigure, false);
93
85
 
94
- await this.messageStore.put(tenant, message, indexes);
86
+ await this.deps.messageStore.put(tenant, message, indexes);
95
87
  const messageCid = await Message.getCid(message);
96
- await this.stateIndex.insert(tenant, messageCid, indexes);
88
+ await this.deps.stateIndex!.insert(tenant, messageCid, indexes);
97
89
 
98
90
  messageReply = {
99
91
  status: { code: 202, detail: 'Accepted' }
@@ -108,8 +100,8 @@ export class ProtocolsConfigureHandler implements MethodHandler {
108
100
  const updatedIndexes = ProtocolsConfigureHandler.constructIndexes(existingProtocolsConfigure, false);
109
101
  const existingCid = await Message.getCid(existingMessage);
110
102
 
111
- await this.messageStore.delete(tenant, existingCid);
112
- await this.messageStore.put(tenant, existingMessage, updatedIndexes);
103
+ await this.deps.messageStore.delete(tenant, existingCid);
104
+ await this.deps.messageStore.put(tenant, existingMessage, updatedIndexes);
113
105
  }
114
106
  }
115
107
 
@@ -230,7 +222,7 @@ export class ProtocolsConfigureHandler implements MethodHandler {
230
222
  const childRuleSet = ruleSet[key] as ProtocolRuleSet;
231
223
  const childProtocolPath = protocolPath === '' ? key : `${protocolPath}/${key}`;
232
224
 
233
- // Validate $ref path exists in the referenced protocol
225
+ // Validate $ref path exists in the referenced protocol and does not traverse through another $ref
234
226
  if (childRuleSet.$ref !== undefined) {
235
227
  const parsed = parseCrossProtocolRef(childRuleSet.$ref);
236
228
  if (parsed !== undefined) {
@@ -244,13 +236,36 @@ export class ProtocolsConfigureHandler implements MethodHandler {
244
236
  );
245
237
  }
246
238
 
247
- const targetRuleSet = getRuleSetAtPath(parsed.protocolPath, refDefinition.structure);
248
- if (targetRuleSet === undefined) {
249
- throw new DwnError(
250
- DwnErrorCode.ProtocolsConfigureInvalidRefProtocolPath,
251
- `'$ref' at protocol path '${childProtocolPath}' references type path '${parsed.protocolPath}' ` +
252
- `which does not exist in protocol '${refDefinition.protocol}'.`
253
- );
239
+ // Walk the target path segment-by-segment and reject if any intermediate node has a $ref
240
+ const segments = parsed.protocolPath.split('/');
241
+ let currentLevel: { [key: string]: ProtocolRuleSet } = refDefinition.structure;
242
+
243
+ for (let i = 0; i < segments.length; i++) {
244
+ const segment = segments[i];
245
+ const node = currentLevel[segment] as ProtocolRuleSet | undefined;
246
+
247
+ if (node === undefined) {
248
+ throw new DwnError(
249
+ DwnErrorCode.ProtocolsConfigureInvalidRefProtocolPath,
250
+ `'$ref' at protocol path '${childProtocolPath}' references type path '${parsed.protocolPath}' ` +
251
+ `which does not exist in protocol '${refDefinition.protocol}'.`
252
+ );
253
+ }
254
+
255
+ // If any node along the target path (including the final target) has a $ref,
256
+ // it means the composition chain passes through another protocol boundary.
257
+ // Multi-level composition is not supported — reject at install time.
258
+ if (node.$ref !== undefined) {
259
+ const traversedPath = segments.slice(0, i + 1).join('/');
260
+ throw new DwnError(
261
+ DwnErrorCode.ProtocolsConfigureInvalidRefTargetThroughRef,
262
+ `'$ref' at protocol path '${childProtocolPath}' references type path '${parsed.protocolPath}' ` +
263
+ `in protocol '${refDefinition.protocol}', but the node '${traversedPath}' is itself ` +
264
+ `a '$ref' composition point. multi-level composition (chaining through '$ref' nodes) is not supported.`
265
+ );
266
+ }
267
+
268
+ currentLevel = node as { [key: string]: ProtocolRuleSet };
254
269
  }
255
270
  }
256
271
  }
@@ -312,4 +327,4 @@ export class ProtocolsConfigureHandler implements MethodHandler {
312
327
  ProtocolsConfigureHandler.validateRefsAndRolesRecursively(childRuleSet, childProtocolPath, referencedDefinitions);
313
328
  }
314
329
  }
315
- }
330
+ }
@@ -1,7 +1,4 @@
1
- import type { DataStore } from '../types/data-store.js';
2
- import type { DidResolver } from '@enbox/dids';
3
- import type { MessageStore } from '../types//message-store.js';
4
- import type { MethodHandler } from '../types/method-handler.js';
1
+ import type { HandlerDependencies, MethodHandler } from '../types/method-handler.js';
5
2
  import type { ProtocolsConfigureMessage, ProtocolsQueryMessage, ProtocolsQueryReply } from '../types/protocols-types.js';
6
3
 
7
4
  import { authenticate } from '../core/auth.js';
@@ -14,7 +11,7 @@ import { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.j
14
11
 
15
12
  export class ProtocolsQueryHandler implements MethodHandler {
16
13
 
17
- constructor(private didResolver: DidResolver, private messageStore: MessageStore,private dataStore: DataStore) { }
14
+ constructor(private deps: HandlerDependencies) { }
18
15
 
19
16
  public async handle({
20
17
  tenant,
@@ -30,8 +27,8 @@ export class ProtocolsQueryHandler implements MethodHandler {
30
27
 
31
28
  // authentication & authorization
32
29
  try {
33
- await authenticate(message.authorization, this.didResolver);
34
- await protocolsQuery.authorize(tenant, this.messageStore);
30
+ await authenticate(message.authorization, this.deps.didResolver);
31
+ await protocolsQuery.authorize(tenant, this.deps.messageStore);
35
32
  } catch (error: any) {
36
33
 
37
34
  // return public ProtocolsConfigures if query fails with a certain authentication or authorization code
@@ -58,7 +55,7 @@ export class ProtocolsQueryHandler implements MethodHandler {
58
55
  };
59
56
  removeUndefinedProperties(query);
60
57
 
61
- const { messages } = await this.messageStore.query(tenant, [ query ]);
58
+ const { messages } = await this.deps.messageStore.query(tenant, [ query ]);
62
59
 
63
60
  return {
64
61
  status : { code: 200, detail: 'OK' },
@@ -78,7 +75,7 @@ export class ProtocolsQueryHandler implements MethodHandler {
78
75
  published : true,
79
76
  isLatestBaseState : true,
80
77
  };
81
- const { messages: publishedProtocolsConfigure } = await this.messageStore.query(tenant, [ filter ]);
78
+ const { messages: publishedProtocolsConfigure } = await this.deps.messageStore.query(tenant, [ filter ]);
82
79
  return publishedProtocolsConfigure as ProtocolsConfigureMessage[];
83
80
  }
84
81
  }
@@ -1,7 +1,7 @@
1
- import type { DidResolver } from '@enbox/dids';
1
+ import type { CoreProtocolRegistry } from '../core/core-protocol.js';
2
2
  import type { Filter } from '../types/query-types.js';
3
3
  import type { MessageStore } from '../types//message-store.js';
4
- import type { MethodHandler } from '../types/method-handler.js';
4
+ import type { HandlerDependencies, MethodHandler } from '../types/method-handler.js';
5
5
  import type { RecordsCountMessage, RecordsCountReply } from '../types/records-types.js';
6
6
 
7
7
  import { authenticate } from '../core/auth.js';
@@ -14,7 +14,7 @@ import { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.j
14
14
 
15
15
  export class RecordsCountHandler implements MethodHandler {
16
16
 
17
- constructor(private didResolver: DidResolver, private messageStore: MessageStore) { }
17
+ constructor(private deps: HandlerDependencies) { }
18
18
 
19
19
  public async handle({
20
20
  tenant,
@@ -35,9 +35,9 @@ export class RecordsCountHandler implements MethodHandler {
35
35
  } else {
36
36
  // authentication and authorization
37
37
  try {
38
- await authenticate(message.authorization!, this.didResolver);
38
+ await authenticate(message.authorization!, this.deps.didResolver);
39
39
 
40
- await RecordsCountHandler.authorizeRecordsCount(tenant, recordsCount, this.messageStore);
40
+ await RecordsCountHandler.authorizeRecordsCount(tenant, recordsCount, this.deps.messageStore, this.deps.coreProtocols);
41
41
  } catch (e) {
42
42
  return messageReplyFromError(e, 401);
43
43
  }
@@ -67,7 +67,7 @@ export class RecordsCountHandler implements MethodHandler {
67
67
  isLatestBaseState : true
68
68
  };
69
69
 
70
- return this.messageStore.count(tenant, [countFilter]);
70
+ return this.deps.messageStore.count(tenant, [countFilter]);
71
71
  }
72
72
 
73
73
  /**
@@ -95,7 +95,7 @@ export class RecordsCountHandler implements MethodHandler {
95
95
  }
96
96
  }
97
97
 
98
- return this.messageStore.count(tenant, filters);
98
+ return this.deps.messageStore.count(tenant, filters);
99
99
  }
100
100
 
101
101
  /**
@@ -103,7 +103,7 @@ export class RecordsCountHandler implements MethodHandler {
103
103
  */
104
104
  private async countPublishedRecords(tenant: string, recordsCount: RecordsCount): Promise<number> {
105
105
  const filter = RecordsCountHandler.buildPublishedRecordsFilter(recordsCount);
106
- return this.messageStore.count(tenant, [filter]);
106
+ return this.deps.messageStore.count(tenant, [filter]);
107
107
  }
108
108
 
109
109
  private static buildPublishedRecordsFilter(recordsCount: RecordsCount): Filter {
@@ -167,7 +167,8 @@ export class RecordsCountHandler implements MethodHandler {
167
167
  private static async authorizeRecordsCount(
168
168
  tenant: string,
169
169
  recordsCount: RecordsCount,
170
- messageStore: MessageStore
170
+ messageStore: MessageStore,
171
+ coreProtocols?: CoreProtocolRegistry,
171
172
  ): Promise<void> {
172
173
 
173
174
  if (Message.isSignedByAuthorDelegate(recordsCount.message)) {
@@ -178,7 +179,7 @@ export class RecordsCountHandler implements MethodHandler {
178
179
  // this is because we dynamically filter out records that the caller is not authorized to see.
179
180
  // Currently only run protocol authorization if message deliberately invokes a protocol role.
180
181
  if (Records.shouldProtocolAuthorize(recordsCount.signaturePayload!)) {
181
- await ProtocolAuthorization.authorizeQueryOrSubscribe(tenant, recordsCount, messageStore);
182
+ await ProtocolAuthorization.authorizeQueryOrSubscribe(tenant, recordsCount, messageStore, coreProtocols);
182
183
  }
183
184
  }
184
185
  }
@@ -1,9 +1,8 @@
1
- import type { DidResolver } from '@enbox/dids';
1
+ import type { CoreProtocolRegistry } from '../core/core-protocol.js';
2
2
  import type { GenericMessageReply } from '../types/message-types.js';
3
3
  import type { MessageStore } from '../types//message-store.js';
4
- import type { MethodHandler } from '../types/method-handler.js';
5
4
  import type { RecordsDeleteMessage } from '../types/records-types.js';
6
- import type { ResumableTaskManager } from '../core/resumable-task-manager.js';
5
+ import type { HandlerDependencies, MethodHandler } from '../types/method-handler.js';
7
6
 
8
7
  import { authenticate } from '../core/auth.js';
9
8
  import { DwnInterfaceName } from '../enums/dwn-interface-method.js';
@@ -16,15 +15,10 @@ import { RecordsDelete } from '../interfaces/records-delete.js';
16
15
  import { RecordsGrantAuthorization } from '../core/records-grant-authorization.js';
17
16
  import { RecordsWrite } from '../interfaces/records-write.js';
18
17
  import { ResumableTaskName } from '../core/resumable-task-manager.js';
19
- import { DwnError, DwnErrorCode } from '../core/dwn-error.js';
20
18
 
21
19
  export class RecordsDeleteHandler implements MethodHandler {
22
20
 
23
- constructor(
24
- private didResolver: DidResolver,
25
- private messageStore: MessageStore,
26
- private resumableTaskManager: ResumableTaskManager,
27
- ) { }
21
+ constructor(private deps: HandlerDependencies) { }
28
22
 
29
23
  public async handle({
30
24
  tenant,
@@ -39,7 +33,7 @@ export class RecordsDeleteHandler implements MethodHandler {
39
33
 
40
34
  // authentication
41
35
  try {
42
- await authenticate(message.authorization, this.didResolver);
36
+ await authenticate(message.authorization, this.deps.didResolver);
43
37
  } catch (e) {
44
38
  return messageReplyFromError(e, 401);
45
39
  }
@@ -49,7 +43,7 @@ export class RecordsDeleteHandler implements MethodHandler {
49
43
  interface : DwnInterfaceName.Records,
50
44
  recordId : message.descriptor.recordId
51
45
  };
52
- const { messages: existingMessages } = await this.messageStore.query(tenant, [ query ]);
46
+ const { messages: existingMessages } = await this.deps.messageStore.query(tenant, [ query ]);
53
47
 
54
48
  // find which message is the newest, and if the incoming message is the newest
55
49
  const newestExistingMessage = await Message.getNewestMessage(existingMessages);
@@ -73,19 +67,20 @@ export class RecordsDeleteHandler implements MethodHandler {
73
67
  // NOTE: We need a RecordsWrite (doesn't have to be initial) to access the immutable properties for delete processing,
74
68
  // but if the latest record state is a RecordsDelete (ie. when we are pruning a non-prune delete),
75
69
  // we'd need to use the initial write because RecordsDelete does not contain the immutable properties needed for processing.
76
- const initialWrite = await RecordsWrite.fetchInitialRecordsWrite(this.messageStore, tenant, message.descriptor.recordId);
70
+ const initialWrite = await RecordsWrite.fetchInitialRecordsWrite(this.deps.messageStore, tenant, message.descriptor.recordId);
77
71
 
78
72
  await RecordsDeleteHandler.authorizeRecordsDelete(
79
73
  tenant,
80
74
  recordsDelete,
81
75
  initialWrite!,
82
- this.messageStore
76
+ this.deps.messageStore,
77
+ this.deps.coreProtocols,
83
78
  );
84
79
  } catch (e) {
85
80
  return messageReplyFromError(e, 401);
86
81
  }
87
82
 
88
- await this.resumableTaskManager.run({
83
+ await this.deps.resumableTaskManager!.run({
89
84
  name : ResumableTaskName.RecordsDelete,
90
85
  data : { tenant, message }
91
86
  });
@@ -105,7 +100,8 @@ export class RecordsDeleteHandler implements MethodHandler {
105
100
  tenant: string,
106
101
  recordsDelete: RecordsDelete,
107
102
  recordsWrite: RecordsWrite,
108
- messageStore: MessageStore
103
+ messageStore: MessageStore,
104
+ coreProtocols?: CoreProtocolRegistry,
109
105
  ): Promise<void> {
110
106
 
111
107
  if (Message.isSignedByAuthorDelegate(recordsDelete.message)) {
@@ -124,13 +120,8 @@ export class RecordsDeleteHandler implements MethodHandler {
124
120
  permissionGrant,
125
121
  messageStore,
126
122
  });
127
- } else if (recordsWrite.message.descriptor.protocol !== undefined) {
128
- await ProtocolAuthorization.authorizeDelete(tenant, recordsDelete, recordsWrite, messageStore);
129
123
  } else {
130
- throw new DwnError(
131
- DwnErrorCode.RecordsDeleteAuthorizationFailed,
132
- 'RecordsDelete message failed authorization'
133
- );
124
+ await ProtocolAuthorization.authorizeDelete(tenant, recordsDelete, recordsWrite, messageStore, coreProtocols);
134
125
  }
135
126
  }
136
127
  };