@enbox/dwn-sdk-js 0.0.6 → 0.0.7

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 (361) 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 +1 -2
  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/dwn-constant.js +7 -7
  10. package/dist/esm/src/core/dwn-constant.js.map +1 -1
  11. package/dist/esm/src/core/dwn-error.js +1 -0
  12. package/dist/esm/src/core/dwn-error.js.map +1 -1
  13. package/dist/esm/src/core/grant-authorization.js +37 -52
  14. package/dist/esm/src/core/grant-authorization.js.map +1 -1
  15. package/dist/esm/src/core/message.js +85 -116
  16. package/dist/esm/src/core/message.js.map +1 -1
  17. package/dist/esm/src/core/messages-grant-authorization.js +63 -78
  18. package/dist/esm/src/core/messages-grant-authorization.js.map +1 -1
  19. package/dist/esm/src/core/protocol-authorization-action.js +266 -0
  20. package/dist/esm/src/core/protocol-authorization-action.js.map +1 -0
  21. package/dist/esm/src/core/protocol-authorization-validation.js +254 -0
  22. package/dist/esm/src/core/protocol-authorization-validation.js.map +1 -0
  23. package/dist/esm/src/core/protocol-authorization.js +122 -740
  24. package/dist/esm/src/core/protocol-authorization.js.map +1 -1
  25. package/dist/esm/src/core/protocols-grant-authorization.js +24 -38
  26. package/dist/esm/src/core/protocols-grant-authorization.js.map +1 -1
  27. package/dist/esm/src/core/record-chain.js +64 -0
  28. package/dist/esm/src/core/record-chain.js.map +1 -0
  29. package/dist/esm/src/core/records-grant-authorization.js +55 -72
  30. package/dist/esm/src/core/records-grant-authorization.js.map +1 -1
  31. package/dist/esm/src/core/resumable-task-manager.js +50 -65
  32. package/dist/esm/src/core/resumable-task-manager.js.map +1 -1
  33. package/dist/esm/src/core/tenant-gate.js +2 -13
  34. package/dist/esm/src/core/tenant-gate.js.map +1 -1
  35. package/dist/esm/src/dwn.js +69 -86
  36. package/dist/esm/src/dwn.js.map +1 -1
  37. package/dist/esm/src/event-stream/event-emitter-stream.js +17 -31
  38. package/dist/esm/src/event-stream/event-emitter-stream.js.map +1 -1
  39. package/dist/esm/src/handlers/messages-read.js +67 -77
  40. package/dist/esm/src/handlers/messages-read.js.map +1 -1
  41. package/dist/esm/src/handlers/messages-subscribe.js +51 -61
  42. package/dist/esm/src/handlers/messages-subscribe.js.map +1 -1
  43. package/dist/esm/src/handlers/messages-sync.js +75 -85
  44. package/dist/esm/src/handlers/messages-sync.js.map +1 -1
  45. package/dist/esm/src/handlers/protocols-configure.js +135 -155
  46. package/dist/esm/src/handlers/protocols-configure.js.map +1 -1
  47. package/dist/esm/src/handlers/protocols-query.js +52 -51
  48. package/dist/esm/src/handlers/protocols-query.js.map +1 -1
  49. package/dist/esm/src/handlers/records-count.js +96 -82
  50. package/dist/esm/src/handlers/records-count.js.map +1 -1
  51. package/dist/esm/src/handlers/records-delete.js +78 -88
  52. package/dist/esm/src/handlers/records-delete.js.map +1 -1
  53. package/dist/esm/src/handlers/records-query.js +116 -101
  54. package/dist/esm/src/handlers/records-query.js.map +1 -1
  55. package/dist/esm/src/handlers/records-read.js +124 -131
  56. package/dist/esm/src/handlers/records-read.js.map +1 -1
  57. package/dist/esm/src/handlers/records-subscribe.js +150 -103
  58. package/dist/esm/src/handlers/records-subscribe.js.map +1 -1
  59. package/dist/esm/src/handlers/records-write.js +250 -259
  60. package/dist/esm/src/handlers/records-write.js.map +1 -1
  61. package/dist/esm/src/interfaces/messages-read.js +24 -32
  62. package/dist/esm/src/interfaces/messages-read.js.map +1 -1
  63. package/dist/esm/src/interfaces/messages-subscribe.js +27 -41
  64. package/dist/esm/src/interfaces/messages-subscribe.js.map +1 -1
  65. package/dist/esm/src/interfaces/messages-sync.js +26 -40
  66. package/dist/esm/src/interfaces/messages-sync.js.map +1 -1
  67. package/dist/esm/src/interfaces/protocols-configure.js +63 -63
  68. package/dist/esm/src/interfaces/protocols-configure.js.map +1 -1
  69. package/dist/esm/src/interfaces/protocols-query.js +55 -68
  70. package/dist/esm/src/interfaces/protocols-query.js.map +1 -1
  71. package/dist/esm/src/interfaces/records-count.js +50 -66
  72. package/dist/esm/src/interfaces/records-count.js.map +1 -1
  73. package/dist/esm/src/interfaces/records-delete.js +45 -55
  74. package/dist/esm/src/interfaces/records-delete.js.map +1 -1
  75. package/dist/esm/src/interfaces/records-query.js +60 -76
  76. package/dist/esm/src/interfaces/records-query.js.map +1 -1
  77. package/dist/esm/src/interfaces/records-read.js +51 -67
  78. package/dist/esm/src/interfaces/records-read.js.map +1 -1
  79. package/dist/esm/src/interfaces/records-subscribe.js +52 -68
  80. package/dist/esm/src/interfaces/records-subscribe.js.map +1 -1
  81. package/dist/esm/src/interfaces/records-write-query.js +102 -0
  82. package/dist/esm/src/interfaces/records-write-query.js.map +1 -0
  83. package/dist/esm/src/interfaces/records-write-signing.js +92 -0
  84. package/dist/esm/src/interfaces/records-write-signing.js.map +1 -0
  85. package/dist/esm/src/interfaces/records-write.js +407 -602
  86. package/dist/esm/src/interfaces/records-write.js.map +1 -1
  87. package/dist/esm/src/jose/algorithms/signing/ed25519.js +10 -19
  88. package/dist/esm/src/jose/algorithms/signing/ed25519.js.map +1 -1
  89. package/dist/esm/src/jose/jws/general/builder.js +23 -35
  90. package/dist/esm/src/jose/jws/general/builder.js.map +1 -1
  91. package/dist/esm/src/jose/jws/general/verifier.js +56 -69
  92. package/dist/esm/src/jose/jws/general/verifier.js.map +1 -1
  93. package/dist/esm/src/protocols/permission-grant.js +44 -15
  94. package/dist/esm/src/protocols/permission-grant.js.map +1 -1
  95. package/dist/esm/src/protocols/permission-request.js +29 -15
  96. package/dist/esm/src/protocols/permission-request.js.map +1 -1
  97. package/dist/esm/src/protocols/permissions.js +216 -226
  98. package/dist/esm/src/protocols/permissions.js.map +1 -1
  99. package/dist/esm/src/smt/smt-store-level.js +42 -64
  100. package/dist/esm/src/smt/smt-store-level.js.map +1 -1
  101. package/dist/esm/src/smt/smt-store-memory.js +19 -45
  102. package/dist/esm/src/smt/smt-store-memory.js.map +1 -1
  103. package/dist/esm/src/smt/smt-utils.js +28 -45
  104. package/dist/esm/src/smt/smt-utils.js.map +1 -1
  105. package/dist/esm/src/smt/sparse-merkle-tree.js +426 -471
  106. package/dist/esm/src/smt/sparse-merkle-tree.js.map +1 -1
  107. package/dist/esm/src/state-index/state-index-level.js +115 -150
  108. package/dist/esm/src/state-index/state-index-level.js.map +1 -1
  109. package/dist/esm/src/store/blockstore-level.js +54 -156
  110. package/dist/esm/src/store/blockstore-level.js.map +1 -1
  111. package/dist/esm/src/store/blockstore-mock.js +48 -153
  112. package/dist/esm/src/store/blockstore-mock.js.map +1 -1
  113. package/dist/esm/src/store/data-store-level.js +59 -99
  114. package/dist/esm/src/store/data-store-level.js.map +1 -1
  115. package/dist/esm/src/store/index-level-compound.js +246 -0
  116. package/dist/esm/src/store/index-level-compound.js.map +1 -0
  117. package/dist/esm/src/store/index-level.js +295 -713
  118. package/dist/esm/src/store/index-level.js.map +1 -1
  119. package/dist/esm/src/store/level-wrapper.js +143 -244
  120. package/dist/esm/src/store/level-wrapper.js.map +1 -1
  121. package/dist/esm/src/store/message-store-level.js +71 -94
  122. package/dist/esm/src/store/message-store-level.js.map +1 -1
  123. package/dist/esm/src/store/resumable-task-store-level.js +62 -101
  124. package/dist/esm/src/store/resumable-task-store-level.js.map +1 -1
  125. package/dist/esm/src/store/storage-controller.js +129 -144
  126. package/dist/esm/src/store/storage-controller.js.map +1 -1
  127. package/dist/esm/src/utils/abort.js +8 -19
  128. package/dist/esm/src/utils/abort.js.map +1 -1
  129. package/dist/esm/src/utils/array.js +15 -49
  130. package/dist/esm/src/utils/array.js.map +1 -1
  131. package/dist/esm/src/utils/cid.js +29 -77
  132. package/dist/esm/src/utils/cid.js.map +1 -1
  133. package/dist/esm/src/utils/data-stream.js +37 -65
  134. package/dist/esm/src/utils/data-stream.js.map +1 -1
  135. package/dist/esm/src/utils/encryption.js +136 -162
  136. package/dist/esm/src/utils/encryption.js.map +1 -1
  137. package/dist/esm/src/utils/filter.js +1 -12
  138. package/dist/esm/src/utils/filter.js.map +1 -1
  139. package/dist/esm/src/utils/hd-key.js +45 -63
  140. package/dist/esm/src/utils/hd-key.js.map +1 -1
  141. package/dist/esm/src/utils/jws.js +9 -20
  142. package/dist/esm/src/utils/jws.js.map +1 -1
  143. package/dist/esm/src/utils/memory-cache.js +12 -23
  144. package/dist/esm/src/utils/memory-cache.js.map +1 -1
  145. package/dist/esm/src/utils/messages.js +9 -3
  146. package/dist/esm/src/utils/messages.js.map +1 -1
  147. package/dist/esm/src/utils/private-key-signer.js +9 -17
  148. package/dist/esm/src/utils/private-key-signer.js.map +1 -1
  149. package/dist/esm/src/utils/protocols.js +62 -70
  150. package/dist/esm/src/utils/protocols.js.map +1 -1
  151. package/dist/esm/src/utils/records.js +100 -125
  152. package/dist/esm/src/utils/records.js.map +1 -1
  153. package/dist/esm/src/utils/secp256k1.js +60 -96
  154. package/dist/esm/src/utils/secp256k1.js.map +1 -1
  155. package/dist/esm/src/utils/secp256r1.js +54 -71
  156. package/dist/esm/src/utils/secp256r1.js.map +1 -1
  157. package/dist/esm/src/utils/time.js +5 -18
  158. package/dist/esm/src/utils/time.js.map +1 -1
  159. package/dist/esm/src/utils/url.js +3 -3
  160. package/dist/esm/src/utils/url.js.map +1 -1
  161. package/dist/esm/tests/core/auth.spec.js +3 -12
  162. package/dist/esm/tests/core/auth.spec.js.map +1 -1
  163. package/dist/esm/tests/core/message.spec.js +50 -59
  164. package/dist/esm/tests/core/message.spec.js.map +1 -1
  165. package/dist/esm/tests/core/protocol-authorization.spec.js +9 -18
  166. package/dist/esm/tests/core/protocol-authorization.spec.js.map +1 -1
  167. package/dist/esm/tests/dwn.spec.js +45 -58
  168. package/dist/esm/tests/dwn.spec.js.map +1 -1
  169. package/dist/esm/tests/event-stream/event-emitter-stream.spec.js +24 -33
  170. package/dist/esm/tests/event-stream/event-emitter-stream.spec.js.map +1 -1
  171. package/dist/esm/tests/event-stream/event-stream.spec.js +46 -55
  172. package/dist/esm/tests/event-stream/event-stream.spec.js.map +1 -1
  173. package/dist/esm/tests/features/author-delegated-grant.spec.js +326 -343
  174. package/dist/esm/tests/features/author-delegated-grant.spec.js.map +1 -1
  175. package/dist/esm/tests/features/owner-delegated-grant.spec.js +153 -169
  176. package/dist/esm/tests/features/owner-delegated-grant.spec.js.map +1 -1
  177. package/dist/esm/tests/features/owner-signature.spec.js +67 -78
  178. package/dist/esm/tests/features/owner-signature.spec.js.map +1 -1
  179. package/dist/esm/tests/features/permissions.spec.js +446 -181
  180. package/dist/esm/tests/features/permissions.spec.js.map +1 -1
  181. package/dist/esm/tests/features/protocol-composition.spec.js +346 -356
  182. package/dist/esm/tests/features/protocol-composition.spec.js.map +1 -1
  183. package/dist/esm/tests/features/protocol-create-action.spec.js +42 -51
  184. package/dist/esm/tests/features/protocol-create-action.spec.js.map +1 -1
  185. package/dist/esm/tests/features/protocol-delete-action.spec.js +94 -103
  186. package/dist/esm/tests/features/protocol-delete-action.spec.js.map +1 -1
  187. package/dist/esm/tests/features/protocol-update-action.spec.js +105 -114
  188. package/dist/esm/tests/features/protocol-update-action.spec.js.map +1 -1
  189. package/dist/esm/tests/features/records-prune.spec.js +175 -191
  190. package/dist/esm/tests/features/records-prune.spec.js.map +1 -1
  191. package/dist/esm/tests/features/records-tags.spec.js +441 -460
  192. package/dist/esm/tests/features/records-tags.spec.js.map +1 -1
  193. package/dist/esm/tests/features/resumable-tasks.spec.js +82 -91
  194. package/dist/esm/tests/features/resumable-tasks.spec.js.map +1 -1
  195. package/dist/esm/tests/handlers/messages-read.spec.js +206 -207
  196. package/dist/esm/tests/handlers/messages-read.spec.js.map +1 -1
  197. package/dist/esm/tests/handlers/messages-subscribe.spec.js +145 -154
  198. package/dist/esm/tests/handlers/messages-subscribe.spec.js.map +1 -1
  199. package/dist/esm/tests/handlers/messages-sync.spec.js +174 -183
  200. package/dist/esm/tests/handlers/messages-sync.spec.js.map +1 -1
  201. package/dist/esm/tests/handlers/protocols-configure.spec.js +244 -238
  202. package/dist/esm/tests/handlers/protocols-configure.spec.js.map +1 -1
  203. package/dist/esm/tests/handlers/protocols-query.spec.js +156 -169
  204. package/dist/esm/tests/handlers/protocols-query.spec.js.map +1 -1
  205. package/dist/esm/tests/handlers/records-count.spec.js +93 -102
  206. package/dist/esm/tests/handlers/records-count.spec.js.map +1 -1
  207. package/dist/esm/tests/handlers/records-delete.spec.js +252 -264
  208. package/dist/esm/tests/handlers/records-delete.spec.js.map +1 -1
  209. package/dist/esm/tests/handlers/records-query.spec.js +917 -988
  210. package/dist/esm/tests/handlers/records-query.spec.js.map +1 -1
  211. package/dist/esm/tests/handlers/records-read.spec.js +549 -564
  212. package/dist/esm/tests/handlers/records-read.spec.js.map +1 -1
  213. package/dist/esm/tests/handlers/records-subscribe.spec.js +269 -278
  214. package/dist/esm/tests/handlers/records-subscribe.spec.js.map +1 -1
  215. package/dist/esm/tests/handlers/records-write.spec.js +1057 -1082
  216. package/dist/esm/tests/handlers/records-write.spec.js.map +1 -1
  217. package/dist/esm/tests/interfaces/messages-get.spec.js +39 -48
  218. package/dist/esm/tests/interfaces/messages-get.spec.js.map +1 -1
  219. package/dist/esm/tests/interfaces/messages-subscribe.spec.js +4 -13
  220. package/dist/esm/tests/interfaces/messages-subscribe.spec.js.map +1 -1
  221. package/dist/esm/tests/interfaces/protocols-configure.spec.js +212 -88
  222. package/dist/esm/tests/interfaces/protocols-configure.spec.js.map +1 -1
  223. package/dist/esm/tests/interfaces/protocols-query.spec.js +8 -17
  224. package/dist/esm/tests/interfaces/protocols-query.spec.js.map +1 -1
  225. package/dist/esm/tests/interfaces/records-delete.spec.js +8 -17
  226. package/dist/esm/tests/interfaces/records-delete.spec.js.map +1 -1
  227. package/dist/esm/tests/interfaces/records-query.spec.js +20 -29
  228. package/dist/esm/tests/interfaces/records-query.spec.js.map +1 -1
  229. package/dist/esm/tests/interfaces/records-read.spec.js +42 -51
  230. package/dist/esm/tests/interfaces/records-read.spec.js.map +1 -1
  231. package/dist/esm/tests/interfaces/records-subscribe.spec.js +16 -25
  232. package/dist/esm/tests/interfaces/records-subscribe.spec.js.map +1 -1
  233. package/dist/esm/tests/interfaces/records-write.spec.js +152 -165
  234. package/dist/esm/tests/interfaces/records-write.spec.js.map +1 -1
  235. package/dist/esm/tests/jose/jws/general.spec.js +36 -45
  236. package/dist/esm/tests/jose/jws/general.spec.js.map +1 -1
  237. package/dist/esm/tests/protocols/permission-grant.spec.js +44 -50
  238. package/dist/esm/tests/protocols/permission-grant.spec.js.map +1 -1
  239. package/dist/esm/tests/protocols/permission-request.spec.js +23 -32
  240. package/dist/esm/tests/protocols/permission-request.spec.js.map +1 -1
  241. package/dist/esm/tests/protocols/permissions.spec.js +49 -55
  242. package/dist/esm/tests/protocols/permissions.spec.js.map +1 -1
  243. package/dist/esm/tests/scenarios/aggregator.spec.js +124 -135
  244. package/dist/esm/tests/scenarios/aggregator.spec.js.map +1 -1
  245. package/dist/esm/tests/scenarios/deleted-record.spec.js +23 -32
  246. package/dist/esm/tests/scenarios/deleted-record.spec.js.map +1 -1
  247. package/dist/esm/tests/scenarios/end-to-end-tests.spec.js +52 -61
  248. package/dist/esm/tests/scenarios/end-to-end-tests.spec.js.map +1 -1
  249. package/dist/esm/tests/scenarios/nested-roles.spec.js +63 -73
  250. package/dist/esm/tests/scenarios/nested-roles.spec.js.map +1 -1
  251. package/dist/esm/tests/scenarios/subscriptions.spec.js +377 -333
  252. package/dist/esm/tests/scenarios/subscriptions.spec.js.map +1 -1
  253. package/dist/esm/tests/smt/smt-store-level.spec.js +76 -87
  254. package/dist/esm/tests/smt/smt-store-level.spec.js.map +1 -1
  255. package/dist/esm/tests/smt/sparse-merkle-tree.spec.js +344 -353
  256. package/dist/esm/tests/smt/sparse-merkle-tree.spec.js.map +1 -1
  257. package/dist/esm/tests/state-index/state-index-level.spec.js +117 -126
  258. package/dist/esm/tests/state-index/state-index-level.spec.js.map +1 -1
  259. package/dist/esm/tests/store/blockstore-level.spec.js +44 -99
  260. package/dist/esm/tests/store/blockstore-level.spec.js.map +1 -1
  261. package/dist/esm/tests/store/blockstore-mock.spec.js +40 -120
  262. package/dist/esm/tests/store/blockstore-mock.spec.js.map +1 -1
  263. package/dist/esm/tests/store/data-store-level.spec.js +86 -95
  264. package/dist/esm/tests/store/data-store-level.spec.js.map +1 -1
  265. package/dist/esm/tests/store/index-level.spec.js +404 -414
  266. package/dist/esm/tests/store/index-level.spec.js.map +1 -1
  267. package/dist/esm/tests/store/message-store-level.spec.js +13 -22
  268. package/dist/esm/tests/store/message-store-level.spec.js.map +1 -1
  269. package/dist/esm/tests/store/message-store.spec.js +229 -238
  270. package/dist/esm/tests/store/message-store.spec.js.map +1 -1
  271. package/dist/esm/tests/test-event-stream.js +3 -3
  272. package/dist/esm/tests/test-event-stream.js.map +1 -1
  273. package/dist/esm/tests/test-stores.js +16 -13
  274. package/dist/esm/tests/test-stores.js.map +1 -1
  275. package/dist/esm/tests/test-suite.js +2 -11
  276. package/dist/esm/tests/test-suite.js.map +1 -1
  277. package/dist/esm/tests/utils/cid.spec.js +24 -33
  278. package/dist/esm/tests/utils/cid.spec.js.map +1 -1
  279. package/dist/esm/tests/utils/data-stream.spec.js +48 -57
  280. package/dist/esm/tests/utils/data-stream.spec.js.map +1 -1
  281. package/dist/esm/tests/utils/encryption-callbacks.spec.js +45 -54
  282. package/dist/esm/tests/utils/encryption-callbacks.spec.js.map +1 -1
  283. package/dist/esm/tests/utils/encryption.spec.js +229 -82
  284. package/dist/esm/tests/utils/encryption.spec.js.map +1 -1
  285. package/dist/esm/tests/utils/filters.spec.js +46 -55
  286. package/dist/esm/tests/utils/filters.spec.js.map +1 -1
  287. package/dist/esm/tests/utils/hd-key.spec.js +10 -19
  288. package/dist/esm/tests/utils/hd-key.spec.js.map +1 -1
  289. package/dist/esm/tests/utils/jws.spec.js +3 -12
  290. package/dist/esm/tests/utils/jws.spec.js.map +1 -1
  291. package/dist/esm/tests/utils/memory-cache.spec.js +9 -18
  292. package/dist/esm/tests/utils/memory-cache.spec.js.map +1 -1
  293. package/dist/esm/tests/utils/messages.spec.js +6 -15
  294. package/dist/esm/tests/utils/messages.spec.js.map +1 -1
  295. package/dist/esm/tests/utils/poller.js +22 -33
  296. package/dist/esm/tests/utils/poller.js.map +1 -1
  297. package/dist/esm/tests/utils/private-key-signer.spec.js +15 -24
  298. package/dist/esm/tests/utils/private-key-signer.spec.js.map +1 -1
  299. package/dist/esm/tests/utils/records.spec.js +10 -19
  300. package/dist/esm/tests/utils/records.spec.js.map +1 -1
  301. package/dist/esm/tests/utils/secp256k1.spec.js +16 -25
  302. package/dist/esm/tests/utils/secp256k1.spec.js.map +1 -1
  303. package/dist/esm/tests/utils/secp256r1.spec.js +18 -27
  304. package/dist/esm/tests/utils/secp256r1.spec.js.map +1 -1
  305. package/dist/esm/tests/utils/test-data-generator.js +414 -468
  306. package/dist/esm/tests/utils/test-data-generator.js.map +1 -1
  307. package/dist/esm/tests/validation/json-schemas/definitions.spec.js +2 -11
  308. package/dist/esm/tests/validation/json-schemas/definitions.spec.js.map +1 -1
  309. package/dist/esm/tests/validation/json-schemas/jwk/general-jwk.spec.js +4 -13
  310. package/dist/esm/tests/validation/json-schemas/jwk/general-jwk.spec.js.map +1 -1
  311. package/dist/esm/tests/validation/json-schemas/jwk/public-jwk.spec.js +8 -17
  312. package/dist/esm/tests/validation/json-schemas/jwk/public-jwk.spec.js.map +1 -1
  313. package/dist/esm/tests/validation/json-schemas/jwk-verification-method.spec.js +3 -12
  314. package/dist/esm/tests/validation/json-schemas/jwk-verification-method.spec.js.map +1 -1
  315. package/dist/esm/tests/validation/json-schemas/protocols/protocols-configure.spec.js +4 -13
  316. package/dist/esm/tests/validation/json-schemas/protocols/protocols-configure.spec.js.map +1 -1
  317. package/dist/esm/tests/validation/json-schemas/records/records-query.spec.js +2 -11
  318. package/dist/esm/tests/validation/json-schemas/records/records-query.spec.js.map +1 -1
  319. package/dist/esm/tests/validation/json-schemas/records/records-read.spec.js +2 -11
  320. package/dist/esm/tests/validation/json-schemas/records/records-read.spec.js.map +1 -1
  321. package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js +7 -16
  322. package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js.map +1 -1
  323. package/dist/types/src/core/protocol-authorization-action.d.ts +42 -0
  324. package/dist/types/src/core/protocol-authorization-action.d.ts.map +1 -0
  325. package/dist/types/src/core/protocol-authorization-validation.d.ts +60 -0
  326. package/dist/types/src/core/protocol-authorization-validation.d.ts.map +1 -0
  327. package/dist/types/src/core/protocol-authorization.d.ts +10 -100
  328. package/dist/types/src/core/protocol-authorization.d.ts.map +1 -1
  329. package/dist/types/src/core/record-chain.d.ts +24 -0
  330. package/dist/types/src/core/record-chain.d.ts.map +1 -0
  331. package/dist/types/src/handlers/records-write.d.ts +2 -1
  332. package/dist/types/src/handlers/records-write.d.ts.map +1 -1
  333. package/dist/types/src/interfaces/protocols-configure.d.ts.map +1 -1
  334. package/dist/types/src/interfaces/records-write-query.d.ts +33 -0
  335. package/dist/types/src/interfaces/records-write-query.d.ts.map +1 -0
  336. package/dist/types/src/interfaces/records-write-signing.d.ts +35 -0
  337. package/dist/types/src/interfaces/records-write-signing.d.ts.map +1 -0
  338. package/dist/types/src/interfaces/records-write.d.ts +10 -44
  339. package/dist/types/src/interfaces/records-write.d.ts.map +1 -1
  340. package/dist/types/src/store/index-level-compound.d.ts +70 -0
  341. package/dist/types/src/store/index-level-compound.d.ts.map +1 -0
  342. package/dist/types/src/store/index-level.d.ts +0 -58
  343. package/dist/types/src/store/index-level.d.ts.map +1 -1
  344. package/dist/types/src/utils/protocols.d.ts +5 -0
  345. package/dist/types/src/utils/protocols.d.ts.map +1 -1
  346. package/dist/types/tests/features/permissions.spec.d.ts.map +1 -1
  347. package/package.json +2 -2
  348. package/src/core/protocol-authorization-action.ts +377 -0
  349. package/src/core/protocol-authorization-validation.ts +391 -0
  350. package/src/core/protocol-authorization.ts +60 -849
  351. package/src/core/record-chain.ts +99 -0
  352. package/src/handlers/records-read.ts +1 -1
  353. package/src/handlers/records-write.ts +37 -21
  354. package/src/interfaces/protocols-configure.ts +33 -5
  355. package/src/interfaces/records-write-query.ts +139 -0
  356. package/src/interfaces/records-write-signing.ts +143 -0
  357. package/src/interfaces/records-write.ts +49 -221
  358. package/src/store/index-level-compound.ts +324 -0
  359. package/src/store/index-level.ts +24 -306
  360. package/src/utils/protocols.ts +8 -0
  361. package/src/utils/records.ts +1 -1
