@enbox/dwn-sdk-js 0.0.1 → 0.0.3

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 (601) hide show
  1. package/README.md +52 -301
  2. package/dist/bundles/dwn.js +19 -21
  3. package/dist/esm/generated/precompiled-validators.js +2764 -1773
  4. package/dist/esm/generated/precompiled-validators.js.map +1 -1
  5. package/dist/esm/src/core/dwn-error.js +27 -3
  6. package/dist/esm/src/core/dwn-error.js.map +1 -1
  7. package/dist/esm/src/core/message.js.map +1 -1
  8. package/dist/esm/src/core/messages-grant-authorization.js +17 -6
  9. package/dist/esm/src/core/messages-grant-authorization.js.map +1 -1
  10. package/dist/esm/src/core/protocol-authorization.js +245 -69
  11. package/dist/esm/src/core/protocol-authorization.js.map +1 -1
  12. package/dist/esm/src/core/resumable-task-manager.js +4 -4
  13. package/dist/esm/src/core/resumable-task-manager.js.map +1 -1
  14. package/dist/esm/src/dwn.js +10 -8
  15. package/dist/esm/src/dwn.js.map +1 -1
  16. package/dist/esm/src/enums/dwn-interface-method.js +4 -2
  17. package/dist/esm/src/enums/dwn-interface-method.js.map +1 -1
  18. package/dist/esm/src/event-stream/event-emitter-stream.js.map +1 -0
  19. package/dist/esm/src/handlers/messages-subscribe.js +1 -1
  20. package/dist/esm/src/handlers/messages-subscribe.js.map +1 -1
  21. package/dist/esm/src/handlers/messages-sync.js +116 -0
  22. package/dist/esm/src/handlers/messages-sync.js.map +1 -0
  23. package/dist/esm/src/handlers/protocols-configure.js +149 -16
  24. package/dist/esm/src/handlers/protocols-configure.js.map +1 -1
  25. package/dist/esm/src/handlers/protocols-query.js +2 -2
  26. package/dist/esm/src/handlers/protocols-query.js.map +1 -1
  27. package/dist/esm/src/handlers/records-count.js +143 -0
  28. package/dist/esm/src/handlers/records-count.js.map +1 -0
  29. package/dist/esm/src/handlers/records-query.js +4 -0
  30. package/dist/esm/src/handlers/records-query.js.map +1 -1
  31. package/dist/esm/src/handlers/records-read.js +4 -6
  32. package/dist/esm/src/handlers/records-read.js.map +1 -1
  33. package/dist/esm/src/handlers/records-write.js +17 -18
  34. package/dist/esm/src/handlers/records-write.js.map +1 -1
  35. package/dist/esm/src/index.js +9 -5
  36. package/dist/esm/src/index.js.map +1 -1
  37. package/dist/esm/src/interfaces/messages-read.js +2 -7
  38. package/dist/esm/src/interfaces/messages-read.js.map +1 -1
  39. package/dist/esm/src/interfaces/messages-subscribe.js +1 -0
  40. package/dist/esm/src/interfaces/messages-subscribe.js.map +1 -1
  41. package/dist/esm/src/interfaces/{messages-query.js → messages-sync.js} +11 -12
  42. package/dist/esm/src/interfaces/messages-sync.js.map +1 -0
  43. package/dist/esm/src/interfaces/protocols-configure.js +153 -30
  44. package/dist/esm/src/interfaces/protocols-configure.js.map +1 -1
  45. package/dist/esm/src/interfaces/protocols-query.js +1 -0
  46. package/dist/esm/src/interfaces/protocols-query.js.map +1 -1
  47. package/dist/esm/src/interfaces/records-count.js +91 -0
  48. package/dist/esm/src/interfaces/records-count.js.map +1 -0
  49. package/dist/esm/src/interfaces/records-read.js +15 -1
  50. package/dist/esm/src/interfaces/records-read.js.map +1 -1
  51. package/dist/esm/src/interfaces/records-write.js +64 -15
  52. package/dist/esm/src/interfaces/records-write.js.map +1 -1
  53. package/dist/esm/src/jose/algorithms/signing/ed25519.js.map +1 -1
  54. package/dist/esm/src/jose/algorithms/signing/signature-algorithms.js.map +1 -1
  55. package/dist/esm/src/jose/jws/general/builder.js.map +1 -1
  56. package/dist/esm/src/jose/jws/general/verifier.js.map +1 -1
  57. package/dist/esm/src/protocols/permission-grant.js +30 -0
  58. package/dist/esm/src/protocols/permission-grant.js.map +1 -1
  59. package/dist/esm/src/protocols/permission-request.js +24 -0
  60. package/dist/esm/src/protocols/permission-request.js.map +1 -1
  61. package/dist/esm/src/protocols/permissions.js +1 -1
  62. package/dist/esm/src/protocols/permissions.js.map +1 -1
  63. package/dist/esm/src/schema-validator.js +0 -1
  64. package/dist/esm/src/schema-validator.js.map +1 -1
  65. package/dist/esm/src/smt/smt-store-level.js +125 -0
  66. package/dist/esm/src/smt/smt-store-level.js.map +1 -0
  67. package/dist/esm/src/smt/smt-store-memory.js +67 -0
  68. package/dist/esm/src/smt/smt-store-memory.js.map +1 -0
  69. package/dist/esm/src/smt/smt-utils.js +146 -0
  70. package/dist/esm/src/smt/smt-utils.js.map +1 -0
  71. package/dist/esm/src/smt/sparse-merkle-tree.js +622 -0
  72. package/dist/esm/src/smt/sparse-merkle-tree.js.map +1 -0
  73. package/dist/esm/src/state-index/state-index-level.js +228 -0
  74. package/dist/esm/src/state-index/state-index-level.js.map +1 -0
  75. package/dist/esm/src/store/data-store-level.js +6 -6
  76. package/dist/esm/src/store/data-store-level.js.map +1 -1
  77. package/dist/esm/src/store/index-level.js +375 -17
  78. package/dist/esm/src/store/index-level.js.map +1 -1
  79. package/dist/esm/src/store/message-store-level.js +56 -0
  80. package/dist/esm/src/store/message-store-level.js.map +1 -1
  81. package/dist/esm/src/store/storage-controller.js +19 -16
  82. package/dist/esm/src/store/storage-controller.js.map +1 -1
  83. package/dist/esm/src/types/encryption-types.js +2 -0
  84. package/dist/esm/src/types/encryption-types.js.map +1 -0
  85. package/dist/esm/src/types/message-types.js.map +1 -1
  86. package/dist/esm/src/types/protocols-types.js +0 -2
  87. package/dist/esm/src/types/protocols-types.js.map +1 -1
  88. package/dist/esm/src/types/records-types.js +2 -0
  89. package/dist/esm/src/types/records-types.js.map +1 -1
  90. package/dist/esm/src/types/smt-types.js +5 -0
  91. package/dist/esm/src/types/smt-types.js.map +1 -0
  92. package/dist/esm/src/types/state-index.js +2 -0
  93. package/dist/esm/src/types/state-index.js.map +1 -0
  94. package/dist/esm/src/utils/cid.js +2 -1
  95. package/dist/esm/src/utils/cid.js.map +1 -1
  96. package/dist/esm/src/utils/data-stream.js +84 -29
  97. package/dist/esm/src/utils/data-stream.js.map +1 -1
  98. package/dist/esm/src/utils/encryption.js +22 -31
  99. package/dist/esm/src/utils/encryption.js.map +1 -1
  100. package/dist/esm/src/utils/hd-key.js +3 -3
  101. package/dist/esm/src/utils/hd-key.js.map +1 -1
  102. package/dist/esm/src/utils/jws.js +4 -4
  103. package/dist/esm/src/utils/jws.js.map +1 -1
  104. package/dist/esm/src/utils/private-key-signer.js +4 -3
  105. package/dist/esm/src/utils/private-key-signer.js.map +1 -1
  106. package/dist/esm/src/utils/protocols.js +82 -9
  107. package/dist/esm/src/utils/protocols.js.map +1 -1
  108. package/dist/esm/src/utils/records.js +82 -26
  109. package/dist/esm/src/utils/records.js.map +1 -1
  110. package/dist/esm/src/utils/secp256k1.js +4 -3
  111. package/dist/esm/src/utils/secp256k1.js.map +1 -1
  112. package/dist/esm/src/utils/secp256r1.js +3 -2
  113. package/dist/esm/src/utils/secp256r1.js.map +1 -1
  114. package/dist/esm/src/utils/time.js +1 -1
  115. package/dist/esm/src/utils/url.js +1 -1
  116. package/dist/esm/src/utils/url.js.map +1 -1
  117. package/dist/esm/tests/core/auth.spec.js +2 -2
  118. package/dist/esm/tests/core/auth.spec.js.map +1 -1
  119. package/dist/esm/tests/core/message-reply.spec.js +3 -3
  120. package/dist/esm/tests/core/message-reply.spec.js.map +1 -1
  121. package/dist/esm/tests/core/message.spec.js +13 -13
  122. package/dist/esm/tests/core/message.spec.js.map +1 -1
  123. package/dist/esm/tests/core/protocol-authorization.spec.js +3 -3
  124. package/dist/esm/tests/core/protocol-authorization.spec.js.map +1 -1
  125. package/dist/esm/tests/dwn.spec.js +27 -37
  126. package/dist/esm/tests/dwn.spec.js.map +1 -1
  127. package/dist/esm/tests/{event-log → event-stream}/event-emitter-stream.spec.js +14 -15
  128. package/dist/esm/tests/event-stream/event-emitter-stream.spec.js.map +1 -0
  129. package/dist/esm/tests/{event-log → event-stream}/event-stream.spec.js +13 -15
  130. package/dist/esm/tests/event-stream/event-stream.spec.js.map +1 -0
  131. package/dist/esm/tests/features/author-delegated-grant.spec.js +281 -135
  132. package/dist/esm/tests/features/author-delegated-grant.spec.js.map +1 -1
  133. package/dist/esm/tests/features/owner-delegated-grant.spec.js +57 -59
  134. package/dist/esm/tests/features/owner-delegated-grant.spec.js.map +1 -1
  135. package/dist/esm/tests/features/owner-signature.spec.js +32 -34
  136. package/dist/esm/tests/features/owner-signature.spec.js.map +1 -1
  137. package/dist/esm/tests/features/permissions.spec.js +73 -95
  138. package/dist/esm/tests/features/permissions.spec.js.map +1 -1
  139. package/dist/esm/tests/features/protocol-composition.spec.js +1645 -0
  140. package/dist/esm/tests/features/protocol-composition.spec.js.map +1 -0
  141. package/dist/esm/tests/features/protocol-create-action.spec.js +25 -27
  142. package/dist/esm/tests/features/protocol-create-action.spec.js.map +1 -1
  143. package/dist/esm/tests/features/protocol-delete-action.spec.js +42 -44
  144. package/dist/esm/tests/features/protocol-delete-action.spec.js.map +1 -1
  145. package/dist/esm/tests/features/protocol-update-action.spec.js +53 -55
  146. package/dist/esm/tests/features/protocol-update-action.spec.js.map +1 -1
  147. package/dist/esm/tests/features/records-prune.spec.js +126 -100
  148. package/dist/esm/tests/features/records-prune.spec.js.map +1 -1
  149. package/dist/esm/tests/features/records-tags.spec.js +272 -272
  150. package/dist/esm/tests/features/records-tags.spec.js.map +1 -1
  151. package/dist/esm/tests/features/resumable-tasks.spec.js +35 -37
  152. package/dist/esm/tests/features/resumable-tasks.spec.js.map +1 -1
  153. package/dist/esm/tests/handlers/messages-read.spec.js +112 -112
  154. package/dist/esm/tests/handlers/messages-read.spec.js.map +1 -1
  155. package/dist/esm/tests/handlers/messages-subscribe.spec.js +78 -76
  156. package/dist/esm/tests/handlers/messages-subscribe.spec.js.map +1 -1
  157. package/dist/esm/tests/handlers/messages-sync.spec.js +528 -0
  158. package/dist/esm/tests/handlers/messages-sync.spec.js.map +1 -0
  159. package/dist/esm/tests/handlers/protocols-configure.spec.js +545 -152
  160. package/dist/esm/tests/handlers/protocols-configure.spec.js.map +1 -1
  161. package/dist/esm/tests/handlers/protocols-query.spec.js +70 -72
  162. package/dist/esm/tests/handlers/protocols-query.spec.js.map +1 -1
  163. package/dist/esm/tests/handlers/records-count.spec.js +313 -0
  164. package/dist/esm/tests/handlers/records-count.spec.js.map +1 -0
  165. package/dist/esm/tests/handlers/records-delete.spec.js +106 -109
  166. package/dist/esm/tests/handlers/records-delete.spec.js.map +1 -1
  167. package/dist/esm/tests/handlers/records-query.spec.js +863 -463
  168. package/dist/esm/tests/handlers/records-query.spec.js.map +1 -1
  169. package/dist/esm/tests/handlers/records-read.spec.js +439 -209
  170. package/dist/esm/tests/handlers/records-read.spec.js.map +1 -1
  171. package/dist/esm/tests/handlers/records-subscribe.spec.js +292 -97
  172. package/dist/esm/tests/handlers/records-subscribe.spec.js.map +1 -1
  173. package/dist/esm/tests/handlers/records-write.spec.js +481 -483
  174. package/dist/esm/tests/handlers/records-write.spec.js.map +1 -1
  175. package/dist/esm/tests/interfaces/messages-get.spec.js +31 -11
  176. package/dist/esm/tests/interfaces/messages-get.spec.js.map +1 -1
  177. package/dist/esm/tests/interfaces/messages-subscribe.spec.js +5 -5
  178. package/dist/esm/tests/interfaces/messages-subscribe.spec.js.map +1 -1
  179. package/dist/esm/tests/interfaces/protocols-configure.spec.js +64 -134
  180. package/dist/esm/tests/interfaces/protocols-configure.spec.js.map +1 -1
  181. package/dist/esm/tests/interfaces/protocols-query.spec.js +4 -6
  182. package/dist/esm/tests/interfaces/protocols-query.spec.js.map +1 -1
  183. package/dist/esm/tests/interfaces/records-delete.spec.js +3 -5
  184. package/dist/esm/tests/interfaces/records-delete.spec.js.map +1 -1
  185. package/dist/esm/tests/interfaces/records-query.spec.js +9 -11
  186. package/dist/esm/tests/interfaces/records-query.spec.js.map +1 -1
  187. package/dist/esm/tests/interfaces/records-read.spec.js +76 -7
  188. package/dist/esm/tests/interfaces/records-read.spec.js.map +1 -1
  189. package/dist/esm/tests/interfaces/records-subscribe.spec.js +7 -9
  190. package/dist/esm/tests/interfaces/records-subscribe.spec.js.map +1 -1
  191. package/dist/esm/tests/interfaces/records-write.spec.js +244 -48
  192. package/dist/esm/tests/interfaces/records-write.spec.js.map +1 -1
  193. package/dist/esm/tests/jose/jws/general.spec.js +15 -18
  194. package/dist/esm/tests/jose/jws/general.spec.js.map +1 -1
  195. package/dist/esm/tests/protocols/permission-grant.spec.js +114 -0
  196. package/dist/esm/tests/protocols/permission-grant.spec.js.map +1 -0
  197. package/dist/esm/tests/protocols/permission-request.spec.js +43 -7
  198. package/dist/esm/tests/protocols/permission-request.spec.js.map +1 -1
  199. package/dist/esm/tests/protocols/permissions.spec.js +9 -11
  200. package/dist/esm/tests/protocols/permissions.spec.js.map +1 -1
  201. package/dist/esm/tests/scenarios/aggregator.spec.js +90 -92
  202. package/dist/esm/tests/scenarios/aggregator.spec.js.map +1 -1
  203. package/dist/esm/tests/scenarios/deleted-record.spec.js +17 -19
  204. package/dist/esm/tests/scenarios/deleted-record.spec.js.map +1 -1
  205. package/dist/esm/tests/scenarios/end-to-end-tests.spec.js +27 -29
  206. package/dist/esm/tests/scenarios/end-to-end-tests.spec.js.map +1 -1
  207. package/dist/esm/tests/scenarios/nested-roles.spec.js +37 -39
  208. package/dist/esm/tests/scenarios/nested-roles.spec.js.map +1 -1
  209. package/dist/esm/tests/scenarios/subscriptions.spec.js +163 -163
  210. package/dist/esm/tests/scenarios/subscriptions.spec.js.map +1 -1
  211. package/dist/esm/tests/smt/smt-store-level.spec.js +143 -0
  212. package/dist/esm/tests/smt/smt-store-level.spec.js.map +1 -0
  213. package/dist/esm/tests/smt/sparse-merkle-tree.spec.js +741 -0
  214. package/dist/esm/tests/smt/sparse-merkle-tree.spec.js.map +1 -0
  215. package/dist/esm/tests/state-index/state-index-level.spec.js +254 -0
  216. package/dist/esm/tests/state-index/state-index-level.spec.js.map +1 -0
  217. package/dist/esm/tests/store/blockstore-level.spec.js +136 -0
  218. package/dist/esm/tests/store/blockstore-level.spec.js.map +1 -0
  219. package/dist/esm/tests/store/blockstore-mock.spec.js +29 -28
  220. package/dist/esm/tests/store/blockstore-mock.spec.js.map +1 -1
  221. package/dist/esm/tests/store/data-store-level.spec.js +23 -25
  222. package/dist/esm/tests/store/data-store-level.spec.js.map +1 -1
  223. package/dist/esm/tests/store/index-level.spec.js +544 -194
  224. package/dist/esm/tests/store/index-level.spec.js.map +1 -1
  225. package/dist/esm/tests/store/message-store-level.spec.js +4 -4
  226. package/dist/esm/tests/store/message-store-level.spec.js.map +1 -1
  227. package/dist/esm/tests/store/message-store.spec.js +147 -73
  228. package/dist/esm/tests/store/message-store.spec.js.map +1 -1
  229. package/dist/esm/tests/store-dependent-tests.spec.js +1 -0
  230. package/dist/esm/tests/store-dependent-tests.spec.js.map +1 -1
  231. package/dist/esm/tests/test-stores.js +5 -5
  232. package/dist/esm/tests/test-stores.js.map +1 -1
  233. package/dist/esm/tests/test-suite.js +9 -8
  234. package/dist/esm/tests/test-suite.js.map +1 -1
  235. package/dist/esm/tests/utils/cid.spec.js +8 -11
  236. package/dist/esm/tests/utils/cid.spec.js.map +1 -1
  237. package/dist/esm/tests/utils/data-stream.spec.js +167 -13
  238. package/dist/esm/tests/utils/data-stream.spec.js.map +1 -1
  239. package/dist/esm/tests/utils/encryption-callbacks.spec.js +233 -0
  240. package/dist/esm/tests/utils/encryption-callbacks.spec.js.map +1 -0
  241. package/dist/esm/tests/utils/encryption.spec.js +34 -85
  242. package/dist/esm/tests/utils/encryption.spec.js.map +1 -1
  243. package/dist/esm/tests/utils/filters.spec.js +67 -69
  244. package/dist/esm/tests/utils/filters.spec.js.map +1 -1
  245. package/dist/esm/tests/utils/hd-key.spec.js +3 -3
  246. package/dist/esm/tests/utils/hd-key.spec.js.map +1 -1
  247. package/dist/esm/tests/utils/jws.spec.js +54 -3
  248. package/dist/esm/tests/utils/jws.spec.js.map +1 -1
  249. package/dist/esm/tests/utils/memory-cache.spec.js +6 -9
  250. package/dist/esm/tests/utils/memory-cache.spec.js.map +1 -1
  251. package/dist/esm/tests/utils/messages.spec.js +63 -29
  252. package/dist/esm/tests/utils/messages.spec.js.map +1 -1
  253. package/dist/esm/tests/utils/object.spec.js +3 -3
  254. package/dist/esm/tests/utils/object.spec.js.map +1 -1
  255. package/dist/esm/tests/utils/poller.js +1 -1
  256. package/dist/esm/tests/utils/poller.js.map +1 -1
  257. package/dist/esm/tests/utils/private-key-signer.spec.js +6 -6
  258. package/dist/esm/tests/utils/private-key-signer.spec.js.map +1 -1
  259. package/dist/esm/tests/utils/records.spec.js +37 -5
  260. package/dist/esm/tests/utils/records.spec.js.map +1 -1
  261. package/dist/esm/tests/utils/secp256k1.spec.js +7 -7
  262. package/dist/esm/tests/utils/secp256k1.spec.js.map +1 -1
  263. package/dist/esm/tests/utils/secp256r1.spec.js +7 -7
  264. package/dist/esm/tests/utils/secp256r1.spec.js.map +1 -1
  265. package/dist/esm/tests/utils/test-data-generator.js +47 -28
  266. package/dist/esm/tests/utils/test-data-generator.js.map +1 -1
  267. package/dist/esm/tests/utils/time.spec.js +7 -7
  268. package/dist/esm/tests/utils/time.spec.js.map +1 -1
  269. package/dist/esm/tests/utils/url.spec.js +25 -27
  270. package/dist/esm/tests/utils/url.spec.js.map +1 -1
  271. package/dist/esm/tests/validation/json-schemas/definitions.spec.js +4 -4
  272. package/dist/esm/tests/validation/json-schemas/definitions.spec.js.map +1 -1
  273. package/dist/esm/tests/validation/json-schemas/jwk/general-jwk.spec.js +15 -3
  274. package/dist/esm/tests/validation/json-schemas/jwk/general-jwk.spec.js.map +1 -1
  275. package/dist/esm/tests/validation/json-schemas/jwk/public-jwk.spec.js +8 -8
  276. package/dist/esm/tests/validation/json-schemas/jwk/public-jwk.spec.js.map +1 -1
  277. package/dist/esm/tests/validation/json-schemas/jwk-verification-method.spec.js +8 -18
  278. package/dist/esm/tests/validation/json-schemas/jwk-verification-method.spec.js.map +1 -1
  279. package/dist/esm/tests/validation/json-schemas/protocols/protocols-configure.spec.js +3 -3
  280. package/dist/esm/tests/validation/json-schemas/protocols/protocols-configure.spec.js.map +1 -1
  281. package/dist/esm/tests/validation/json-schemas/records/records-query.spec.js +9 -9
  282. package/dist/esm/tests/validation/json-schemas/records/records-query.spec.js.map +1 -1
  283. package/dist/esm/tests/validation/json-schemas/records/records-read.spec.js +106 -0
  284. package/dist/esm/tests/validation/json-schemas/records/records-read.spec.js.map +1 -0
  285. package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js +18 -18
  286. package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js.map +1 -1
  287. package/dist/esm/tests/vectors/protocol-definitions/email.json +1 -1
  288. package/dist/esm/tests/vectors/protocol-definitions/friend-role.json +2 -4
  289. package/dist/esm/tests/vectors/protocol-definitions/slack.json +2 -6
  290. package/dist/esm/tests/vectors/protocol-definitions/thread-role.json +2 -6
  291. package/dist/types/generated/precompiled-validators.d.ts +82 -64
  292. package/dist/types/generated/precompiled-validators.d.ts.map +1 -1
  293. package/dist/types/src/core/dwn-error.d.ts +27 -3
  294. package/dist/types/src/core/dwn-error.d.ts.map +1 -1
  295. package/dist/types/src/core/message-reply.d.ts +1 -1
  296. package/dist/types/src/core/message.d.ts +3 -3
  297. package/dist/types/src/core/message.d.ts.map +1 -1
  298. package/dist/types/src/core/messages-grant-authorization.d.ts +4 -4
  299. package/dist/types/src/core/messages-grant-authorization.d.ts.map +1 -1
  300. package/dist/types/src/core/protocol-authorization.d.ts +43 -2
  301. package/dist/types/src/core/protocol-authorization.d.ts.map +1 -1
  302. package/dist/types/src/core/records-grant-authorization.d.ts +2 -2
  303. package/dist/types/src/core/records-grant-authorization.d.ts.map +1 -1
  304. package/dist/types/src/core/resumable-task-manager.d.ts +1 -0
  305. package/dist/types/src/core/resumable-task-manager.d.ts.map +1 -1
  306. package/dist/types/src/dwn.d.ts +8 -8
  307. package/dist/types/src/dwn.d.ts.map +1 -1
  308. package/dist/types/src/enums/dwn-interface-method.d.ts +5 -3
  309. package/dist/types/src/enums/dwn-interface-method.d.ts.map +1 -1
  310. package/dist/types/src/event-stream/event-emitter-stream.d.ts.map +1 -0
  311. package/dist/types/src/handlers/messages-sync.d.ts +21 -0
  312. package/dist/types/src/handlers/messages-sync.d.ts.map +1 -0
  313. package/dist/types/src/handlers/protocols-configure.d.ts +24 -4
  314. package/dist/types/src/handlers/protocols-configure.d.ts.map +1 -1
  315. package/dist/types/src/handlers/protocols-query.d.ts.map +1 -1
  316. package/dist/types/src/handlers/records-count.d.ts +43 -0
  317. package/dist/types/src/handlers/records-count.d.ts.map +1 -0
  318. package/dist/types/src/handlers/records-query.d.ts.map +1 -1
  319. package/dist/types/src/handlers/records-read.d.ts.map +1 -1
  320. package/dist/types/src/handlers/records-write.d.ts +5 -5
  321. package/dist/types/src/handlers/records-write.d.ts.map +1 -1
  322. package/dist/types/src/index.d.ts +72 -37
  323. package/dist/types/src/index.d.ts.map +1 -1
  324. package/dist/types/src/interfaces/messages-read.d.ts +2 -2
  325. package/dist/types/src/interfaces/messages-read.d.ts.map +1 -1
  326. package/dist/types/src/interfaces/messages-subscribe.d.ts +2 -2
  327. package/dist/types/src/interfaces/messages-subscribe.d.ts.map +1 -1
  328. package/dist/types/src/interfaces/messages-sync.d.ts +16 -0
  329. package/dist/types/src/interfaces/messages-sync.d.ts.map +1 -0
  330. package/dist/types/src/interfaces/protocols-configure.d.ts +22 -2
  331. package/dist/types/src/interfaces/protocols-configure.d.ts.map +1 -1
  332. package/dist/types/src/interfaces/protocols-query.d.ts +2 -2
  333. package/dist/types/src/interfaces/protocols-query.d.ts.map +1 -1
  334. package/dist/types/src/interfaces/records-count.d.ts +27 -0
  335. package/dist/types/src/interfaces/records-count.d.ts.map +1 -0
  336. package/dist/types/src/interfaces/records-delete.d.ts +2 -2
  337. package/dist/types/src/interfaces/records-delete.d.ts.map +1 -1
  338. package/dist/types/src/interfaces/records-query.d.ts +2 -2
  339. package/dist/types/src/interfaces/records-query.d.ts.map +1 -1
  340. package/dist/types/src/interfaces/records-read.d.ts +4 -2
  341. package/dist/types/src/interfaces/records-read.d.ts.map +1 -1
  342. package/dist/types/src/interfaces/records-subscribe.d.ts +2 -2
  343. package/dist/types/src/interfaces/records-subscribe.d.ts.map +1 -1
  344. package/dist/types/src/interfaces/records-write.d.ts +37 -15
  345. package/dist/types/src/interfaces/records-write.d.ts.map +1 -1
  346. package/dist/types/src/jose/algorithms/signing/ed25519.d.ts.map +1 -1
  347. package/dist/types/src/jose/algorithms/signing/signature-algorithms.d.ts +5 -1
  348. package/dist/types/src/jose/algorithms/signing/signature-algorithms.d.ts.map +1 -1
  349. package/dist/types/src/jose/jws/general/builder.d.ts +3 -3
  350. package/dist/types/src/jose/jws/general/builder.d.ts.map +1 -1
  351. package/dist/types/src/protocols/permission-grant.d.ts +11 -0
  352. package/dist/types/src/protocols/permission-grant.d.ts.map +1 -1
  353. package/dist/types/src/protocols/permission-request.d.ts +11 -0
  354. package/dist/types/src/protocols/permission-request.d.ts.map +1 -1
  355. package/dist/types/src/protocols/permissions.d.ts +4 -4
  356. package/dist/types/src/protocols/permissions.d.ts.map +1 -1
  357. package/dist/types/src/schema-validator.d.ts +1 -1
  358. package/dist/types/src/schema-validator.d.ts.map +1 -1
  359. package/dist/types/src/smt/smt-store-level.d.ts +32 -0
  360. package/dist/types/src/smt/smt-store-level.d.ts.map +1 -0
  361. package/dist/types/src/smt/smt-store-memory.d.ts +22 -0
  362. package/dist/types/src/smt/smt-store-memory.d.ts.map +1 -0
  363. package/dist/types/src/smt/smt-utils.d.ts +58 -0
  364. package/dist/types/src/smt/smt-utils.d.ts.map +1 -0
  365. package/dist/types/src/smt/sparse-merkle-tree.d.ts +124 -0
  366. package/dist/types/src/smt/sparse-merkle-tree.d.ts.map +1 -0
  367. package/dist/types/src/state-index/state-index-level.d.ts +83 -0
  368. package/dist/types/src/state-index/state-index-level.d.ts.map +1 -0
  369. package/dist/types/src/store/data-store-level.d.ts +1 -2
  370. package/dist/types/src/store/data-store-level.d.ts.map +1 -1
  371. package/dist/types/src/store/index-level.d.ts +98 -2
  372. package/dist/types/src/store/index-level.d.ts.map +1 -1
  373. package/dist/types/src/store/level-wrapper.d.ts.map +1 -1
  374. package/dist/types/src/store/message-store-level.d.ts +5 -0
  375. package/dist/types/src/store/message-store-level.d.ts.map +1 -1
  376. package/dist/types/src/store/storage-controller.d.ts +7 -7
  377. package/dist/types/src/store/storage-controller.d.ts.map +1 -1
  378. package/dist/types/src/types/data-store.d.ts +2 -3
  379. package/dist/types/src/types/data-store.d.ts.map +1 -1
  380. package/dist/types/src/types/encryption-types.d.ts +48 -0
  381. package/dist/types/src/types/encryption-types.d.ts.map +1 -0
  382. package/dist/types/src/types/jose-types.d.ts +9 -40
  383. package/dist/types/src/types/jose-types.d.ts.map +1 -1
  384. package/dist/types/src/types/message-store.d.ts +5 -0
  385. package/dist/types/src/types/message-store.d.ts.map +1 -1
  386. package/dist/types/src/types/message-types.d.ts +19 -0
  387. package/dist/types/src/types/message-types.d.ts.map +1 -1
  388. package/dist/types/src/types/messages-types.d.ts +16 -11
  389. package/dist/types/src/types/messages-types.d.ts.map +1 -1
  390. package/dist/types/src/types/method-handler.d.ts +1 -2
  391. package/dist/types/src/types/method-handler.d.ts.map +1 -1
  392. package/dist/types/src/types/permission-types.d.ts +2 -2
  393. package/dist/types/src/types/permission-types.d.ts.map +1 -1
  394. package/dist/types/src/types/protocols-types.d.ts +49 -5
  395. package/dist/types/src/types/protocols-types.d.ts.map +1 -1
  396. package/dist/types/src/types/records-types.d.ts +23 -7
  397. package/dist/types/src/types/records-types.d.ts.map +1 -1
  398. package/dist/types/src/types/signer.d.ts +1 -1
  399. package/dist/types/src/types/signer.d.ts.map +1 -1
  400. package/dist/types/src/types/smt-types.d.ts +81 -0
  401. package/dist/types/src/types/smt-types.d.ts.map +1 -0
  402. package/dist/types/src/types/state-index.d.ts +90 -0
  403. package/dist/types/src/types/state-index.d.ts.map +1 -0
  404. package/dist/types/src/utils/cid.d.ts +1 -2
  405. package/dist/types/src/utils/cid.d.ts.map +1 -1
  406. package/dist/types/src/utils/data-stream.d.ts +14 -7
  407. package/dist/types/src/utils/data-stream.d.ts.map +1 -1
  408. package/dist/types/src/utils/encryption.d.ts +2 -3
  409. package/dist/types/src/utils/encryption.d.ts.map +1 -1
  410. package/dist/types/src/utils/hd-key.d.ts +4 -4
  411. package/dist/types/src/utils/hd-key.d.ts.map +1 -1
  412. package/dist/types/src/utils/jws.d.ts +7 -7
  413. package/dist/types/src/utils/jws.d.ts.map +1 -1
  414. package/dist/types/src/utils/private-key-signer.d.ts +4 -4
  415. package/dist/types/src/utils/private-key-signer.d.ts.map +1 -1
  416. package/dist/types/src/utils/protocols.d.ts +46 -3
  417. package/dist/types/src/utils/protocols.d.ts.map +1 -1
  418. package/dist/types/src/utils/records.d.ts +33 -6
  419. package/dist/types/src/utils/records.d.ts.map +1 -1
  420. package/dist/types/src/utils/secp256k1.d.ts +11 -11
  421. package/dist/types/src/utils/secp256k1.d.ts.map +1 -1
  422. package/dist/types/src/utils/secp256r1.d.ts +8 -8
  423. package/dist/types/src/utils/secp256r1.d.ts.map +1 -1
  424. package/dist/types/src/utils/time.d.ts +1 -1
  425. package/dist/types/tests/dwn.spec.d.ts.map +1 -1
  426. package/dist/types/tests/event-stream/event-emitter-stream.spec.d.ts.map +1 -0
  427. package/dist/types/tests/event-stream/event-stream.spec.d.ts.map +1 -0
  428. package/dist/types/tests/features/author-delegated-grant.spec.d.ts.map +1 -1
  429. package/dist/types/tests/features/owner-delegated-grant.spec.d.ts.map +1 -1
  430. package/dist/types/tests/features/owner-signature.spec.d.ts.map +1 -1
  431. package/dist/types/tests/features/permissions.spec.d.ts.map +1 -1
  432. package/dist/types/tests/features/protocol-composition.spec.d.ts +5 -0
  433. package/dist/types/tests/features/protocol-composition.spec.d.ts.map +1 -0
  434. package/dist/types/tests/features/protocol-create-action.spec.d.ts.map +1 -1
  435. package/dist/types/tests/features/protocol-delete-action.spec.d.ts.map +1 -1
  436. package/dist/types/tests/features/protocol-update-action.spec.d.ts.map +1 -1
  437. package/dist/types/tests/features/records-prune.spec.d.ts.map +1 -1
  438. package/dist/types/tests/features/records-tags.spec.d.ts.map +1 -1
  439. package/dist/types/tests/features/resumable-tasks.spec.d.ts.map +1 -1
  440. package/dist/types/tests/handlers/messages-read.spec.d.ts.map +1 -1
  441. package/dist/types/tests/handlers/messages-subscribe.spec.d.ts.map +1 -1
  442. package/dist/types/tests/handlers/messages-sync.spec.d.ts +2 -0
  443. package/dist/types/tests/handlers/messages-sync.spec.d.ts.map +1 -0
  444. package/dist/types/tests/handlers/protocols-configure.spec.d.ts.map +1 -1
  445. package/dist/types/tests/handlers/protocols-query.spec.d.ts.map +1 -1
  446. package/dist/types/tests/handlers/records-count.spec.d.ts +2 -0
  447. package/dist/types/tests/handlers/records-count.spec.d.ts.map +1 -0
  448. package/dist/types/tests/handlers/records-delete.spec.d.ts.map +1 -1
  449. package/dist/types/tests/handlers/records-query.spec.d.ts.map +1 -1
  450. package/dist/types/tests/handlers/records-read.spec.d.ts.map +1 -1
  451. package/dist/types/tests/handlers/records-subscribe.spec.d.ts.map +1 -1
  452. package/dist/types/tests/handlers/records-write.spec.d.ts.map +1 -1
  453. package/dist/types/tests/protocols/permission-grant.spec.d.ts +2 -0
  454. package/dist/types/tests/protocols/permission-grant.spec.d.ts.map +1 -0
  455. package/dist/types/tests/scenarios/deleted-record.spec.d.ts.map +1 -1
  456. package/dist/types/tests/scenarios/end-to-end-tests.spec.d.ts.map +1 -1
  457. package/dist/types/tests/scenarios/nested-roles.spec.d.ts.map +1 -1
  458. package/dist/types/tests/smt/smt-store-level.spec.d.ts +2 -0
  459. package/dist/types/tests/smt/smt-store-level.spec.d.ts.map +1 -0
  460. package/dist/types/tests/smt/sparse-merkle-tree.spec.d.ts +2 -0
  461. package/dist/types/tests/smt/sparse-merkle-tree.spec.d.ts.map +1 -0
  462. package/dist/types/tests/state-index/state-index-level.spec.d.ts +2 -0
  463. package/dist/types/tests/state-index/state-index-level.spec.d.ts.map +1 -0
  464. package/dist/types/tests/store/blockstore-level.spec.d.ts +2 -0
  465. package/dist/types/tests/store/blockstore-level.spec.d.ts.map +1 -0
  466. package/dist/types/tests/store/message-store.spec.d.ts.map +1 -1
  467. package/dist/types/tests/test-stores.d.ts +4 -4
  468. package/dist/types/tests/test-stores.d.ts.map +1 -1
  469. package/dist/types/tests/test-suite.d.ts +2 -2
  470. package/dist/types/tests/test-suite.d.ts.map +1 -1
  471. package/dist/types/tests/utils/encryption-callbacks.spec.d.ts +2 -0
  472. package/dist/types/tests/utils/encryption-callbacks.spec.d.ts.map +1 -0
  473. package/dist/types/tests/utils/test-data-generator.d.ts +31 -28
  474. package/dist/types/tests/utils/test-data-generator.d.ts.map +1 -1
  475. package/dist/types/tests/validation/json-schemas/records/records-read.spec.d.ts +2 -0
  476. package/dist/types/tests/validation/json-schemas/records/records-read.spec.d.ts.map +1 -0
  477. package/package.json +26 -45
  478. package/src/core/dwn-error.ts +27 -3
  479. package/src/core/message-reply.ts +1 -1
  480. package/src/core/message.ts +5 -5
  481. package/src/core/messages-grant-authorization.ts +22 -8
  482. package/src/core/protocol-authorization.ts +345 -68
  483. package/src/core/records-grant-authorization.ts +2 -2
  484. package/src/core/resumable-task-manager.ts +4 -5
  485. package/src/dwn.ts +25 -20
  486. package/src/enums/dwn-interface-method.ts +5 -3
  487. package/src/handlers/messages-subscribe.ts +1 -1
  488. package/src/handlers/messages-sync.ts +129 -0
  489. package/src/handlers/protocols-configure.ts +195 -17
  490. package/src/handlers/protocols-query.ts +7 -5
  491. package/src/handlers/records-count.ts +184 -0
  492. package/src/handlers/records-query.ts +4 -0
  493. package/src/handlers/records-read.ts +4 -8
  494. package/src/handlers/records-write.ts +20 -21
  495. package/src/index.ts +74 -37
  496. package/src/interfaces/messages-read.ts +6 -5
  497. package/src/interfaces/messages-subscribe.ts +7 -6
  498. package/src/interfaces/messages-sync.ts +59 -0
  499. package/src/interfaces/protocols-configure.ts +211 -33
  500. package/src/interfaces/protocols-query.ts +7 -6
  501. package/src/interfaces/records-count.ts +106 -0
  502. package/src/interfaces/records-delete.ts +2 -2
  503. package/src/interfaces/records-query.ts +2 -2
  504. package/src/interfaces/records-read.ts +26 -3
  505. package/src/interfaces/records-subscribe.ts +2 -2
  506. package/src/interfaces/records-write.ts +115 -46
  507. package/src/jose/algorithms/signing/ed25519.ts +13 -12
  508. package/src/jose/algorithms/signing/signature-algorithms.ts +6 -1
  509. package/src/jose/jws/general/builder.ts +3 -3
  510. package/src/jose/jws/general/verifier.ts +3 -3
  511. package/src/protocols/permission-grant.ts +51 -0
  512. package/src/protocols/permission-request.ts +37 -0
  513. package/src/protocols/permissions.ts +5 -5
  514. package/src/schema-validator.ts +11 -3
  515. package/src/smt/smt-store-level.ts +143 -0
  516. package/src/smt/smt-store-memory.ts +53 -0
  517. package/src/smt/smt-utils.ts +149 -0
  518. package/src/smt/sparse-merkle-tree.ts +698 -0
  519. package/src/state-index/state-index-level.ts +241 -0
  520. package/src/store/data-store-level.ts +8 -7
  521. package/src/store/index-level.ts +415 -19
  522. package/src/store/level-wrapper.ts +1 -1
  523. package/src/store/message-store-level.ts +62 -0
  524. package/src/store/storage-controller.ts +21 -19
  525. package/src/types/data-store.ts +2 -4
  526. package/src/types/encryption-types.ts +52 -0
  527. package/src/types/jose-types.ts +10 -42
  528. package/src/types/message-store.ts +11 -0
  529. package/src/types/message-types.ts +21 -0
  530. package/src/types/messages-types.ts +21 -15
  531. package/src/types/method-handler.ts +1 -2
  532. package/src/types/permission-types.ts +2 -2
  533. package/src/types/protocols-types.ts +55 -6
  534. package/src/types/records-types.ts +26 -7
  535. package/src/types/signer.ts +1 -1
  536. package/src/types/smt-types.ts +95 -0
  537. package/src/types/state-index.ts +100 -0
  538. package/src/utils/cid.ts +3 -4
  539. package/src/utils/data-stream.ts +75 -38
  540. package/src/utils/encryption.ts +24 -39
  541. package/src/utils/hd-key.ts +6 -6
  542. package/src/utils/jws.ts +9 -9
  543. package/src/utils/private-key-signer.ts +9 -8
  544. package/src/utils/protocols.ts +132 -6
  545. package/src/utils/records.ts +118 -29
  546. package/src/utils/secp256k1.ts +23 -21
  547. package/src/utils/secp256r1.ts +17 -15
  548. package/src/utils/time.ts +1 -1
  549. package/src/utils/url.ts +1 -1
  550. package/dist/cjs/index.js +0 -36749
  551. package/dist/cjs/package.json +0 -1
  552. package/dist/esm/src/event-log/event-emitter-stream.js.map +0 -1
  553. package/dist/esm/src/event-log/event-log-level.js +0 -63
  554. package/dist/esm/src/event-log/event-log-level.js.map +0 -1
  555. package/dist/esm/src/handlers/messages-query.js +0 -71
  556. package/dist/esm/src/handlers/messages-query.js.map +0 -1
  557. package/dist/esm/src/interfaces/messages-query.js.map +0 -1
  558. package/dist/esm/src/types/event-log.js +0 -2
  559. package/dist/esm/src/types/event-log.js.map +0 -1
  560. package/dist/esm/tests/event-log/event-emitter-stream.spec.js.map +0 -1
  561. package/dist/esm/tests/event-log/event-log-level.spec.js +0 -44
  562. package/dist/esm/tests/event-log/event-log-level.spec.js.map +0 -1
  563. package/dist/esm/tests/event-log/event-log.spec.js +0 -236
  564. package/dist/esm/tests/event-log/event-log.spec.js.map +0 -1
  565. package/dist/esm/tests/event-log/event-stream.spec.js.map +0 -1
  566. package/dist/esm/tests/handlers/messages-query.spec.js +0 -349
  567. package/dist/esm/tests/handlers/messages-query.spec.js.map +0 -1
  568. package/dist/esm/tests/interfaces/messagess-query.spec.js +0 -127
  569. package/dist/esm/tests/interfaces/messagess-query.spec.js.map +0 -1
  570. package/dist/esm/tests/scenarios/messages-query.spec.js +0 -395
  571. package/dist/esm/tests/scenarios/messages-query.spec.js.map +0 -1
  572. package/dist/types/src/event-log/event-emitter-stream.d.ts.map +0 -1
  573. package/dist/types/src/event-log/event-log-level.d.ts +0 -35
  574. package/dist/types/src/event-log/event-log-level.d.ts.map +0 -1
  575. package/dist/types/src/handlers/messages-query.d.ts +0 -17
  576. package/dist/types/src/handlers/messages-query.d.ts.map +0 -1
  577. package/dist/types/src/interfaces/messages-query.d.ts +0 -16
  578. package/dist/types/src/interfaces/messages-query.d.ts.map +0 -1
  579. package/dist/types/src/types/event-log.d.ts +0 -52
  580. package/dist/types/src/types/event-log.d.ts.map +0 -1
  581. package/dist/types/tests/event-log/event-emitter-stream.spec.d.ts.map +0 -1
  582. package/dist/types/tests/event-log/event-log-level.spec.d.ts +0 -2
  583. package/dist/types/tests/event-log/event-log-level.spec.d.ts.map +0 -1
  584. package/dist/types/tests/event-log/event-log.spec.d.ts +0 -2
  585. package/dist/types/tests/event-log/event-log.spec.d.ts.map +0 -1
  586. package/dist/types/tests/event-log/event-stream.spec.d.ts.map +0 -1
  587. package/dist/types/tests/handlers/messages-query.spec.d.ts +0 -2
  588. package/dist/types/tests/handlers/messages-query.spec.d.ts.map +0 -1
  589. package/dist/types/tests/interfaces/messagess-query.spec.d.ts +0 -2
  590. package/dist/types/tests/interfaces/messagess-query.spec.d.ts.map +0 -1
  591. package/dist/types/tests/scenarios/messages-query.spec.d.ts +0 -2
  592. package/dist/types/tests/scenarios/messages-query.spec.d.ts.map +0 -1
  593. package/src/event-log/event-log-level.ts +0 -72
  594. package/src/handlers/messages-query.ts +0 -67
  595. package/src/interfaces/messages-query.ts +0 -60
  596. package/src/types/event-log.ts +0 -52
  597. /package/dist/esm/src/{event-log → event-stream}/event-emitter-stream.js +0 -0
  598. /package/dist/types/src/{event-log → event-stream}/event-emitter-stream.d.ts +0 -0
  599. /package/dist/types/tests/{event-log → event-stream}/event-emitter-stream.spec.d.ts +0 -0
  600. /package/dist/types/tests/{event-log → event-stream}/event-stream.spec.d.ts +0 -0
  601. /package/src/{event-log → event-stream}/event-emitter-stream.ts +0 -0
