@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,684 @@
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 chaiAsPromised from 'chai-as-promised';
11
+ import sinon from 'sinon';
12
+ import chai, { expect } from 'chai';
13
+ import friendRoleProtocolDefinition from '../vectors/protocol-definitions/friend-role.json' assert { type: 'json' };
14
+ import threadRoleProtocolDefinition from '../vectors/protocol-definitions/thread-role.json' assert { type: 'json' };
15
+ import { Jws } from '../../src/utils/jws.js';
16
+ import { Message } from '../../src/core/message.js';
17
+ import { Poller } from '../utils/poller.js';
18
+ import { RecordsSubscribe } from '../../src/interfaces/records-subscribe.js';
19
+ import { RecordsSubscribeHandler } from '../../src/handlers/records-subscribe.js';
20
+ import { TestDataGenerator } from '../utils/test-data-generator.js';
21
+ import { TestEventStream } from '../test-event-stream.js';
22
+ import { TestStores } from '../test-stores.js';
23
+ import { TestStubGenerator } from '../utils/test-stub-generator.js';
24
+ import { DidKey, UniversalResolver } from '@enbox/dids';
25
+ import { Dwn, DwnErrorCode, DwnMethodName, EventEmitterStream, MessageStoreLevel, Time } from '../../src/index.js';
26
+ chai.use(chaiAsPromised);
27
+ export function testRecordsSubscribeHandler() {
28
+ describe('RecordsSubscribeHandler.handle()', () => {
29
+ describe('EventStream disabled', () => {
30
+ let didResolver;
31
+ let messageStore;
32
+ let resumableTaskStore;
33
+ let dataStore;
34
+ let eventLog;
35
+ let dwn;
36
+ // important to follow the `before` and `after` pattern to initialize and clean the stores in tests
37
+ // so that different test suites can reuse the same backend store for testing
38
+ before(() => __awaiter(this, void 0, void 0, function* () {
39
+ didResolver = new UniversalResolver({ didResolvers: [DidKey] });
40
+ const stores = TestStores.get();
41
+ messageStore = stores.messageStore;
42
+ dataStore = stores.dataStore;
43
+ resumableTaskStore = stores.resumableTaskStore;
44
+ eventLog = stores.eventLog;
45
+ dwn = yield Dwn.create({
46
+ didResolver,
47
+ messageStore,
48
+ dataStore,
49
+ resumableTaskStore,
50
+ eventLog,
51
+ });
52
+ }));
53
+ beforeEach(() => __awaiter(this, void 0, void 0, function* () {
54
+ sinon.restore(); // wipe all previous stubs/spies/mocks/fakes
55
+ // clean up before each test rather than after so that a test does not depend on other tests to do the clean up
56
+ yield messageStore.clear();
57
+ yield dataStore.clear();
58
+ yield resumableTaskStore.clear();
59
+ yield eventLog.clear();
60
+ }));
61
+ after(() => __awaiter(this, void 0, void 0, function* () {
62
+ yield dwn.close();
63
+ }));
64
+ it('should respond with a 501 if subscriptions are not supported', () => __awaiter(this, void 0, void 0, function* () {
65
+ yield dwn.close(); // close the original dwn instance
66
+ dwn = yield Dwn.create({ didResolver, messageStore, dataStore, eventLog, resumableTaskStore }); // leave out eventStream
67
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
68
+ // attempt to subscribe
69
+ const { message } = yield TestDataGenerator.generateRecordsSubscribe({
70
+ author: alice,
71
+ });
72
+ const subscriptionMessageReply = yield dwn.processMessage(alice.did, message, { subscriptionHandler: (_) => { } });
73
+ expect(subscriptionMessageReply.status.code).to.equal(501, subscriptionMessageReply.status.detail);
74
+ expect(subscriptionMessageReply.status.detail).to.include(DwnErrorCode.RecordsSubscribeEventStreamUnimplemented);
75
+ }));
76
+ });
77
+ describe('functional tests', () => {
78
+ let didResolver;
79
+ let messageStore;
80
+ let dataStore;
81
+ let resumableTaskStore;
82
+ let eventLog;
83
+ let eventStream;
84
+ let dwn;
85
+ // important to follow the `before` and `after` pattern to initialize and clean the stores in tests
86
+ // so that different test suites can reuse the same backend store for testing
87
+ before(() => __awaiter(this, void 0, void 0, function* () {
88
+ didResolver = new UniversalResolver({ didResolvers: [DidKey] });
89
+ const stores = TestStores.get();
90
+ messageStore = stores.messageStore;
91
+ dataStore = stores.dataStore;
92
+ resumableTaskStore = stores.resumableTaskStore;
93
+ eventLog = stores.eventLog;
94
+ eventStream = TestEventStream.get();
95
+ dwn = yield Dwn.create({ didResolver, messageStore, dataStore, eventLog, eventStream, resumableTaskStore });
96
+ }));
97
+ beforeEach(() => __awaiter(this, void 0, void 0, function* () {
98
+ sinon.restore(); // wipe all previous stubs/spies/mocks/fakes
99
+ // clean up before each test rather than after so that a test does not depend on other tests to do the clean up
100
+ yield messageStore.clear();
101
+ yield dataStore.clear();
102
+ yield resumableTaskStore.clear();
103
+ yield eventLog.clear();
104
+ }));
105
+ after(() => __awaiter(this, void 0, void 0, function* () {
106
+ yield dwn.close();
107
+ }));
108
+ it('should return a subscription object', () => __awaiter(this, void 0, void 0, function* () {
109
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
110
+ const recordsSubscribe = yield TestDataGenerator.generateRecordsSubscribe({
111
+ author: alice,
112
+ filter: { schema: 'some-schema' },
113
+ });
114
+ // Send records subscribe message
115
+ const reply = yield dwn.processMessage(alice.did, recordsSubscribe.message, { subscriptionHandler: () => { } });
116
+ expect(reply.status.code).to.equal(200);
117
+ expect(reply.subscription).to.exist;
118
+ }));
119
+ it('should return 400 if protocol is not normalized', () => __awaiter(this, void 0, void 0, function* () {
120
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
121
+ // subscribe for non-normalized protocol
122
+ const recordsSubscribe = yield TestDataGenerator.generateRecordsSubscribe({
123
+ author: alice,
124
+ filter: { protocol: 'example.com/' },
125
+ });
126
+ // overwrite protocol because #create auto-normalizes protocol
127
+ recordsSubscribe.message.descriptor.filter.protocol = 'example.com/';
128
+ // Re-create auth because we altered the descriptor after signing
129
+ recordsSubscribe.message.authorization = yield Message.createAuthorization({
130
+ descriptor: recordsSubscribe.message.descriptor,
131
+ signer: Jws.createSigner(alice)
132
+ });
133
+ // Send records subscribe message
134
+ const reply = yield dwn.processMessage(alice.did, recordsSubscribe.message);
135
+ expect(reply.status.code).to.equal(400);
136
+ expect(reply.status.detail).to.contain(DwnErrorCode.UrlProtocolNotNormalized);
137
+ }));
138
+ it('should return 400 if schema is not normalized', () => __awaiter(this, void 0, void 0, function* () {
139
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
140
+ // subscribe for non-normalized schema
141
+ const recordsSubscribe = yield TestDataGenerator.generateRecordsSubscribe({
142
+ author: alice,
143
+ filter: { schema: 'example.com/' },
144
+ });
145
+ // overwrite schema because #create auto-normalizes schema
146
+ recordsSubscribe.message.descriptor.filter.schema = 'example.com/';
147
+ // Re-create auth because we altered the descriptor after signing
148
+ recordsSubscribe.message.authorization = yield Message.createAuthorization({
149
+ descriptor: recordsSubscribe.message.descriptor,
150
+ signer: Jws.createSigner(alice)
151
+ });
152
+ // Send records subscribe message
153
+ const reply = yield dwn.processMessage(alice.did, recordsSubscribe.message);
154
+ expect(reply.status.code).to.equal(400);
155
+ expect(reply.status.detail).to.contain(DwnErrorCode.UrlSchemaNotNormalized);
156
+ }));
157
+ it('should return 400 if published is set to false and a datePublished range is provided', () => __awaiter(this, void 0, void 0, function* () {
158
+ const fromDatePublished = Time.getCurrentTimestamp();
159
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
160
+ // set to true so create does not fail
161
+ const recordSubscribe = yield TestDataGenerator.generateRecordsSubscribe({
162
+ author: alice,
163
+ filter: { datePublished: { from: fromDatePublished }, published: true }
164
+ });
165
+ // set to false
166
+ recordSubscribe.message.descriptor.filter.published = false;
167
+ const subscribeResponse = yield dwn.processMessage(alice.did, recordSubscribe.message);
168
+ expect(subscribeResponse.status.code).to.equal(400);
169
+ expect(subscribeResponse.status.detail).to.contain('descriptor/filter/published: must be equal to one of the allowed values');
170
+ }));
171
+ it('should return 401 for anonymous subscriptions that filter explicitly for unpublished records', () => __awaiter(this, void 0, void 0, function* () {
172
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
173
+ // create an unpublished record
174
+ const draftWrite = yield TestDataGenerator.generateRecordsWrite({ author: alice, schema: 'post' });
175
+ const draftWriteReply = yield dwn.processMessage(alice.did, draftWrite.message, { dataStream: draftWrite.dataStream });
176
+ expect(draftWriteReply.status.code).to.equal(202);
177
+ // validate that alice can subscribe
178
+ const unpublishedPostSubscribe = yield TestDataGenerator.generateRecordsSubscribe({ author: alice, filter: { schema: 'post', published: false } });
179
+ const unpublishedPostReply = yield dwn.processMessage(alice.did, unpublishedPostSubscribe.message, { subscriptionHandler: () => { } });
180
+ expect(unpublishedPostReply.status.code).to.equal(200);
181
+ expect(unpublishedPostReply.subscription).to.exist;
182
+ // anonymous subscribe for unpublished records
183
+ const unpublishedAnonymous = yield RecordsSubscribe.create({ filter: { schema: 'post', published: false } });
184
+ const anonymousPostReply = yield dwn.processMessage(alice.did, unpublishedAnonymous.message);
185
+ expect(anonymousPostReply.status.code).to.equal(401);
186
+ expect(anonymousPostReply.status.detail).contains('Missing JWS');
187
+ expect(anonymousPostReply.subscription).to.not.exist;
188
+ }));
189
+ it('should return 401 if signature check fails', () => __awaiter(this, void 0, void 0, function* () {
190
+ const { author, message } = yield TestDataGenerator.generateRecordsSubscribe();
191
+ const tenant = author.did;
192
+ // setting up a stub did resolver & message store
193
+ // intentionally not supplying the public key so a different public key is generated to simulate invalid signature
194
+ const mismatchingPersona = yield TestDataGenerator.generatePersona({ did: author.did, keyId: author.keyId });
195
+ const didResolver = TestStubGenerator.createDidResolverStub(mismatchingPersona);
196
+ const messageStoreStub = sinon.createStubInstance(MessageStoreLevel);
197
+ const eventStreamStub = sinon.createStubInstance(EventEmitterStream);
198
+ const recordsSubscribeHandler = new RecordsSubscribeHandler(didResolver, messageStoreStub, eventStreamStub);
199
+ const reply = yield recordsSubscribeHandler.handle({ tenant, message, subscriptionHandler: () => { } });
200
+ expect(reply.status.code).to.equal(401);
201
+ }));
202
+ it('should return 400 if fail parsing the message', () => __awaiter(this, void 0, void 0, function* () {
203
+ const { author, message } = yield TestDataGenerator.generateRecordsSubscribe();
204
+ const tenant = author.did;
205
+ // setting up a stub method resolver & message store
206
+ const didResolver = TestStubGenerator.createDidResolverStub(author);
207
+ const messageStoreStub = sinon.createStubInstance(MessageStoreLevel);
208
+ const eventStreamStub = sinon.createStubInstance(EventEmitterStream);
209
+ const recordsSubscribeHandler = new RecordsSubscribeHandler(didResolver, messageStoreStub, eventStreamStub);
210
+ // stub the `parse()` function to throw an error
211
+ sinon.stub(RecordsSubscribe, 'parse').throws('anyError');
212
+ const reply = yield recordsSubscribeHandler.handle({ tenant, message, subscriptionHandler: () => { } });
213
+ expect(reply.status.code).to.equal(400);
214
+ }));
215
+ describe('protocol based subscriptions', () => {
216
+ it('does not try protocol authorization if protocolRole is not invoked', () => __awaiter(this, void 0, void 0, function* () {
217
+ // scenario:
218
+ // Bob and Carol subscribe to a chat protocol without invoking a protocolRole,
219
+ // they should receive chat messages addressed to them, respectively.
220
+ // Alice creates a thread and writes some chat messages to Bob and Carol.
221
+ // Bob receives only the chat messages addressed to him, Carol receives only the chat messages addressed to her.
222
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
223
+ const bob = yield TestDataGenerator.generateDidKeyPersona();
224
+ const carol = yield TestDataGenerator.generateDidKeyPersona();
225
+ const protocolDefinition = threadRoleProtocolDefinition;
226
+ const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
227
+ author: alice,
228
+ protocolDefinition
229
+ });
230
+ const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
231
+ expect(protocolsConfigureReply.status.code).to.equal(202);
232
+ const bobMessages = [];
233
+ const handleForBob = (event) => __awaiter(this, void 0, void 0, function* () {
234
+ const { message } = event;
235
+ const messageCid = yield Message.getCid(message);
236
+ bobMessages.push(messageCid);
237
+ });
238
+ const bobSubscription = yield TestDataGenerator.generateRecordsSubscribe({
239
+ author: bob,
240
+ filter: {
241
+ published: false,
242
+ protocol: protocolDefinition.protocol,
243
+ }
244
+ });
245
+ const subscriptionReply = yield dwn.processMessage(alice.did, bobSubscription.message, { subscriptionHandler: handleForBob });
246
+ expect(subscriptionReply.status.code).to.equal(200);
247
+ expect(subscriptionReply.subscription).to.exist;
248
+ const carolMessages = [];
249
+ const handleForCarol = (event) => __awaiter(this, void 0, void 0, function* () {
250
+ const { message } = event;
251
+ const messageCid = yield Message.getCid(message);
252
+ carolMessages.push(messageCid);
253
+ });
254
+ const carolSubscription = yield TestDataGenerator.generateRecordsSubscribe({
255
+ author: carol,
256
+ filter: {
257
+ published: false,
258
+ protocol: protocolDefinition.protocol,
259
+ }
260
+ });
261
+ const carolSubscriptionReply = yield dwn.processMessage(alice.did, carolSubscription.message, { subscriptionHandler: handleForCarol });
262
+ expect(carolSubscriptionReply.status.code).to.equal(200);
263
+ expect(carolSubscriptionReply.subscription).to.exist;
264
+ // Alice writes a 'thread' record
265
+ const threadRecord = yield TestDataGenerator.generateRecordsWrite({
266
+ author: alice,
267
+ protocol: protocolDefinition.protocol,
268
+ protocolPath: 'thread',
269
+ });
270
+ const threadRoleReply = yield dwn.processMessage(alice.did, threadRecord.message, { dataStream: threadRecord.dataStream });
271
+ expect(threadRoleReply.status.code).to.equal(202);
272
+ // Alice writes one 'chat' record addressed to Bob
273
+ const chatRecordForBob = yield TestDataGenerator.generateRecordsWrite({
274
+ author: alice,
275
+ recipient: bob.did,
276
+ protocol: protocolDefinition.protocol,
277
+ protocolPath: 'thread/chat',
278
+ published: false,
279
+ parentContextId: threadRecord.message.contextId,
280
+ data: new TextEncoder().encode('Bob can read this cuz he is my friend'),
281
+ });
282
+ const chatRecordForBobReply = yield dwn.processMessage(alice.did, chatRecordForBob.message, { dataStream: chatRecordForBob.dataStream });
283
+ expect(chatRecordForBobReply.status.code).to.equal(202);
284
+ const chatRecordForBobCid = yield Message.getCid(chatRecordForBob.message);
285
+ // Alice writes two 'chat' records addressed to Carol
286
+ const chatRecordForCarol1 = yield TestDataGenerator.generateRecordsWrite({
287
+ author: alice,
288
+ recipient: carol.did,
289
+ protocol: protocolDefinition.protocol,
290
+ protocolPath: 'thread/chat',
291
+ published: false,
292
+ parentContextId: threadRecord.message.contextId,
293
+ data: new TextEncoder().encode('Bob cannot read this'),
294
+ });
295
+ const chatRecordForCarol1Reply = yield dwn.processMessage(alice.did, chatRecordForCarol1.message, { dataStream: chatRecordForCarol1.dataStream });
296
+ expect(chatRecordForCarol1Reply.status.code).to.equal(202);
297
+ const chatRecordForCarol1Cid = yield Message.getCid(chatRecordForCarol1.message);
298
+ const chatRecordForCarol2 = yield TestDataGenerator.generateRecordsWrite({
299
+ author: alice,
300
+ recipient: carol.did,
301
+ protocol: protocolDefinition.protocol,
302
+ protocolPath: 'thread/chat',
303
+ published: false,
304
+ parentContextId: threadRecord.message.contextId,
305
+ data: new TextEncoder().encode('Bob cannot read this either'),
306
+ });
307
+ const chatRecordForCarol2Reply = yield dwn.processMessage(alice.did, chatRecordForCarol2.message, { dataStream: chatRecordForCarol2.dataStream });
308
+ expect(chatRecordForCarol2Reply.status.code).to.equal(202);
309
+ const chatRecordForCarol2Cid = yield Message.getCid(chatRecordForCarol2.message);
310
+ yield Poller.pollUntilSuccessOrTimeout(() => __awaiter(this, void 0, void 0, function* () {
311
+ expect(bobMessages.length).to.equal(1);
312
+ expect(bobMessages).to.have.members([chatRecordForBobCid]);
313
+ }));
314
+ yield Poller.pollUntilSuccessOrTimeout(() => __awaiter(this, void 0, void 0, function* () {
315
+ expect(carolMessages.length).to.equal(2);
316
+ expect(carolMessages).to.have.members([chatRecordForCarol1Cid, chatRecordForCarol2Cid]);
317
+ }));
318
+ }));
319
+ it('allows root-level role authorized subscriptions', () => __awaiter(this, void 0, void 0, function* () {
320
+ // scenario: Alice creates a thread and writes some chat messages writes a chat message. Bob invokes his
321
+ // thread member role in order to subscribe to the chat messages.
322
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
323
+ const bob = yield TestDataGenerator.generateDidKeyPersona();
324
+ const carol = yield TestDataGenerator.generateDidKeyPersona();
325
+ const protocolDefinition = friendRoleProtocolDefinition;
326
+ const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
327
+ author: alice,
328
+ protocolDefinition
329
+ });
330
+ const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
331
+ expect(protocolsConfigureReply.status.code).to.equal(202);
332
+ const filter = {
333
+ protocol: protocolDefinition.protocol,
334
+ protocolPath: 'chat'
335
+ };
336
+ const noRoleRecords = new Set();
337
+ const addNoRole = (event) => __awaiter(this, void 0, void 0, function* () {
338
+ const { message } = event;
339
+ if (message.descriptor.method === DwnMethodName.Write) {
340
+ const recordsWriteMessage = message;
341
+ noRoleRecords.add(recordsWriteMessage.recordId);
342
+ }
343
+ else {
344
+ noRoleRecords.delete(message.descriptor.recordId);
345
+ }
346
+ });
347
+ // subscribe without role, expect no messages
348
+ const noRoleSubscription = yield TestDataGenerator.generateRecordsSubscribe({
349
+ author: bob,
350
+ filter
351
+ });
352
+ const subscriptionReply = yield dwn.processMessage(alice.did, noRoleSubscription.message, { subscriptionHandler: addNoRole });
353
+ expect(subscriptionReply.status.code).to.equal(200);
354
+ expect(subscriptionReply.subscription).to.exist;
355
+ // Alice writes a 'friend' root-level role record with Bob as recipient
356
+ const friendRoleRecord = yield TestDataGenerator.generateRecordsWrite({
357
+ author: alice,
358
+ recipient: bob.did,
359
+ protocol: protocolDefinition.protocol,
360
+ protocolPath: 'friend',
361
+ data: new TextEncoder().encode('Bob is my friend'),
362
+ });
363
+ const friendRoleReply = yield dwn.processMessage(alice.did, friendRoleRecord.message, { dataStream: friendRoleRecord.dataStream });
364
+ expect(friendRoleReply.status.code).to.equal(202);
365
+ const recordIds = new Set();
366
+ const addRecord = (event) => __awaiter(this, void 0, void 0, function* () {
367
+ const { message } = event;
368
+ if (message.descriptor.method === DwnMethodName.Write) {
369
+ const recordsWriteMessage = message;
370
+ recordIds.add(recordsWriteMessage.recordId);
371
+ }
372
+ else {
373
+ recordIds.delete(message.descriptor.recordId);
374
+ }
375
+ });
376
+ // subscribe with friend role
377
+ const bobSubscriptionWithRole = yield TestDataGenerator.generateRecordsSubscribe({
378
+ filter,
379
+ author: bob,
380
+ protocolRole: 'friend',
381
+ });
382
+ const subscriptionWithRoleReply = yield dwn.processMessage(alice.did, bobSubscriptionWithRole.message, { subscriptionHandler: addRecord });
383
+ expect(subscriptionWithRoleReply.status.code).to.equal(200);
384
+ expect(subscriptionWithRoleReply.subscription).to.exist;
385
+ // Create one chat message for Bob as a control to show up in the `noRoleRecords` array
386
+ const chatRecordForBob = yield TestDataGenerator.generateRecordsWrite({
387
+ author: alice,
388
+ recipient: bob.did,
389
+ protocol: protocolDefinition.protocol,
390
+ protocolPath: 'chat',
391
+ published: false,
392
+ data: new TextEncoder().encode('Bob can read this cuz he is my friend'),
393
+ });
394
+ const chatRecordForBobReply = yield dwn.processMessage(alice.did, chatRecordForBob.message, { dataStream: chatRecordForBob.dataStream });
395
+ expect(chatRecordForBobReply.status.code).to.equal(202);
396
+ // Alice writes three more 'chat' records for carol, Bob's friend role should allow him to see these messages.
397
+ const chatRecordIds = [];
398
+ for (let i = 0; i < 3; i++) {
399
+ const chatRecord = yield TestDataGenerator.generateRecordsWrite({
400
+ author: alice,
401
+ recipient: carol.did,
402
+ protocol: protocolDefinition.protocol,
403
+ protocolPath: 'chat',
404
+ published: false,
405
+ data: new TextEncoder().encode('Bob can read this cuz he is my friend'),
406
+ });
407
+ const chatReply = yield dwn.processMessage(alice.did, chatRecord.message, { dataStream: chatRecord.dataStream });
408
+ expect(chatReply.status.code).to.equal(202);
409
+ chatRecordIds.push(chatRecord.message.recordId);
410
+ }
411
+ // there should only be the control message for bob in the subscription without a friend role.
412
+ yield Poller.pollUntilSuccessOrTimeout(() => __awaiter(this, void 0, void 0, function* () {
413
+ expect(noRoleRecords.size).to.equal(1);
414
+ expect([...noRoleRecords]).to.have.members([chatRecordForBob.message.recordId]);
415
+ }));
416
+ // All chats should be in the subscription with the friend role.
417
+ yield Poller.pollUntilSuccessOrTimeout(() => __awaiter(this, void 0, void 0, function* () {
418
+ expect(recordIds.size).to.equal(4);
419
+ expect([...recordIds]).to.have.members([chatRecordForBob.message.recordId, ...chatRecordIds]);
420
+ }));
421
+ // TODO: https://github.com/TBD54566975/dwn-sdk-js/issues/759
422
+ // When `RecordsSubscribeHandler` builds up the matchFilters there are no matching filters for a delete within a context
423
+ // so the delete event is not being captured by the subscription handler. This is likely due to some of the filters including
424
+ // `published: false` which is a mutable property and not included with the delete event
425
+ //
426
+ // When the issue is resolved, uncomment the code below
427
+ // Delete a chat message for Bob
428
+ // const chatForBobDelete = await TestDataGenerator.generateRecordsDelete({
429
+ // author : alice,
430
+ // recordId : chatRecordForBob.message.recordId,
431
+ // });
432
+ // const chatForBobDeleteReply = await dwn.processMessage(alice.did, chatForBobDelete.message);
433
+ // expect(chatForBobDeleteReply.status.code).to.equal(202);
434
+ // // Delete one of the other chat messages
435
+ // const chatForCarolDelete = await TestDataGenerator.generateRecordsDelete({
436
+ // author : alice,
437
+ // recordId : chatRecordIds[0],
438
+ // });
439
+ // const chatForCarolDeleteReply = await dwn.processMessage(alice.did, chatForCarolDelete.message);
440
+ // expect(chatForCarolDeleteReply.status.code).to.equal(202);
441
+ // await Poller.pollUntilSuccessOrTimeout(async () => {
442
+ // expect(noRoleRecords.size).to.equal(0); // chat record was removed from the set
443
+ // expect(recordIds.size).to.equal(2); // both chat records were removed from the set
444
+ // expect([ ...recordIds ]).to.have.members([ ...chatRecordIds.slice(1) ]); // only the last two chat records remain
445
+ // });
446
+ }));
447
+ it('can authorize subscriptions using a context role', () => __awaiter(this, void 0, void 0, function* () {
448
+ // scenario: Alice writes some chat messages.
449
+ // Bob, having a thread/participant record, can subscribe to the chat.
450
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
451
+ const bob = yield TestDataGenerator.generateDidKeyPersona();
452
+ const protocolDefinition = threadRoleProtocolDefinition;
453
+ const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
454
+ author: alice,
455
+ protocolDefinition
456
+ });
457
+ const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
458
+ expect(protocolsConfigureReply.status.code).to.equal(202);
459
+ // Alice writes a 'thread' record
460
+ const threadRecord = yield TestDataGenerator.generateRecordsWrite({
461
+ author: alice,
462
+ protocol: protocolDefinition.protocol,
463
+ protocolPath: 'thread',
464
+ });
465
+ const threadRoleReply = yield dwn.processMessage(alice.did, threadRecord.message, { dataStream: threadRecord.dataStream });
466
+ expect(threadRoleReply.status.code).to.equal(202);
467
+ const filter = {
468
+ protocol: protocolDefinition.protocol,
469
+ protocolPath: 'thread/chat',
470
+ contextId: threadRecord.message.contextId,
471
+ };
472
+ const noRoleRecords = [];
473
+ const addNoRole = (event) => __awaiter(this, void 0, void 0, function* () {
474
+ const { message } = event;
475
+ if (message.descriptor.method === DwnMethodName.Write) {
476
+ const recordsWriteMessage = message;
477
+ noRoleRecords.push(recordsWriteMessage.recordId);
478
+ }
479
+ });
480
+ // subscribe without role, expect no messages
481
+ const noRoleSubscription = yield TestDataGenerator.generateRecordsSubscribe({
482
+ author: bob,
483
+ filter
484
+ });
485
+ const subscriptionReply = yield dwn.processMessage(alice.did, noRoleSubscription.message, { subscriptionHandler: addNoRole });
486
+ expect(subscriptionReply.status.code).to.equal(200);
487
+ expect(subscriptionReply.subscription).to.exist;
488
+ // Alice writes a 'participant' role record with Bob as recipient
489
+ const participantRoleRecord = yield TestDataGenerator.generateRecordsWrite({
490
+ author: alice,
491
+ recipient: bob.did,
492
+ protocol: protocolDefinition.protocol,
493
+ protocolPath: 'thread/participant',
494
+ parentContextId: threadRecord.message.contextId,
495
+ data: new TextEncoder().encode('Bob is my friend'),
496
+ });
497
+ const participantRoleReply = yield dwn.processMessage(alice.did, participantRoleRecord.message, { dataStream: participantRoleRecord.dataStream });
498
+ expect(participantRoleReply.status.code).to.equal(202);
499
+ const recordIds = [];
500
+ const addRecord = (event) => __awaiter(this, void 0, void 0, function* () {
501
+ const { message } = event;
502
+ if (message.descriptor.method === DwnMethodName.Write) {
503
+ const recordsWriteMessage = message;
504
+ recordIds.push(recordsWriteMessage.recordId);
505
+ }
506
+ });
507
+ // subscribe with the participant role
508
+ const bobSubscriptionWithRole = yield TestDataGenerator.generateRecordsSubscribe({
509
+ filter,
510
+ author: bob,
511
+ protocolRole: 'thread/participant',
512
+ });
513
+ const subscriptionWithRoleReply = yield dwn.processMessage(alice.did, bobSubscriptionWithRole.message, { subscriptionHandler: addRecord });
514
+ expect(subscriptionWithRoleReply.status.code).to.equal(200);
515
+ expect(subscriptionWithRoleReply.subscription).to.exist;
516
+ // Alice writes three 'chat' records
517
+ const chatRecordIds = [];
518
+ for (let i = 0; i < 3; i++) {
519
+ const chatRecord = yield TestDataGenerator.generateRecordsWrite({
520
+ author: alice,
521
+ recipient: alice.did,
522
+ protocol: protocolDefinition.protocol,
523
+ protocolPath: 'thread/chat',
524
+ published: false,
525
+ parentContextId: threadRecord.message.contextId,
526
+ data: new TextEncoder().encode('Bob can read this cuz he is my friend'),
527
+ });
528
+ const chatReply = yield dwn.processMessage(alice.did, chatRecord.message, { dataStream: chatRecord.dataStream });
529
+ expect(chatReply.status.code).to.equal(202);
530
+ chatRecordIds.push(chatRecord.message.recordId);
531
+ }
532
+ yield Poller.pollUntilSuccessOrTimeout(() => __awaiter(this, void 0, void 0, function* () {
533
+ // should have all chat messages.
534
+ expect(recordIds).to.have.members(chatRecordIds);
535
+ // there should not be any messages in the subscription without a participant role.
536
+ expect(noRoleRecords.length).to.equal(0);
537
+ }));
538
+ }));
539
+ it('does not execute protocol subscriptions where protocolPath is missing from the filter', () => __awaiter(this, void 0, void 0, function* () {
540
+ // scenario: Alice assigns Bob a friend role and writes some chat messages. Bob invokes his role to subscribe those messages,
541
+ // but his subscription filter does not include protocolPath.
542
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
543
+ const bob = yield TestDataGenerator.generateDidKeyPersona();
544
+ const protocolDefinition = friendRoleProtocolDefinition;
545
+ const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
546
+ author: alice,
547
+ protocolDefinition
548
+ });
549
+ const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
550
+ expect(protocolsConfigureReply.status.code).to.equal(202);
551
+ // Alice writes a 'friend' root-level role record with Bob as recipient
552
+ const friendRoleRecord = yield TestDataGenerator.generateRecordsWrite({
553
+ author: alice,
554
+ recipient: bob.did,
555
+ protocol: protocolDefinition.protocol,
556
+ protocolPath: 'friend',
557
+ data: new TextEncoder().encode('Bob is my friend'),
558
+ });
559
+ const friendRoleReply = yield dwn.processMessage(alice.did, friendRoleRecord.message, { dataStream: friendRoleRecord.dataStream });
560
+ expect(friendRoleReply.status.code).to.equal(202);
561
+ // Bob invokes his friendRole to subscribe but does not have `protocolPath` in the filter
562
+ const chatSubscribe = yield TestDataGenerator.generateRecordsSubscribe({
563
+ author: bob,
564
+ filter: {
565
+ protocol: protocolDefinition.protocol,
566
+ // protocolPath deliberately omitted
567
+ },
568
+ protocolRole: 'friend',
569
+ });
570
+ const chatSubscribeReply = yield dwn.processMessage(alice.did, chatSubscribe.message);
571
+ expect(chatSubscribeReply.status.code).to.equal(400);
572
+ expect(chatSubscribeReply.status.detail).to.contain(DwnErrorCode.RecordsSubscribeFilterMissingRequiredProperties);
573
+ expect(chatSubscribeReply.subscription).to.not.exist;
574
+ }));
575
+ it('does not execute context role authorized subscriptions where contextId is missing from the filter', () => __awaiter(this, void 0, void 0, function* () {
576
+ // scenario: Alice gives Bob a role allowing him to access a particular chat thread.
577
+ // But Bob's filter does not contain a contextId so the subscription fails.
578
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
579
+ const bob = yield TestDataGenerator.generateDidKeyPersona();
580
+ const protocolDefinition = threadRoleProtocolDefinition;
581
+ const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
582
+ author: alice,
583
+ protocolDefinition
584
+ });
585
+ const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
586
+ expect(protocolsConfigureReply.status.code).to.equal(202);
587
+ // Alice writes a 'thread' record
588
+ const threadRecord = yield TestDataGenerator.generateRecordsWrite({
589
+ author: alice,
590
+ protocol: protocolDefinition.protocol,
591
+ protocolPath: 'thread',
592
+ });
593
+ const threadRoleReply = yield dwn.processMessage(alice.did, threadRecord.message, { dataStream: threadRecord.dataStream });
594
+ expect(threadRoleReply.status.code).to.equal(202);
595
+ // Alice writes a 'friend' root-level role record with Bob as recipient
596
+ const participantRoleRecord = yield TestDataGenerator.generateRecordsWrite({
597
+ author: alice,
598
+ recipient: bob.did,
599
+ protocol: protocolDefinition.protocol,
600
+ protocolPath: 'thread/participant',
601
+ parentContextId: threadRecord.message.contextId,
602
+ data: new TextEncoder().encode('Bob is my friend'),
603
+ });
604
+ const participantRoleReply = yield dwn.processMessage(alice.did, participantRoleRecord.message, { dataStream: participantRoleRecord.dataStream });
605
+ expect(participantRoleReply.status.code).to.equal(202);
606
+ // Bob invokes his thread participant role to subscribe but omits the contextId
607
+ const chatSubscribe = yield TestDataGenerator.generateRecordsSubscribe({
608
+ author: bob,
609
+ filter: {
610
+ protocol: protocolDefinition.protocol,
611
+ protocolPath: 'thread/chat',
612
+ // contextId deliberately omitted
613
+ },
614
+ protocolRole: 'thread/participant',
615
+ });
616
+ const chatSubscribeReply = yield dwn.processMessage(alice.did, chatSubscribe.message);
617
+ expect(chatSubscribeReply.status.code).to.eq(401);
618
+ expect(chatSubscribeReply.status.detail).to.contain(DwnErrorCode.ProtocolAuthorizationMissingContextId);
619
+ expect(chatSubscribeReply.subscription).to.not.exist;
620
+ }));
621
+ it('rejects role authorized subscriptions if the request author does not have a matching root-level role', () => __awaiter(this, void 0, void 0, function* () {
622
+ // scenario: Alice installs a chat protocol.
623
+ // Bob invokes a root-level role within that protocol to subscribe but fails because he does not actually have a role.
624
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
625
+ const bob = yield TestDataGenerator.generateDidKeyPersona();
626
+ const protocolDefinition = friendRoleProtocolDefinition;
627
+ const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
628
+ author: alice,
629
+ protocolDefinition
630
+ });
631
+ const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
632
+ expect(protocolsConfigureReply.status.code).to.equal(202);
633
+ // Bob invokes a friendRole he does not have to subscribe to the records
634
+ const chatSubscribe = yield TestDataGenerator.generateRecordsSubscribe({
635
+ author: bob,
636
+ filter: {
637
+ protocol: protocolDefinition.protocol,
638
+ protocolPath: 'chat',
639
+ },
640
+ protocolRole: 'friend',
641
+ });
642
+ const chatSubscribeReply = yield dwn.processMessage(alice.did, chatSubscribe.message);
643
+ expect(chatSubscribeReply.status.code).to.eq(401);
644
+ expect(chatSubscribeReply.status.detail).to.contain(DwnErrorCode.ProtocolAuthorizationMatchingRoleRecordNotFound);
645
+ expect(chatSubscribeReply.subscription).to.not.exist;
646
+ }));
647
+ it('rejects role authorized subscriptions where the subscription author does not have a matching context role', () => __awaiter(this, void 0, void 0, function* () {
648
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
649
+ const bob = yield TestDataGenerator.generateDidKeyPersona();
650
+ const protocolDefinition = threadRoleProtocolDefinition;
651
+ const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
652
+ author: alice,
653
+ protocolDefinition
654
+ });
655
+ const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
656
+ expect(protocolsConfigureReply.status.code).to.equal(202);
657
+ // Alice writes a 'thread' record
658
+ const threadRecord = yield TestDataGenerator.generateRecordsWrite({
659
+ author: alice,
660
+ protocol: protocolDefinition.protocol,
661
+ protocolPath: 'thread',
662
+ });
663
+ const threadRoleReply = yield dwn.processMessage(alice.did, threadRecord.message, { dataStream: threadRecord.dataStream });
664
+ expect(threadRoleReply.status.code).to.equal(202);
665
+ // Bob invokes his a `thread/participant` role which he does not have to subscribe to the records
666
+ const chatSubscribe = yield TestDataGenerator.generateRecordsSubscribe({
667
+ author: bob,
668
+ filter: {
669
+ protocol: protocolDefinition.protocol,
670
+ protocolPath: 'thread/chat',
671
+ contextId: threadRecord.message.contextId,
672
+ },
673
+ protocolRole: 'thread/participant',
674
+ });
675
+ const chatSubscribeReply = yield dwn.processMessage(alice.did, chatSubscribe.message);
676
+ expect(chatSubscribeReply.status.code).to.eq(401);
677
+ expect(chatSubscribeReply.status.detail).to.contain(DwnErrorCode.ProtocolAuthorizationMatchingRoleRecordNotFound);
678
+ expect(chatSubscribeReply.subscription).to.not.exist;
679
+ }));
680
+ });
681
+ });
682
+ });
683
+ }
684
+ //# sourceMappingURL=records-subscribe.spec.js.map