@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,886 @@
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 freeForAll from '../vectors/protocol-definitions/free-for-all.json' assert { type: 'json' };
11
+ import threadProtocol from '../vectors/protocol-definitions/thread-role.json' assert { type: 'json' };
12
+ import { Poller } from '../utils/poller.js';
13
+ import { TestDataGenerator } from '../utils/test-data-generator.js';
14
+ import { TestEventStream } from '../test-event-stream.js';
15
+ import { TestStores } from '../test-stores.js';
16
+ import { DataStream, Dwn, DwnInterfaceName, DwnMethodName, Jws, Message, PermissionGrant, PermissionsProtocol, Time } from '../../src/index.js';
17
+ import { DidKey, UniversalResolver } from '@enbox/dids';
18
+ import { expect } from 'chai';
19
+ // NOTE: We use `Poller.pollUntilSuccessOrTimeout` to poll for the expected results.
20
+ // In some cases, the EventStream is a coordinated pub/sub system and the message events are emitted over the network
21
+ // this means that the messages are not processed immediately and we need to wait for the messages to be processed
22
+ // before we can assert the results. The `pollUntilSuccessOrTimeout` function is a utility function that will poll until the expected results are met.
23
+ // It is also important to note that in some cases where we are testing a negative case (the message not arriving at the subscriber)
24
+ // we add an alternate subscription to await results within to give the EventStream ample time to process the message.
25
+ // Additionally in some of these cases the order in which messages are sent to be processed or checked may matter, and they are noted as such.
26
+ export function testSubscriptionScenarios() {
27
+ describe('subscriptions', () => {
28
+ let didResolver;
29
+ let messageStore;
30
+ let dataStore;
31
+ let resumableTaskStore;
32
+ let eventLog;
33
+ let eventStream;
34
+ let dwn;
35
+ // important to follow the `before` and `after` pattern to initialize and clean the stores in tests
36
+ // so that different test suites can reuse the same backend store for testing
37
+ before(() => __awaiter(this, void 0, void 0, function* () {
38
+ didResolver = new UniversalResolver({ didResolvers: [DidKey] });
39
+ const stores = TestStores.get();
40
+ messageStore = stores.messageStore;
41
+ dataStore = stores.dataStore;
42
+ resumableTaskStore = stores.resumableTaskStore;
43
+ eventLog = stores.eventLog;
44
+ eventStream = TestEventStream.get();
45
+ dwn = yield Dwn.create({ didResolver, messageStore, dataStore, eventLog, eventStream, resumableTaskStore });
46
+ }));
47
+ beforeEach(() => __awaiter(this, void 0, void 0, function* () {
48
+ // clean up before each test rather than after so that a test does not depend on other tests to do the clean up
49
+ yield messageStore.clear();
50
+ yield dataStore.clear();
51
+ yield resumableTaskStore.clear();
52
+ yield eventLog.clear();
53
+ }));
54
+ after(() => __awaiter(this, void 0, void 0, function* () {
55
+ yield dwn.close();
56
+ }));
57
+ describe('messages subscribe', () => {
58
+ it('all messages', () => __awaiter(this, void 0, void 0, function* () {
59
+ // Scenario: Alice subscribes to all messages and creates 3 messages. Alice then expects to receive all 3 messages.
60
+ var _a, _b;
61
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
62
+ // create a handler that adds the messageCid of each message to an array.
63
+ const messageCids = [];
64
+ const handler = (event) => __awaiter(this, void 0, void 0, function* () {
65
+ const { message } = event;
66
+ const messageCid = yield Message.getCid(message);
67
+ messageCids.push(messageCid);
68
+ });
69
+ // subscribe to all messages
70
+ const messagesSubscription = yield TestDataGenerator.generateMessagesSubscribe({ author: alice });
71
+ const messagesSubscriptionReply = yield dwn.processMessage(alice.did, messagesSubscription.message, { subscriptionHandler: handler });
72
+ expect(messagesSubscriptionReply.status.code).to.equal(200);
73
+ expect((_a = messagesSubscriptionReply.subscription) === null || _a === void 0 ? void 0 : _a.id).to.equal(yield Message.getCid(messagesSubscription.message));
74
+ // generate various messages
75
+ const write1 = yield TestDataGenerator.generateRecordsWrite({ author: alice });
76
+ const write1MessageCid = yield Message.getCid(write1.message);
77
+ const write1Reply = yield dwn.processMessage(alice.did, write1.message, { dataStream: write1.dataStream });
78
+ expect(write1Reply.status.code).to.equal(202);
79
+ const protocol1 = yield TestDataGenerator.generateProtocolsConfigure({ author: alice });
80
+ const protocol1MessageCid = yield Message.getCid(protocol1.message);
81
+ const protocol1Reply = yield dwn.processMessage(alice.did, protocol1.message);
82
+ expect(protocol1Reply.status.code).to.equal(202);
83
+ const deleteWrite1 = yield TestDataGenerator.generateRecordsDelete({ author: alice, recordId: write1.message.recordId });
84
+ const delete1MessageCid = yield Message.getCid(deleteWrite1.message);
85
+ const deleteWrite1Reply = yield dwn.processMessage(alice.did, deleteWrite1.message);
86
+ expect(deleteWrite1Reply.status.code).to.equal(202);
87
+ // poll until the messages are received by the handler
88
+ yield Poller.pollUntilSuccessOrTimeout(() => __awaiter(this, void 0, void 0, function* () {
89
+ expect(messageCids.length).to.equal(3);
90
+ expect(messageCids).to.eql([write1MessageCid, protocol1MessageCid, delete1MessageCid]);
91
+ }));
92
+ // clean up the subscription handler
93
+ yield ((_b = messagesSubscriptionReply.subscription) === null || _b === void 0 ? void 0 : _b.close());
94
+ }));
95
+ it('filters by interface type', () => __awaiter(this, void 0, void 0, function* () {
96
+ // scenario:
97
+ // alice subscribes to 2 different message interfaces Records and Protocols
98
+ // alice creates (2) messages, RecordsWrite and ProtocolsConfigure
99
+ // alice checks that each handler received the appropriate message
100
+ // alice deletes the record
101
+ // alice checks that the Records handler received the delete message
102
+ var _a, _b;
103
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
104
+ // subscribe to the Records interface
105
+ const recordsInterfaceSubscription = yield TestDataGenerator.generateMessagesSubscribe({
106
+ author: alice,
107
+ filters: [{ interface: DwnInterfaceName.Records }]
108
+ });
109
+ const recordsMessageCids = [];
110
+ const recordsSubscribeHandler = (event) => __awaiter(this, void 0, void 0, function* () {
111
+ const { message } = event;
112
+ const messageCid = yield Message.getCid(message);
113
+ recordsMessageCids.push(messageCid);
114
+ });
115
+ const recordsInterfaceSubscriptionReply = yield dwn.processMessage(alice.did, recordsInterfaceSubscription.message, { subscriptionHandler: recordsSubscribeHandler });
116
+ expect(recordsInterfaceSubscriptionReply.status.code).to.equal(200);
117
+ expect(recordsInterfaceSubscriptionReply.subscription).to.exist;
118
+ // subscribe to the Protocols interface
119
+ const protocolsInterfaceSubscription = yield TestDataGenerator.generateMessagesSubscribe({
120
+ author: alice,
121
+ filters: [{ interface: DwnInterfaceName.Protocols }]
122
+ });
123
+ const protocolsMessageCids = [];
124
+ const protocolsSubscribeHandler = (event) => __awaiter(this, void 0, void 0, function* () {
125
+ const { message } = event;
126
+ const messageCid = yield Message.getCid(message);
127
+ protocolsMessageCids.push(messageCid);
128
+ });
129
+ const protocolsInterfaceSubscriptionReply = yield dwn.processMessage(alice.did, protocolsInterfaceSubscription.message, { subscriptionHandler: protocolsSubscribeHandler });
130
+ expect(protocolsInterfaceSubscriptionReply.status.code).to.equal(200);
131
+ expect(protocolsInterfaceSubscriptionReply.subscription).to.exist;
132
+ // create one of each message types a RecordsWrite and a ProtocolsConfigure
133
+ const record = yield TestDataGenerator.generateRecordsWrite({ author: alice });
134
+ const recordReply = yield dwn.processMessage(alice.did, record.message, { dataStream: record.dataStream });
135
+ expect(recordReply.status.code).to.equal(202, 'RecordsWrite');
136
+ const protocol = yield TestDataGenerator.generateProtocolsConfigure({ author: alice });
137
+ const protocolReply = yield dwn.processMessage(alice.did, protocol.message);
138
+ expect(protocolReply.status.code).to.equal(202, 'ProtocolConfigure');
139
+ // Poll until the messages are received by the handler
140
+ yield Poller.pollUntilSuccessOrTimeout(() => __awaiter(this, void 0, void 0, function* () {
141
+ // check record message
142
+ expect(recordsMessageCids.length).to.equal(1);
143
+ expect(recordsMessageCids).to.have.members([yield Message.getCid(record.message)]);
144
+ // check protocols message
145
+ expect(protocolsMessageCids.length).to.equal(1);
146
+ expect(protocolsMessageCids).to.have.members([yield Message.getCid(protocol.message)]);
147
+ }));
148
+ // delete the record
149
+ const recordDelete = yield TestDataGenerator.generateRecordsDelete({ author: alice, recordId: record.message.recordId });
150
+ const recordDeleteReply = yield dwn.processMessage(alice.did, recordDelete.message);
151
+ expect(recordDeleteReply.status.code).to.equal(202, 'RecordsDelete');
152
+ // poll until the delete message is received by the handler
153
+ yield Poller.pollUntilSuccessOrTimeout(() => __awaiter(this, void 0, void 0, function* () {
154
+ // check record messages to include the delete message
155
+ expect(recordsMessageCids.length).to.equal(2);
156
+ expect(recordsMessageCids).to.include.members([yield Message.getCid(recordDelete.message)]);
157
+ // check that the protocols message array does not include the delete message
158
+ expect(protocolsMessageCids.length).to.equal(1); // unchanged
159
+ }));
160
+ // clean up the subscriptions
161
+ yield ((_a = recordsInterfaceSubscriptionReply.subscription) === null || _a === void 0 ? void 0 : _a.close());
162
+ yield ((_b = protocolsInterfaceSubscriptionReply.subscription) === null || _b === void 0 ? void 0 : _b.close());
163
+ }));
164
+ it('filters by method type', () => __awaiter(this, void 0, void 0, function* () {
165
+ // scenario:
166
+ // Alice creates a subscription filtered to RecordsWrite messages
167
+ // Alice creates a second subscription filtered to RecordsDelete messages
168
+ // Alice creates a RecordsWrite message, then updates the records with a subsequent RecordsWrite
169
+ // Alice checks that the subscription handler for RecordsWrite received both messages
170
+ // Alice checks that the subscription handler for RecordsDelete did not receive any messages
171
+ // Alice now deletes the record with a RecordsDelete
172
+ // Alice also writes a new record with a RecordsWrite
173
+ // Alice checks that the RecordsWrite handler received the new record, but not the delete message
174
+ // Alice checks the RecordsDelete handler received the delete message
175
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
176
+ // subscribe to records write
177
+ const recordsWriteSubscription = yield TestDataGenerator.generateMessagesSubscribe({
178
+ author: alice,
179
+ filters: [{ interface: DwnInterfaceName.Records, method: DwnMethodName.Write }]
180
+ });
181
+ const recordsWriteMessageCids = [];
182
+ const recordsSubscribeHandler = (event) => __awaiter(this, void 0, void 0, function* () {
183
+ const { message } = event;
184
+ const messageCid = yield Message.getCid(message);
185
+ recordsWriteMessageCids.push(messageCid);
186
+ });
187
+ const recordsWriteSubscriptionReply = yield dwn.processMessage(alice.did, recordsWriteSubscription.message, { subscriptionHandler: recordsSubscribeHandler });
188
+ expect(recordsWriteSubscriptionReply.status.code).to.equal(200);
189
+ expect(recordsWriteSubscriptionReply.subscription).to.exist;
190
+ // subscribe to records delete
191
+ const recordsDeleteSubscription = yield TestDataGenerator.generateMessagesSubscribe({
192
+ author: alice,
193
+ filters: [{ interface: DwnInterfaceName.Records, method: DwnMethodName.Delete }]
194
+ });
195
+ const recordsDeleteMessageCids = [];
196
+ const recordsDeleteSubscribeHandler = (event) => __awaiter(this, void 0, void 0, function* () {
197
+ const { message } = event;
198
+ const messageCid = yield Message.getCid(message);
199
+ recordsDeleteMessageCids.push(messageCid);
200
+ });
201
+ const recordsDeleteSubscriptionReply = yield dwn.processMessage(alice.did, recordsDeleteSubscription.message, { subscriptionHandler: recordsDeleteSubscribeHandler });
202
+ expect(recordsDeleteSubscriptionReply.status.code).to.equal(200);
203
+ expect(recordsDeleteSubscriptionReply.subscription).to.exist;
204
+ // create and updates the record, this creates two RecordsWrite messages
205
+ const record = yield TestDataGenerator.generateRecordsWrite({ author: alice });
206
+ const recordReply = yield dwn.processMessage(alice.did, record.message, { dataStream: record.dataStream });
207
+ expect(recordReply.status.code).to.equal(202, 'RecordsWrite');
208
+ const record1MessageCid = yield Message.getCid(record.message);
209
+ const recordUpdate = yield TestDataGenerator.generateFromRecordsWrite({ author: alice, existingWrite: record.recordsWrite });
210
+ const recordUpdateReply = yield dwn.processMessage(alice.did, recordUpdate.message, { dataStream: recordUpdate.dataStream });
211
+ expect(recordUpdateReply.status.code).to.equal(202, 'RecordsUpdate');
212
+ const recordUpdateMessageCid = yield Message.getCid(recordUpdate.message);
213
+ // Poll until the messages are received by the handler
214
+ yield Poller.pollUntilSuccessOrTimeout(() => __awaiter(this, void 0, void 0, function* () {
215
+ // check the array for both the RecordsWrite messages
216
+ expect(recordsWriteMessageCids.length).to.equal(2);
217
+ expect(recordsWriteMessageCids).to.have.members([
218
+ record1MessageCid,
219
+ recordUpdateMessageCid,
220
+ ]);
221
+ }));
222
+ // confirm that the delete array is empty
223
+ expect(recordsDeleteMessageCids.length).to.equal(0);
224
+ // delete the record
225
+ const recordDelete = yield TestDataGenerator.generateRecordsDelete({ author: alice, recordId: record.message.recordId });
226
+ const recordDeleteReply = yield dwn.processMessage(alice.did, recordDelete.message);
227
+ expect(recordDeleteReply.status.code).to.equal(202, 'RecordsDelete');
228
+ const recordDeleteMessageCid = yield Message.getCid(recordDelete.message);
229
+ // write a second record
230
+ const record2 = yield TestDataGenerator.generateRecordsWrite({ author: alice });
231
+ const record2Reply = yield dwn.processMessage(alice.did, record2.message, { dataStream: record2.dataStream });
232
+ expect(record2Reply.status.code).to.equal(202, 'RecordsWrite');
233
+ const record2MessageCid = yield Message.getCid(record2.message);
234
+ yield Poller.pollUntilSuccessOrTimeout(() => __awaiter(this, void 0, void 0, function* () {
235
+ // ensure the new record is in the recordsWrite array, but not the delete
236
+ expect(recordsWriteMessageCids.length).to.equal(3);
237
+ expect(recordsWriteMessageCids).to.include.members([
238
+ record1MessageCid,
239
+ recordUpdateMessageCid,
240
+ record2MessageCid,
241
+ ]);
242
+ // ensure the delete message is in the recordsDelete array
243
+ expect(recordsDeleteMessageCids.length).to.equal(1);
244
+ expect(recordsDeleteMessageCids).to.include.members([
245
+ recordDeleteMessageCid,
246
+ ]);
247
+ }));
248
+ }));
249
+ it('filters by a protocol across different message types', () => __awaiter(this, void 0, void 0, function* () {
250
+ // NOTE: This test validates the ability to filter by a specific protocol across different message types.
251
+ // This will return any of the `RecordsWrite`, `RecordsDelete` and `ProtocolConfigure` messages that are associated with the protocol
252
+ // Additionally this will return permission-protocol `RecordsWrite` messages that are associated with the protocol.
253
+ // scenario:
254
+ // alice creates two different subscriptions, one for each protocol (proto1, proto2)
255
+ // alice configures the two different protocols (proto1, proto2)
256
+ // alice creates records for each protocol
257
+ // bob requests permissions for both protocols
258
+ // alice grants bob permissions for both protocols
259
+ // when checking the handler arrays for the specific protocol, only Events related to it should be present.
260
+ // alice then deletes the records for each protocol
261
+ // alice revokes bob's permissions for both protocols
262
+ // now when checking the handler arrays, the delete and revocation messages should be present
263
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
264
+ const bob = yield TestDataGenerator.generateDidKeyPersona();
265
+ const proto1Messages = [];
266
+ const proto1Handler = (event) => __awaiter(this, void 0, void 0, function* () {
267
+ const { message } = event;
268
+ proto1Messages.push(yield Message.getCid(message));
269
+ });
270
+ const proto1Subscription = yield TestDataGenerator.generateMessagesSubscribe({
271
+ author: alice,
272
+ filters: [{ protocol: 'http://proto1' }]
273
+ });
274
+ const proto1SubscriptionReply = yield dwn.processMessage(alice.did, proto1Subscription.message, {
275
+ subscriptionHandler: proto1Handler
276
+ });
277
+ expect(proto1SubscriptionReply.status.code).to.equal(200);
278
+ expect(proto1SubscriptionReply.subscription).to.exist;
279
+ const proto2Messages = [];
280
+ const proto2Handler = (event) => __awaiter(this, void 0, void 0, function* () {
281
+ const { message } = event;
282
+ proto2Messages.push(yield Message.getCid(message));
283
+ });
284
+ const proto2Subscription = yield TestDataGenerator.generateMessagesSubscribe({
285
+ author: alice,
286
+ filters: [{ protocol: 'http://proto2' }]
287
+ });
288
+ const proto2SubscriptionReply = yield dwn.processMessage(alice.did, proto2Subscription.message, {
289
+ subscriptionHandler: proto2Handler
290
+ });
291
+ expect(proto2SubscriptionReply.status.code).to.equal(200);
292
+ expect(proto2SubscriptionReply.subscription).to.exist;
293
+ // configure proto1
294
+ const protoConf1 = yield TestDataGenerator.generateProtocolsConfigure({
295
+ author: alice,
296
+ protocolDefinition: Object.assign(Object.assign({}, freeForAll), { protocol: 'http://proto1' })
297
+ });
298
+ const proto1 = protoConf1.message.descriptor.definition.protocol;
299
+ const protoConf1Response = yield dwn.processMessage(alice.did, protoConf1.message);
300
+ expect(protoConf1Response.status.code).equals(202);
301
+ // configure proto2
302
+ const protoConf2 = yield TestDataGenerator.generateProtocolsConfigure({
303
+ author: alice,
304
+ protocolDefinition: Object.assign(Object.assign({}, freeForAll), { protocol: 'http://proto2' })
305
+ });
306
+ const proto2 = protoConf2.message.descriptor.definition.protocol;
307
+ const protoConf2Response = yield dwn.processMessage(alice.did, protoConf2.message);
308
+ expect(protoConf2Response.status.code).equals(202);
309
+ const postProperties = {
310
+ protocolPath: 'post',
311
+ schema: freeForAll.types.post.schema,
312
+ dataFormat: freeForAll.types.post.dataFormats[0],
313
+ };
314
+ // create a record for proto1
315
+ const write1proto1 = yield TestDataGenerator.generateRecordsWrite(Object.assign({ author: alice, protocol: proto1 }, postProperties));
316
+ const write1Response = yield dwn.processMessage(alice.did, write1proto1.message, { dataStream: write1proto1.dataStream });
317
+ expect(write1Response.status.code).equals(202);
318
+ // create a record for proto2
319
+ const write1proto2 = yield TestDataGenerator.generateRecordsWrite(Object.assign({ author: alice, protocol: proto2 }, postProperties));
320
+ const write1Proto2Response = yield dwn.processMessage(alice.did, write1proto2.message, { dataStream: write1proto2.dataStream });
321
+ expect(write1Proto2Response.status.code).equals(202);
322
+ // bob requests permissions for proto1
323
+ const requestProto1 = yield PermissionsProtocol.createRequest({
324
+ signer: Jws.createSigner(bob),
325
+ scope: { interface: DwnInterfaceName.Records, method: DwnMethodName.Write, protocol: proto1 },
326
+ delegated: false,
327
+ });
328
+ const requestProto1Response = yield dwn.processMessage(alice.did, requestProto1.recordsWrite.message, { dataStream: DataStream.fromBytes(requestProto1.permissionRequestBytes) });
329
+ expect(requestProto1Response.status.code).equals(202);
330
+ // bob requests permissions for proto2
331
+ const requestProto2 = yield PermissionsProtocol.createRequest({
332
+ signer: Jws.createSigner(bob),
333
+ scope: { interface: DwnInterfaceName.Records, method: DwnMethodName.Write, protocol: proto2 },
334
+ delegated: false,
335
+ });
336
+ const requestProto2Response = yield dwn.processMessage(alice.did, requestProto2.recordsWrite.message, { dataStream: DataStream.fromBytes(requestProto2.permissionRequestBytes) });
337
+ expect(requestProto2Response.status.code).equals(202);
338
+ // alice grants permissions for proto1
339
+ const grantProto1 = yield PermissionsProtocol.createGrant({
340
+ signer: Jws.createSigner(alice),
341
+ scope: requestProto1.permissionRequestData.scope,
342
+ dateExpires: Time.createOffsetTimestamp({ seconds: 5 }),
343
+ grantedTo: bob.did,
344
+ });
345
+ const grantProto1Response = yield dwn.processMessage(alice.did, grantProto1.recordsWrite.message, { dataStream: DataStream.fromBytes(grantProto1.permissionGrantBytes) });
346
+ expect(grantProto1Response.status.code).equals(202);
347
+ // alice grants permissions for proto2
348
+ const grantProto2 = yield PermissionsProtocol.createGrant({
349
+ signer: Jws.createSigner(alice),
350
+ scope: requestProto2.permissionRequestData.scope,
351
+ dateExpires: Time.createOffsetTimestamp({ seconds: 5 }),
352
+ grantedTo: bob.did,
353
+ });
354
+ const grantProto2Response = yield dwn.processMessage(alice.did, grantProto2.recordsWrite.message, { dataStream: DataStream.fromBytes(grantProto2.permissionGrantBytes) });
355
+ expect(grantProto2Response.status.code).equals(202);
356
+ // poll until the messages are received by the handlers
357
+ yield Poller.pollUntilSuccessOrTimeout(() => __awaiter(this, void 0, void 0, function* () {
358
+ // check for proto1 messages
359
+ expect(proto1Messages.length).to.equal(4);
360
+ expect(proto1Messages).to.have.members([
361
+ yield Message.getCid(protoConf1.message),
362
+ yield Message.getCid(write1proto1.message),
363
+ yield Message.getCid(requestProto1.recordsWrite.message),
364
+ yield Message.getCid(grantProto1.recordsWrite.message),
365
+ ]);
366
+ // check for proto2 messages
367
+ expect(proto2Messages.length).to.equal(4);
368
+ expect(proto2Messages).to.have.members([
369
+ yield Message.getCid(protoConf2.message),
370
+ yield Message.getCid(write1proto2.message),
371
+ yield Message.getCid(requestProto2.recordsWrite.message),
372
+ yield Message.getCid(grantProto2.recordsWrite.message),
373
+ ]);
374
+ }));
375
+ // delete proto1 message
376
+ const deleteProto1Message = yield TestDataGenerator.generateRecordsDelete({ author: alice, recordId: write1proto1.message.recordId });
377
+ const deleteProto1MessageReply = yield dwn.processMessage(alice.did, deleteProto1Message.message);
378
+ expect(deleteProto1MessageReply.status.code).to.equal(202);
379
+ // delete proto2 message
380
+ const deleteProto2Message = yield TestDataGenerator.generateRecordsDelete({ author: alice, recordId: write1proto2.message.recordId });
381
+ const deleteProto2MessageReply = yield dwn.processMessage(alice.did, deleteProto2Message.message);
382
+ expect(deleteProto2MessageReply.status.code).to.equal(202);
383
+ // revoke permissions for proto1
384
+ const revokeProto1 = yield PermissionsProtocol.createRevocation({
385
+ signer: Jws.createSigner(alice),
386
+ grant: yield PermissionGrant.parse(grantProto1.dataEncodedMessage),
387
+ });
388
+ const revokeProto1Response = yield dwn.processMessage(alice.did, revokeProto1.recordsWrite.message, { dataStream: DataStream.fromBytes(revokeProto1.permissionRevocationBytes) });
389
+ expect(revokeProto1Response.status.code).equals(202);
390
+ // revoke permissions for proto2
391
+ const revokeProto2 = yield PermissionsProtocol.createRevocation({
392
+ signer: Jws.createSigner(alice),
393
+ grant: yield PermissionGrant.parse(grantProto2.dataEncodedMessage),
394
+ });
395
+ const revokeProto2Response = yield dwn.processMessage(alice.did, revokeProto2.recordsWrite.message, { dataStream: DataStream.fromBytes(revokeProto2.permissionRevocationBytes) });
396
+ expect(revokeProto2Response.status.code).equals(202);
397
+ // poll until the messages are received by the handlers
398
+ yield Poller.pollUntilSuccessOrTimeout(() => __awaiter(this, void 0, void 0, function* () {
399
+ // check for the delete and revocation in proto1 messages
400
+ expect(proto1Messages.length).to.equal(6); // 2 additional messages
401
+ expect(proto1Messages).to.include.members([
402
+ yield Message.getCid(deleteProto1Message.message),
403
+ yield Message.getCid(revokeProto1.recordsWrite.message),
404
+ ]);
405
+ // check for the delete and revocation in proto2 messages
406
+ expect(proto2Messages.length).to.equal(6); // 2 additional messages
407
+ expect(proto2Messages).to.include.members([
408
+ yield Message.getCid(deleteProto2Message.message),
409
+ yield Message.getCid(revokeProto2.recordsWrite.message),
410
+ ]);
411
+ }));
412
+ }));
413
+ it('does not emit events after subscription is closed', () => __awaiter(this, void 0, void 0, function* () {
414
+ // scenario: create two subscriptions.
415
+ // write a message, check that both subscriptions receive the message.
416
+ // close one subscription, write two more messages, check that only the open subscription receives the messages.
417
+ // we purposely leave one subscription open to ensure that the messages are being processed by an external pub/sub system
418
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
419
+ // messageCids of subscription 1 messages
420
+ const sub1MessageCids = [];
421
+ const handler1 = (event) => __awaiter(this, void 0, void 0, function* () {
422
+ const { message } = event;
423
+ const messageCid = yield Message.getCid(message);
424
+ sub1MessageCids.push(messageCid);
425
+ });
426
+ // messageCids of subscription 2 messages
427
+ const sub2MessageCids = [];
428
+ const handler2 = (event) => __awaiter(this, void 0, void 0, function* () {
429
+ const { message } = event;
430
+ const messageCid = yield Message.getCid(message);
431
+ sub2MessageCids.push(messageCid);
432
+ });
433
+ // subscribe to all messages
434
+ const messagesSubscription1 = yield TestDataGenerator.generateMessagesSubscribe({ author: alice });
435
+ const messagesSubscription1Reply = yield dwn.processMessage(alice.did, messagesSubscription1.message, { subscriptionHandler: handler1 });
436
+ expect(messagesSubscription1Reply.status.code).to.equal(200);
437
+ const messagesSubscription2 = yield TestDataGenerator.generateMessagesSubscribe({ author: alice });
438
+ const messagesSubscription2Reply = yield dwn.processMessage(alice.did, messagesSubscription2.message, { subscriptionHandler: handler2 });
439
+ expect(messagesSubscription2Reply.status.code).to.equal(200);
440
+ // no event message exist yet
441
+ expect(sub1MessageCids.length).to.equal(0);
442
+ expect(sub2MessageCids.length).to.equal(0);
443
+ // write a record
444
+ const record1 = yield TestDataGenerator.generateRecordsWrite({ author: alice });
445
+ const record1Reply = yield dwn.processMessage(alice.did, record1.message, { dataStream: record1.dataStream });
446
+ expect(record1Reply.status.code).to.equal(202);
447
+ const record1MessageCid = yield Message.getCid(record1.message);
448
+ yield Poller.pollUntilSuccessOrTimeout(() => __awaiter(this, void 0, void 0, function* () {
449
+ // both subscriptions should have received the message
450
+ expect(sub1MessageCids.length).to.equal(1); // message exists
451
+ expect(sub1MessageCids).to.eql([record1MessageCid]);
452
+ expect(sub2MessageCids.length).to.equal(1); // message exists
453
+ expect(sub2MessageCids).to.eql([record1MessageCid]);
454
+ }));
455
+ // unsubscribe from subscription 2
456
+ yield messagesSubscription2Reply.subscription.close();
457
+ // write two more message.
458
+ const record2 = yield TestDataGenerator.generateRecordsWrite({ author: alice });
459
+ const record2Reply = yield dwn.processMessage(alice.did, record2.message, { dataStream: record2.dataStream });
460
+ expect(record2Reply.status.code).to.equal(202);
461
+ const record2MessageCid = yield Message.getCid(record2.message);
462
+ const record3 = yield TestDataGenerator.generateRecordsWrite({ author: alice });
463
+ const record3Reply = yield dwn.processMessage(alice.did, record3.message, { dataStream: record3.dataStream });
464
+ expect(record3Reply.status.code).to.equal(202);
465
+ const record3MessageCid = yield Message.getCid(record3.message);
466
+ yield Poller.pollUntilSuccessOrTimeout(() => __awaiter(this, void 0, void 0, function* () {
467
+ expect(sub1MessageCids.length).to.equal(3); // all three messages exist
468
+ expect(sub1MessageCids).to.eql([
469
+ record1MessageCid,
470
+ record2MessageCid,
471
+ record3MessageCid
472
+ ]);
473
+ expect(sub2MessageCids.length).to.equal(1); // only the first message exists
474
+ expect(sub2MessageCids).to.eql([record1MessageCid]);
475
+ }));
476
+ }));
477
+ });
478
+ describe('records subscribe', () => {
479
+ it('allows for anonymous subscriptions to published records', () => __awaiter(this, void 0, void 0, function* () {
480
+ // scenario:
481
+ // a user creates an anonymous subscription filtered to a schema to alice's DWN
482
+ // alice writes two records, one not published and one published
483
+ // alice checks that the anonymous subscription handler only received the published record
484
+ // NOTE we create a control subscription to capture all messages
485
+ // this is to ensure that the messages are not received by the anonymous subscription handler, but have had ample time to be processed
486
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
487
+ // create a control handler to capture ALL messages in the protocol with alice as the author
488
+ const allMessages = [];
489
+ const allHandler = (event) => __awaiter(this, void 0, void 0, function* () {
490
+ const { message } = event;
491
+ allMessages.push(yield Message.getCid(message));
492
+ });
493
+ const allSubscription = yield TestDataGenerator.generateMessagesSubscribe({
494
+ author: alice,
495
+ });
496
+ const allSubscriptionReply = yield dwn.processMessage(alice.did, allSubscription.message, { subscriptionHandler: allHandler });
497
+ expect(allSubscriptionReply.status.code).to.equal(200);
498
+ // we create an anonymous subscription to capture only published messages
499
+ const publishedMessages = [];
500
+ const anonymousSubscriptionHandler = (event) => __awaiter(this, void 0, void 0, function* () {
501
+ const { message } = event;
502
+ publishedMessages.push(yield Message.getCid(message));
503
+ });
504
+ const anonymousSubscription = yield TestDataGenerator.generateRecordsSubscribe({
505
+ anonymous: true,
506
+ filter: { schema: 'http://schema1' }
507
+ });
508
+ const anonymousSubscriptionReply = yield dwn.processMessage(alice.did, anonymousSubscription.message, {
509
+ subscriptionHandler: anonymousSubscriptionHandler
510
+ });
511
+ expect(anonymousSubscriptionReply.status.code).to.equal(200);
512
+ expect(anonymousSubscriptionReply.subscription).to.exist;
513
+ // we create a non published record, this will only show up in the control subscription
514
+ const writeNotPublished = yield TestDataGenerator.generateRecordsWrite({ author: alice, schema: 'http://schema1' });
515
+ const writeNotPublishedReply = yield dwn.processMessage(alice.did, writeNotPublished.message, { dataStream: writeNotPublished.dataStream });
516
+ expect(writeNotPublishedReply.status.code).to.equal(202);
517
+ // we create a published record, this will show up in both the control and anonymous subscription
518
+ const write1 = yield TestDataGenerator.generateRecordsWrite({ author: alice, schema: 'http://schema1', published: true });
519
+ const write1Reply = yield dwn.processMessage(alice.did, write1.message, { dataStream: write1.dataStream });
520
+ expect(write1Reply.status.code).to.equal(202);
521
+ // we create another published record, this will show up in both the control and anonymous subscription
522
+ const write2 = yield TestDataGenerator.generateRecordsWrite({ author: alice, schema: 'http://schema1', published: true });
523
+ const write2Reply = yield dwn.processMessage(alice.did, write2.message, { dataStream: write2.dataStream });
524
+ expect(write2Reply.status.code).to.equal(202);
525
+ yield Poller.pollUntilSuccessOrTimeout(() => __awaiter(this, void 0, void 0, function* () {
526
+ // publishedMessages array should only contain the two published messages
527
+ expect(publishedMessages.length).to.equal(2);
528
+ expect(publishedMessages).to.have.members([
529
+ yield Message.getCid(write1.message),
530
+ yield Message.getCid(write2.message),
531
+ ]);
532
+ // allMessages array should contain all three messages
533
+ expect(allMessages.length).to.equal(3);
534
+ expect(allMessages).to.have.members([
535
+ yield Message.getCid(writeNotPublished.message),
536
+ yield Message.getCid(write1.message),
537
+ yield Message.getCid(write2.message),
538
+ ]);
539
+ }));
540
+ }));
541
+ it('allows authorized subscriptions to records intended for a recipient', () => __awaiter(this, void 0, void 0, function* () {
542
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
543
+ // alice installs a freeForAll protocol
544
+ const protocolConfigure = yield TestDataGenerator.generateProtocolsConfigure({
545
+ author: alice,
546
+ protocolDefinition: Object.assign({}, freeForAll)
547
+ });
548
+ const protocolConfigureReply = yield dwn.processMessage(alice.did, protocolConfigure.message);
549
+ expect(protocolConfigureReply.status.code).to.equal(202);
550
+ const bob = yield TestDataGenerator.generateDidKeyPersona();
551
+ const carol = yield TestDataGenerator.generateDidKeyPersona();
552
+ // bob subscribes to all records he's authorized to see, with alice as the recipient
553
+ const bobSubscribeAlice = [];
554
+ const bobSubscribeHandler = (event) => __awaiter(this, void 0, void 0, function* () {
555
+ const { message } = event;
556
+ bobSubscribeAlice.push(yield Message.getCid(message));
557
+ });
558
+ const bobSubscribeToAlice = yield TestDataGenerator.generateRecordsSubscribe({
559
+ author: bob,
560
+ filter: { protocol: freeForAll.protocol, recipient: alice.did }
561
+ });
562
+ const bobSubscribeReply = yield dwn.processMessage(alice.did, bobSubscribeToAlice.message, {
563
+ subscriptionHandler: bobSubscribeHandler
564
+ });
565
+ expect(bobSubscribeReply.status.code).to.equal(200);
566
+ expect(bobSubscribeReply.subscription).to.exist;
567
+ // carol subscribes to any messages that she or alice are the recipients of
568
+ const carolSubscribeCarolAndAlice = [];
569
+ const carolSubscribeHandler = (event) => __awaiter(this, void 0, void 0, function* () {
570
+ const { message } = event;
571
+ carolSubscribeCarolAndAlice.push(yield Message.getCid(message));
572
+ });
573
+ const carolSubscribeToCarolAndAlice = yield TestDataGenerator.generateRecordsSubscribe({
574
+ author: carol,
575
+ filter: { protocol: freeForAll.protocol, recipient: [alice.did, carol.did] }
576
+ });
577
+ const carolSubscribeReply = yield dwn.processMessage(alice.did, carolSubscribeToCarolAndAlice.message, {
578
+ subscriptionHandler: carolSubscribeHandler
579
+ });
580
+ expect(carolSubscribeReply.status.code).to.equal(200);
581
+ expect(carolSubscribeReply.subscription).to.exist;
582
+ const recordParams = {
583
+ protocol: freeForAll.protocol,
584
+ protocolPath: 'post',
585
+ schema: freeForAll.types.post.schema,
586
+ dataFormat: freeForAll.types.post.dataFormats[0],
587
+ };
588
+ // write a private and public message for alice from bob
589
+ const publicBobToAlice = yield TestDataGenerator.generateRecordsWrite(Object.assign(Object.assign({}, recordParams), { author: bob, recipient: alice.did, published: true }));
590
+ const publicBobToAliceReply = yield dwn.processMessage(alice.did, publicBobToAlice.message, { dataStream: publicBobToAlice.dataStream });
591
+ expect(publicBobToAliceReply.status.code).to.equal(202);
592
+ const privateBobToAlice = yield TestDataGenerator.generateRecordsWrite(Object.assign(Object.assign({}, recordParams), { author: bob, recipient: alice.did, published: false }));
593
+ const privateBobToAliceReply = yield dwn.processMessage(alice.did, privateBobToAlice.message, { dataStream: privateBobToAlice.dataStream });
594
+ expect(privateBobToAliceReply.status.code).to.equal(202);
595
+ // write a private message for alice from carol
596
+ const privateCarolToAlice = yield TestDataGenerator.generateRecordsWrite(Object.assign(Object.assign({}, recordParams), { author: carol, recipient: alice.did, published: false }));
597
+ const privateCarolToAliceReply = yield dwn.processMessage(alice.did, privateCarolToAlice.message, {
598
+ dataStream: privateCarolToAlice.dataStream
599
+ });
600
+ expect(privateCarolToAliceReply.status.code).to.equal(202);
601
+ // write a public and private message from bob to carol
602
+ const publicBobToCarol = yield TestDataGenerator.generateRecordsWrite(Object.assign(Object.assign({}, recordParams), { author: bob, recipient: carol.did, published: true }));
603
+ const publicBobToCarolReply = yield dwn.processMessage(alice.did, publicBobToCarol.message, {
604
+ dataStream: publicBobToCarol.dataStream
605
+ });
606
+ expect(publicBobToCarolReply.status.code).to.equal(202);
607
+ const privateBobToCarol = yield TestDataGenerator.generateRecordsWrite(Object.assign(Object.assign({}, recordParams), { author: bob, recipient: carol.did, published: false }));
608
+ const privateBobToCarolReply = yield dwn.processMessage(alice.did, privateBobToCarol.message, {
609
+ dataStream: privateBobToCarol.dataStream
610
+ });
611
+ expect(privateBobToCarolReply.status.code).to.equal(202);
612
+ yield Poller.pollUntilSuccessOrTimeout(() => __awaiter(this, void 0, void 0, function* () {
613
+ // carol should have received the message intended for her
614
+ expect(carolSubscribeCarolAndAlice.length).to.equal(4);
615
+ expect(carolSubscribeCarolAndAlice).to.have.members([
616
+ yield Message.getCid(publicBobToAlice.message),
617
+ yield Message.getCid(privateCarolToAlice.message),
618
+ yield Message.getCid(publicBobToCarol.message),
619
+ yield Message.getCid(privateBobToCarol.message),
620
+ ]);
621
+ // bob should have received the two messages intended for him
622
+ expect(bobSubscribeAlice.length).to.equal(2);
623
+ expect(bobSubscribeAlice).to.have.members([
624
+ yield Message.getCid(privateBobToAlice.message),
625
+ yield Message.getCid(publicBobToAlice.message),
626
+ ]);
627
+ }));
628
+ }));
629
+ it('allows for authorized subscriptions to records authored by an author(s)', () => __awaiter(this, void 0, void 0, function* () {
630
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
631
+ // alice installs a freeForAll protocol
632
+ const protocolConfigure = yield TestDataGenerator.generateProtocolsConfigure({
633
+ author: alice,
634
+ protocolDefinition: Object.assign({}, freeForAll)
635
+ });
636
+ const protocolConfigureReply = yield dwn.processMessage(alice.did, protocolConfigure.message);
637
+ expect(protocolConfigureReply.status.code).to.equal(202);
638
+ const bob = yield TestDataGenerator.generateDidKeyPersona();
639
+ const carol = yield TestDataGenerator.generateDidKeyPersona();
640
+ // bob subscribes to all records he's authorized to see, with alice as the author
641
+ const bobSubscribeAlice = [];
642
+ const bobSubscribeHandler = (event) => __awaiter(this, void 0, void 0, function* () {
643
+ const { message } = event;
644
+ bobSubscribeAlice.push(yield Message.getCid(message));
645
+ });
646
+ const bobSubscribeToAlice = yield TestDataGenerator.generateRecordsSubscribe({
647
+ author: bob,
648
+ filter: { protocol: freeForAll.protocol, author: alice.did }
649
+ });
650
+ const bobSubscribeReply = yield dwn.processMessage(alice.did, bobSubscribeToAlice.message, {
651
+ subscriptionHandler: bobSubscribeHandler
652
+ });
653
+ expect(bobSubscribeReply.status.code).to.equal(200);
654
+ expect(bobSubscribeReply.subscription).to.exist;
655
+ // carol subscribes to any messages that she or alice are the authors of
656
+ const carolSubscribeCarolAndAlice = [];
657
+ const carolSubscribeHandler = (event) => __awaiter(this, void 0, void 0, function* () {
658
+ const { message } = event;
659
+ carolSubscribeCarolAndAlice.push(yield Message.getCid(message));
660
+ });
661
+ const carolSubscribeToCarolAndAlice = yield TestDataGenerator.generateRecordsSubscribe({
662
+ author: carol,
663
+ filter: { protocol: freeForAll.protocol, author: [alice.did, carol.did] }
664
+ });
665
+ const carolSubscribeReply = yield dwn.processMessage(alice.did, carolSubscribeToCarolAndAlice.message, {
666
+ subscriptionHandler: carolSubscribeHandler
667
+ });
668
+ expect(carolSubscribeReply.status.code).to.equal(200);
669
+ expect(carolSubscribeReply.subscription).to.exist;
670
+ const recordParams = {
671
+ protocol: freeForAll.protocol,
672
+ protocolPath: 'post',
673
+ schema: freeForAll.types.post.schema,
674
+ dataFormat: freeForAll.types.post.dataFormats[0],
675
+ };
676
+ //control: write a public message to bob (will not show up)
677
+ const publicAliceToBob = yield TestDataGenerator.generateRecordsWrite(Object.assign(Object.assign({}, recordParams), { author: alice, recipient: bob.did, published: true }));
678
+ const publicAliceToBobReply = yield dwn.processMessage(alice.did, publicAliceToBob.message, {
679
+ dataStream: publicAliceToBob.dataStream
680
+ });
681
+ expect(publicAliceToBobReply.status.code).to.equal(202);
682
+ // write a private and public message from alice to carol
683
+ const publicAliceToCarol = yield TestDataGenerator.generateRecordsWrite(Object.assign(Object.assign({}, recordParams), { author: alice, recipient: carol.did, published: true }));
684
+ const publicAliceToCarolReply = yield dwn.processMessage(alice.did, publicAliceToCarol.message, {
685
+ dataStream: publicAliceToCarol.dataStream
686
+ });
687
+ expect(publicAliceToCarolReply.status.code).to.equal(202);
688
+ const privateAliceToCarol = yield TestDataGenerator.generateRecordsWrite(Object.assign(Object.assign({}, recordParams), { author: alice, recipient: carol.did, published: false }));
689
+ const privateAliceToCarolReply = yield dwn.processMessage(alice.did, privateAliceToCarol.message, {
690
+ dataStream: privateAliceToCarol.dataStream
691
+ });
692
+ expect(privateAliceToCarolReply.status.code).to.equal(202);
693
+ // write a private message for alice from carol
694
+ const privateCarolToAlice = yield TestDataGenerator.generateRecordsWrite(Object.assign(Object.assign({}, recordParams), { author: carol, recipient: alice.did, published: false }));
695
+ const privateCarolToAliceReply = yield dwn.processMessage(alice.did, privateCarolToAlice.message, {
696
+ dataStream: privateCarolToAlice.dataStream
697
+ });
698
+ expect(privateCarolToAliceReply.status.code).to.equal(202);
699
+ // write a public and private message from bob to carol
700
+ const publicBobToCarol = yield TestDataGenerator.generateRecordsWrite(Object.assign(Object.assign({}, recordParams), { author: bob, recipient: carol.did, published: true }));
701
+ const publicBobToCarolReply = yield dwn.processMessage(alice.did, publicBobToCarol.message, {
702
+ dataStream: publicBobToCarol.dataStream
703
+ });
704
+ expect(publicBobToCarolReply.status.code).to.equal(202);
705
+ const privateBobToCarol = yield TestDataGenerator.generateRecordsWrite(Object.assign(Object.assign({}, recordParams), { author: bob, recipient: carol.did, published: false }));
706
+ const privateBobToCarolReply = yield dwn.processMessage(alice.did, privateBobToCarol.message, {
707
+ dataStream: privateBobToCarol.dataStream
708
+ });
709
+ expect(privateBobToCarolReply.status.code).to.equal(202);
710
+ yield Poller.pollUntilSuccessOrTimeout(() => __awaiter(this, void 0, void 0, function* () {
711
+ // carol should have received the message intended for her
712
+ expect(carolSubscribeCarolAndAlice.length).to.equal(4);
713
+ expect(carolSubscribeCarolAndAlice).to.have.members([
714
+ yield Message.getCid(publicAliceToCarol.message),
715
+ yield Message.getCid(privateAliceToCarol.message),
716
+ yield Message.getCid(publicAliceToBob.message),
717
+ yield Message.getCid(privateCarolToAlice.message),
718
+ ]);
719
+ // bob should have received the two messages intended for him
720
+ expect(bobSubscribeAlice.length).to.equal(2);
721
+ expect(bobSubscribeAlice).to.have.members([
722
+ yield Message.getCid(publicAliceToBob.message),
723
+ yield Message.getCid(publicAliceToCarol.message)
724
+ ]);
725
+ }));
726
+ }));
727
+ it('filters by protocol & contextId across multiple protocolPaths', () => __awaiter(this, void 0, void 0, function* () {
728
+ // scenario: subscribe to multiple protocolPaths for a given protocol and contextId
729
+ // alice installs a protocol and creates a thread
730
+ // alice subscribes to update to that thread, it's participant as well as thread chats
731
+ // alice adds bob and carol as participants to the thread
732
+ // alice, bob, and carol all create messages
733
+ // alice deletes carol participant message
734
+ // alice checks that the correct messages were omitted
735
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
736
+ const bob = yield TestDataGenerator.generateDidKeyPersona();
737
+ const carol = yield TestDataGenerator.generateDidKeyPersona();
738
+ // create protocol
739
+ const protocolConfigure = yield TestDataGenerator.generateProtocolsConfigure({
740
+ author: alice,
741
+ protocolDefinition: Object.assign({}, threadProtocol)
742
+ });
743
+ const protocolConfigureReply = yield dwn.processMessage(alice.did, protocolConfigure.message);
744
+ expect(protocolConfigureReply.status.code).to.equal(202);
745
+ const protocol = protocolConfigure.message.descriptor.definition.protocol;
746
+ // alice creates thread
747
+ const thread = yield TestDataGenerator.generateRecordsWrite({
748
+ author: alice,
749
+ protocol: protocol,
750
+ protocolPath: 'thread'
751
+ });
752
+ const threadReply = yield dwn.processMessage(alice.did, thread.message, { dataStream: thread.dataStream });
753
+ expect(threadReply.status.code).to.equal(202);
754
+ // subscribe to this thread's messages
755
+ const messages = [];
756
+ const initialWrites = [];
757
+ const subscriptionHandler = (event) => __awaiter(this, void 0, void 0, function* () {
758
+ const { message, initialWrite } = event;
759
+ if (initialWrite !== undefined) {
760
+ initialWrites.push(yield Message.getCid(initialWrite));
761
+ }
762
+ messages.push(yield Message.getCid(message));
763
+ });
764
+ const threadSubscription = yield TestDataGenerator.generateRecordsSubscribe({
765
+ author: alice,
766
+ filter: { protocol: protocol, protocolPath: 'thread', contextId: thread.message.contextId }, // thread updates
767
+ });
768
+ const threadSubscriptionReply = yield dwn.processMessage(alice.did, threadSubscription.message, {
769
+ subscriptionHandler
770
+ });
771
+ expect(threadSubscriptionReply.status.code).to.equal(200);
772
+ expect(threadSubscriptionReply.subscription).to.exist;
773
+ const participantSubscription = yield TestDataGenerator.generateRecordsSubscribe({
774
+ author: alice,
775
+ filter: { protocol: protocol, protocolPath: 'thread/participant', contextId: thread.message.contextId }, // participant updates
776
+ });
777
+ const participantSubscriptionReply = yield dwn.processMessage(alice.did, participantSubscription.message, {
778
+ subscriptionHandler
779
+ });
780
+ expect(participantSubscriptionReply.status.code).to.equal(200);
781
+ expect(participantSubscriptionReply.subscription).to.exist;
782
+ const chatSubscription = yield TestDataGenerator.generateRecordsSubscribe({
783
+ author: alice,
784
+ filter: { protocol: protocol, protocolPath: 'thread/chat', contextId: thread.message.contextId } // chat updates
785
+ });
786
+ const chatSubscriptionReply = yield dwn.processMessage(alice.did, chatSubscription.message, {
787
+ subscriptionHandler
788
+ });
789
+ expect(chatSubscriptionReply.status.code).to.equal(200);
790
+ expect(chatSubscriptionReply.subscription).to.exist;
791
+ // add bob as participant
792
+ const bobParticipant = yield TestDataGenerator.generateRecordsWrite({
793
+ author: alice,
794
+ recipient: bob.did,
795
+ parentContextId: thread.message.contextId,
796
+ protocol: protocol,
797
+ protocolPath: 'thread/participant'
798
+ });
799
+ const bobParticipantReply = yield dwn.processMessage(alice.did, bobParticipant.message, { dataStream: bobParticipant.dataStream });
800
+ expect(bobParticipantReply.status.code).to.equal(202);
801
+ // add carol as participant
802
+ const carolParticipant = yield TestDataGenerator.generateRecordsWrite({
803
+ author: alice,
804
+ recipient: carol.did,
805
+ parentContextId: thread.message.contextId,
806
+ protocol: protocol,
807
+ protocolPath: 'thread/participant'
808
+ });
809
+ const carolParticipantReply = yield dwn.processMessage(alice.did, carolParticipant.message, { dataStream: carolParticipant.dataStream });
810
+ expect(carolParticipantReply.status.code).to.equal(202);
811
+ // add another thread as a control, will not show up in handled message events
812
+ const additionalThread = yield TestDataGenerator.generateRecordsWrite({
813
+ author: alice,
814
+ protocol: protocol,
815
+ protocolPath: 'thread'
816
+ });
817
+ const additionalThreadReply = yield dwn.processMessage(alice.did, additionalThread.message, { dataStream: additionalThread.dataStream });
818
+ expect(additionalThreadReply.status.code).to.equal(202);
819
+ yield Poller.pollUntilSuccessOrTimeout(() => __awaiter(this, void 0, void 0, function* () {
820
+ expect(messages.length).to.equal(2);
821
+ expect(messages).to.have.members([
822
+ yield Message.getCid(bobParticipant.message),
823
+ yield Message.getCid(carolParticipant.message),
824
+ ]);
825
+ }));
826
+ // add a message to protocol1
827
+ const message1 = yield TestDataGenerator.generateRecordsWrite({
828
+ author: bob,
829
+ recipient: alice.did,
830
+ parentContextId: thread.message.contextId,
831
+ protocol: protocol,
832
+ protocolPath: 'thread/chat',
833
+ protocolRole: 'thread/participant',
834
+ });
835
+ const message1Reply = yield dwn.processMessage(alice.did, message1.message, { dataStream: message1.dataStream });
836
+ expect(message1Reply.status.code).to.equal(202);
837
+ const message2 = yield TestDataGenerator.generateRecordsWrite({
838
+ author: bob,
839
+ recipient: alice.did,
840
+ parentContextId: thread.message.contextId,
841
+ protocol: protocol,
842
+ protocolPath: 'thread/chat',
843
+ protocolRole: 'thread/participant',
844
+ });
845
+ const message2Reply = yield dwn.processMessage(alice.did, message2.message, { dataStream: message2.dataStream });
846
+ expect(message2Reply.status.code).to.equal(202);
847
+ const message3 = yield TestDataGenerator.generateRecordsWrite({
848
+ author: carol,
849
+ recipient: alice.did,
850
+ parentContextId: thread.message.contextId,
851
+ protocol: protocol,
852
+ protocolPath: 'thread/chat',
853
+ protocolRole: 'thread/participant',
854
+ });
855
+ const message3Reply = yield dwn.processMessage(alice.did, message3.message, { dataStream: message3.dataStream });
856
+ expect(message3Reply.status.code).to.equal(202);
857
+ yield Poller.pollUntilSuccessOrTimeout(() => __awaiter(this, void 0, void 0, function* () {
858
+ expect(messages.length).to.equal(5);
859
+ expect(messages).to.include.members([
860
+ yield Message.getCid(message1.message),
861
+ yield Message.getCid(message2.message),
862
+ yield Message.getCid(message3.message),
863
+ ]);
864
+ }));
865
+ // delete carol participant
866
+ const deleteCarol = yield TestDataGenerator.generateRecordsDelete({
867
+ author: alice,
868
+ recordId: carolParticipant.message.recordId
869
+ });
870
+ const deleteCarolReply = yield dwn.processMessage(alice.did, deleteCarol.message);
871
+ expect(deleteCarolReply.status.code).to.equal(202);
872
+ yield Poller.pollUntilSuccessOrTimeout(() => __awaiter(this, void 0, void 0, function* () {
873
+ expect(messages.length).to.equal(6);
874
+ expect(messages).to.include.members([
875
+ yield Message.getCid(deleteCarol.message)
876
+ ]);
877
+ // check the initial write was included with the delete
878
+ expect(initialWrites).to.include.members([
879
+ yield Message.getCid(carolParticipant.message)
880
+ ]);
881
+ }));
882
+ }));
883
+ });
884
+ });
885
+ }
886
+ //# sourceMappingURL=subscriptions.spec.js.map