@@ -7,11 +7,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
- import chaiAsPromised from 'chai-as-promised';
11
10
  import sinon from 'sinon';
12
- import chai, { expect } from 'chai';
13
- import friendRoleProtocolDefinition from '../vectors/protocol-definitions/friend-role.json' assert { type: 'json' };
14
- import threadRoleProtocolDefinition from '../vectors/protocol-definitions/thread-role.json' assert { type: 'json' };
11
+ import { afterAll, beforeAll, beforeEach, describe, expect, it } from 'bun:test';
12
+ import friendRoleProtocolDefinition from '../vectors/protocol-definitions/friend-role.json' with { type: 'json' };
13
+ import threadRoleProtocolDefinition from '../vectors/protocol-definitions/thread-role.json' with { type: 'json' };
15
14
  import { Jws } from '../../src/utils/jws.js';
16
15
  import { Message } from '../../src/core/message.js';
17
16
  import { Poller } from '../utils/poller.js';
@@ -23,7 +22,6 @@ import { TestStores } from '../test-stores.js';
23
22
  import { TestStubGenerator } from '../utils/test-stub-generator.js';
24
23
  import { DidKey, UniversalResolver } from '@enbox/dids';
25
24
  import { Dwn, DwnErrorCode, DwnMethodName, EventEmitterStream, MessageStoreLevel, Time } from '../../src/index.js';
