@enbox/dwn-sdk-js 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (810) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +352 -0
  3. package/dist/bundles/dwn.js +153 -0
  4. package/dist/cjs/index.js +36749 -0
  5. package/dist/cjs/package.json +1 -0
  6. package/dist/esm/generated/precompiled-validators.js +11973 -0
  7. package/dist/esm/generated/precompiled-validators.js.map +1 -0
  8. package/dist/esm/json-schemas/definitions.json +23 -0
  9. package/dist/esm/src/core/abstract-message.js +47 -0
  10. package/dist/esm/src/core/abstract-message.js.map +1 -0
  11. package/dist/esm/src/core/auth.js +39 -0
  12. package/dist/esm/src/core/auth.js.map +1 -0
  13. package/dist/esm/src/core/dwn-constant.js +10 -0
  14. package/dist/esm/src/core/dwn-constant.js.map +1 -0
  15. package/dist/esm/src/core/dwn-error.js +169 -0
  16. package/dist/esm/src/core/dwn-error.js.map +1 -0
  17. package/dist/esm/src/core/grant-authorization.js +97 -0
  18. package/dist/esm/src/core/grant-authorization.js.map +1 -0
  19. package/dist/esm/src/core/message-reply.js +5 -0
  20. package/dist/esm/src/core/message-reply.js.map +1 -0
  21. package/dist/esm/src/core/message.js +233 -0
  22. package/dist/esm/src/core/message.js.map +1 -0
  23. package/dist/esm/src/core/messages-grant-authorization.js +101 -0
  24. package/dist/esm/src/core/messages-grant-authorization.js.map +1 -0
  25. package/dist/esm/src/core/protocol-authorization.js +608 -0
  26. package/dist/esm/src/core/protocol-authorization.js.map +1 -0
  27. package/dist/esm/src/core/protocols-grant-authorization.js +66 -0
  28. package/dist/esm/src/core/protocols-grant-authorization.js.map +1 -0
  29. package/dist/esm/src/core/records-grant-authorization.js +132 -0
  30. package/dist/esm/src/core/records-grant-authorization.js.map +1 -0
  31. package/dist/esm/src/core/resumable-task-manager.js +109 -0
  32. package/dist/esm/src/core/resumable-task-manager.js.map +1 -0
  33. package/dist/esm/src/core/tenant-gate.js +20 -0
  34. package/dist/esm/src/core/tenant-gate.js.map +1 -0
  35. package/dist/esm/src/dwn.js +164 -0
  36. package/dist/esm/src/dwn.js.map +1 -0
  37. package/dist/esm/src/enums/dwn-interface-method.js +16 -0
  38. package/dist/esm/src/enums/dwn-interface-method.js.map +1 -0
  39. package/dist/esm/src/event-log/event-emitter-stream.js +60 -0
  40. package/dist/esm/src/event-log/event-emitter-stream.js.map +1 -0
  41. package/dist/esm/src/event-log/event-log-level.js +63 -0
  42. package/dist/esm/src/event-log/event-log-level.js.map +1 -0
  43. package/dist/esm/src/handlers/messages-query.js +71 -0
  44. package/dist/esm/src/handlers/messages-query.js.map +1 -0
  45. package/dist/esm/src/handlers/messages-read.js +102 -0
  46. package/dist/esm/src/handlers/messages-read.js.map +1 -0
  47. package/dist/esm/src/handlers/messages-subscribe.js +81 -0
  48. package/dist/esm/src/handlers/messages-subscribe.js.map +1 -0
  49. package/dist/esm/src/handlers/protocols-configure.js +133 -0
  50. package/dist/esm/src/handlers/protocols-configure.js.map +1 -0
  51. package/dist/esm/src/handlers/protocols-query.js +73 -0
  52. package/dist/esm/src/handlers/protocols-query.js.map +1 -0
  53. package/dist/esm/src/handlers/records-delete.js +107 -0
  54. package/dist/esm/src/handlers/records-delete.js.map +1 -0
  55. package/dist/esm/src/handlers/records-query.js +210 -0
  56. package/dist/esm/src/handlers/records-query.js.map +1 -0
  57. package/dist/esm/src/handlers/records-read.js +169 -0
  58. package/dist/esm/src/handlers/records-read.js.map +1 -0
  59. package/dist/esm/src/handlers/records-subscribe.js +172 -0
  60. package/dist/esm/src/handlers/records-subscribe.js.map +1 -0
  61. package/dist/esm/src/handlers/records-write.js +344 -0
  62. package/dist/esm/src/handlers/records-write.js.map +1 -0
  63. package/dist/esm/src/index.js +49 -0
  64. package/dist/esm/src/index.js.map +1 -0
  65. package/dist/esm/src/interfaces/messages-query.js +53 -0
  66. package/dist/esm/src/interfaces/messages-query.js.map +1 -0
  67. package/dist/esm/src/interfaces/messages-read.js +61 -0
  68. package/dist/esm/src/interfaces/messages-read.js.map +1 -0
  69. package/dist/esm/src/interfaces/messages-subscribe.js +58 -0
  70. package/dist/esm/src/interfaces/messages-subscribe.js.map +1 -0
  71. package/dist/esm/src/interfaces/protocols-configure.js +271 -0
  72. package/dist/esm/src/interfaces/protocols-configure.js.map +1 -0
  73. package/dist/esm/src/interfaces/protocols-query.js +84 -0
  74. package/dist/esm/src/interfaces/protocols-query.js.map +1 -0
  75. package/dist/esm/src/interfaces/records-delete.js +89 -0
  76. package/dist/esm/src/interfaces/records-delete.js.map +1 -0
  77. package/dist/esm/src/interfaces/records-query.js +104 -0
  78. package/dist/esm/src/interfaces/records-query.js.map +1 -0
  79. package/dist/esm/src/interfaces/records-read.js +84 -0
  80. package/dist/esm/src/interfaces/records-read.js.map +1 -0
  81. package/dist/esm/src/interfaces/records-subscribe.js +91 -0
  82. package/dist/esm/src/interfaces/records-subscribe.js.map +1 -0
  83. package/dist/esm/src/interfaces/records-write.js +795 -0
  84. package/dist/esm/src/interfaces/records-write.js.map +1 -0
  85. package/dist/esm/src/jose/algorithms/signing/ed25519.js +51 -0
  86. package/dist/esm/src/jose/algorithms/signing/ed25519.js.map +1 -0
  87. package/dist/esm/src/jose/algorithms/signing/signature-algorithms.js +20 -0
  88. package/dist/esm/src/jose/algorithms/signing/signature-algorithms.js.map +1 -0
  89. package/dist/esm/src/jose/jws/general/builder.js +47 -0
  90. package/dist/esm/src/jose/jws/general/builder.js.map +1 -0
  91. package/dist/esm/src/jose/jws/general/verifier.js +97 -0
  92. package/dist/esm/src/jose/jws/general/verifier.js.map +1 -0
  93. package/dist/esm/src/protocols/permission-grant.js +39 -0
  94. package/dist/esm/src/protocols/permission-grant.js.map +1 -0
  95. package/dist/esm/src/protocols/permission-request.js +35 -0
  96. package/dist/esm/src/protocols/permission-request.js.map +1 -0
  97. package/dist/esm/src/protocols/permissions.js +357 -0
  98. package/dist/esm/src/protocols/permissions.js.map +1 -0
  99. package/dist/esm/src/schema-validator.js +37 -0
  100. package/dist/esm/src/schema-validator.js.map +1 -0
  101. package/dist/esm/src/store/blockstore-level.js +187 -0
  102. package/dist/esm/src/store/blockstore-level.js.map +1 -0
  103. package/dist/esm/src/store/blockstore-mock.js +168 -0
  104. package/dist/esm/src/store/blockstore-mock.js.map +1 -0
  105. package/dist/esm/src/store/data-store-level.js +136 -0
  106. package/dist/esm/src/store/data-store-level.js.map +1 -0
  107. package/dist/esm/src/store/index-level.js +660 -0
  108. package/dist/esm/src/store/index-level.js.map +1 -0
  109. package/dist/esm/src/store/level-wrapper.js +305 -0
  110. package/dist/esm/src/store/level-wrapper.js.map +1 -0
  111. package/dist/esm/src/store/message-store-level.js +159 -0
  112. package/dist/esm/src/store/message-store-level.js.map +1 -0
  113. package/dist/esm/src/store/resumable-task-store-level.js +131 -0
  114. package/dist/esm/src/store/resumable-task-store-level.js.map +1 -0
  115. package/dist/esm/src/store/storage-controller.js +184 -0
  116. package/dist/esm/src/store/storage-controller.js.map +1 -0
  117. package/dist/esm/src/types/cache.js +2 -0
  118. package/dist/esm/src/types/cache.js.map +1 -0
  119. package/dist/esm/src/types/data-store.js +2 -0
  120. package/dist/esm/src/types/data-store.js.map +1 -0
  121. package/dist/esm/src/types/event-log.js +2 -0
  122. package/dist/esm/src/types/event-log.js.map +1 -0
  123. package/dist/esm/src/types/jose-types.js +2 -0
  124. package/dist/esm/src/types/jose-types.js.map +1 -0
  125. package/dist/esm/src/types/jws-types.js +2 -0
  126. package/dist/esm/src/types/jws-types.js.map +1 -0
  127. package/dist/esm/src/types/message-interface.js +2 -0
  128. package/dist/esm/src/types/message-interface.js.map +1 -0
  129. package/dist/esm/src/types/message-store.js +2 -0
  130. package/dist/esm/src/types/message-store.js.map +1 -0
  131. package/dist/esm/src/types/message-types.js +3 -0
  132. package/dist/esm/src/types/message-types.js.map +1 -0
  133. package/dist/esm/src/types/messages-types.js +2 -0
  134. package/dist/esm/src/types/messages-types.js.map +1 -0
  135. package/dist/esm/src/types/method-handler.js +2 -0
  136. package/dist/esm/src/types/method-handler.js.map +1 -0
  137. package/dist/esm/src/types/permission-types.js +6 -0
  138. package/dist/esm/src/types/permission-types.js.map +1 -0
  139. package/dist/esm/src/types/protocols-types.js +20 -0
  140. package/dist/esm/src/types/protocols-types.js.map +1 -0
  141. package/dist/esm/src/types/query-types.js +6 -0
  142. package/dist/esm/src/types/query-types.js.map +1 -0
  143. package/dist/esm/src/types/records-types.js +8 -0
  144. package/dist/esm/src/types/records-types.js.map +1 -0
  145. package/dist/esm/src/types/resumable-task-store.js +2 -0
  146. package/dist/esm/src/types/resumable-task-store.js.map +1 -0
  147. package/dist/esm/src/types/signer.js +2 -0
  148. package/dist/esm/src/types/signer.js.map +1 -0
  149. package/dist/esm/src/types/subscriptions.js +2 -0
  150. package/dist/esm/src/types/subscriptions.js.map +1 -0
  151. package/dist/esm/src/utils/abort.js +40 -0
  152. package/dist/esm/src/utils/abort.js.map +1 -0
  153. package/dist/esm/src/utils/array.js +72 -0
  154. package/dist/esm/src/utils/array.js.map +1 -0
  155. package/dist/esm/src/utils/cid.js +130 -0
  156. package/dist/esm/src/utils/cid.js.map +1 -0
  157. package/dist/esm/src/utils/data-stream.js +100 -0
  158. package/dist/esm/src/utils/data-stream.js.map +1 -0
  159. package/dist/esm/src/utils/encoder.js +45 -0
  160. package/dist/esm/src/utils/encoder.js.map +1 -0
  161. package/dist/esm/src/utils/encryption.js +128 -0
  162. package/dist/esm/src/utils/encryption.js.map +1 -0
  163. package/dist/esm/src/utils/filter.js +229 -0
  164. package/dist/esm/src/utils/filter.js.map +1 -0
  165. package/dist/esm/src/utils/hd-key.js +114 -0
  166. package/dist/esm/src/utils/hd-key.js.map +1 -0
  167. package/dist/esm/src/utils/jws.js +89 -0
  168. package/dist/esm/src/utils/jws.js.map +1 -0
  169. package/dist/esm/src/utils/memory-cache.js +41 -0
  170. package/dist/esm/src/utils/memory-cache.js.map +1 -0
  171. package/dist/esm/src/utils/messages.js +84 -0
  172. package/dist/esm/src/utils/messages.js.map +1 -0
  173. package/dist/esm/src/utils/object.js +40 -0
  174. package/dist/esm/src/utils/object.js.map +1 -0
  175. package/dist/esm/src/utils/private-key-signer.js +43 -0
  176. package/dist/esm/src/utils/private-key-signer.js.map +1 -0
  177. package/dist/esm/src/utils/protocols.js +51 -0
  178. package/dist/esm/src/utils/protocols.js.map +1 -0
  179. package/dist/esm/src/utils/records.js +454 -0
  180. package/dist/esm/src/utils/records.js.map +1 -0
  181. package/dist/esm/src/utils/secp256k1.js +166 -0
  182. package/dist/esm/src/utils/secp256k1.js.map +1 -0
  183. package/dist/esm/src/utils/secp256r1.js +120 -0
  184. package/dist/esm/src/utils/secp256r1.js.map +1 -0
  185. package/dist/esm/src/utils/string.js +16 -0
  186. package/dist/esm/src/utils/string.js.map +1 -0
  187. package/dist/esm/src/utils/time.js +85 -0
  188. package/dist/esm/src/utils/time.js.map +1 -0
  189. package/dist/esm/src/utils/url.js +62 -0
  190. package/dist/esm/src/utils/url.js.map +1 -0
  191. package/dist/esm/tests/core/auth.spec.js +22 -0
  192. package/dist/esm/tests/core/auth.spec.js.map +1 -0
  193. package/dist/esm/tests/core/message-reply.spec.js +16 -0
  194. package/dist/esm/tests/core/message-reply.spec.js.map +1 -0
  195. package/dist/esm/tests/core/message.spec.js +146 -0
  196. package/dist/esm/tests/core/message.spec.js.map +1 -0
  197. package/dist/esm/tests/core/protocol-authorization.spec.js +48 -0
  198. package/dist/esm/tests/core/protocol-authorization.spec.js.map +1 -0
  199. package/dist/esm/tests/dwn.spec.js +166 -0
  200. package/dist/esm/tests/dwn.spec.js.map +1 -0
  201. package/dist/esm/tests/event-log/event-emitter-stream.spec.js +78 -0
  202. package/dist/esm/tests/event-log/event-emitter-stream.spec.js.map +1 -0
  203. package/dist/esm/tests/event-log/event-log-level.spec.js +44 -0
  204. package/dist/esm/tests/event-log/event-log-level.spec.js.map +1 -0
  205. package/dist/esm/tests/event-log/event-log.spec.js +236 -0
  206. package/dist/esm/tests/event-log/event-log.spec.js.map +1 -0
  207. package/dist/esm/tests/event-log/event-stream.spec.js +125 -0
  208. package/dist/esm/tests/event-log/event-stream.spec.js.map +1 -0
  209. package/dist/esm/tests/features/author-delegated-grant.spec.js +1273 -0
  210. package/dist/esm/tests/features/author-delegated-grant.spec.js.map +1 -0
  211. package/dist/esm/tests/features/owner-delegated-grant.spec.js +584 -0
  212. package/dist/esm/tests/features/owner-delegated-grant.spec.js.map +1 -0
  213. package/dist/esm/tests/features/owner-signature.spec.js +192 -0
  214. package/dist/esm/tests/features/owner-signature.spec.js.map +1 -0
  215. package/dist/esm/tests/features/permissions.spec.js +815 -0
  216. package/dist/esm/tests/features/permissions.spec.js.map +1 -0
  217. package/dist/esm/tests/features/protocol-create-action.spec.js +248 -0
  218. package/dist/esm/tests/features/protocol-create-action.spec.js.map +1 -0
  219. package/dist/esm/tests/features/protocol-delete-action.spec.js +492 -0
  220. package/dist/esm/tests/features/protocol-delete-action.spec.js.map +1 -0
  221. package/dist/esm/tests/features/protocol-update-action.spec.js +572 -0
  222. package/dist/esm/tests/features/protocol-update-action.spec.js.map +1 -0
  223. package/dist/esm/tests/features/records-prune.spec.js +812 -0
  224. package/dist/esm/tests/features/records-prune.spec.js.map +1 -0
  225. package/dist/esm/tests/features/records-tags.spec.js +2516 -0
  226. package/dist/esm/tests/features/records-tags.spec.js.map +1 -0
  227. package/dist/esm/tests/features/resumable-tasks.spec.js +349 -0
  228. package/dist/esm/tests/features/resumable-tasks.spec.js.map +1 -0
  229. package/dist/esm/tests/handlers/messages-query.spec.js +349 -0
  230. package/dist/esm/tests/handlers/messages-query.spec.js.map +1 -0
  231. package/dist/esm/tests/handlers/messages-read.spec.js +647 -0
  232. package/dist/esm/tests/handlers/messages-read.spec.js.map +1 -0
  233. package/dist/esm/tests/handlers/messages-subscribe.spec.js +432 -0
  234. package/dist/esm/tests/handlers/messages-subscribe.spec.js.map +1 -0
  235. package/dist/esm/tests/handlers/protocols-configure.spec.js +608 -0
  236. package/dist/esm/tests/handlers/protocols-configure.spec.js.map +1 -0
  237. package/dist/esm/tests/handlers/protocols-query.spec.js +454 -0
  238. package/dist/esm/tests/handlers/protocols-query.spec.js.map +1 -0
  239. package/dist/esm/tests/handlers/records-delete.spec.js +662 -0
  240. package/dist/esm/tests/handlers/records-delete.spec.js.map +1 -0
  241. package/dist/esm/tests/handlers/records-query.spec.js +2695 -0
  242. package/dist/esm/tests/handlers/records-query.spec.js.map +1 -0
  243. package/dist/esm/tests/handlers/records-read.spec.js +1724 -0
  244. package/dist/esm/tests/handlers/records-read.spec.js.map +1 -0
  245. package/dist/esm/tests/handlers/records-subscribe.spec.js +684 -0
  246. package/dist/esm/tests/handlers/records-subscribe.spec.js.map +1 -0
  247. package/dist/esm/tests/handlers/records-write.spec.js +3637 -0
  248. package/dist/esm/tests/handlers/records-write.spec.js.map +1 -0
  249. package/dist/esm/tests/interfaces/messages-get.spec.js +78 -0
  250. package/dist/esm/tests/interfaces/messages-get.spec.js.map +1 -0
  251. package/dist/esm/tests/interfaces/messages-subscribe.spec.js +30 -0
  252. package/dist/esm/tests/interfaces/messages-subscribe.spec.js.map +1 -0
  253. package/dist/esm/tests/interfaces/messagess-query.spec.js +127 -0
  254. package/dist/esm/tests/interfaces/messagess-query.spec.js.map +1 -0
  255. package/dist/esm/tests/interfaces/protocols-configure.spec.js +489 -0
  256. package/dist/esm/tests/interfaces/protocols-configure.spec.js.map +1 -0
  257. package/dist/esm/tests/interfaces/protocols-query.spec.js +46 -0
  258. package/dist/esm/tests/interfaces/protocols-query.spec.js.map +1 -0
  259. package/dist/esm/tests/interfaces/records-delete.spec.js +39 -0
  260. package/dist/esm/tests/interfaces/records-delete.spec.js.map +1 -0
  261. package/dist/esm/tests/interfaces/records-query.spec.js +85 -0
  262. package/dist/esm/tests/interfaces/records-query.spec.js.map +1 -0
  263. package/dist/esm/tests/interfaces/records-read.spec.js +62 -0
  264. package/dist/esm/tests/interfaces/records-read.spec.js.map +1 -0
  265. package/dist/esm/tests/interfaces/records-subscribe.spec.js +72 -0
  266. package/dist/esm/tests/interfaces/records-subscribe.spec.js.map +1 -0
  267. package/dist/esm/tests/interfaces/records-write.spec.js +423 -0
  268. package/dist/esm/tests/interfaces/records-write.spec.js.map +1 -0
  269. package/dist/esm/tests/jose/jws/general.spec.js +243 -0
  270. package/dist/esm/tests/jose/jws/general.spec.js.map +1 -0
  271. package/dist/esm/tests/protocols/permission-request.spec.js +40 -0
  272. package/dist/esm/tests/protocols/permission-request.spec.js.map +1 -0
  273. package/dist/esm/tests/protocols/permissions.spec.js +123 -0
  274. package/dist/esm/tests/protocols/permissions.spec.js.map +1 -0
  275. package/dist/esm/tests/scenarios/aggregator.spec.js +670 -0
  276. package/dist/esm/tests/scenarios/aggregator.spec.js.map +1 -0
  277. package/dist/esm/tests/scenarios/deleted-record.spec.js +102 -0
  278. package/dist/esm/tests/scenarios/deleted-record.spec.js.map +1 -0
  279. package/dist/esm/tests/scenarios/end-to-end-tests.spec.js +220 -0
  280. package/dist/esm/tests/scenarios/end-to-end-tests.spec.js.map +1 -0
  281. package/dist/esm/tests/scenarios/messages-query.spec.js +395 -0
  282. package/dist/esm/tests/scenarios/messages-query.spec.js.map +1 -0
  283. package/dist/esm/tests/scenarios/nested-roles.spec.js +300 -0
  284. package/dist/esm/tests/scenarios/nested-roles.spec.js.map +1 -0
  285. package/dist/esm/tests/scenarios/subscriptions.spec.js +886 -0
  286. package/dist/esm/tests/scenarios/subscriptions.spec.js.map +1 -0
  287. package/dist/esm/tests/store/blockstore-mock.spec.js +192 -0
  288. package/dist/esm/tests/store/blockstore-mock.spec.js.map +1 -0
  289. package/dist/esm/tests/store/data-store-level.spec.js +146 -0
  290. package/dist/esm/tests/store/data-store-level.spec.js.map +1 -0
  291. package/dist/esm/tests/store/index-level.spec.js +1208 -0
  292. package/dist/esm/tests/store/index-level.spec.js.map +1 -0
  293. package/dist/esm/tests/store/message-store-level.spec.js +48 -0
  294. package/dist/esm/tests/store/message-store-level.spec.js.map +1 -0
  295. package/dist/esm/tests/store/message-store.spec.js +404 -0
  296. package/dist/esm/tests/store/message-store.spec.js.map +1 -0
  297. package/dist/esm/tests/store-dependent-tests.spec.js +5 -0
  298. package/dist/esm/tests/store-dependent-tests.spec.js.map +1 -0
  299. package/dist/esm/tests/test-event-stream.js +25 -0
  300. package/dist/esm/tests/test-event-stream.js.map +1 -0
  301. package/dist/esm/tests/test-stores.js +45 -0
  302. package/dist/esm/tests/test-stores.js.map +1 -0
  303. package/dist/esm/tests/test-suite.js +88 -0
  304. package/dist/esm/tests/test-suite.js.map +1 -0
  305. package/dist/esm/tests/utils/cid.spec.js +80 -0
  306. package/dist/esm/tests/utils/cid.spec.js.map +1 -0
  307. package/dist/esm/tests/utils/data-stream.spec.js +27 -0
  308. package/dist/esm/tests/utils/data-stream.spec.js.map +1 -0
  309. package/dist/esm/tests/utils/encryption.spec.js +148 -0
  310. package/dist/esm/tests/utils/encryption.spec.js.map +1 -0
  311. package/dist/esm/tests/utils/filters.spec.js +295 -0
  312. package/dist/esm/tests/utils/filters.spec.js.map +1 -0
  313. package/dist/esm/tests/utils/hd-key.spec.js +35 -0
  314. package/dist/esm/tests/utils/hd-key.spec.js.map +1 -0
  315. package/dist/esm/tests/utils/jws.spec.js +8 -0
  316. package/dist/esm/tests/utils/jws.spec.js.map +1 -0
  317. package/dist/esm/tests/utils/memory-cache.spec.js +35 -0
  318. package/dist/esm/tests/utils/memory-cache.spec.js.map +1 -0
  319. package/dist/esm/tests/utils/messages.spec.js +101 -0
  320. package/dist/esm/tests/utils/messages.spec.js.map +1 -0
  321. package/dist/esm/tests/utils/object.spec.js +36 -0
  322. package/dist/esm/tests/utils/object.spec.js.map +1 -0
  323. package/dist/esm/tests/utils/poller.js +49 -0
  324. package/dist/esm/tests/utils/poller.js.map +1 -0
  325. package/dist/esm/tests/utils/private-key-signer.spec.js +44 -0
  326. package/dist/esm/tests/utils/private-key-signer.spec.js.map +1 -0
  327. package/dist/esm/tests/utils/records.spec.js +53 -0
  328. package/dist/esm/tests/utils/records.spec.js.map +1 -0
  329. package/dist/esm/tests/utils/secp256k1.spec.js +50 -0
  330. package/dist/esm/tests/utils/secp256k1.spec.js.map +1 -0
  331. package/dist/esm/tests/utils/secp256r1.spec.js +56 -0
  332. package/dist/esm/tests/utils/secp256r1.spec.js.map +1 -0
  333. package/dist/esm/tests/utils/test-data-generator.js +643 -0
  334. package/dist/esm/tests/utils/test-data-generator.js.map +1 -0
  335. package/dist/esm/tests/utils/test-stub-generator.js +39 -0
  336. package/dist/esm/tests/utils/test-stub-generator.js.map +1 -0
  337. package/dist/esm/tests/utils/time.spec.js +64 -0
  338. package/dist/esm/tests/utils/time.spec.js.map +1 -0
  339. package/dist/esm/tests/utils/url.spec.js +43 -0
  340. package/dist/esm/tests/utils/url.spec.js.map +1 -0
  341. package/dist/esm/tests/validation/json-schemas/definitions.spec.js +33 -0
  342. package/dist/esm/tests/validation/json-schemas/definitions.spec.js.map +1 -0
  343. package/dist/esm/tests/validation/json-schemas/jwk/general-jwk.spec.js +50 -0
  344. package/dist/esm/tests/validation/json-schemas/jwk/general-jwk.spec.js.map +1 -0
  345. package/dist/esm/tests/validation/json-schemas/jwk/public-jwk.spec.js +36 -0
  346. package/dist/esm/tests/validation/json-schemas/jwk/public-jwk.spec.js.map +1 -0
  347. package/dist/esm/tests/validation/json-schemas/jwk-verification-method.spec.js +82 -0
  348. package/dist/esm/tests/validation/json-schemas/jwk-verification-method.spec.js.map +1 -0
  349. package/dist/esm/tests/validation/json-schemas/protocols/protocols-configure.spec.js +75 -0
  350. package/dist/esm/tests/validation/json-schemas/protocols/protocols-configure.spec.js.map +1 -0
  351. package/dist/esm/tests/validation/json-schemas/records/records-query.spec.js +148 -0
  352. package/dist/esm/tests/validation/json-schemas/records/records-query.spec.js.map +1 -0
  353. package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js +421 -0
  354. package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js.map +1 -0
  355. package/dist/esm/tests/vectors/protocol-definitions/anyone-collaborate.json +21 -0
  356. package/dist/esm/tests/vectors/protocol-definitions/author-can.json +33 -0
  357. package/dist/esm/tests/vectors/protocol-definitions/chat.json +70 -0
  358. package/dist/esm/tests/vectors/protocol-definitions/credential-issuance.json +41 -0
  359. package/dist/esm/tests/vectors/protocol-definitions/dex.json +58 -0
  360. package/dist/esm/tests/vectors/protocol-definitions/email.json +62 -0
  361. package/dist/esm/tests/vectors/protocol-definitions/free-for-all.json +45 -0
  362. package/dist/esm/tests/vectors/protocol-definitions/friend-role.json +48 -0
  363. package/dist/esm/tests/vectors/protocol-definitions/message.json +37 -0
  364. package/dist/esm/tests/vectors/protocol-definitions/minimal.json +10 -0
  365. package/dist/esm/tests/vectors/protocol-definitions/nested.json +31 -0
  366. package/dist/esm/tests/vectors/protocol-definitions/private-protocol.json +15 -0
  367. package/dist/esm/tests/vectors/protocol-definitions/recipient-can.json +33 -0
  368. package/dist/esm/tests/vectors/protocol-definitions/slack.json +242 -0
  369. package/dist/esm/tests/vectors/protocol-definitions/social-media.json +106 -0
  370. package/dist/esm/tests/vectors/protocol-definitions/thread-role.json +70 -0
  371. package/dist/types/generated/precompiled-validators.d.ts +597 -0
  372. package/dist/types/generated/precompiled-validators.d.ts.map +1 -0
  373. package/dist/types/src/core/abstract-message.d.ts +25 -0
  374. package/dist/types/src/core/abstract-message.d.ts.map +1 -0
  375. package/dist/types/src/core/auth.d.ts +9 -0
  376. package/dist/types/src/core/auth.d.ts.map +1 -0
  377. package/dist/types/src/core/dwn-constant.d.ts +10 -0
  378. package/dist/types/src/core/dwn-constant.d.ts.map +1 -0
  379. package/dist/types/src/core/dwn-error.d.ts +164 -0
  380. package/dist/types/src/core/dwn-error.d.ts.map +1 -0
  381. package/dist/types/src/core/grant-authorization.d.ts +43 -0
  382. package/dist/types/src/core/grant-authorization.d.ts.map +1 -0
  383. package/dist/types/src/core/message-reply.d.ts +32 -0
  384. package/dist/types/src/core/message-reply.d.ts.map +1 -0
  385. package/dist/types/src/core/message.d.ts +94 -0
  386. package/dist/types/src/core/message.d.ts.map +1 -0
  387. package/dist/types/src/core/messages-grant-authorization.d.ts +34 -0
  388. package/dist/types/src/core/messages-grant-authorization.d.ts.map +1 -0
  389. package/dist/types/src/core/protocol-authorization.d.ts +103 -0
  390. package/dist/types/src/core/protocol-authorization.d.ts.map +1 -0
  391. package/dist/types/src/core/protocols-grant-authorization.d.ts +31 -0
  392. package/dist/types/src/core/protocols-grant-authorization.d.ts.map +1 -0
  393. package/dist/types/src/core/records-grant-authorization.d.ts +60 -0
  394. package/dist/types/src/core/records-grant-authorization.d.ts.map +1 -0
  395. package/dist/types/src/core/resumable-task-manager.d.ts +43 -0
  396. package/dist/types/src/core/resumable-task-manager.d.ts.map +1 -0
  397. package/dist/types/src/core/tenant-gate.d.ts +29 -0
  398. package/dist/types/src/core/tenant-gate.d.ts.map +1 -0
  399. package/dist/types/src/dwn.d.ts +85 -0
  400. package/dist/types/src/dwn.d.ts.map +1 -0
  401. package/dist/types/src/enums/dwn-interface-method.d.ts +14 -0
  402. package/dist/types/src/enums/dwn-interface-method.d.ts.map +1 -0
  403. package/dist/types/src/event-log/event-emitter-stream.d.ts +23 -0
  404. package/dist/types/src/event-log/event-emitter-stream.d.ts.map +1 -0
  405. package/dist/types/src/event-log/event-log-level.d.ts +35 -0
  406. package/dist/types/src/event-log/event-log-level.d.ts.map +1 -0
  407. package/dist/types/src/handlers/messages-query.d.ts +17 -0
  408. package/dist/types/src/handlers/messages-query.d.ts.map +1 -0
  409. package/dist/types/src/handlers/messages-read.d.ts +22 -0
  410. package/dist/types/src/handlers/messages-read.d.ts.map +1 -0
  411. package/dist/types/src/handlers/messages-subscribe.d.ts +18 -0
  412. package/dist/types/src/handlers/messages-subscribe.d.ts.map +1 -0
  413. package/dist/types/src/handlers/protocols-configure.d.ts +24 -0
  414. package/dist/types/src/handlers/protocols-configure.d.ts.map +1 -0
  415. package/dist/types/src/handlers/protocols-query.d.ts +20 -0
  416. package/dist/types/src/handlers/protocols-query.d.ts.map +1 -0
  417. package/dist/types/src/handlers/records-delete.d.ts +23 -0
  418. package/dist/types/src/handlers/records-delete.d.ts.map +1 -0
  419. package/dist/types/src/handlers/records-query.d.ts +70 -0
  420. package/dist/types/src/handlers/records-query.d.ts.map +1 -0
  421. package/dist/types/src/handlers/records-read.d.ts +20 -0
  422. package/dist/types/src/handlers/records-read.d.ts.map +1 -0
  423. package/dist/types/src/handlers/records-subscribe.d.ts +62 -0
  424. package/dist/types/src/handlers/records-subscribe.d.ts.map +1 -0
  425. package/dist/types/src/handlers/records-write.d.ts +51 -0
  426. package/dist/types/src/handlers/records-write.d.ts.map +1 -0
  427. package/dist/types/src/index.d.ts +63 -0
  428. package/dist/types/src/index.d.ts.map +1 -0
  429. package/dist/types/src/interfaces/messages-query.d.ts +16 -0
  430. package/dist/types/src/interfaces/messages-query.d.ts.map +1 -0
  431. package/dist/types/src/interfaces/messages-read.d.ts +20 -0
  432. package/dist/types/src/interfaces/messages-read.d.ts.map +1 -0
  433. package/dist/types/src/interfaces/messages-subscribe.d.ts +20 -0
  434. package/dist/types/src/interfaces/messages-subscribe.d.ts.map +1 -0
  435. package/dist/types/src/interfaces/protocols-configure.d.ts +40 -0
  436. package/dist/types/src/interfaces/protocols-configure.d.ts.map +1 -0
  437. package/dist/types/src/interfaces/protocols-query.d.ts +17 -0
  438. package/dist/types/src/interfaces/protocols-query.d.ts.map +1 -0
  439. package/dist/types/src/interfaces/records-delete.d.ts +34 -0
  440. package/dist/types/src/interfaces/records-delete.d.ts.map +1 -0
  441. package/dist/types/src/interfaces/records-query.d.ts +31 -0
  442. package/dist/types/src/interfaces/records-query.d.ts.map +1 -0
  443. package/dist/types/src/interfaces/records-read.d.ts +36 -0
  444. package/dist/types/src/interfaces/records-read.d.ts.map +1 -0
  445. package/dist/types/src/interfaces/records-subscribe.d.ts +27 -0
  446. package/dist/types/src/interfaces/records-subscribe.d.ts.map +1 -0
  447. package/dist/types/src/interfaces/records-write.d.ts +309 -0
  448. package/dist/types/src/interfaces/records-write.d.ts.map +1 -0
  449. package/dist/types/src/jose/algorithms/signing/ed25519.d.ts +3 -0
  450. package/dist/types/src/jose/algorithms/signing/ed25519.d.ts.map +1 -0
  451. package/dist/types/src/jose/algorithms/signing/signature-algorithms.d.ts +3 -0
  452. package/dist/types/src/jose/algorithms/signing/signature-algorithms.d.ts.map +1 -0
  453. package/dist/types/src/jose/jws/general/builder.d.ts +10 -0
  454. package/dist/types/src/jose/jws/general/builder.d.ts.map +1 -0
  455. package/dist/types/src/jose/jws/general/verifier.d.ts +32 -0
  456. package/dist/types/src/jose/jws/general/verifier.d.ts.map +1 -0
  457. package/dist/types/src/protocols/permission-grant.d.ts +50 -0
  458. package/dist/types/src/protocols/permission-grant.d.ts.map +1 -0
  459. package/dist/types/src/protocols/permission-request.d.ts +35 -0
  460. package/dist/types/src/protocols/permission-request.d.ts.map +1 -0
  461. package/dist/types/src/protocols/permissions.d.ts +150 -0
  462. package/dist/types/src/protocols/permissions.d.ts.map +1 -0
  463. package/dist/types/src/schema-validator.d.ts +8 -0
  464. package/dist/types/src/schema-validator.d.ts.map +1 -0
  465. package/dist/types/src/store/blockstore-level.d.ts +34 -0
  466. package/dist/types/src/store/blockstore-level.d.ts.map +1 -0
  467. package/dist/types/src/store/blockstore-mock.d.ts +27 -0
  468. package/dist/types/src/store/blockstore-mock.d.ts.map +1 -0
  469. package/dist/types/src/store/data-store-level.d.ts +34 -0
  470. package/dist/types/src/store/data-store-level.d.ts.map +1 -0
  471. package/dist/types/src/store/index-level.d.ts +171 -0
  472. package/dist/types/src/store/index-level.d.ts.map +1 -0
  473. package/dist/types/src/store/level-wrapper.d.ts +48 -0
  474. package/dist/types/src/store/level-wrapper.d.ts.map +1 -0
  475. package/dist/types/src/store/message-store-level.d.ts +46 -0
  476. package/dist/types/src/store/message-store-level.d.ts.map +1 -0
  477. package/dist/types/src/store/resumable-task-store-level.d.ts +28 -0
  478. package/dist/types/src/store/resumable-task-store-level.d.ts.map +1 -0
  479. package/dist/types/src/store/storage-controller.d.ts +46 -0
  480. package/dist/types/src/store/storage-controller.d.ts.map +1 -0
  481. package/dist/types/src/types/cache.d.ts +16 -0
  482. package/dist/types/src/types/cache.d.ts.map +1 -0
  483. package/dist/types/src/types/data-store.d.ts +57 -0
  484. package/dist/types/src/types/data-store.d.ts.map +1 -0
  485. package/dist/types/src/types/event-log.d.ts +52 -0
  486. package/dist/types/src/types/event-log.d.ts.map +1 -0
  487. package/dist/types/src/types/jose-types.d.ts +75 -0
  488. package/dist/types/src/types/jose-types.d.ts.map +1 -0
  489. package/dist/types/src/types/jws-types.d.ts +27 -0
  490. package/dist/types/src/types/jws-types.d.ts.map +1 -0
  491. package/dist/types/src/types/message-interface.d.ts +27 -0
  492. package/dist/types/src/types/message-interface.d.ts.map +1 -0
  493. package/dist/types/src/types/message-store.d.ts +42 -0
  494. package/dist/types/src/types/message-store.d.ts.map +1 -0
  495. package/dist/types/src/types/message-types.d.ts +116 -0
  496. package/dist/types/src/types/message-types.d.ts.map +1 -0
  497. package/dist/types/src/types/messages-types.d.ts +65 -0
  498. package/dist/types/src/types/messages-types.d.ts.map +1 -0
  499. package/dist/types/src/types/method-handler.d.ts +19 -0
  500. package/dist/types/src/types/method-handler.d.ts.map +1 -0
  501. package/dist/types/src/types/permission-types.d.ts +93 -0
  502. package/dist/types/src/types/permission-types.d.ts.map +1 -0
  503. package/dist/types/src/types/protocols-types.d.ts +154 -0
  504. package/dist/types/src/types/protocols-types.d.ts.map +1 -0
  505. package/dist/types/src/types/query-types.d.ts +66 -0
  506. package/dist/types/src/types/query-types.d.ts.map +1 -0
  507. package/dist/types/src/types/records-types.d.ts +230 -0
  508. package/dist/types/src/types/records-types.d.ts.map +1 -0
  509. package/dist/types/src/types/resumable-task-store.d.ts +89 -0
  510. package/dist/types/src/types/resumable-task-store.d.ts.map +1 -0
  511. package/dist/types/src/types/signer.d.ts +26 -0
  512. package/dist/types/src/types/signer.d.ts.map +1 -0
  513. package/dist/types/src/types/subscriptions.d.ts +30 -0
  514. package/dist/types/src/types/subscriptions.d.ts.map +1 -0
  515. package/dist/types/src/utils/abort.d.ts +5 -0
  516. package/dist/types/src/utils/abort.d.ts.map +1 -0
  517. package/dist/types/src/utils/array.d.ts +18 -0
  518. package/dist/types/src/utils/array.d.ts.map +1 -0
  519. package/dist/types/src/utils/cid.d.ts +30 -0
  520. package/dist/types/src/utils/cid.d.ts.map +1 -0
  521. package/dist/types/src/utils/data-stream.d.ts +31 -0
  522. package/dist/types/src/utils/data-stream.d.ts.map +1 -0
  523. package/dist/types/src/utils/encoder.d.ts +14 -0
  524. package/dist/types/src/utils/encoder.d.ts.map +1 -0
  525. package/dist/types/src/utils/encryption.d.ts +44 -0
  526. package/dist/types/src/utils/encryption.d.ts.map +1 -0
  527. package/dist/types/src/utils/filter.d.ts +60 -0
  528. package/dist/types/src/utils/filter.d.ts.map +1 -0
  529. package/dist/types/src/utils/hd-key.d.ts +54 -0
  530. package/dist/types/src/utils/hd-key.d.ts.map +1 -0
  531. package/dist/types/src/utils/jws.d.ts +39 -0
  532. package/dist/types/src/utils/jws.d.ts.map +1 -0
  533. package/dist/types/src/utils/memory-cache.d.ts +15 -0
  534. package/dist/types/src/utils/memory-cache.d.ts.map +1 -0
  535. package/dist/types/src/utils/messages.d.ts +27 -0
  536. package/dist/types/src/utils/messages.d.ts.map +1 -0
  537. package/dist/types/src/utils/object.d.ts +13 -0
  538. package/dist/types/src/utils/object.d.ts.map +1 -0
  539. package/dist/types/src/utils/private-key-signer.d.ts +34 -0
  540. package/dist/types/src/utils/private-key-signer.d.ts.map +1 -0
  541. package/dist/types/src/utils/protocols.d.ts +14 -0
  542. package/dist/types/src/utils/protocols.d.ts.map +1 -0
  543. package/dist/types/src/utils/records.d.ts +122 -0
  544. package/dist/types/src/utils/records.d.ts.map +1 -0
  545. package/dist/types/src/utils/secp256k1.d.ts +59 -0
  546. package/dist/types/src/utils/secp256k1.d.ts.map +1 -0
  547. package/dist/types/src/utils/secp256r1.d.ts +39 -0
  548. package/dist/types/src/utils/secp256r1.d.ts.map +1 -0
  549. package/dist/types/src/utils/string.d.ts +6 -0
  550. package/dist/types/src/utils/string.d.ts.map +1 -0
  551. package/dist/types/src/utils/time.d.ts +50 -0
  552. package/dist/types/src/utils/time.d.ts.map +1 -0
  553. package/dist/types/src/utils/url.d.ts +5 -0
  554. package/dist/types/src/utils/url.d.ts.map +1 -0
  555. package/dist/types/tests/core/auth.spec.d.ts +2 -0
  556. package/dist/types/tests/core/auth.spec.d.ts.map +1 -0
  557. package/dist/types/tests/core/message-reply.spec.d.ts +2 -0
  558. package/dist/types/tests/core/message-reply.spec.d.ts.map +1 -0
  559. package/dist/types/tests/core/message.spec.d.ts +2 -0
  560. package/dist/types/tests/core/message.spec.d.ts.map +1 -0
  561. package/dist/types/tests/core/protocol-authorization.spec.d.ts +2 -0
  562. package/dist/types/tests/core/protocol-authorization.spec.d.ts.map +1 -0
  563. package/dist/types/tests/dwn.spec.d.ts +2 -0
  564. package/dist/types/tests/dwn.spec.d.ts.map +1 -0
  565. package/dist/types/tests/event-log/event-emitter-stream.spec.d.ts +2 -0
  566. package/dist/types/tests/event-log/event-emitter-stream.spec.d.ts.map +1 -0
  567. package/dist/types/tests/event-log/event-log-level.spec.d.ts +2 -0
  568. package/dist/types/tests/event-log/event-log-level.spec.d.ts.map +1 -0
  569. package/dist/types/tests/event-log/event-log.spec.d.ts +2 -0
  570. package/dist/types/tests/event-log/event-log.spec.d.ts.map +1 -0
  571. package/dist/types/tests/event-log/event-stream.spec.d.ts +2 -0
  572. package/dist/types/tests/event-log/event-stream.spec.d.ts.map +1 -0
  573. package/dist/types/tests/features/author-delegated-grant.spec.d.ts +2 -0
  574. package/dist/types/tests/features/author-delegated-grant.spec.d.ts.map +1 -0
  575. package/dist/types/tests/features/owner-delegated-grant.spec.d.ts +2 -0
  576. package/dist/types/tests/features/owner-delegated-grant.spec.d.ts.map +1 -0
  577. package/dist/types/tests/features/owner-signature.spec.d.ts +2 -0
  578. package/dist/types/tests/features/owner-signature.spec.d.ts.map +1 -0
  579. package/dist/types/tests/features/permissions.spec.d.ts +2 -0
  580. package/dist/types/tests/features/permissions.spec.d.ts.map +1 -0
  581. package/dist/types/tests/features/protocol-create-action.spec.d.ts +2 -0
  582. package/dist/types/tests/features/protocol-create-action.spec.d.ts.map +1 -0
  583. package/dist/types/tests/features/protocol-delete-action.spec.d.ts +2 -0
  584. package/dist/types/tests/features/protocol-delete-action.spec.d.ts.map +1 -0
  585. package/dist/types/tests/features/protocol-update-action.spec.d.ts +2 -0
  586. package/dist/types/tests/features/protocol-update-action.spec.d.ts.map +1 -0
  587. package/dist/types/tests/features/records-prune.spec.d.ts +2 -0
  588. package/dist/types/tests/features/records-prune.spec.d.ts.map +1 -0
  589. package/dist/types/tests/features/records-tags.spec.d.ts +2 -0
  590. package/dist/types/tests/features/records-tags.spec.d.ts.map +1 -0
  591. package/dist/types/tests/features/resumable-tasks.spec.d.ts +2 -0
  592. package/dist/types/tests/features/resumable-tasks.spec.d.ts.map +1 -0
  593. package/dist/types/tests/handlers/messages-query.spec.d.ts +2 -0
  594. package/dist/types/tests/handlers/messages-query.spec.d.ts.map +1 -0
  595. package/dist/types/tests/handlers/messages-read.spec.d.ts +2 -0
  596. package/dist/types/tests/handlers/messages-read.spec.d.ts.map +1 -0
  597. package/dist/types/tests/handlers/messages-subscribe.spec.d.ts +2 -0
  598. package/dist/types/tests/handlers/messages-subscribe.spec.d.ts.map +1 -0
  599. package/dist/types/tests/handlers/protocols-configure.spec.d.ts +2 -0
  600. package/dist/types/tests/handlers/protocols-configure.spec.d.ts.map +1 -0
  601. package/dist/types/tests/handlers/protocols-query.spec.d.ts +2 -0
  602. package/dist/types/tests/handlers/protocols-query.spec.d.ts.map +1 -0
  603. package/dist/types/tests/handlers/records-delete.spec.d.ts +2 -0
  604. package/dist/types/tests/handlers/records-delete.spec.d.ts.map +1 -0
  605. package/dist/types/tests/handlers/records-query.spec.d.ts +2 -0
  606. package/dist/types/tests/handlers/records-query.spec.d.ts.map +1 -0
  607. package/dist/types/tests/handlers/records-read.spec.d.ts +2 -0
  608. package/dist/types/tests/handlers/records-read.spec.d.ts.map +1 -0
  609. package/dist/types/tests/handlers/records-subscribe.spec.d.ts +2 -0
  610. package/dist/types/tests/handlers/records-subscribe.spec.d.ts.map +1 -0
  611. package/dist/types/tests/handlers/records-write.spec.d.ts +2 -0
  612. package/dist/types/tests/handlers/records-write.spec.d.ts.map +1 -0
  613. package/dist/types/tests/interfaces/messages-get.spec.d.ts +2 -0
  614. package/dist/types/tests/interfaces/messages-get.spec.d.ts.map +1 -0
  615. package/dist/types/tests/interfaces/messages-subscribe.spec.d.ts +2 -0
  616. package/dist/types/tests/interfaces/messages-subscribe.spec.d.ts.map +1 -0
  617. package/dist/types/tests/interfaces/messagess-query.spec.d.ts +2 -0
  618. package/dist/types/tests/interfaces/messagess-query.spec.d.ts.map +1 -0
  619. package/dist/types/tests/interfaces/protocols-configure.spec.d.ts +2 -0
  620. package/dist/types/tests/interfaces/protocols-configure.spec.d.ts.map +1 -0
  621. package/dist/types/tests/interfaces/protocols-query.spec.d.ts +2 -0
  622. package/dist/types/tests/interfaces/protocols-query.spec.d.ts.map +1 -0
  623. package/dist/types/tests/interfaces/records-delete.spec.d.ts +2 -0
  624. package/dist/types/tests/interfaces/records-delete.spec.d.ts.map +1 -0
  625. package/dist/types/tests/interfaces/records-query.spec.d.ts +2 -0
  626. package/dist/types/tests/interfaces/records-query.spec.d.ts.map +1 -0
  627. package/dist/types/tests/interfaces/records-read.spec.d.ts +2 -0
  628. package/dist/types/tests/interfaces/records-read.spec.d.ts.map +1 -0
  629. package/dist/types/tests/interfaces/records-subscribe.spec.d.ts +2 -0
  630. package/dist/types/tests/interfaces/records-subscribe.spec.d.ts.map +1 -0
  631. package/dist/types/tests/interfaces/records-write.spec.d.ts +2 -0
  632. package/dist/types/tests/interfaces/records-write.spec.d.ts.map +1 -0
  633. package/dist/types/tests/jose/jws/general.spec.d.ts +2 -0
  634. package/dist/types/tests/jose/jws/general.spec.d.ts.map +1 -0
  635. package/dist/types/tests/protocols/permission-request.spec.d.ts +2 -0
  636. package/dist/types/tests/protocols/permission-request.spec.d.ts.map +1 -0
  637. package/dist/types/tests/protocols/permissions.spec.d.ts +2 -0
  638. package/dist/types/tests/protocols/permissions.spec.d.ts.map +1 -0
  639. package/dist/types/tests/scenarios/aggregator.spec.d.ts +2 -0
  640. package/dist/types/tests/scenarios/aggregator.spec.d.ts.map +1 -0
  641. package/dist/types/tests/scenarios/deleted-record.spec.d.ts +2 -0
  642. package/dist/types/tests/scenarios/deleted-record.spec.d.ts.map +1 -0
  643. package/dist/types/tests/scenarios/end-to-end-tests.spec.d.ts +2 -0
  644. package/dist/types/tests/scenarios/end-to-end-tests.spec.d.ts.map +1 -0
  645. package/dist/types/tests/scenarios/messages-query.spec.d.ts +2 -0
  646. package/dist/types/tests/scenarios/messages-query.spec.d.ts.map +1 -0
  647. package/dist/types/tests/scenarios/nested-roles.spec.d.ts +2 -0
  648. package/dist/types/tests/scenarios/nested-roles.spec.d.ts.map +1 -0
  649. package/dist/types/tests/scenarios/subscriptions.spec.d.ts +2 -0
  650. package/dist/types/tests/scenarios/subscriptions.spec.d.ts.map +1 -0
  651. package/dist/types/tests/store/blockstore-mock.spec.d.ts +2 -0
  652. package/dist/types/tests/store/blockstore-mock.spec.d.ts.map +1 -0
  653. package/dist/types/tests/store/data-store-level.spec.d.ts +2 -0
  654. package/dist/types/tests/store/data-store-level.spec.d.ts.map +1 -0
  655. package/dist/types/tests/store/index-level.spec.d.ts +2 -0
  656. package/dist/types/tests/store/index-level.spec.d.ts.map +1 -0
  657. package/dist/types/tests/store/message-store-level.spec.d.ts +2 -0
  658. package/dist/types/tests/store/message-store-level.spec.d.ts.map +1 -0
  659. package/dist/types/tests/store/message-store.spec.d.ts +2 -0
  660. package/dist/types/tests/store/message-store.spec.d.ts.map +1 -0
  661. package/dist/types/tests/store-dependent-tests.spec.d.ts +2 -0
  662. package/dist/types/tests/store-dependent-tests.spec.d.ts.map +1 -0
  663. package/dist/types/tests/test-event-stream.d.ts +22 -0
  664. package/dist/types/tests/test-event-stream.d.ts.map +1 -0
  665. package/dist/types/tests/test-stores.d.ts +33 -0
  666. package/dist/types/tests/test-stores.d.ts.map +1 -0
  667. package/dist/types/tests/test-suite.d.ts +18 -0
  668. package/dist/types/tests/test-suite.d.ts.map +1 -0
  669. package/dist/types/tests/utils/cid.spec.d.ts +2 -0
  670. package/dist/types/tests/utils/cid.spec.d.ts.map +1 -0
  671. package/dist/types/tests/utils/data-stream.spec.d.ts +2 -0
  672. package/dist/types/tests/utils/data-stream.spec.d.ts.map +1 -0
  673. package/dist/types/tests/utils/encryption.spec.d.ts +2 -0
  674. package/dist/types/tests/utils/encryption.spec.d.ts.map +1 -0
  675. package/dist/types/tests/utils/filters.spec.d.ts +2 -0
  676. package/dist/types/tests/utils/filters.spec.d.ts.map +1 -0
  677. package/dist/types/tests/utils/hd-key.spec.d.ts +2 -0
  678. package/dist/types/tests/utils/hd-key.spec.d.ts.map +1 -0
  679. package/dist/types/tests/utils/jws.spec.d.ts +2 -0
  680. package/dist/types/tests/utils/jws.spec.d.ts.map +1 -0
  681. package/dist/types/tests/utils/memory-cache.spec.d.ts +2 -0
  682. package/dist/types/tests/utils/memory-cache.spec.d.ts.map +1 -0
  683. package/dist/types/tests/utils/messages.spec.d.ts +2 -0
  684. package/dist/types/tests/utils/messages.spec.d.ts.map +1 -0
  685. package/dist/types/tests/utils/object.spec.d.ts +2 -0
  686. package/dist/types/tests/utils/object.spec.d.ts.map +1 -0
  687. package/dist/types/tests/utils/poller.d.ts +21 -0
  688. package/dist/types/tests/utils/poller.d.ts.map +1 -0
  689. package/dist/types/tests/utils/private-key-signer.spec.d.ts +2 -0
  690. package/dist/types/tests/utils/private-key-signer.spec.d.ts.map +1 -0
  691. package/dist/types/tests/utils/records.spec.d.ts +2 -0
  692. package/dist/types/tests/utils/records.spec.d.ts.map +1 -0
  693. package/dist/types/tests/utils/secp256k1.spec.d.ts +2 -0
  694. package/dist/types/tests/utils/secp256k1.spec.d.ts.map +1 -0
  695. package/dist/types/tests/utils/secp256r1.spec.d.ts +2 -0
  696. package/dist/types/tests/utils/secp256r1.spec.d.ts.map +1 -0
  697. package/dist/types/tests/utils/test-data-generator.d.ts +342 -0
  698. package/dist/types/tests/utils/test-data-generator.d.ts.map +1 -0
  699. package/dist/types/tests/utils/test-stub-generator.d.ts +16 -0
  700. package/dist/types/tests/utils/test-stub-generator.d.ts.map +1 -0
  701. package/dist/types/tests/utils/time.spec.d.ts +2 -0
  702. package/dist/types/tests/utils/time.spec.d.ts.map +1 -0
  703. package/dist/types/tests/utils/url.spec.d.ts +2 -0
  704. package/dist/types/tests/utils/url.spec.d.ts.map +1 -0
  705. package/dist/types/tests/validation/json-schemas/definitions.spec.d.ts +2 -0
  706. package/dist/types/tests/validation/json-schemas/definitions.spec.d.ts.map +1 -0
  707. package/dist/types/tests/validation/json-schemas/jwk/general-jwk.spec.d.ts +2 -0
  708. package/dist/types/tests/validation/json-schemas/jwk/general-jwk.spec.d.ts.map +1 -0
  709. package/dist/types/tests/validation/json-schemas/jwk/public-jwk.spec.d.ts +2 -0
  710. package/dist/types/tests/validation/json-schemas/jwk/public-jwk.spec.d.ts.map +1 -0
  711. package/dist/types/tests/validation/json-schemas/jwk-verification-method.spec.d.ts +2 -0
  712. package/dist/types/tests/validation/json-schemas/jwk-verification-method.spec.d.ts.map +1 -0
  713. package/dist/types/tests/validation/json-schemas/protocols/protocols-configure.spec.d.ts +2 -0
  714. package/dist/types/tests/validation/json-schemas/protocols/protocols-configure.spec.d.ts.map +1 -0
  715. package/dist/types/tests/validation/json-schemas/records/records-query.spec.d.ts +2 -0
  716. package/dist/types/tests/validation/json-schemas/records/records-query.spec.d.ts.map +1 -0
  717. package/dist/types/tests/validation/json-schemas/records/records-write.spec.d.ts +2 -0
  718. package/dist/types/tests/validation/json-schemas/records/records-write.spec.d.ts.map +1 -0
  719. package/package.json +167 -0
  720. package/src/core/abstract-message.ts +62 -0
  721. package/src/core/auth.ts +36 -0
  722. package/src/core/dwn-constant.ts +9 -0
  723. package/src/core/dwn-error.ts +167 -0
  724. package/src/core/grant-authorization.ts +148 -0
  725. package/src/core/message-reply.ts +41 -0
  726. package/src/core/message.ts +259 -0
  727. package/src/core/messages-grant-authorization.ts +134 -0
  728. package/src/core/protocol-authorization.ts +903 -0
  729. package/src/core/protocols-grant-authorization.ts +88 -0
  730. package/src/core/records-grant-authorization.ts +197 -0
  731. package/src/core/resumable-task-manager.ts +114 -0
  732. package/src/core/tenant-gate.ts +33 -0
  733. package/src/dwn.ts +264 -0
  734. package/src/enums/dwn-interface-method.ts +14 -0
  735. package/src/event-log/event-emitter-stream.ts +69 -0
  736. package/src/event-log/event-log-level.ts +72 -0
  737. package/src/handlers/messages-query.ts +67 -0
  738. package/src/handlers/messages-read.ts +103 -0
  739. package/src/handlers/messages-subscribe.ts +89 -0
  740. package/src/handlers/protocols-configure.ts +137 -0
  741. package/src/handlers/protocols-query.ts +82 -0
  742. package/src/handlers/records-delete.ts +124 -0
  743. package/src/handlers/records-query.ts +262 -0
  744. package/src/handlers/records-read.ts +187 -0
  745. package/src/handlers/records-subscribe.ts +218 -0
  746. package/src/handlers/records-write.ts +404 -0
  747. package/src/index.ts +67 -0
  748. package/src/interfaces/messages-query.ts +60 -0
  749. package/src/interfaces/messages-read.ts +63 -0
  750. package/src/interfaces/messages-subscribe.ts +64 -0
  751. package/src/interfaces/protocols-configure.ts +340 -0
  752. package/src/interfaces/protocols-query.ts +96 -0
  753. package/src/interfaces/records-delete.ts +117 -0
  754. package/src/interfaces/records-query.ts +131 -0
  755. package/src/interfaces/records-read.ts +100 -0
  756. package/src/interfaces/records-subscribe.ts +104 -0
  757. package/src/interfaces/records-write.ts +1072 -0
  758. package/src/jose/algorithms/signing/ed25519.ts +58 -0
  759. package/src/jose/algorithms/signing/signature-algorithms.ts +22 -0
  760. package/src/jose/jws/general/builder.ts +48 -0
  761. package/src/jose/jws/general/verifier.ts +112 -0
  762. package/src/protocols/permission-grant.ts +86 -0
  763. package/src/protocols/permission-request.ts +63 -0
  764. package/src/protocols/permissions.ts +508 -0
  765. package/src/schema-validator.ts +46 -0
  766. package/src/store/blockstore-level.ts +113 -0
  767. package/src/store/blockstore-mock.ts +80 -0
  768. package/src/store/data-store-level.ts +120 -0
  769. package/src/store/index-level.ts +691 -0
  770. package/src/store/level-wrapper.ts +272 -0
  771. package/src/store/message-store-level.ts +195 -0
  772. package/src/store/resumable-task-store-level.ts +120 -0
  773. package/src/store/storage-controller.ts +240 -0
  774. package/src/types/cache.ts +16 -0
  775. package/src/types/data-store.ts +64 -0
  776. package/src/types/event-log.ts +52 -0
  777. package/src/types/jose-types.ts +76 -0
  778. package/src/types/jws-types.ts +28 -0
  779. package/src/types/message-interface.ts +30 -0
  780. package/src/types/message-store.ts +57 -0
  781. package/src/types/message-types.ts +132 -0
  782. package/src/types/messages-types.ts +77 -0
  783. package/src/types/method-handler.ts +19 -0
  784. package/src/types/permission-types.ts +110 -0
  785. package/src/types/protocols-types.ts +177 -0
  786. package/src/types/query-types.ts +61 -0
  787. package/src/types/records-types.ts +263 -0
  788. package/src/types/resumable-task-store.ts +96 -0
  789. package/src/types/signer.ts +27 -0
  790. package/src/types/subscriptions.ts +34 -0
  791. package/src/utils/abort.ts +31 -0
  792. package/src/utils/array.ts +39 -0
  793. package/src/utils/cid.ts +101 -0
  794. package/src/utils/data-stream.ts +99 -0
  795. package/src/utils/encoder.ts +54 -0
  796. package/src/utils/encryption.ts +145 -0
  797. package/src/utils/filter.ts +245 -0
  798. package/src/utils/hd-key.ts +126 -0
  799. package/src/utils/jws.ts +95 -0
  800. package/src/utils/memory-cache.ts +31 -0
  801. package/src/utils/messages.ts +109 -0
  802. package/src/utils/object.ts +43 -0
  803. package/src/utils/private-key-signer.ts +72 -0
  804. package/src/utils/protocols.ts +50 -0
  805. package/src/utils/records.ts +559 -0
  806. package/src/utils/secp256k1.ts +157 -0
  807. package/src/utils/secp256r1.ts +142 -0
  808. package/src/utils/string.ts +13 -0
  809. package/src/utils/time.ts +78 -0
  810. package/src/utils/url.ts +65 -0