@@ -1,12 +1,3 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
1
  import { authenticate } from '../core/auth.js';
11
2
  import { DateSort } from '../types/records-types.js';
12
3
  import { Message } from '../core/message.js';
@@ -18,63 +9,64 @@ import { RecordsWrite } from '../interfaces/records-write.js';
18
9
  import { SortDirection } from '../types/query-types.js';
19
10
  import { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';
20
11
  export class RecordsQueryHandler {
12
+ didResolver;
13
+ messageStore;
14
+ dataStore;
21
15
  constructor(didResolver, messageStore, dataStore) {
22
16
  this.didResolver = didResolver;
23
17
  this.messageStore = messageStore;
24
18
  this.dataStore = dataStore;
25
19
  }
26
- handle(_a) {
27
- return __awaiter(this, arguments, void 0, function* ({ tenant, message }) {
28
- let recordsQuery;
20
+ async handle({ tenant, message }) {
21
+ let recordsQuery;
22
+ try {
23
+ recordsQuery = await RecordsQuery.parse(message);
24
+ }
25
+ catch (e) {
26
+ return messageReplyFromError(e, 400);
27
+ }
28
+ let recordsWrites;
29
+ let cursor;
30
+ // if this is an anonymous query and the filter supports published records, query only published records
31
+ if (Records.filterIncludesPublishedRecords(recordsQuery.message.descriptor.filter) && recordsQuery.author === undefined) {
32
+ const results = await this.fetchPublishedRecords(tenant, recordsQuery);
33
+ recordsWrites = results.messages;
34
+ cursor = results.cursor;
35
+ }
36
+ else {
37
+ // authentication and authorization
29
38
  try {
30
- recordsQuery = yield RecordsQuery.parse(message);
39
+ await authenticate(message.authorization, this.didResolver);
40
+ await RecordsQueryHandler.authorizeRecordsQuery(tenant, recordsQuery, this.messageStore);
31
41
  }
32
42
  catch (e) {
33
- return messageReplyFromError(e, 400);
43
+ return messageReplyFromError(e, 401);
34
44
  }
35
- let recordsWrites;
36
- let cursor;
37
- // if this is an anonymous query and the filter supports published records, query only published records
38
- if (Records.filterIncludesPublishedRecords(recordsQuery.message.descriptor.filter) && recordsQuery.author === undefined) {
39
- const results = yield this.fetchPublishedRecords(tenant, recordsQuery);
45
+ if (recordsQuery.author === tenant) {
46
+ const results = await this.fetchRecordsAsOwner(tenant, recordsQuery);
40
47
  recordsWrites = results.messages;
41
48
  cursor = results.cursor;
42
49
  }
43
50
  else {
44
- // authentication and authorization
45
- try {
46
- yield authenticate(message.authorization, this.didResolver);
47
- yield RecordsQueryHandler.authorizeRecordsQuery(tenant, recordsQuery, this.messageStore);
48
- }
49
- catch (e) {
50
- return messageReplyFromError(e, 401);
51
- }
52
- if (recordsQuery.author === tenant) {
53
- const results = yield this.fetchRecordsAsOwner(tenant, recordsQuery);
54
- recordsWrites = results.messages;
55
- cursor = results.cursor;
56
- }
57
- else {
58
- const results = yield this.fetchRecordsAsNonOwner(tenant, recordsQuery);
59
- recordsWrites = results.messages;
60
- cursor = results.cursor;
61
- }
51
+ const results = await this.fetchRecordsAsNonOwner(tenant, recordsQuery);
52
+ recordsWrites = results.messages;
53
+ cursor = results.cursor;
62
54
  }
63
- // attach initial write if returned RecordsWrite is not initial write
64
- for (const recordsWrite of recordsWrites) {
65
- if (!(yield RecordsWrite.isInitialWrite(recordsWrite))) {
66
- const initialWriteQueryResult = yield this.messageStore.query(tenant, [{ recordId: recordsWrite.recordId, isLatestBaseState: false, method: DwnMethodName.Write }]);
67
- const initialWrite = initialWriteQueryResult.messages[0];
68
- delete initialWrite.encodedData; // defensive measure but technically optional because we do this when an update RecordsWrite takes place
69
- recordsWrite.initialWrite = initialWrite;
70
- }
55
+ }
56
+ // attach initial write if returned RecordsWrite is not initial write
57
+ for (const recordsWrite of recordsWrites) {
58
+ if (!await RecordsWrite.isInitialWrite(recordsWrite)) {
59
+ const initialWriteQueryResult = await this.messageStore.query(tenant, [{ recordId: recordsWrite.recordId, isLatestBaseState: false, method: DwnMethodName.Write }]);
60
+ const initialWrite = initialWriteQueryResult.messages[0];
61
+ delete initialWrite.encodedData; // defensive measure but technically optional because we do this when an update RecordsWrite takes place
62
+ recordsWrite.initialWrite = initialWrite;
71
63
  }
72
- return {
73
- status: { code: 200, detail: 'OK' },
74
- entries: recordsWrites,
75
- cursor
76
- };
77
- });
64
+ }
65
+ return {
66
+ status: { code: 200, detail: 'OK' },
67
+ entries: recordsWrites,
68
+ cursor
69
+ };
78
70
  }
79
71
  /**
80
72
  * Convert an incoming DateSort to a sort type accepted by MessageStore
@@ -104,14 +96,17 @@ export class RecordsQueryHandler {
104
96
  /**
105
97
  * Fetches the records as the owner of the DWN with no additional filtering.
106
98
  */
107
- fetchRecordsAsOwner(tenant, recordsQuery) {
108
- return __awaiter(this, void 0, void 0, function* () {
109
- const { dateSort, filter, pagination } = recordsQuery.message.descriptor;
110
- // fetch all published records matching the query
111
- const queryFilter = Object.assign(Object.assign({}, Records.convertFilter(filter, dateSort)), { interface: DwnInterfaceName.Records, method: DwnMethodName.Write, isLatestBaseState: true });
112
- const messageSort = this.convertDateSort(dateSort);
113
- return this.messageStore.query(tenant, [queryFilter], messageSort, pagination);
114
- });
99
+ async fetchRecordsAsOwner(tenant, recordsQuery) {
100
+ const { dateSort, filter, pagination } = recordsQuery.message.descriptor;
101
+ // fetch all published records matching the query
102
+ const queryFilter = {
103
+ ...Records.convertFilter(filter, dateSort),
104
+ interface: DwnInterfaceName.Records,
105
+ method: DwnMethodName.Write,
106
+ isLatestBaseState: true
107
+ };
108
+ const messageSort = this.convertDateSort(dateSort);
109
+ return this.messageStore.query(tenant, [queryFilter], messageSort, pagination);
115
110
  }
116
111
  /**
117
112
  * Fetches the records as a non-owner.
@@ -132,43 +127,45 @@ export class RecordsQueryHandler {
132
127
  * 2. unpublished records authorized by a protocol rule.
133
128
  *
134
129
  */
135
- fetchRecordsAsNonOwner(tenant, recordsQuery) {
136
- return __awaiter(this, void 0, void 0, function* () {
137
- const { dateSort, pagination, filter } = recordsQuery.message.descriptor;
138
- const filters = [];
139
- if (Records.filterIncludesPublishedRecords(filter)) {
140
- filters.push(RecordsQueryHandler.buildPublishedRecordsFilter(recordsQuery));
130
+ async fetchRecordsAsNonOwner(tenant, recordsQuery) {
131
+ const { dateSort, pagination, filter } = recordsQuery.message.descriptor;
132
+ const filters = [];
133
+ if (Records.filterIncludesPublishedRecords(filter)) {
134
+ filters.push(RecordsQueryHandler.buildPublishedRecordsFilter(recordsQuery));
135
+ }
136
+ if (Records.filterIncludesUnpublishedRecords(filter)) {
137
+ if (Records.shouldBuildUnpublishedAuthorFilter(filter, recordsQuery.author)) {
138
+ filters.push(RecordsQueryHandler.buildUnpublishedRecordsByQueryAuthorFilter(recordsQuery));
141
139
  }
142
- if (Records.filterIncludesUnpublishedRecords(filter)) {
143
- if (Records.shouldBuildUnpublishedAuthorFilter(filter, recordsQuery.author)) {
144
- filters.push(RecordsQueryHandler.buildUnpublishedRecordsByQueryAuthorFilter(recordsQuery));
145
- }
146
- if (Records.shouldProtocolAuthorize(recordsQuery.signaturePayload)) {
147
- filters.push(RecordsQueryHandler.buildUnpublishedProtocolAuthorizedRecordsFilter(recordsQuery));
148
- }
149
- if (Records.shouldBuildUnpublishedRecipientFilter(filter, recordsQuery.author)) {
150
- filters.push(RecordsQueryHandler.buildUnpublishedRecordsForQueryAuthorFilter(recordsQuery));
151
- }
140
+ if (Records.shouldProtocolAuthorize(recordsQuery.signaturePayload)) {
141
+ filters.push(RecordsQueryHandler.buildUnpublishedProtocolAuthorizedRecordsFilter(recordsQuery));
142
+ }
143
+ if (Records.shouldBuildUnpublishedRecipientFilter(filter, recordsQuery.author)) {
144
+ filters.push(RecordsQueryHandler.buildUnpublishedRecordsForQueryAuthorFilter(recordsQuery));
152
145
  }
153
- const messageSort = this.convertDateSort(dateSort);
154
- return this.messageStore.query(tenant, filters, messageSort, pagination);
155
- });
146
+ }
147
+ const messageSort = this.convertDateSort(dateSort);
148
+ return this.messageStore.query(tenant, filters, messageSort, pagination);
156
149
  }
157
150
  /**
158
151
  * Fetches only published records.
159
152
  */
160
- fetchPublishedRecords(tenant, recordsQuery) {
161
- return __awaiter(this, void 0, void 0, function* () {
162
- const { dateSort, pagination } = recordsQuery.message.descriptor;
163
- const filter = RecordsQueryHandler.buildPublishedRecordsFilter(recordsQuery);
164
- const messageSort = this.convertDateSort(dateSort);
165
- return this.messageStore.query(tenant, [filter], messageSort, pagination);
166
- });
153
+ async fetchPublishedRecords(tenant, recordsQuery) {
154
+ const { dateSort, pagination } = recordsQuery.message.descriptor;
155
+ const filter = RecordsQueryHandler.buildPublishedRecordsFilter(recordsQuery);
156
+ const messageSort = this.convertDateSort(dateSort);
157
+ return this.messageStore.query(tenant, [filter], messageSort, pagination);
167
158
  }
168
159
  static buildPublishedRecordsFilter(recordsQuery) {
169
160
  const { dateSort, filter } = recordsQuery.message.descriptor;
170
161
  // fetch all published records matching the query
171
- return Object.assign(Object.assign({}, Records.convertFilter(filter, dateSort)), { interface: DwnInterfaceName.Records, method: DwnMethodName.Write, published: true, isLatestBaseState: true });
162
+ return {
163
+ ...Records.convertFilter(filter, dateSort),
164
+ interface: DwnInterfaceName.Records,
165
+ method: DwnMethodName.Write,
166
+ published: true,
167
+ isLatestBaseState: true
168
+ };
172
169
  }
173
170
  /**
174
171
  * Creates a filter for unpublished records that are intended for the query author (where `recipient` is the author).
@@ -176,7 +173,14 @@ export class RecordsQueryHandler {
176
173
  static buildUnpublishedRecordsForQueryAuthorFilter(recordsQuery) {
177
174
  const { dateSort, filter } = recordsQuery.message.descriptor;
178
175
  // include records where recipient is query author
179
- return Object.assign(Object.assign({}, Records.convertFilter(filter, dateSort)), { interface: DwnInterfaceName.Records, method: DwnMethodName.Write, recipient: recordsQuery.author, isLatestBaseState: true, published: false });
176
+ return {
177
+ ...Records.convertFilter(filter, dateSort),
178
+ interface: DwnInterfaceName.Records,
179
+ method: DwnMethodName.Write,
180
+ recipient: recordsQuery.author,
181
+ isLatestBaseState: true,
182
+ published: false
183
+ };
180
184
  }
181
185
  /**
182
186
  * Creates a filter for unpublished records that are within the specified protocol.
@@ -184,7 +188,13 @@ export class RecordsQueryHandler {
184
188
  */
185
189
  static buildUnpublishedProtocolAuthorizedRecordsFilter(recordsQuery) {
186
190
  const { dateSort, filter } = recordsQuery.message.descriptor;
187
- return Object.assign(Object.assign({}, Records.convertFilter(filter, dateSort)), { interface: DwnInterfaceName.Records, method: DwnMethodName.Write, isLatestBaseState: true, published: false });
191
+ return {
192
+ ...Records.convertFilter(filter, dateSort),
193
+ interface: DwnInterfaceName.Records,
194
+ method: DwnMethodName.Write,
195
+ isLatestBaseState: true,
196
+ published: false
197
+ };
188
198
  }
189
199
  /**
190
200
  * Creates a filter for only unpublished records where the author is the same as the query author.
@@ -192,23 +202,28 @@ export class RecordsQueryHandler {
192
202
  static buildUnpublishedRecordsByQueryAuthorFilter(recordsQuery) {
193
203
  const { dateSort, filter } = recordsQuery.message.descriptor;
194
204
  // include records where author is the same as the query author
195
- return Object.assign(Object.assign({}, Records.convertFilter(filter, dateSort)), { author: recordsQuery.author, interface: DwnInterfaceName.Records, method: DwnMethodName.Write, isLatestBaseState: true, published: false });
205
+ return {
206
+ ...Records.convertFilter(filter, dateSort),
207
+ author: recordsQuery.author,
208
+ interface: DwnInterfaceName.Records,
209
+ method: DwnMethodName.Write,
210
+ isLatestBaseState: true,
211
+ published: false
212
+ };
196
213
  }
197
214
  /**
198
215
  * @param messageStore Used to check if the grant has been revoked.
199
216
  */
200
- static authorizeRecordsQuery(tenant, recordsQuery, messageStore) {
201
- return __awaiter(this, void 0, void 0, function* () {
202
- if (Message.isSignedByAuthorDelegate(recordsQuery.message)) {
203
- yield recordsQuery.authorizeDelegate(messageStore);
204
- }
205
- // NOTE: not all RecordsQuery messages require protocol authorization even if the filter includes protocol-related fields,
206
- // this is because we dynamically filter out records that the caller is not authorized to see.
207
- // Currently only run protocol authorization if message deliberately invokes a protocol role.
208
- if (Records.shouldProtocolAuthorize(recordsQuery.signaturePayload)) {
209
- yield ProtocolAuthorization.authorizeQueryOrSubscribe(tenant, recordsQuery, messageStore);
210
- }
211
- });
217
+ static async authorizeRecordsQuery(tenant, recordsQuery, messageStore) {
218
+ if (Message.isSignedByAuthorDelegate(recordsQuery.message)) {
219
+ await recordsQuery.authorizeDelegate(messageStore);
220
+ }
221
+ // NOTE: not all RecordsQuery messages require protocol authorization even if the filter includes protocol-related fields,
222
+ // this is because we dynamically filter out records that the caller is not authorized to see.
223
+ // Currently only run protocol authorization if message deliberately invokes a protocol role.
224
+ if (Records.shouldProtocolAuthorize(recordsQuery.signaturePayload)) {
225
+ await ProtocolAuthorization.authorizeQueryOrSubscribe(tenant, recordsQuery, messageStore);
226
+ }
212
227
  }
213
228
  }
214
229
  //# sourceMappingURL=records-query.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"records-query.js","sourceRoot":"","sources":["../../../../src/handlers/records-query.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"records-query.js","sourceRoot":"","sources":["../../../../src/handlers/records-query.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,3 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
1
  import { authenticate } from '../core/auth.js';
11
2
  import { DataStream } from '../utils/data-stream.js';
12
3
  import { Encoder } from '../utils/encoder.js';
@@ -21,147 +12,149 @@ import { RecordsWrite } from '../interfaces/records-write.js';
21
12
  import { DwnError, DwnErrorCode } from '../core/dwn-error.js';
22
13
  import { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';
23
14
  export class RecordsReadHandler {
15
+ didResolver;
16
+ messageStore;
17
+ dataStore;
24
18
  constructor(didResolver, messageStore, dataStore) {
25
19
  this.didResolver = didResolver;
26
20
  this.messageStore = messageStore;
27
21
  this.dataStore = dataStore;
28
22
  }
29
- handle(_a) {
30
- return __awaiter(this, arguments, void 0, function* ({ tenant, message }) {
31
- let recordsRead;
32
- try {
33
- recordsRead = yield RecordsRead.parse(message);
34
- }
35
- catch (e) {
36
- return messageReplyFromError(e, 400);
37
- }
38
- // authentication
39
- try {
40
- if (recordsRead.author !== undefined) {
41
- yield authenticate(message.authorization, this.didResolver);
42
- }
43
- }
44
- catch (e) {
45
- return messageReplyFromError(e, 401);
46
- }
47
- // get the latest active message matching the supplied filter, sorted and limited to 1 result
48
- const query = Object.assign({
49
- // NOTE: we don't filter by `method` so that we get both RecordsWrite and RecordsDelete messages
50
- interface: DwnInterfaceName.Records, isLatestBaseState: true }, Records.convertFilter(message.descriptor.filter));
51
- const messageSort = Records.convertDateSort(message.descriptor.dateSort);
52
- const { messages: existingMessages } = yield this.messageStore.query(tenant, [query], messageSort, { limit: 1 });
53
- if (existingMessages.length === 0) {
54
- return {
55
- status: { code: 404, detail: 'Not Found' }
56
- };
57
- }
58
- const matchedMessage = existingMessages[0];
59
- // if the matched message is a RecordsDelete, we mark the record as not-found and return both the RecordsDelete and the initial RecordsWrite
60
- // TODO: https://github.com/enboxorg/enbox/issues/819:
61
- // Consider performing authorization checks like when records exists before returning RecordsDelete and initial RecordsWrite of a deleted record
62
- if (matchedMessage.descriptor.method === DwnMethodName.Delete) {
63
- const recordsDeleteMessage = matchedMessage;
64
- const initialWrite = yield RecordsWrite.fetchInitialRecordsWriteMessage(this.messageStore, tenant, recordsDeleteMessage.descriptor.recordId);
65
- if (initialWrite === undefined) {
66
- return messageReplyFromError(new DwnError(DwnErrorCode.RecordsReadInitialWriteNotFound, 'Initial write for deleted record not found'), 400);
67
- }
68
- // Perform authorization before returning the delete and initial write messages
69
- const parsedInitialWrite = yield RecordsWrite.parse(initialWrite);
70
- try {
71
- yield RecordsReadHandler.authorizeRecordsRead(tenant, recordsRead, parsedInitialWrite, this.messageStore);
72
- }
73
- catch (error) {
74
- return messageReplyFromError(error, 401);
75
- }
76
- return {
77
- status: { code: 404, detail: 'Not Found' },
78
- entry: {
79
- recordsDelete: recordsDeleteMessage,
80
- initialWrite
81
- }
82
- };
83
- }
84
- // else the matched message is a RecordsWrite
85
- const matchedRecordsWrite = matchedMessage;
23
+ async handle({ tenant, message }) {
24
+ let recordsRead;
25
+ try {
26
+ recordsRead = await RecordsRead.parse(message);
27
+ }
28
+ catch (e) {
29
+ return messageReplyFromError(e, 400);
30
+ }
31
+ // authentication
32
+ try {
33
+ if (recordsRead.author !== undefined) {
34
+ await authenticate(message.authorization, this.didResolver);
35
+ }
36
+ }
37
+ catch (e) {
38
+ return messageReplyFromError(e, 401);
39
+ }
40
+ // get the latest active message matching the supplied filter, sorted and limited to 1 result
41
+ const query = {
42
+ // NOTE: we don't filter by `method` so that we get both RecordsWrite and RecordsDelete messages
43
+ interface: DwnInterfaceName.Records,
44
+ isLatestBaseState: true,
45
+ ...Records.convertFilter(message.descriptor.filter)
46
+ };
47
+ const messageSort = Records.convertDateSort(message.descriptor.dateSort);
48
+ const { messages: existingMessages } = await this.messageStore.query(tenant, [query], messageSort, { limit: 1 });
49
+ if (existingMessages.length === 0) {
50
+ return {
51
+ status: { code: 404, detail: 'Not Found' }
52
+ };
53
+ }
54
+ const matchedMessage = existingMessages[0];
55
+ // if the matched message is a RecordsDelete, we mark the record as not-found and return both the RecordsDelete and the initial RecordsWrite
56
+ // TODO: https://github.com/enboxorg/enbox/issues/222
57
+ // Consider performing authorization checks like when records exists before returning RecordsDelete and initial RecordsWrite of a deleted record
58
+ if (matchedMessage.descriptor.method === DwnMethodName.Delete) {
59
+ const recordsDeleteMessage = matchedMessage;
60
+ const initialWrite = await RecordsWrite.fetchInitialRecordsWriteMessage(this.messageStore, tenant, recordsDeleteMessage.descriptor.recordId);
61
+ if (initialWrite === undefined) {
62
+ return messageReplyFromError(new DwnError(DwnErrorCode.RecordsReadInitialWriteNotFound, 'Initial write for deleted record not found'), 400);
63
+ }
64
+ // Perform authorization before returning the delete and initial write messages
65
+ const parsedInitialWrite = await RecordsWrite.parse(initialWrite);
86
66
  try {
87
- yield RecordsReadHandler.authorizeRecordsRead(tenant, recordsRead, yield RecordsWrite.parse(matchedRecordsWrite), this.messageStore);
67
+ await RecordsReadHandler.authorizeRecordsRead(tenant, recordsRead, parsedInitialWrite, this.messageStore);
88
68
  }
89
69
  catch (error) {
90
70
  return messageReplyFromError(error, 401);
91
71
  }
92
- let data;
93
- if (matchedRecordsWrite.encodedData !== undefined) {
94
- const dataBytes = Encoder.base64UrlToBytes(matchedRecordsWrite.encodedData);
95
- data = DataStream.fromBytes(dataBytes);
96
- delete matchedRecordsWrite.encodedData;
97
- }
98
- else {
99
- const result = yield this.dataStore.get(tenant, matchedRecordsWrite.recordId, matchedRecordsWrite.descriptor.dataCid);
100
- if ((result === null || result === void 0 ? void 0 : result.dataStream) === undefined) {
101
- return {
102
- status: { code: 404, detail: 'Not Found' }
103
- };
104
- }
105
- data = result.dataStream;
106
- }
107
- const recordsReadReply = {
108
- status: { code: 200, detail: 'OK' },
72
+ return {
73
+ status: { code: 404, detail: 'Not Found' },
109
74
  entry: {
110
- recordsWrite: matchedRecordsWrite,
111
- data
75
+ recordsDelete: recordsDeleteMessage,
76
+ initialWrite
112
77
  }
113
78
  };
114
- // attach initial write if latest RecordsWrite is not initial write
115
- if (!(yield RecordsWrite.isInitialWrite(matchedRecordsWrite))) {
116
- const initialWriteQueryResult = yield this.messageStore.query(tenant, [{ recordId: matchedRecordsWrite.recordId, isLatestBaseState: false, method: DwnMethodName.Write }]);
117
- const initialWrite = initialWriteQueryResult.messages[0];
118
- delete initialWrite.encodedData; // just defensive because technically should already be deleted when a later RecordsWrite is written
119
- recordsReadReply.entry.initialWrite = initialWrite;
79
+ }
80
+ // else the matched message is a RecordsWrite
81
+ const matchedRecordsWrite = matchedMessage;
82
+ try {
83
+ await RecordsReadHandler.authorizeRecordsRead(tenant, recordsRead, await RecordsWrite.parse(matchedRecordsWrite), this.messageStore);
84
+ }
85
+ catch (error) {
86
+ return messageReplyFromError(error, 401);
87
+ }
88
+ let data;
89
+ if (matchedRecordsWrite.encodedData !== undefined) {
90
+ const dataBytes = Encoder.base64UrlToBytes(matchedRecordsWrite.encodedData);
91
+ data = DataStream.fromBytes(dataBytes);
92
+ delete matchedRecordsWrite.encodedData;
93
+ }
94
+ else {
95
+ const result = await this.dataStore.get(tenant, matchedRecordsWrite.recordId, matchedRecordsWrite.descriptor.dataCid);
96
+ if (result?.dataStream === undefined) {
97
+ return {
98
+ status: { code: 404, detail: 'Not Found' }
99
+ };
120
100
  }
121
- return recordsReadReply;
122
- });
101
+ data = result.dataStream;
102
+ }
103
+ const recordsReadReply = {
104
+ status: { code: 200, detail: 'OK' },
105
+ entry: {
106
+ recordsWrite: matchedRecordsWrite,
107
+ data
108
+ }
109
+ };
110
+ // attach initial write if latest RecordsWrite is not initial write
111
+ if (!await RecordsWrite.isInitialWrite(matchedRecordsWrite)) {
112
+ const initialWriteQueryResult = await this.messageStore.query(tenant, [{ recordId: matchedRecordsWrite.recordId, isLatestBaseState: false, method: DwnMethodName.Write }]);
113
+ const initialWrite = initialWriteQueryResult.messages[0];
114
+ delete initialWrite.encodedData; // just defensive because technically should already be deleted when a later RecordsWrite is written
115
+ recordsReadReply.entry.initialWrite = initialWrite;
116
+ }
117
+ return recordsReadReply;
123
118
  }
124
119
  ;
125
120
  /**
126
121
  * @param messageStore Used to check if the grant has been revoked.
127
122
  */
128
- static authorizeRecordsRead(tenant, recordsRead, matchedRecordsWrite, messageStore) {
129
- return __awaiter(this, void 0, void 0, function* () {
130
- if (Message.isSignedByAuthorDelegate(recordsRead.message)) {
131
- yield recordsRead.authorizeDelegate(matchedRecordsWrite.message, messageStore);
132
- }
133
- const { descriptor } = matchedRecordsWrite.message;
134
- // if author is the same as the target tenant, we can directly grant access
135
- if (recordsRead.author === tenant) {
136
- return;
137
- }
138
- else if (descriptor.published === true) {
139
- // authentication is not required for published data
140
- return;
141
- }
142
- else if (recordsRead.author !== undefined &&
143
- (recordsRead.author === descriptor.recipient || recordsRead.author === matchedRecordsWrite.author)) {
144
- // The recipient or author of a message may always read it
145
- return;
146
- }
147
- else if (recordsRead.author !== undefined && recordsRead.signaturePayload.permissionGrantId !== undefined) {
148
- const permissionGrant = yield PermissionsProtocol.fetchGrant(tenant, messageStore, recordsRead.signaturePayload.permissionGrantId);
149
- yield RecordsGrantAuthorization.authorizeRead({
150
- recordsReadMessage: recordsRead.message,
151
- recordsWriteMessageToBeRead: matchedRecordsWrite.message,
152
- expectedGrantor: tenant,
153
- expectedGrantee: recordsRead.author,
154
- permissionGrant,
155
- messageStore
156
- });
157
- }
158
- else if (descriptor.protocol !== undefined) {
159
- yield ProtocolAuthorization.authorizeRead(tenant, recordsRead, matchedRecordsWrite, messageStore);
160
- }
161
- else {
162
- throw new DwnError(DwnErrorCode.RecordsReadAuthorizationFailed, 'message failed authorization');
163
- }
164
- });
123
+ static async authorizeRecordsRead(tenant, recordsRead, matchedRecordsWrite, messageStore) {
124
+ if (Message.isSignedByAuthorDelegate(recordsRead.message)) {
125
+ await recordsRead.authorizeDelegate(matchedRecordsWrite.message, messageStore);
126
+ }
127
+ const { descriptor } = matchedRecordsWrite.message;
128
+ // if author is the same as the target tenant, we can directly grant access
129
+ if (recordsRead.author === tenant) {
130
+ return;
131
+ }
132
+ else if (descriptor.published === true) {
133
+ // authentication is not required for published data
134
+ return;
135
+ }
136
+ else if (recordsRead.author !== undefined &&
137
+ (recordsRead.author === descriptor.recipient || recordsRead.author === matchedRecordsWrite.author)) {
138
+ // The recipient or author of a message may always read it
139
+ return;
140
+ }
141
+ else if (recordsRead.author !== undefined && recordsRead.signaturePayload.permissionGrantId !== undefined) {
142
+ const permissionGrant = await PermissionsProtocol.fetchGrant(tenant, messageStore, recordsRead.signaturePayload.permissionGrantId);
143
+ await RecordsGrantAuthorization.authorizeRead({
144
+ recordsReadMessage: recordsRead.message,
145
+ recordsWriteMessageToBeRead: matchedRecordsWrite.message,
146
+ expectedGrantor: tenant,
147
+ expectedGrantee: recordsRead.author,
148
+ permissionGrant,
149
+ messageStore
150
+ });
151
+ }
152
+ else if (descriptor.protocol !== undefined) {
153
+ await ProtocolAuthorization.authorizeRead(tenant, recordsRead, matchedRecordsWrite, messageStore);
154
+ }
155
+ else {
156
+ throw new DwnError(DwnErrorCode.RecordsReadAuthorizationFailed, 'message failed authorization');
157
+ }
165
158
  }
166
159
  }
167
160
  //# sourceMappingURL=records-read.js.map