26
- chai.use(chaiAsPromised);
27
25
  export function testRecordsSubscribeHandler() {
28
26
  describe('RecordsSubscribeHandler.handle()', () => {
29
27
  describe('EventStream disabled', () => {
@@ -31,23 +29,23 @@ export function testRecordsSubscribeHandler() {
31
29
  let messageStore;
32
30
  let resumableTaskStore;
33
31
  let dataStore;
34
- let eventLog;
32
+ let stateIndex;
35
33
  let dwn;
36
34
  // important to follow the `before` and `after` pattern to initialize and clean the stores in tests
37
35
  // so that different test suites can reuse the same backend store for testing
38
- before(() => __awaiter(this, void 0, void 0, function* () {
36
+ beforeAll(() => __awaiter(this, void 0, void 0, function* () {
39
37
  didResolver = new UniversalResolver({ didResolvers: [DidKey] });
40
38
  const stores = TestStores.get();
41
39
  messageStore = stores.messageStore;
42
40
  dataStore = stores.dataStore;
43
41
  resumableTaskStore = stores.resumableTaskStore;
44
- eventLog = stores.eventLog;
42
+ stateIndex = stores.stateIndex;
45
43
  dwn = yield Dwn.create({
46
44
  didResolver,
47
45
  messageStore,
48
46
  dataStore,
49
47
  resumableTaskStore,
50
- eventLog,
48
+ stateIndex,
51
49
  });
52
50
  }));
53
51
  beforeEach(() => __awaiter(this, void 0, void 0, function* () {
@@ -56,22 +54,22 @@ export function testRecordsSubscribeHandler() {
56
54
  yield messageStore.clear();
57
55
  yield dataStore.clear();
58
56
  yield resumableTaskStore.clear();
59
- yield eventLog.clear();
57
+ yield stateIndex.clear();
60
58
  }));
61
- after(() => __awaiter(this, void 0, void 0, function* () {
59
+ afterAll(() => __awaiter(this, void 0, void 0, function* () {
62
60
  yield dwn.close();
63
61
  }));
64
62
  it('should respond with a 501 if subscriptions are not supported', () => __awaiter(this, void 0, void 0, function* () {
65
63
  yield dwn.close(); // close the original dwn instance
66
- dwn = yield Dwn.create({ didResolver, messageStore, dataStore, eventLog, resumableTaskStore }); // leave out eventStream
64
+ dwn = yield Dwn.create({ didResolver, messageStore, dataStore, stateIndex, resumableTaskStore }); // leave out eventStream
67
65
  const alice = yield TestDataGenerator.generateDidKeyPersona();
68
66
  // attempt to subscribe
69
67
  const { message } = yield TestDataGenerator.generateRecordsSubscribe({
70
68
  author: alice,
71
69
  });
72
70
  const subscriptionMessageReply = yield dwn.processMessage(alice.did, message, { subscriptionHandler: (_) => { } });
73
- expect(subscriptionMessageReply.status.code).to.equal(501, subscriptionMessageReply.status.detail);
74
- expect(subscriptionMessageReply.status.detail).to.include(DwnErrorCode.RecordsSubscribeEventStreamUnimplemented);
71
+ expect(subscriptionMessageReply.status.code).toBe(501, subscriptionMessageReply.status.detail);
72
+ expect(subscriptionMessageReply.status.detail).toContain(DwnErrorCode.RecordsSubscribeEventStreamUnimplemented);
75
73
  }));
76
74
  });
77
75
  describe('functional tests', () => {
@@ -79,20 +77,20 @@ export function testRecordsSubscribeHandler() {
79
77
  let messageStore;
80
78
  let dataStore;
81
79
  let resumableTaskStore;
82
- let eventLog;
80
+ let stateIndex;
83
81
  let eventStream;
84
82
  let dwn;
85
83
  // important to follow the `before` and `after` pattern to initialize and clean the stores in tests
86
84
  // so that different test suites can reuse the same backend store for testing
87
- before(() => __awaiter(this, void 0, void 0, function* () {
85
+ beforeAll(() => __awaiter(this, void 0, void 0, function* () {
88
86
  didResolver = new UniversalResolver({ didResolvers: [DidKey] });
89
87
  const stores = TestStores.get();
90
88
  messageStore = stores.messageStore;
91
89
  dataStore = stores.dataStore;
92
90
  resumableTaskStore = stores.resumableTaskStore;
93
- eventLog = stores.eventLog;
91
+ stateIndex = stores.stateIndex;
94
92
  eventStream = TestEventStream.get();
95
- dwn = yield Dwn.create({ didResolver, messageStore, dataStore, eventLog, eventStream, resumableTaskStore });
93
+ dwn = yield Dwn.create({ didResolver, messageStore, dataStore, stateIndex, eventStream, resumableTaskStore });
96
94
  }));
97
95
  beforeEach(() => __awaiter(this, void 0, void 0, function* () {
98
96
  sinon.restore(); // wipe all previous stubs/spies/mocks/fakes
@@ -100,9 +98,9 @@ export function testRecordsSubscribeHandler() {
100
98
  yield messageStore.clear();
101
99
  yield dataStore.clear();
102
100
  yield resumableTaskStore.clear();
103
- yield eventLog.clear();
101
+ yield stateIndex.clear();
104
102
  }));
105
- after(() => __awaiter(this, void 0, void 0, function* () {
103
+ afterAll(() => __awaiter(this, void 0, void 0, function* () {
106
104
  yield dwn.close();
107
105
  }));
108
106
  it('should return a subscription object', () => __awaiter(this, void 0, void 0, function* () {
@@ -113,8 +111,8 @@ export function testRecordsSubscribeHandler() {
113
111
  });
114
112
  // Send records subscribe message
115
113
  const reply = yield dwn.processMessage(alice.did, recordsSubscribe.message, { subscriptionHandler: () => { } });
116
- expect(reply.status.code).to.equal(200);
117
- expect(reply.subscription).to.exist;
114
+ expect(reply.status.code).toBe(200);
115
+ expect(reply.subscription).toBeDefined();
118
116
  }));
119
117
  it('should return 400 if protocol is not normalized', () => __awaiter(this, void 0, void 0, function* () {
120
118
  const alice = yield TestDataGenerator.generateDidKeyPersona();
@@ -132,8 +130,8 @@ export function testRecordsSubscribeHandler() {
132
130
  });
133
131
  // Send records subscribe message
134
132
  const reply = yield dwn.processMessage(alice.did, recordsSubscribe.message);
135
- expect(reply.status.code).to.equal(400);
136
- expect(reply.status.detail).to.contain(DwnErrorCode.UrlProtocolNotNormalized);
133
+ expect(reply.status.code).toBe(400);
134
+ expect(reply.status.detail).toContain(DwnErrorCode.UrlProtocolNotNormalized);
137
135
  }));
138
136
  it('should return 400 if schema is not normalized', () => __awaiter(this, void 0, void 0, function* () {
139
137
  const alice = yield TestDataGenerator.generateDidKeyPersona();
@@ -151,8 +149,8 @@ export function testRecordsSubscribeHandler() {
151
149
  });
152
150
  // Send records subscribe message
153
151
  const reply = yield dwn.processMessage(alice.did, recordsSubscribe.message);
154
- expect(reply.status.code).to.equal(400);
155
- expect(reply.status.detail).to.contain(DwnErrorCode.UrlSchemaNotNormalized);
152
+ expect(reply.status.code).toBe(400);
153
+ expect(reply.status.detail).toContain(DwnErrorCode.UrlSchemaNotNormalized);
156
154
  }));
157
155
  it('should return 400 if published is set to false and a datePublished range is provided', () => __awaiter(this, void 0, void 0, function* () {
158
156
  const fromDatePublished = Time.getCurrentTimestamp();
@@ -165,26 +163,26 @@ export function testRecordsSubscribeHandler() {
165
163
  // set to false
166
164
  recordSubscribe.message.descriptor.filter.published = false;
167
165
  const subscribeResponse = yield dwn.processMessage(alice.did, recordSubscribe.message);
168
- expect(subscribeResponse.status.code).to.equal(400);
169
- expect(subscribeResponse.status.detail).to.contain('descriptor/filter/published: must be equal to one of the allowed values');
166
+ expect(subscribeResponse.status.code).toBe(400);
167
+ expect(subscribeResponse.status.detail).toContain('descriptor/filter/published: must be equal to one of the allowed values');
170
168
  }));
171
169
  it('should return 401 for anonymous subscriptions that filter explicitly for unpublished records', () => __awaiter(this, void 0, void 0, function* () {
172
170
  const alice = yield TestDataGenerator.generateDidKeyPersona();
173
171
  // create an unpublished record
174
172
  const draftWrite = yield TestDataGenerator.generateRecordsWrite({ author: alice, schema: 'post' });
175
173
  const draftWriteReply = yield dwn.processMessage(alice.did, draftWrite.message, { dataStream: draftWrite.dataStream });
176
- expect(draftWriteReply.status.code).to.equal(202);
174
+ expect(draftWriteReply.status.code).toBe(202);
177
175
  // validate that alice can subscribe
178
176
  const unpublishedPostSubscribe = yield TestDataGenerator.generateRecordsSubscribe({ author: alice, filter: { schema: 'post', published: false } });
179
177
  const unpublishedPostReply = yield dwn.processMessage(alice.did, unpublishedPostSubscribe.message, { subscriptionHandler: () => { } });
180
- expect(unpublishedPostReply.status.code).to.equal(200);
181
- expect(unpublishedPostReply.subscription).to.exist;
178
+ expect(unpublishedPostReply.status.code).toBe(200);
179
+ expect(unpublishedPostReply.subscription).toBeDefined();
182
180
  // anonymous subscribe for unpublished records
183
181
  const unpublishedAnonymous = yield RecordsSubscribe.create({ filter: { schema: 'post', published: false } });
184
182
  const anonymousPostReply = yield dwn.processMessage(alice.did, unpublishedAnonymous.message);
185
- expect(anonymousPostReply.status.code).to.equal(401);
186
- expect(anonymousPostReply.status.detail).contains('Missing JWS');
187
- expect(anonymousPostReply.subscription).to.not.exist;
183
+ expect(anonymousPostReply.status.code).toBe(401);
184
+ expect(anonymousPostReply.status.detail).toContain('Missing JWS');
185
+ expect(anonymousPostReply.subscription).toBeUndefined();
188
186
  }));
189
187
  it('should return 401 if signature check fails', () => __awaiter(this, void 0, void 0, function* () {
190
188
  const { author, message } = yield TestDataGenerator.generateRecordsSubscribe();
@@ -197,7 +195,7 @@ export function testRecordsSubscribeHandler() {
197
195
  const eventStreamStub = sinon.createStubInstance(EventEmitterStream);
198
196
  const recordsSubscribeHandler = new RecordsSubscribeHandler(didResolver, messageStoreStub, eventStreamStub);
199
197
  const reply = yield recordsSubscribeHandler.handle({ tenant, message, subscriptionHandler: () => { } });
200
- expect(reply.status.code).to.equal(401);
198
+ expect(reply.status.code).toBe(401);
201
199
  }));
202
200
  it('should return 400 if fail parsing the message', () => __awaiter(this, void 0, void 0, function* () {
203
201
  const { author, message } = yield TestDataGenerator.generateRecordsSubscribe();
@@ -210,7 +208,7 @@ export function testRecordsSubscribeHandler() {
210
208
  // stub the `parse()` function to throw an error
211
209
  sinon.stub(RecordsSubscribe, 'parse').throws('anyError');
212
210
  const reply = yield recordsSubscribeHandler.handle({ tenant, message, subscriptionHandler: () => { } });
213
- expect(reply.status.code).to.equal(400);
211
+ expect(reply.status.code).toBe(400);
214
212
  }));
215
213
  describe('protocol based subscriptions', () => {
216
214
  it('does not try protocol authorization if protocolRole is not invoked', () => __awaiter(this, void 0, void 0, function* () {
@@ -228,7 +226,7 @@ export function testRecordsSubscribeHandler() {
228
226
  protocolDefinition
229
227
  });
230
228
  const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
231
- expect(protocolsConfigureReply.status.code).to.equal(202);
229
+ expect(protocolsConfigureReply.status.code).toBe(202);
232
230
  const bobMessages = [];
233
231
  const handleForBob = (event) => __awaiter(this, void 0, void 0, function* () {
234
232
  const { message } = event;
@@ -243,8 +241,8 @@ export function testRecordsSubscribeHandler() {
243
241
  }
244
242
  });
245
243
  const subscriptionReply = yield dwn.processMessage(alice.did, bobSubscription.message, { subscriptionHandler: handleForBob });
246
- expect(subscriptionReply.status.code).to.equal(200);
247
- expect(subscriptionReply.subscription).to.exist;
244
+ expect(subscriptionReply.status.code).toBe(200);
245
+ expect(subscriptionReply.subscription).toBeDefined();
248
246
  const carolMessages = [];
249
247
  const handleForCarol = (event) => __awaiter(this, void 0, void 0, function* () {
250
248
  const { message } = event;
@@ -259,8 +257,8 @@ export function testRecordsSubscribeHandler() {
259
257
  }
260
258
  });
261
259
  const carolSubscriptionReply = yield dwn.processMessage(alice.did, carolSubscription.message, { subscriptionHandler: handleForCarol });
262
- expect(carolSubscriptionReply.status.code).to.equal(200);
263
- expect(carolSubscriptionReply.subscription).to.exist;
260
+ expect(carolSubscriptionReply.status.code).toBe(200);
261
+ expect(carolSubscriptionReply.subscription).toBeDefined();
264
262
  // Alice writes a 'thread' record
265
263
  const threadRecord = yield TestDataGenerator.generateRecordsWrite({
266
264
  author: alice,
@@ -268,7 +266,7 @@ export function testRecordsSubscribeHandler() {
268
266
  protocolPath: 'thread',
269
267
  });
270
268
  const threadRoleReply = yield dwn.processMessage(alice.did, threadRecord.message, { dataStream: threadRecord.dataStream });
271
- expect(threadRoleReply.status.code).to.equal(202);
269
+ expect(threadRoleReply.status.code).toBe(202);
272
270
  // Alice writes one 'chat' record addressed to Bob
273
271
  const chatRecordForBob = yield TestDataGenerator.generateRecordsWrite({
274
272
  author: alice,
@@ -280,7 +278,7 @@ export function testRecordsSubscribeHandler() {
280
278
  data: new TextEncoder().encode('Bob can read this cuz he is my friend'),
281
279
  });
282
280
  const chatRecordForBobReply = yield dwn.processMessage(alice.did, chatRecordForBob.message, { dataStream: chatRecordForBob.dataStream });
283
- expect(chatRecordForBobReply.status.code).to.equal(202);
281
+ expect(chatRecordForBobReply.status.code).toBe(202);
284
282
  const chatRecordForBobCid = yield Message.getCid(chatRecordForBob.message);
285
283
  // Alice writes two 'chat' records addressed to Carol
286
284
  const chatRecordForCarol1 = yield TestDataGenerator.generateRecordsWrite({
@@ -293,7 +291,7 @@ export function testRecordsSubscribeHandler() {
293
291
  data: new TextEncoder().encode('Bob cannot read this'),
294
292
  });
295
293
  const chatRecordForCarol1Reply = yield dwn.processMessage(alice.did, chatRecordForCarol1.message, { dataStream: chatRecordForCarol1.dataStream });
296
- expect(chatRecordForCarol1Reply.status.code).to.equal(202);
294
+ expect(chatRecordForCarol1Reply.status.code).toBe(202);
297
295
  const chatRecordForCarol1Cid = yield Message.getCid(chatRecordForCarol1.message);
298
296
  const chatRecordForCarol2 = yield TestDataGenerator.generateRecordsWrite({
299
297
  author: alice,
@@ -305,15 +303,15 @@ export function testRecordsSubscribeHandler() {
305
303
  data: new TextEncoder().encode('Bob cannot read this either'),
306
304
  });
307
305
  const chatRecordForCarol2Reply = yield dwn.processMessage(alice.did, chatRecordForCarol2.message, { dataStream: chatRecordForCarol2.dataStream });
308
- expect(chatRecordForCarol2Reply.status.code).to.equal(202);
306
+ expect(chatRecordForCarol2Reply.status.code).toBe(202);
309
307
  const chatRecordForCarol2Cid = yield Message.getCid(chatRecordForCarol2.message);
310
308
  yield Poller.pollUntilSuccessOrTimeout(() => __awaiter(this, void 0, void 0, function* () {
311
- expect(bobMessages.length).to.equal(1);
312
- expect(bobMessages).to.have.members([chatRecordForBobCid]);
309
+ expect(bobMessages.length).toBe(1);
310
+ expect(bobMessages).toEqual(expect.arrayContaining([chatRecordForBobCid]));
313
311
  }));
314
312
  yield Poller.pollUntilSuccessOrTimeout(() => __awaiter(this, void 0, void 0, function* () {
315
- expect(carolMessages.length).to.equal(2);
316
- expect(carolMessages).to.have.members([chatRecordForCarol1Cid, chatRecordForCarol2Cid]);
313
+ expect(carolMessages.length).toBe(2);
314
+ expect(carolMessages).toEqual(expect.arrayContaining([chatRecordForCarol1Cid, chatRecordForCarol2Cid]));
317
315
  }));
318
316
  }));
319
317
  it('allows root-level role authorized subscriptions', () => __awaiter(this, void 0, void 0, function* () {
@@ -328,7 +326,7 @@ export function testRecordsSubscribeHandler() {
328
326
  protocolDefinition
329
327
  });
330
328
  const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
331
- expect(protocolsConfigureReply.status.code).to.equal(202);
329
+ expect(protocolsConfigureReply.status.code).toBe(202);
332
330
  const filter = {
333
331
  protocol: protocolDefinition.protocol,
334
332
  protocolPath: 'chat'
@@ -350,8 +348,8 @@ export function testRecordsSubscribeHandler() {
350
348
  filter
351
349
  });
352
350
  const subscriptionReply = yield dwn.processMessage(alice.did, noRoleSubscription.message, { subscriptionHandler: addNoRole });
353
- expect(subscriptionReply.status.code).to.equal(200);
354
- expect(subscriptionReply.subscription).to.exist;
351
+ expect(subscriptionReply.status.code).toBe(200);
352
+ expect(subscriptionReply.subscription).toBeDefined();
355
353
  // Alice writes a 'friend' root-level role record with Bob as recipient
356
354
  const friendRoleRecord = yield TestDataGenerator.generateRecordsWrite({
357
355
  author: alice,
@@ -361,7 +359,7 @@ export function testRecordsSubscribeHandler() {
361
359
  data: new TextEncoder().encode('Bob is my friend'),
362
360
  });
363
361
  const friendRoleReply = yield dwn.processMessage(alice.did, friendRoleRecord.message, { dataStream: friendRoleRecord.dataStream });
364
- expect(friendRoleReply.status.code).to.equal(202);
362
+ expect(friendRoleReply.status.code).toBe(202);
365
363
  const recordIds = new Set();
366
364
  const addRecord = (event) => __awaiter(this, void 0, void 0, function* () {
367
365
  const { message } = event;
@@ -380,8 +378,8 @@ export function testRecordsSubscribeHandler() {
380
378
  protocolRole: 'friend',
381
379
  });
382
380
  const subscriptionWithRoleReply = yield dwn.processMessage(alice.did, bobSubscriptionWithRole.message, { subscriptionHandler: addRecord });
383
- expect(subscriptionWithRoleReply.status.code).to.equal(200);
384
- expect(subscriptionWithRoleReply.subscription).to.exist;
381
+ expect(subscriptionWithRoleReply.status.code).toBe(200);
382
+ expect(subscriptionWithRoleReply.subscription).toBeDefined();
385
383
  // Create one chat message for Bob as a control to show up in the `noRoleRecords` array
386
384
  const chatRecordForBob = yield TestDataGenerator.generateRecordsWrite({
387
385
  author: alice,
@@ -392,7 +390,7 @@ export function testRecordsSubscribeHandler() {
392
390
  data: new TextEncoder().encode('Bob can read this cuz he is my friend'),
393
391
  });
394
392
  const chatRecordForBobReply = yield dwn.processMessage(alice.did, chatRecordForBob.message, { dataStream: chatRecordForBob.dataStream });
395
- expect(chatRecordForBobReply.status.code).to.equal(202);
393
+ expect(chatRecordForBobReply.status.code).toBe(202);
396
394
  // Alice writes three more 'chat' records for carol, Bob's friend role should allow him to see these messages.
397
395
  const chatRecordIds = [];
398
396
  for (let i = 0; i < 3; i++) {
@@ -405,20 +403,20 @@ export function testRecordsSubscribeHandler() {
405
403
  data: new TextEncoder().encode('Bob can read this cuz he is my friend'),
406
404
  });
407
405
  const chatReply = yield dwn.processMessage(alice.did, chatRecord.message, { dataStream: chatRecord.dataStream });
408
- expect(chatReply.status.code).to.equal(202);
406
+ expect(chatReply.status.code).toBe(202);
409
407
  chatRecordIds.push(chatRecord.message.recordId);
410
408
  }
411
409
  // there should only be the control message for bob in the subscription without a friend role.
412
410
  yield Poller.pollUntilSuccessOrTimeout(() => __awaiter(this, void 0, void 0, function* () {
413
- expect(noRoleRecords.size).to.equal(1);
414
- expect([...noRoleRecords]).to.have.members([chatRecordForBob.message.recordId]);
411
+ expect(noRoleRecords.size).toBe(1);
412
+ expect([...noRoleRecords]).toEqual(expect.arrayContaining([chatRecordForBob.message.recordId]));
415
413
  }));
416
414
  // All chats should be in the subscription with the friend role.
417
415
  yield Poller.pollUntilSuccessOrTimeout(() => __awaiter(this, void 0, void 0, function* () {
418
- expect(recordIds.size).to.equal(4);
419
- expect([...recordIds]).to.have.members([chatRecordForBob.message.recordId, ...chatRecordIds]);
416
+ expect(recordIds.size).toBe(4);
417
+ expect([...recordIds]).toEqual(expect.arrayContaining([chatRecordForBob.message.recordId, ...chatRecordIds]));
420
418
  }));
421
- // TODO: https://github.com/TBD54566975/dwn-sdk-js/issues/759
419
+ // TODO: https://github.com/enboxorg/enbox/issues/759
422
420
  // When `RecordsSubscribeHandler` builds up the matchFilters there are no matching filters for a delete within a context
423
421
  // so the delete event is not being captured by the subscription handler. This is likely due to some of the filters including
424
422
  // `published: false` which is a mutable property and not included with the delete event
@@ -430,18 +428,18 @@ export function testRecordsSubscribeHandler() {
430
428
  // recordId : chatRecordForBob.message.recordId,
431
429
  // });
432
430
  // const chatForBobDeleteReply = await dwn.processMessage(alice.did, chatForBobDelete.message);
433
- // expect(chatForBobDeleteReply.status.code).to.equal(202);
431
+ // expect(chatForBobDeleteReply.status.code).toBe(202);
434
432
  // // Delete one of the other chat messages
435
433
  // const chatForCarolDelete = await TestDataGenerator.generateRecordsDelete({
436
434
  // author : alice,
437
435
  // recordId : chatRecordIds[0],
438
436
  // });
439
437
  // const chatForCarolDeleteReply = await dwn.processMessage(alice.did, chatForCarolDelete.message);
440
- // expect(chatForCarolDeleteReply.status.code).to.equal(202);
438
+ // expect(chatForCarolDeleteReply.status.code).toBe(202);
441
439
  // await Poller.pollUntilSuccessOrTimeout(async () => {
442
- // expect(noRoleRecords.size).to.equal(0); // chat record was removed from the set
443
- // expect(recordIds.size).to.equal(2); // both chat records were removed from the set
444
- // expect([ ...recordIds ]).to.have.members([ ...chatRecordIds.slice(1) ]); // only the last two chat records remain
440
+ // expect(noRoleRecords.size).toBe(0); // chat record was removed from the set
441
+ // expect(recordIds.size).toBe(2); // both chat records were removed from the set
442
+ // expect([ ...recordIds ]).toEqual(expect.arrayContaining([ ...chatRecordIds.slice(1) ])); // only the last two chat records remain
445
443
  // });
446
444
  }));
447
445
  it('can authorize subscriptions using a context role', () => __awaiter(this, void 0, void 0, function* () {
@@ -455,7 +453,7 @@ export function testRecordsSubscribeHandler() {
455
453
  protocolDefinition
456
454
  });
457
455
  const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
458
- expect(protocolsConfigureReply.status.code).to.equal(202);
456
+ expect(protocolsConfigureReply.status.code).toBe(202);
459
457
  // Alice writes a 'thread' record
460
458
  const threadRecord = yield TestDataGenerator.generateRecordsWrite({
461
459
  author: alice,
@@ -463,7 +461,7 @@ export function testRecordsSubscribeHandler() {
463
461
  protocolPath: 'thread',
464
462
  });
465
463
  const threadRoleReply = yield dwn.processMessage(alice.did, threadRecord.message, { dataStream: threadRecord.dataStream });
466
- expect(threadRoleReply.status.code).to.equal(202);
464
+ expect(threadRoleReply.status.code).toBe(202);
467
465
  const filter = {
468
466
  protocol: protocolDefinition.protocol,
469
467
  protocolPath: 'thread/chat',
@@ -483,8 +481,8 @@ export function testRecordsSubscribeHandler() {
483
481
  filter
484
482
  });
485
483
  const subscriptionReply = yield dwn.processMessage(alice.did, noRoleSubscription.message, { subscriptionHandler: addNoRole });
486
- expect(subscriptionReply.status.code).to.equal(200);
487
- expect(subscriptionReply.subscription).to.exist;
484
+ expect(subscriptionReply.status.code).toBe(200);
485
+ expect(subscriptionReply.subscription).toBeDefined();
488
486
  // Alice writes a 'participant' role record with Bob as recipient
489
487
  const participantRoleRecord = yield TestDataGenerator.generateRecordsWrite({
490
488
  author: alice,
@@ -495,7 +493,7 @@ export function testRecordsSubscribeHandler() {
495
493
  data: new TextEncoder().encode('Bob is my friend'),
496
494
  });
497
495
  const participantRoleReply = yield dwn.processMessage(alice.did, participantRoleRecord.message, { dataStream: participantRoleRecord.dataStream });
498
- expect(participantRoleReply.status.code).to.equal(202);
496
+ expect(participantRoleReply.status.code).toBe(202);
499
497
  const recordIds = [];
500
498
  const addRecord = (event) => __awaiter(this, void 0, void 0, function* () {
501
499
  const { message } = event;
@@ -511,8 +509,8 @@ export function testRecordsSubscribeHandler() {
511
509
  protocolRole: 'thread/participant',
512
510
  });
513
511
  const subscriptionWithRoleReply = yield dwn.processMessage(alice.did, bobSubscriptionWithRole.message, { subscriptionHandler: addRecord });
514
- expect(subscriptionWithRoleReply.status.code).to.equal(200);
515
- expect(subscriptionWithRoleReply.subscription).to.exist;
512
+ expect(subscriptionWithRoleReply.status.code).toBe(200);
513
+ expect(subscriptionWithRoleReply.subscription).toBeDefined();
516
514
  // Alice writes three 'chat' records
517
515
  const chatRecordIds = [];
518
516
  for (let i = 0; i < 3; i++) {
@@ -526,14 +524,14 @@ export function testRecordsSubscribeHandler() {
526
524
  data: new TextEncoder().encode('Bob can read this cuz he is my friend'),
527
525
  });
528
526
  const chatReply = yield dwn.processMessage(alice.did, chatRecord.message, { dataStream: chatRecord.dataStream });
529
- expect(chatReply.status.code).to.equal(202);
527
+ expect(chatReply.status.code).toBe(202);
530
528
  chatRecordIds.push(chatRecord.message.recordId);
531
529
  }
532
530
  yield Poller.pollUntilSuccessOrTimeout(() => __awaiter(this, void 0, void 0, function* () {
533
531
  // should have all chat messages.
534
- expect(recordIds).to.have.members(chatRecordIds);
532
+ expect(recordIds).toEqual(expect.arrayContaining(chatRecordIds));
535
533
  // there should not be any messages in the subscription without a participant role.
536
- expect(noRoleRecords.length).to.equal(0);
534
+ expect(noRoleRecords.length).toBe(0);
537
535
  }));
538
536
  }));
539
537
  it('does not execute protocol subscriptions where protocolPath is missing from the filter', () => __awaiter(this, void 0, void 0, function* () {
@@ -547,7 +545,7 @@ export function testRecordsSubscribeHandler() {
547
545
  protocolDefinition
548
546
  });
549
547
  const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
550
- expect(protocolsConfigureReply.status.code).to.equal(202);
548
+ expect(protocolsConfigureReply.status.code).toBe(202);
551
549
  // Alice writes a 'friend' root-level role record with Bob as recipient
552
550
  const friendRoleRecord = yield TestDataGenerator.generateRecordsWrite({
553
551
  author: alice,
@@ -557,7 +555,7 @@ export function testRecordsSubscribeHandler() {
557
555
  data: new TextEncoder().encode('Bob is my friend'),
558
556
  });
559
557
  const friendRoleReply = yield dwn.processMessage(alice.did, friendRoleRecord.message, { dataStream: friendRoleRecord.dataStream });
560
- expect(friendRoleReply.status.code).to.equal(202);
558
+ expect(friendRoleReply.status.code).toBe(202);
561
559
  // Bob invokes his friendRole to subscribe but does not have `protocolPath` in the filter
562
560
  const chatSubscribe = yield TestDataGenerator.generateRecordsSubscribe({
563
561
  author: bob,
@@ -568,9 +566,9 @@ export function testRecordsSubscribeHandler() {
568
566
  protocolRole: 'friend',
569
567
  });
570
568
  const chatSubscribeReply = yield dwn.processMessage(alice.did, chatSubscribe.message);
571
- expect(chatSubscribeReply.status.code).to.equal(400);
572
- expect(chatSubscribeReply.status.detail).to.contain(DwnErrorCode.RecordsSubscribeFilterMissingRequiredProperties);
573
- expect(chatSubscribeReply.subscription).to.not.exist;
569
+ expect(chatSubscribeReply.status.code).toBe(400);
570
+ expect(chatSubscribeReply.status.detail).toContain(DwnErrorCode.RecordsSubscribeFilterMissingRequiredProperties);
571
+ expect(chatSubscribeReply.subscription).toBeUndefined();
574
572
  }));
575
573
  it('does not execute context role authorized subscriptions where contextId is missing from the filter', () => __awaiter(this, void 0, void 0, function* () {
576
574
  // scenario: Alice gives Bob a role allowing him to access a particular chat thread.
@@ -583,7 +581,7 @@ export function testRecordsSubscribeHandler() {
583
581
  protocolDefinition
584
582
  });
585
583
  const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
586
- expect(protocolsConfigureReply.status.code).to.equal(202);
584
+ expect(protocolsConfigureReply.status.code).toBe(202);
587
585
  // Alice writes a 'thread' record
588
586
  const threadRecord = yield TestDataGenerator.generateRecordsWrite({
589
587
  author: alice,
@@ -591,7 +589,7 @@ export function testRecordsSubscribeHandler() {
591
589
  protocolPath: 'thread',
592
590
  });
593
591
  const threadRoleReply = yield dwn.processMessage(alice.did, threadRecord.message, { dataStream: threadRecord.dataStream });
594
- expect(threadRoleReply.status.code).to.equal(202);
592
+ expect(threadRoleReply.status.code).toBe(202);
595
593
  // Alice writes a 'friend' root-level role record with Bob as recipient
596
594
  const participantRoleRecord = yield TestDataGenerator.generateRecordsWrite({
597
595
  author: alice,
@@ -602,7 +600,7 @@ export function testRecordsSubscribeHandler() {
602
600
  data: new TextEncoder().encode('Bob is my friend'),
603
601
  });
604
602
  const participantRoleReply = yield dwn.processMessage(alice.did, participantRoleRecord.message, { dataStream: participantRoleRecord.dataStream });
605
- expect(participantRoleReply.status.code).to.equal(202);
603
+ expect(participantRoleReply.status.code).toBe(202);
606
604
  // Bob invokes his thread participant role to subscribe but omits the contextId
607
605
  const chatSubscribe = yield TestDataGenerator.generateRecordsSubscribe({
608
606
  author: bob,
@@ -614,9 +612,9 @@ export function testRecordsSubscribeHandler() {
614
612
  protocolRole: 'thread/participant',
615
613
  });
616
614
  const chatSubscribeReply = yield dwn.processMessage(alice.did, chatSubscribe.message);
617
- expect(chatSubscribeReply.status.code).to.eq(401);
618
- expect(chatSubscribeReply.status.detail).to.contain(DwnErrorCode.ProtocolAuthorizationMissingContextId);
619
- expect(chatSubscribeReply.subscription).to.not.exist;
615
+ expect(chatSubscribeReply.status.code).toBe(401);
616
+ expect(chatSubscribeReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationMissingContextId);
617
+ expect(chatSubscribeReply.subscription).toBeUndefined();
620
618
  }));
621
619
  it('rejects role authorized subscriptions if the request author does not have a matching root-level role', () => __awaiter(this, void 0, void 0, function* () {
622
620
  // scenario: Alice installs a chat protocol.
@@ -629,7 +627,7 @@ export function testRecordsSubscribeHandler() {
629
627
  protocolDefinition
630
628
  });
631
629
  const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
632
- expect(protocolsConfigureReply.status.code).to.equal(202);
630
+ expect(protocolsConfigureReply.status.code).toBe(202);
633
631
  // Bob invokes a friendRole he does not have to subscribe to the records
634
632
  const chatSubscribe = yield TestDataGenerator.generateRecordsSubscribe({
635
633
  author: bob,
@@ -640,9 +638,9 @@ export function testRecordsSubscribeHandler() {
640
638
  protocolRole: 'friend',
641
639
  });
642
640
  const chatSubscribeReply = yield dwn.processMessage(alice.did, chatSubscribe.message);
643
- expect(chatSubscribeReply.status.code).to.eq(401);
644
- expect(chatSubscribeReply.status.detail).to.contain(DwnErrorCode.ProtocolAuthorizationMatchingRoleRecordNotFound);
645
- expect(chatSubscribeReply.subscription).to.not.exist;
641
+ expect(chatSubscribeReply.status.code).toBe(401);
642
+ expect(chatSubscribeReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationMatchingRoleRecordNotFound);
643
+ expect(chatSubscribeReply.subscription).toBeUndefined();
646
644
  }));
647
645
  it('rejects role authorized subscriptions where the subscription author does not have a matching context role', () => __awaiter(this, void 0, void 0, function* () {
648
646
  const alice = yield TestDataGenerator.generateDidKeyPersona();
@@ -653,7 +651,7 @@ export function testRecordsSubscribeHandler() {
653
651
  protocolDefinition
654
652
  });
655
653
  const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
656
- expect(protocolsConfigureReply.status.code).to.equal(202);
654
+ expect(protocolsConfigureReply.status.code).toBe(202);
657
655
  // Alice writes a 'thread' record
658
656
  const threadRecord = yield TestDataGenerator.generateRecordsWrite({
659
657
  author: alice,
@@ -661,7 +659,7 @@ export function testRecordsSubscribeHandler() {
661
659
  protocolPath: 'thread',
662
660
  });
663
661
  const threadRoleReply = yield dwn.processMessage(alice.did, threadRecord.message, { dataStream: threadRecord.dataStream });
664
- expect(threadRoleReply.status.code).to.equal(202);
662
+ expect(threadRoleReply.status.code).toBe(202);
665
663
  // Bob invokes his a `thread/participant` role which he does not have to subscribe to the records
666
664
  const chatSubscribe = yield TestDataGenerator.generateRecordsSubscribe({
667
665
  author: bob,
@@ -673,10 +671,207 @@ export function testRecordsSubscribeHandler() {
673
671
  protocolRole: 'thread/participant',
674
672
  });
675
673
  const chatSubscribeReply = yield dwn.processMessage(alice.did, chatSubscribe.message);
676
- expect(chatSubscribeReply.status.code).to.eq(401);
677
- expect(chatSubscribeReply.status.detail).to.contain(DwnErrorCode.ProtocolAuthorizationMatchingRoleRecordNotFound);
678
- expect(chatSubscribeReply.subscription).to.not.exist;
674
+ expect(chatSubscribeReply.status.code).toBe(401);
675
+ expect(chatSubscribeReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationMatchingRoleRecordNotFound);
676
+ expect(chatSubscribeReply.subscription).toBeUndefined();
679
677
  }));
678
+ describe('who-based query/subscribe action rules', () => {
679
+ const whoSubscribeProtocol = {
680
+ published: true,
681
+ protocol: 'http://who-subscribe-test.xyz',
682
+ types: {
683
+ message: {
684
+ dataFormats: ['text/plain'],
685
+ },
686
+ },
687
+ structure: {
688
+ message: {
689
+ $actions: [
690
+ { who: 'anyone', can: ['create'] },
691
+ { who: 'author', of: 'message', can: ['read'] },
692
+ { who: 'recipient', of: 'message', can: ['read'] },
693
+ ],
694
+ },
695
+ },
696
+ };
697
+ it('recipient receives only events for records addressed to them', () => __awaiter(this, void 0, void 0, function* () {
698
+ // scenario: Bob and Carol each subscribe to Alice's DWN. Alice writes messages
699
+ // to Bob and Carol. Each subscriber only receives their own messages.
700
+ // Dave subscribes and receives nothing.
701
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
702
+ const bob = yield TestDataGenerator.generateDidKeyPersona();
703
+ const carol = yield TestDataGenerator.generateDidKeyPersona();
704
+ const dave = yield TestDataGenerator.generateDidKeyPersona();
705
+ const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
706
+ author: alice,
707
+ protocolDefinition: whoSubscribeProtocol,
708
+ });
709
+ const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
710
+ expect(protocolsConfigureReply.status.code).toBe(202);
711
+ // Bob subscribes — no role
712
+ const bobRecordIds = new Set();
713
+ const bobHandler = (event) => __awaiter(this, void 0, void 0, function* () {
714
+ const { message } = event;
715
+ if (message.descriptor.method === DwnMethodName.Write) {
716
+ bobRecordIds.add(message.recordId);
717
+ }
718
+ });
719
+ const bobSub = yield TestDataGenerator.generateRecordsSubscribe({
720
+ author: bob,
721
+ filter: {
722
+ published: false,
723
+ protocol: whoSubscribeProtocol.protocol,
724
+ },
725
+ });
726
+ const bobSubReply = yield dwn.processMessage(alice.did, bobSub.message, { subscriptionHandler: bobHandler });
727
+ expect(bobSubReply.status.code).toBe(200);
728
+ // Carol subscribes — no role
729
+ const carolRecordIds = new Set();
730
+ const carolHandler = (event) => __awaiter(this, void 0, void 0, function* () {
731
+ const { message } = event;
732
+ if (message.descriptor.method === DwnMethodName.Write) {
733
+ carolRecordIds.add(message.recordId);
734
+ }
735
+ });
736
+ const carolSub = yield TestDataGenerator.generateRecordsSubscribe({
737
+ author: carol,
738
+ filter: {
739
+ published: false,
740
+ protocol: whoSubscribeProtocol.protocol,
741
+ },
742
+ });
743
+ const carolSubReply = yield dwn.processMessage(alice.did, carolSub.message, { subscriptionHandler: carolHandler });
744
+ expect(carolSubReply.status.code).toBe(200);
745
+ // Dave subscribes — no role, not a participant at all
746
+ const daveRecordIds = new Set();
747
+ const daveHandler = (event) => __awaiter(this, void 0, void 0, function* () {
748
+ const { message } = event;
749
+ if (message.descriptor.method === DwnMethodName.Write) {
750
+ daveRecordIds.add(message.recordId);
751
+ }
752
+ });
753
+ const daveSub = yield TestDataGenerator.generateRecordsSubscribe({
754
+ author: dave,
755
+ filter: {
756
+ published: false,
757
+ protocol: whoSubscribeProtocol.protocol,
758
+ },
759
+ });
760
+ const daveSubReply = yield dwn.processMessage(alice.did, daveSub.message, { subscriptionHandler: daveHandler });
761
+ expect(daveSubReply.status.code).toBe(200);
762
+ // Alice writes 2 messages for Bob
763
+ const expectedBobIds = [];
764
+ for (let i = 0; i < 2; i++) {
765
+ const msg = yield TestDataGenerator.generateRecordsWrite({
766
+ author: alice,
767
+ recipient: bob.did,
768
+ protocol: whoSubscribeProtocol.protocol,
769
+ protocolPath: 'message',
770
+ published: false,
771
+ dataFormat: 'text/plain',
772
+ data: new TextEncoder().encode(`for bob ${i}`),
773
+ });
774
+ const reply = yield dwn.processMessage(alice.did, msg.message, { dataStream: msg.dataStream });
775
+ expect(reply.status.code).toBe(202);
776
+ expectedBobIds.push(msg.message.recordId);
777
+ }
778
+ // Alice writes 1 message for Carol
779
+ const carolMsg = yield TestDataGenerator.generateRecordsWrite({
780
+ author: alice,
781
+ recipient: carol.did,
782
+ protocol: whoSubscribeProtocol.protocol,
783
+ protocolPath: 'message',
784
+ published: false,
785
+ dataFormat: 'text/plain',
786
+ data: new TextEncoder().encode('for carol'),
787
+ });
788
+ const carolWriteReply = yield dwn.processMessage(alice.did, carolMsg.message, { dataStream: carolMsg.dataStream });
789
+ expect(carolWriteReply.status.code).toBe(202);
790
+ // Alice writes 1 message addressed to herself (nobody else should see it)
791
+ const aliceMsg = yield TestDataGenerator.generateRecordsWrite({
792
+ author: alice,
793
+ recipient: alice.did,
794
+ protocol: whoSubscribeProtocol.protocol,
795
+ protocolPath: 'message',
796
+ published: false,
797
+ dataFormat: 'text/plain',
798
+ data: new TextEncoder().encode('private'),
799
+ });
800
+ const aliceWriteReply = yield dwn.processMessage(alice.did, aliceMsg.message, { dataStream: aliceMsg.dataStream });
801
+ expect(aliceWriteReply.status.code).toBe(202);
802
+ // Bob should receive exactly 2 events
803
+ yield Poller.pollUntilSuccessOrTimeout(() => __awaiter(this, void 0, void 0, function* () {
804
+ expect(bobRecordIds.size).toBe(2);
805
+ expect([...bobRecordIds]).toEqual(expect.arrayContaining(expectedBobIds));
806
+ }));
807
+ // Carol should receive exactly 1 event
808
+ yield Poller.pollUntilSuccessOrTimeout(() => __awaiter(this, void 0, void 0, function* () {
809
+ expect(carolRecordIds.size).toBe(1);
810
+ expect([...carolRecordIds]).toEqual(expect.arrayContaining([carolMsg.message.recordId]));
811
+ }));
812
+ // Dave should receive zero events
813
+ // Give a small window for any stray events to arrive, then assert empty
814
+ yield Time.sleep(200);
815
+ expect(daveRecordIds.size).toBe(0);
816
+ }));
817
+ it('who-based subscribe rules do not grant role-like broad access', () => __awaiter(this, void 0, void 0, function* () {
818
+ // scenario: Dave tries to invoke a protocolRole on a protocol with who-based
819
+ // subscribe rules. Should be rejected because he has no role record.
820
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
821
+ const dave = yield TestDataGenerator.generateDidKeyPersona();
822
+ const mixedProtocol = {
823
+ published: true,
824
+ protocol: 'http://mixed-sub-test.xyz',
825
+ types: {
826
+ thread: {},
827
+ participant: {},
828
+ chat: { dataFormats: ['text/plain'] },
829
+ },
830
+ structure: {
831
+ thread: {
832
+ participant: {
833
+ $role: true,
834
+ },
835
+ chat: {
836
+ $actions: [
837
+ { who: 'anyone', can: ['create'] },
838
+ { who: 'recipient', of: 'thread/chat', can: ['read'] },
839
+ { role: 'thread/participant', can: ['read'] },
840
+ ],
841
+ },
842
+ },
843
+ },
844
+ };
845
+ const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
846
+ author: alice,
847
+ protocolDefinition: mixedProtocol,
848
+ });
849
+ const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
850
+ expect(protocolsConfigureReply.status.code).toBe(202);
851
+ // Alice creates a thread
852
+ const threadRecord = yield TestDataGenerator.generateRecordsWrite({
853
+ author: alice,
854
+ protocol: mixedProtocol.protocol,
855
+ protocolPath: 'thread',
856
+ });
857
+ const threadReply = yield dwn.processMessage(alice.did, threadRecord.message, { dataStream: threadRecord.dataStream });
858
+ expect(threadReply.status.code).toBe(202);
859
+ // Dave tries to subscribe with a role he doesn't have — should be rejected
860
+ const daveRoleSub = yield TestDataGenerator.generateRecordsSubscribe({
861
+ author: dave,
862
+ filter: {
863
+ protocol: mixedProtocol.protocol,
864
+ protocolPath: 'thread/chat',
865
+ contextId: threadRecord.message.contextId,
866
+ },
867
+ protocolRole: 'thread/participant',
868
+ });
869
+ const daveRoleSubReply = yield dwn.processMessage(alice.did, daveRoleSub.message);
870
+ expect(daveRoleSubReply.status.code).toBe(401);
871
+ expect(daveRoleSubReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationMatchingRoleRecordNotFound);
872
+ expect(daveRoleSubReply.subscription).toBeUndefined();
873
+ }));
874
+ });
680
875
  });
681
876
  });
682
877
  });