@@ -0,0 +1,647 @@
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
+ import { expect } from 'chai';
11
+ import { GeneralJwsVerifier } from '../../src/jose/jws/general/verifier.js';
12
+ import { Message } from '../../src/core/message.js';
13
+ import minimalProtocolDefinition from '../vectors/protocol-definitions/minimal.json' assert { type: 'json' };
14
+ import { TestDataGenerator } from '../utils/test-data-generator.js';
15
+ import { TestEventStream } from '../test-event-stream.js';
16
+ import { TestStores } from '../test-stores.js';
17
+ import { DataStream, Dwn, DwnConstant, DwnErrorCode, DwnInterfaceName, DwnMethodName, Jws, PermissionGrant, PermissionsProtocol, Time } from '../../src/index.js';
18
+ import { DidKey, UniversalResolver } from '@enbox/dids';
19
+ import sinon from 'sinon';
20
+ export function testMessagesReadHandler() {
21
+ describe('MessagesReadHandler.handle()', () => {
22
+ let dwn;
23
+ let didResolver;
24
+ let messageStore;
25
+ let dataStore;
26
+ let resumableTaskStore;
27
+ let eventLog;
28
+ let eventStream;
29
+ // important to follow the `before` and `after` pattern to initialize and clean the stores in tests
30
+ // so that different test suites can reuse the same backend store for testing
31
+ before(() => __awaiter(this, void 0, void 0, function* () {
32
+ didResolver = new UniversalResolver({ didResolvers: [DidKey] });
33
+ const stores = TestStores.get();
34
+ messageStore = stores.messageStore;
35
+ dataStore = stores.dataStore;
36
+ resumableTaskStore = stores.resumableTaskStore;
37
+ eventLog = stores.eventLog;
38
+ eventStream = TestEventStream.get();
39
+ dwn = yield Dwn.create({ didResolver, messageStore, dataStore, eventLog, eventStream, resumableTaskStore });
40
+ }));
41
+ beforeEach(() => __awaiter(this, void 0, void 0, function* () {
42
+ // clean up before each test rather than after so that a test does not depend on other tests to do the clean up
43
+ yield messageStore.clear();
44
+ yield dataStore.clear();
45
+ yield resumableTaskStore.clear();
46
+ yield eventLog.clear();
47
+ sinon.restore(); // wipe all previous stubs/spies/mocks/fakes
48
+ }));
49
+ after(() => __awaiter(this, void 0, void 0, function* () {
50
+ sinon.restore();
51
+ yield dwn.close();
52
+ }));
53
+ it('returns a 401 if authentication fails', () => __awaiter(this, void 0, void 0, function* () {
54
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
55
+ sinon.stub(GeneralJwsVerifier, 'verifySignatures').throws(new Error('Invalid signature'));
56
+ // alice creates a record
57
+ const { message } = yield TestDataGenerator.generateMessagesRead({
58
+ author: alice,
59
+ messageCid: yield TestDataGenerator.randomCborSha256Cid()
60
+ });
61
+ // alice is not the author of the message
62
+ const reply = yield dwn.processMessage(alice.did, message);
63
+ expect(reply.status.code).to.equal(401);
64
+ expect(reply.status.detail).to.include('Invalid signature');
65
+ }));
66
+ it('returns a 400 if message is invalid', () => __awaiter(this, void 0, void 0, function* () {
67
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
68
+ const { recordsWrite } = yield TestDataGenerator.generateRecordsWrite({ author: alice });
69
+ const { message } = yield TestDataGenerator.generateMessagesRead({
70
+ author: alice,
71
+ messageCid: yield Message.getCid(recordsWrite.message)
72
+ });
73
+ message['descriptor']['troll'] = 'hehe';
74
+ const reply = yield dwn.processMessage(alice.did, message);
75
+ expect(reply.status.code).to.equal(400);
76
+ }));
77
+ it('returns a 400 if message contains an invalid message cid', () => __awaiter(this, void 0, void 0, function* () {
78
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
79
+ const { recordsWrite } = yield TestDataGenerator.generateRecordsWrite({ author: alice });
80
+ const { message } = yield TestDataGenerator.generateMessagesRead({
81
+ author: alice,
82
+ messageCid: yield Message.getCid(recordsWrite.message)
83
+ });
84
+ message.descriptor.messageCid = 'hehetroll';
85
+ const reply = yield dwn.processMessage(alice.did, message);
86
+ expect(reply.status.code).to.equal(400);
87
+ expect(reply.status.detail).to.include('is not a valid CID');
88
+ expect(reply.entry).to.be.undefined;
89
+ }));
90
+ it('returns a 404 and the entry as undefined in reply entry when a messageCid is not found', () => __awaiter(this, void 0, void 0, function* () {
91
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
92
+ const { recordsWrite } = yield TestDataGenerator.generateRecordsWrite({ author: alice });
93
+ const recordsWriteMessageCid = yield Message.getCid(recordsWrite.message);
94
+ const { message } = yield TestDataGenerator.generateMessagesRead({
95
+ author: alice,
96
+ messageCid: recordsWriteMessageCid
97
+ });
98
+ // returns a 404 because the RecordsWrite created above was never stored
99
+ const reply = yield dwn.processMessage(alice.did, message);
100
+ expect(reply.status.code).to.equal(404);
101
+ expect(reply.entry).to.be.undefined;
102
+ }));
103
+ describe('without a grant', () => {
104
+ describe('records interface messages', () => {
105
+ it('returns a 401 if the tenant is not the author', () => __awaiter(this, void 0, void 0, function* () {
106
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
107
+ const bob = yield TestDataGenerator.generateDidKeyPersona();
108
+ // bob creates a record that alice will try and get
109
+ const { message: recordsWrite, dataStream } = yield TestDataGenerator.generateRecordsWrite({ author: bob });
110
+ const { status } = yield dwn.processMessage(bob.did, recordsWrite, { dataStream });
111
+ expect(status.code).to.equal(202);
112
+ // alice tries to read the message
113
+ const { message } = yield TestDataGenerator.generateMessagesRead({
114
+ author: alice,
115
+ messageCid: yield Message.getCid(recordsWrite)
116
+ });
117
+ const reply = yield dwn.processMessage(bob.did, message);
118
+ expect(reply.status.code).to.equal(401);
119
+ expect(reply.status.detail).to.include(DwnErrorCode.MessagesReadAuthorizationFailed);
120
+ }));
121
+ describe('gets record data in the reply entry', () => {
122
+ it('data is less than threshold', () => __awaiter(this, void 0, void 0, function* () {
123
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
124
+ const { message: recordsWrite, dataStream, dataBytes } = yield TestDataGenerator.generateRecordsWrite({
125
+ author: alice,
126
+ data: TestDataGenerator.randomBytes(DwnConstant.maxDataSizeAllowedToBeEncoded),
127
+ });
128
+ const reply = yield dwn.processMessage(alice.did, recordsWrite, { dataStream });
129
+ expect(reply.status.code).to.equal(202);
130
+ const recordsWriteMessageCid = yield Message.getCid(recordsWrite);
131
+ const { message } = yield TestDataGenerator.generateMessagesRead({
132
+ author: alice,
133
+ messageCid: recordsWriteMessageCid
134
+ });
135
+ const messagesReadReply = yield dwn.processMessage(alice.did, message);
136
+ expect(messagesReadReply.status.code).to.equal(200);
137
+ expect(messagesReadReply.entry).to.exist;
138
+ const messageReply = messagesReadReply.entry;
139
+ expect(messageReply.messageCid).to.exist;
140
+ expect(messageReply.messageCid).to.equal(recordsWriteMessageCid);
141
+ expect(messageReply.message).to.exist.and.not.be.undefined;
142
+ expect(messageReply.data).to.exist.and.not.be.undefined;
143
+ const messageData = yield DataStream.toBytes(messageReply.data);
144
+ expect(messageData).to.eql(dataBytes);
145
+ }));
146
+ it('data is greater than threshold', () => __awaiter(this, void 0, void 0, function* () {
147
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
148
+ const { message: recordsWrite, dataStream, dataBytes } = yield TestDataGenerator.generateRecordsWrite({
149
+ author: alice,
150
+ data: TestDataGenerator.randomBytes(DwnConstant.maxDataSizeAllowedToBeEncoded + 10),
151
+ });
152
+ const reply = yield dwn.processMessage(alice.did, recordsWrite, { dataStream });
153
+ expect(reply.status.code).to.equal(202);
154
+ const recordsWriteMessageCid = yield Message.getCid(recordsWrite);
155
+ const { message } = yield TestDataGenerator.generateMessagesRead({
156
+ author: alice,
157
+ messageCid: recordsWriteMessageCid
158
+ });
159
+ const messagesReadReply = yield dwn.processMessage(alice.did, message);
160
+ expect(messagesReadReply.status.code).to.equal(200);
161
+ expect(messagesReadReply.entry).to.exist;
162
+ const messageReply = messagesReadReply.entry;
163
+ expect(messageReply.messageCid).to.exist;
164
+ expect(messageReply.messageCid).to.equal(recordsWriteMessageCid);
165
+ expect(messageReply.message).to.exist.and.not.be.undefined;
166
+ expect(messageReply.data).to.exist.and.not.be.undefined;
167
+ const messageData = yield DataStream.toBytes(messageReply.data);
168
+ expect(messageData).to.eql(dataBytes);
169
+ }));
170
+ it('data is not available', () => __awaiter(this, void 0, void 0, function* () {
171
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
172
+ // initial write
173
+ const { message: recordsWriteMessage, recordsWrite, dataStream } = yield TestDataGenerator.generateRecordsWrite({
174
+ author: alice,
175
+ data: TestDataGenerator.randomBytes(DwnConstant.maxDataSizeAllowedToBeEncoded + 10),
176
+ });
177
+ const initialMessageCid = yield Message.getCid(recordsWriteMessage);
178
+ let reply = yield dwn.processMessage(alice.did, recordsWriteMessage, { dataStream });
179
+ expect(reply.status.code).to.equal(202);
180
+ const { recordsWrite: updateMessage, dataStream: updateDataStream } = yield TestDataGenerator.generateFromRecordsWrite({
181
+ author: alice,
182
+ existingWrite: recordsWrite,
183
+ data: TestDataGenerator.randomBytes(DwnConstant.maxDataSizeAllowedToBeEncoded + 10),
184
+ });
185
+ reply = yield dwn.processMessage(alice.did, updateMessage.toJSON(), { dataStream: updateDataStream });
186
+ expect(reply.status.code).to.equal(202);
187
+ const { message } = yield TestDataGenerator.generateMessagesRead({
188
+ author: alice,
189
+ messageCid: initialMessageCid
190
+ });
191
+ const messagesReadReply = yield dwn.processMessage(alice.did, message);
192
+ expect(messagesReadReply.status.code).to.equal(200);
193
+ expect(messagesReadReply.entry).to.exist;
194
+ const messageReply = messagesReadReply.entry;
195
+ expect(messageReply.messageCid).to.exist;
196
+ expect(messageReply.messageCid).to.equal(initialMessageCid);
197
+ expect(messageReply.message).to.exist.and.not.be.undefined;
198
+ expect(messageReply.data).to.be.undefined;
199
+ }));
200
+ });
201
+ });
202
+ describe('Protocol interface messages', () => {
203
+ it('returns a 401 if the tenant is not the author', () => __awaiter(this, void 0, void 0, function* () {
204
+ // scenario: Alice configures both a published and non-published protocol and writes it to her DWN.
205
+ // Bob is unable to read either of the ProtocolConfigure messages because he is not the author.
206
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
207
+ const bob = yield TestDataGenerator.generateDidKeyPersona();
208
+ // unpublished protocol configuration
209
+ const unpublishedProtocolDefinition = Object.assign(Object.assign({}, minimalProtocolDefinition), { protocol: 'http://example.com/protocol/unpublished', published: false });
210
+ const { message: unpublishedProtocolsConfigure } = yield TestDataGenerator.generateProtocolsConfigure({
211
+ author: alice,
212
+ protocolDefinition: unpublishedProtocolDefinition
213
+ });
214
+ const unpublishedProtocolsConfigureReply = yield dwn.processMessage(alice.did, unpublishedProtocolsConfigure);
215
+ expect(unpublishedProtocolsConfigureReply.status.code).to.equal(202);
216
+ // published protocol configuration
217
+ const publishedProtocolDefinition = Object.assign(Object.assign({}, minimalProtocolDefinition), { protocol: 'http://example.com/protocol/published', published: true });
218
+ const { message: publishedProtocolsConfigure } = yield TestDataGenerator.generateProtocolsConfigure({
219
+ author: alice,
220
+ protocolDefinition: publishedProtocolDefinition
221
+ });
222
+ const publishedProtocolsConfigureReply = yield dwn.processMessage(alice.did, publishedProtocolsConfigure);
223
+ expect(publishedProtocolsConfigureReply.status.code).to.equal(202);
224
+ // get the message CIDs
225
+ const unpublishedProtocolMessageCid = yield Message.getCid(unpublishedProtocolsConfigure);
226
+ const publishedProtocolMessageCid = yield Message.getCid(publishedProtocolsConfigure);
227
+ // bob attempts to read the unpublished protocol configuration
228
+ const { message: getUnpublishedProtocolConfigure } = yield TestDataGenerator.generateMessagesRead({
229
+ author: bob,
230
+ messageCid: unpublishedProtocolMessageCid,
231
+ });
232
+ const getUnpublishedProtocolConfigureReply = yield dwn.processMessage(alice.did, getUnpublishedProtocolConfigure);
233
+ expect(getUnpublishedProtocolConfigureReply.status.code).to.equal(401);
234
+ expect(getUnpublishedProtocolConfigureReply.status.detail).to.include(DwnErrorCode.MessagesReadAuthorizationFailed);
235
+ expect(getUnpublishedProtocolConfigureReply.entry).to.be.undefined;
236
+ // bob attempts to read the published protocol configuration
237
+ const { message: getPublishedProtocolConfigure } = yield TestDataGenerator.generateMessagesRead({
238
+ author: bob,
239
+ messageCid: publishedProtocolMessageCid,
240
+ });
241
+ const getPublishedProtocolConfigureReply = yield dwn.processMessage(alice.did, getPublishedProtocolConfigure);
242
+ expect(getPublishedProtocolConfigureReply.status.code).to.equal(401);
243
+ expect(getPublishedProtocolConfigureReply.status.detail).to.include(DwnErrorCode.MessagesReadAuthorizationFailed);
244
+ expect(getPublishedProtocolConfigureReply.entry).to.be.undefined;
245
+ // control: alice is able to read both the published and unpublished protocol configurations
246
+ const { message: getUnpublishedProtocolConfigureAlice } = yield TestDataGenerator.generateMessagesRead({
247
+ author: alice,
248
+ messageCid: unpublishedProtocolMessageCid,
249
+ });
250
+ const getUnpublishedProtocolConfigureAliceReply = yield dwn.processMessage(alice.did, getUnpublishedProtocolConfigureAlice);
251
+ expect(getUnpublishedProtocolConfigureAliceReply.status.code).to.equal(200);
252
+ expect(getUnpublishedProtocolConfigureAliceReply.entry).to.exist;
253
+ expect(getUnpublishedProtocolConfigureAliceReply.entry.messageCid).to.equal(unpublishedProtocolMessageCid);
254
+ expect(getUnpublishedProtocolConfigureAliceReply.entry.message).to.deep.equal(unpublishedProtocolsConfigure);
255
+ const { message: getPublishedProtocolConfigureAlice } = yield TestDataGenerator.generateMessagesRead({
256
+ author: alice,
257
+ messageCid: publishedProtocolMessageCid,
258
+ });
259
+ const getPublishedProtocolConfigureAliceReply = yield dwn.processMessage(alice.did, getPublishedProtocolConfigureAlice);
260
+ expect(getPublishedProtocolConfigureAliceReply.status.code).to.equal(200);
261
+ expect(getPublishedProtocolConfigureAliceReply.entry).to.exist;
262
+ expect(getPublishedProtocolConfigureAliceReply.entry.messageCid).to.equal(publishedProtocolMessageCid);
263
+ expect(getPublishedProtocolConfigureAliceReply.entry.message).to.deep.equal(publishedProtocolsConfigure);
264
+ }));
265
+ });
266
+ });
267
+ describe('with a grant', () => {
268
+ it('returns a 401 if grant has different DWN interface scope', () => __awaiter(this, void 0, void 0, function* () {
269
+ // scenario: Alice grants Bob access to RecordsWrite, then Bob tries to invoke the grant with MessagesRead
270
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
271
+ const bob = yield TestDataGenerator.generateDidKeyPersona();
272
+ // alice installs a protocol
273
+ const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
274
+ author: alice,
275
+ protocolDefinition: minimalProtocolDefinition
276
+ });
277
+ const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
278
+ expect(protocolsConfigureReply.status.code).to.equal(202);
279
+ // Alice writes a record which Bob will later try to read
280
+ const { recordsWrite, dataStream } = yield TestDataGenerator.generateRecordsWrite({
281
+ author: alice,
282
+ protocol: minimalProtocolDefinition.protocol,
283
+ protocolPath: 'foo',
284
+ });
285
+ const recordsWriteReply = yield dwn.processMessage(alice.did, recordsWrite.message, { dataStream });
286
+ expect(recordsWriteReply.status.code).to.equal(202);
287
+ // Alice gives Bob a permission grant scoped to a RecordsWrite and the protocol
288
+ const permissionGrant = yield PermissionsProtocol.createGrant({
289
+ signer: Jws.createSigner(alice),
290
+ grantedTo: bob.did,
291
+ dateExpires: Time.createOffsetTimestamp({ seconds: 60 * 60 * 24 }), // 24 hours
292
+ scope: {
293
+ interface: DwnInterfaceName.Records,
294
+ method: DwnMethodName.Write,
295
+ protocol: minimalProtocolDefinition.protocol,
296
+ }
297
+ });
298
+ const grantDataStream = DataStream.fromBytes(permissionGrant.permissionGrantBytes);
299
+ const permissionGrantWriteReply = yield dwn.processMessage(alice.did, permissionGrant.recordsWrite.message, { dataStream: grantDataStream });
300
+ expect(permissionGrantWriteReply.status.code).to.equal(202);
301
+ // Bob tries to MessagesRead using the RecordsWrite grant
302
+ const messagesRead = yield TestDataGenerator.generateMessagesRead({
303
+ author: bob,
304
+ messageCid: yield Message.getCid(recordsWrite.message),
305
+ permissionGrantId: permissionGrant.recordsWrite.message.recordId,
306
+ });
307
+ const messagesReadReply = yield dwn.processMessage(alice.did, messagesRead.message);
308
+ expect(messagesReadReply.status.code).to.equal(401);
309
+ expect(messagesReadReply.status.detail).to.contain(DwnErrorCode.GrantAuthorizationInterfaceMismatch);
310
+ }));
311
+ it('allows external parties to read a message using a grant with unrestricted scope', () => __awaiter(this, void 0, void 0, function* () {
312
+ // scenario: Alice gives Bob a grant allowing him to read any message in her DWN.
313
+ // Bob invokes that grant to read a message.
314
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
315
+ const bob = yield TestDataGenerator.generateDidKeyPersona();
316
+ // Alice writes a record to her DWN
317
+ const { message, dataStream } = yield TestDataGenerator.generateRecordsWrite({
318
+ author: alice,
319
+ });
320
+ const writeReply = yield dwn.processMessage(alice.did, message, { dataStream });
321
+ expect(writeReply.status.code).to.equal(202);
322
+ const messageCid = yield Message.getCid(message);
323
+ // Alice issues a permission grant allowing Bob to read any record in her DWN
324
+ const permissionGrant = yield PermissionsProtocol.createGrant({
325
+ signer: Jws.createSigner(alice),
326
+ grantedTo: bob.did,
327
+ dateExpires: Time.createOffsetTimestamp({ seconds: 60 * 60 * 24 }), // 24 hours
328
+ scope: {
329
+ interface: DwnInterfaceName.Messages,
330
+ method: DwnMethodName.Read,
331
+ }
332
+ });
333
+ const grantDataStream = DataStream.fromBytes(permissionGrant.permissionGrantBytes);
334
+ const grantReply = yield dwn.processMessage(alice.did, permissionGrant.recordsWrite.message, { dataStream: grantDataStream });
335
+ expect(grantReply.status.code).to.equal(202);
336
+ // Bob invokes that grant to read a record from Alice's DWN
337
+ const messagesRead = yield TestDataGenerator.generateMessagesRead({
338
+ author: bob,
339
+ permissionGrantId: permissionGrant.recordsWrite.message.recordId,
340
+ messageCid,
341
+ });
342
+ const readReply = yield dwn.processMessage(alice.did, messagesRead.message);
343
+ expect(readReply.status.code).to.equal(200);
344
+ expect(readReply.entry).to.not.be.undefined;
345
+ expect(readReply.entry.messageCid).to.equal(messageCid);
346
+ }));
347
+ describe('protocol scoped messages', () => {
348
+ it('allows reads of protocol messages with a protocol restricted grant scope', () => __awaiter(this, void 0, void 0, function* () {
349
+ // This test will verify that a grant scoped to a specific protocol will allow a user to read messages associated with that protocol.
350
+ // These messages include the ProtocolConfiguration itself, even if not published,
351
+ // any RecordsWrite or RecordsDelete messages associated with the protocol,
352
+ // and any PermissionProtocol RecordsWrite messages associated with the protocol.
353
+ // scenario: Alice configures a protocol that is unpublished and writes it to her DWN.
354
+ // Alice then gives Bob a grant to read messages from that protocol.
355
+ // Carol requests a grant to RecordsWrite to the protocol, and Alice grants it.
356
+ // Alice and Carol write records associated with the protocol.
357
+ // Alice also deletes a record associated with the protocol.
358
+ // Alice revokes the grant to Carol.
359
+ // Bob invokes his grant to read the various messages.
360
+ // As a control, Alice writes a record not associated with the protocol and Bob tries to unsuccessfully read it.
361
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
362
+ const bob = yield TestDataGenerator.generateDidKeyPersona();
363
+ const carol = yield TestDataGenerator.generateDidKeyPersona();
364
+ const protocolDefinition = Object.assign(Object.assign({}, minimalProtocolDefinition), { published: false });
365
+ // Alice installs the unpublished protocol
366
+ const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
367
+ author: alice,
368
+ protocolDefinition
369
+ });
370
+ const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
371
+ expect(protocolsConfigureReply.status.code).to.equal(202);
372
+ const protocolConfigureMessageCid = yield Message.getCid(protocolsConfig.message);
373
+ // Carol requests a grant to write records to the protocol
374
+ const permissionRequestCarol = yield PermissionsProtocol.createRequest({
375
+ signer: Jws.createSigner(alice),
376
+ delegated: false,
377
+ scope: {
378
+ interface: DwnInterfaceName.Records,
379
+ method: DwnMethodName.Write,
380
+ protocol: protocolDefinition.protocol,
381
+ }
382
+ });
383
+ const requestDataStreamCarol = DataStream.fromBytes(permissionRequestCarol.permissionRequestBytes);
384
+ const permissionRequestWriteReplyCarol = yield dwn.processMessage(alice.did, permissionRequestCarol.recordsWrite.message, { dataStream: requestDataStreamCarol });
385
+ expect(permissionRequestWriteReplyCarol.status.code).to.equal(202);
386
+ // Alice gives Carol a grant to write records to the protocol
387
+ const permissionGrantCarol = yield PermissionsProtocol.createGrant({
388
+ signer: Jws.createSigner(alice),
389
+ grantedTo: carol.did,
390
+ dateExpires: Time.createOffsetTimestamp({ seconds: 60 * 60 * 24 }), // 24 hours
391
+ delegated: permissionRequestCarol.permissionRequestData.delegated,
392
+ scope: permissionRequestCarol.permissionRequestData.scope,
393
+ });
394
+ const grantDataStreamCarol = DataStream.fromBytes(permissionGrantCarol.permissionGrantBytes);
395
+ const permissionGrantWriteReplyCarol = yield dwn.processMessage(alice.did, permissionGrantCarol.recordsWrite.message, { dataStream: grantDataStreamCarol });
396
+ expect(permissionGrantWriteReplyCarol.status.code).to.equal(202);
397
+ const carolGrantMessageCiD = yield Message.getCid(permissionGrantCarol.recordsWrite.message);
398
+ // Alice writes a record associated with the protocol
399
+ const { recordsWrite, dataStream } = yield TestDataGenerator.generateRecordsWrite({
400
+ author: alice,
401
+ protocol: protocolDefinition.protocol,
402
+ protocolPath: 'foo',
403
+ });
404
+ const recordsWriteReply = yield dwn.processMessage(alice.did, recordsWrite.message, { dataStream });
405
+ expect(recordsWriteReply.status.code).to.equal(202);
406
+ const aliceRecordMessageCid = yield Message.getCid(recordsWrite.message);
407
+ // Alice deletes a record associated with the protocol
408
+ const recordsDelete = yield TestDataGenerator.generateRecordsDelete({
409
+ author: alice,
410
+ recordId: recordsWrite.message.recordId,
411
+ });
412
+ const recordsDeleteReply = yield dwn.processMessage(alice.did, recordsDelete.message);
413
+ expect(recordsDeleteReply.status.code).to.equal(202);
414
+ // Carol writes a record associated with the protocol
415
+ const { recordsWrite: recordsWriteCarol, dataStream: dataStreamCarol } = yield TestDataGenerator.generateRecordsWrite({
416
+ author: carol,
417
+ protocol: protocolDefinition.protocol,
418
+ protocolPath: 'foo',
419
+ permissionGrantId: permissionGrantCarol.recordsWrite.message.recordId,
420
+ });
421
+ const recordsWriteReplyCarol = yield dwn.processMessage(alice.did, recordsWriteCarol.message, { dataStream: dataStreamCarol });
422
+ expect(recordsWriteReplyCarol.status.code).to.equal(202);
423
+ const carolRecordMessageCid = yield Message.getCid(recordsWriteCarol.message);
424
+ // Alice revokes Carol's grant
425
+ const permissionRevocationCarol = yield PermissionsProtocol.createRevocation({
426
+ signer: Jws.createSigner(alice),
427
+ grant: yield PermissionGrant.parse(permissionGrantCarol.dataEncodedMessage),
428
+ });
429
+ const permissionRevocationCarolDataStream = DataStream.fromBytes(permissionRevocationCarol.permissionRevocationBytes);
430
+ const permissionRevocationCarolReply = yield dwn.processMessage(alice.did, permissionRevocationCarol.recordsWrite.message, { dataStream: permissionRevocationCarolDataStream });
431
+ expect(permissionRevocationCarolReply.status.code).to.equal(202);
432
+ // Alice gives Bob a permission grant with scope MessagesRead
433
+ const permissionGrant = yield PermissionsProtocol.createGrant({
434
+ signer: Jws.createSigner(alice),
435
+ grantedTo: bob.did,
436
+ dateExpires: Time.createOffsetTimestamp({ seconds: 60 * 60 * 24 }), // 24 hours
437
+ scope: {
438
+ interface: DwnInterfaceName.Messages,
439
+ method: DwnMethodName.Read,
440
+ protocol: protocolDefinition.protocol,
441
+ }
442
+ });
443
+ const grantDataStream = DataStream.fromBytes(permissionGrant.permissionGrantBytes);
444
+ const permissionGrantWriteReply = yield dwn.processMessage(alice.did, permissionGrant.recordsWrite.message, { dataStream: grantDataStream });
445
+ expect(permissionGrantWriteReply.status.code).to.equal(202);
446
+ // Bob is unable to read the message without using the permission grant
447
+ const messagesReadWithoutGrant = yield TestDataGenerator.generateMessagesRead({
448
+ author: bob,
449
+ messageCid: aliceRecordMessageCid,
450
+ });
451
+ const messagesReadWithoutGrantReply = yield dwn.processMessage(alice.did, messagesReadWithoutGrant.message);
452
+ expect(messagesReadWithoutGrantReply.status.code).to.equal(401);
453
+ expect(messagesReadWithoutGrantReply.status.detail).to.contain(DwnErrorCode.MessagesReadAuthorizationFailed);
454
+ // Bob is able to read all the associated messages when using the permission grant
455
+ // Expected Messages:
456
+ // - Protocol Configuration
457
+ // - Alice's RecordsWrite
458
+ // - Alice's RecordsDelete
459
+ // - Carol's Permission Request
460
+ // - Alice's Permission Grant to Carol
461
+ // - Carol's RecordsWrite
462
+ // - Alice's Revocation of Carol's Grant
463
+ // Protocol configuration
464
+ const messagesReadProtocolConfigure = yield TestDataGenerator.generateMessagesRead({
465
+ author: bob,
466
+ messageCid: protocolConfigureMessageCid,
467
+ permissionGrantId: permissionGrant.recordsWrite.message.recordId,
468
+ });
469
+ const messagesReadProtocolConfigureReply = yield dwn.processMessage(alice.did, messagesReadProtocolConfigure.message);
470
+ expect(messagesReadProtocolConfigureReply.status.code).to.equal(200);
471
+ expect(messagesReadProtocolConfigureReply.entry).to.exist;
472
+ expect(messagesReadProtocolConfigureReply.entry.message).to.deep.equal(protocolsConfig.message);
473
+ // alice RecordsWrite
474
+ const messagesReadWithGrant = yield TestDataGenerator.generateMessagesRead({
475
+ author: bob,
476
+ messageCid: aliceRecordMessageCid,
477
+ permissionGrantId: permissionGrant.recordsWrite.message.recordId,
478
+ });
479
+ const messagesReadWithGrantReply = yield dwn.processMessage(alice.did, messagesReadWithGrant.message);
480
+ expect(messagesReadWithGrantReply.status.code).to.equal(200);
481
+ expect(messagesReadWithGrantReply.entry).to.exist;
482
+ expect(messagesReadWithGrantReply.entry.message).to.deep.equal(recordsWrite.message);
483
+ // alice RecordsDelete
484
+ const messagesReadDelete = yield TestDataGenerator.generateMessagesRead({
485
+ author: bob,
486
+ messageCid: yield Message.getCid(recordsDelete.message),
487
+ permissionGrantId: permissionGrant.recordsWrite.message.recordId,
488
+ });
489
+ const messagesReadDeleteReply = yield dwn.processMessage(alice.did, messagesReadDelete.message);
490
+ expect(messagesReadDeleteReply.status.code).to.equal(200);
491
+ expect(messagesReadDeleteReply.entry).to.exist;
492
+ expect(messagesReadDeleteReply.entry.message).to.deep.equal(recordsDelete.message);
493
+ // carol's Permission Request
494
+ const messagesReadCarolRequest = yield TestDataGenerator.generateMessagesRead({
495
+ author: bob,
496
+ messageCid: yield Message.getCid(permissionRequestCarol.recordsWrite.message),
497
+ permissionGrantId: permissionGrant.recordsWrite.message.recordId,
498
+ });
499
+ const messagesReadCarolRequestReply = yield dwn.processMessage(alice.did, messagesReadCarolRequest.message);
500
+ expect(messagesReadCarolRequestReply.status.code).to.equal(200);
501
+ expect(messagesReadCarolRequestReply.entry).to.exist;
502
+ expect(messagesReadCarolRequestReply.entry.message).to.deep.equal(permissionRequestCarol.recordsWrite.message);
503
+ // carol's Permission Grant
504
+ const messagesReadCarolGrant = yield TestDataGenerator.generateMessagesRead({
505
+ author: bob,
506
+ messageCid: carolGrantMessageCiD,
507
+ permissionGrantId: permissionGrant.recordsWrite.message.recordId,
508
+ });
509
+ const messagesReadCarolGrantReply = yield dwn.processMessage(alice.did, messagesReadCarolGrant.message);
510
+ expect(messagesReadCarolGrantReply.status.code).to.equal(200);
511
+ expect(messagesReadCarolGrantReply.entry).to.exist;
512
+ expect(messagesReadCarolGrantReply.entry.message).to.deep.equal(permissionGrantCarol.recordsWrite.message);
513
+ // carol's RecordsWrite
514
+ const messagesReadCarolRecord = yield TestDataGenerator.generateMessagesRead({
515
+ author: bob,
516
+ messageCid: carolRecordMessageCid,
517
+ permissionGrantId: permissionGrant.recordsWrite.message.recordId,
518
+ });
519
+ const messagesReadCarolRecordReply = yield dwn.processMessage(alice.did, messagesReadCarolRecord.message);
520
+ expect(messagesReadCarolRecordReply.status.code).to.equal(200);
521
+ expect(messagesReadCarolRecordReply.entry).to.exist;
522
+ expect(messagesReadCarolRecordReply.entry.message).to.deep.equal(recordsWriteCarol.message);
523
+ // carol's Grant Revocation
524
+ const messagesReadCarolGrantRevocation = yield TestDataGenerator.generateMessagesRead({
525
+ author: bob,
526
+ messageCid: yield Message.getCid(permissionRevocationCarol.recordsWrite.message),
527
+ permissionGrantId: permissionGrant.recordsWrite.message.recordId,
528
+ });
529
+ const messagesReadCarolGrantRevocationReply = yield dwn.processMessage(alice.did, messagesReadCarolGrantRevocation.message);
530
+ expect(messagesReadCarolGrantRevocationReply.status.code).to.equal(200);
531
+ expect(messagesReadCarolGrantRevocationReply.entry).to.exist;
532
+ expect(messagesReadCarolGrantRevocationReply.entry.message).to.deep.equal(permissionRevocationCarol.recordsWrite.message);
533
+ // CONTROL: Alice writes a record not associated with the protocol
534
+ const { recordsWrite: recordsWriteControl, dataStream: dataStreamControl } = yield TestDataGenerator.generateRecordsWrite({
535
+ author: alice,
536
+ });
537
+ const recordsWriteControlReply = yield dwn.processMessage(alice.did, recordsWriteControl.message, { dataStream: dataStreamControl });
538
+ expect(recordsWriteControlReply.status.code).to.equal(202);
539
+ // Bob is unable to read the control message
540
+ const messagesReadControl = yield TestDataGenerator.generateMessagesRead({
541
+ author: bob,
542
+ messageCid: yield Message.getCid(recordsWriteControl.message),
543
+ permissionGrantId: permissionGrant.recordsWrite.message.recordId,
544
+ });
545
+ const messagesReadControlReply = yield dwn.processMessage(alice.did, messagesReadControl.message);
546
+ expect(messagesReadControlReply.status.code).to.equal(401);
547
+ }));
548
+ it('rejects message read of protocol messages with mismatching protocol grant scopes', () => __awaiter(this, void 0, void 0, function* () {
549
+ // scenario: Alice writes a protocol record. Alice gives Bob a grant to read messages from a different protocol
550
+ // Bob invokes that grant to read the protocol message, but fails.
551
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
552
+ const bob = yield TestDataGenerator.generateDidKeyPersona();
553
+ const protocolDefinition = minimalProtocolDefinition;
554
+ // Alice installs the protocol
555
+ const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
556
+ author: alice,
557
+ protocolDefinition
558
+ });
559
+ const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
560
+ expect(protocolsConfigureReply.status.code).to.equal(202);
561
+ // Alice writes a record which Bob will later try to read
562
+ const { recordsWrite, dataStream } = yield TestDataGenerator.generateRecordsWrite({
563
+ author: alice,
564
+ protocol: protocolDefinition.protocol,
565
+ protocolPath: 'foo',
566
+ });
567
+ const recordsWriteReply = yield dwn.processMessage(alice.did, recordsWrite.message, { dataStream });
568
+ expect(recordsWriteReply.status.code).to.equal(202);
569
+ // Alice gives Bob a permission grant with scope MessagesRead
570
+ const permissionGrant = yield PermissionsProtocol.createGrant({
571
+ signer: Jws.createSigner(alice),
572
+ grantedTo: bob.did,
573
+ dateExpires: Time.createOffsetTimestamp({ seconds: 60 * 60 * 24 }), // 24 hours
574
+ scope: {
575
+ interface: DwnInterfaceName.Messages,
576
+ method: DwnMethodName.Read,
577
+ protocol: 'a-different-protocol'
578
+ }
579
+ });
580
+ const grantDataStream = DataStream.fromBytes(permissionGrant.permissionGrantBytes);
581
+ const permissionGrantWriteReply = yield dwn.processMessage(alice.did, permissionGrant.recordsWrite.message, { dataStream: grantDataStream });
582
+ expect(permissionGrantWriteReply.status.code).to.equal(202);
583
+ // Bob is unable to read the record using the mismatched permission grant
584
+ const messagesReadWithoutGrant = yield TestDataGenerator.generateMessagesRead({
585
+ author: bob,
586
+ messageCid: yield Message.getCid(recordsWrite.message),
587
+ permissionGrantId: permissionGrant.recordsWrite.message.recordId,
588
+ });
589
+ const messagesReadWithoutGrantReply = yield dwn.processMessage(alice.did, messagesReadWithoutGrant.message);
590
+ expect(messagesReadWithoutGrantReply.status.code).to.equal(401);
591
+ expect(messagesReadWithoutGrantReply.status.detail).to.contain(DwnErrorCode.MessagesReadVerifyScopeFailed);
592
+ }));
593
+ it('rejects message if the RecordsWrite message is not found for a RecordsDelete being retrieved', () => __awaiter(this, void 0, void 0, function* () {
594
+ // NOTE: This is a corner case that is unlikely to happen in practice, but is tested for completeness
595
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
596
+ const bob = yield TestDataGenerator.generateDidKeyPersona();
597
+ const protocolDefinition = minimalProtocolDefinition;
598
+ // Alice installs the protocol
599
+ const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
600
+ author: alice,
601
+ protocolDefinition,
602
+ });
603
+ const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
604
+ expect(protocolsConfigureReply.status.code).to.equal(202);
605
+ // Alice gives bob a grant to read messages in the protocol
606
+ const permissionGrant = yield PermissionsProtocol.createGrant({
607
+ signer: Jws.createSigner(alice),
608
+ grantedTo: bob.did,
609
+ dateExpires: Time.createOffsetTimestamp({ seconds: 60 * 60 * 24 }), // 24 hours
610
+ scope: {
611
+ interface: DwnInterfaceName.Messages,
612
+ method: DwnMethodName.Read,
613
+ protocol: protocolDefinition.protocol,
614
+ }
615
+ });
616
+ const grantDataStream = DataStream.fromBytes(permissionGrant.permissionGrantBytes);
617
+ const permissionGrantWriteReply = yield dwn.processMessage(alice.did, permissionGrant.recordsWrite.message, { dataStream: grantDataStream });
618
+ expect(permissionGrantWriteReply.status.code).to.equal(202);
619
+ // Alice creates the records write and records delete messages
620
+ const { recordsWrite } = yield TestDataGenerator.generateRecordsWrite({
621
+ author: alice,
622
+ protocol: protocolDefinition.protocol,
623
+ protocolPath: 'foo',
624
+ });
625
+ const { recordsDelete } = yield TestDataGenerator.generateRecordsDelete({
626
+ author: alice,
627
+ recordId: recordsWrite.message.recordId,
628
+ });
629
+ // Alice inserts the RecordsDelete message directly into the message store
630
+ const recordsDeleteCid = yield Message.getCid(recordsDelete.message);
631
+ const indexes = recordsDelete.constructIndexes(recordsWrite.message);
632
+ yield messageStore.put(alice.did, recordsDelete.message, indexes);
633
+ // Bob tries to read the message
634
+ const messagesRead = yield TestDataGenerator.generateMessagesRead({
635
+ author: bob,
636
+ messageCid: recordsDeleteCid,
637
+ permissionGrantId: permissionGrant.recordsWrite.message.recordId,
638
+ });
639
+ const messagesReadReply = yield dwn.processMessage(alice.did, messagesRead.message);
640
+ expect(messagesReadReply.status.code).to.equal(401);
641
+ expect(messagesReadReply.status.detail).to.contain(DwnErrorCode.RecordsWriteGetNewestWriteRecordNotFound);
642
+ }));
643
+ });
644
+ });
645
+ });
646
+ }
647
+ //# sourceMappingURL=messages-read.spec.js.map