@enbox/dwn-sdk-js 0.0.6 → 0.0.8

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 (527) hide show
  1. package/dist/browser.mjs +8 -8
  2. package/dist/browser.mjs.map +4 -4
  3. package/dist/esm/generated/precompiled-validators.js +762 -911
  4. package/dist/esm/generated/precompiled-validators.js.map +1 -1
  5. package/dist/esm/src/core/abstract-message.js +4 -0
  6. package/dist/esm/src/core/abstract-message.js.map +1 -1
  7. package/dist/esm/src/core/auth.js +22 -33
  8. package/dist/esm/src/core/auth.js.map +1 -1
  9. package/dist/esm/src/core/constants.js +11 -0
  10. package/dist/esm/src/core/constants.js.map +1 -0
  11. package/dist/esm/src/core/core-protocol.js +44 -0
  12. package/dist/esm/src/core/core-protocol.js.map +1 -0
  13. package/dist/esm/src/core/dwn-constant.js +7 -7
  14. package/dist/esm/src/core/dwn-constant.js.map +1 -1
  15. package/dist/esm/src/core/dwn-error.js +10 -12
  16. package/dist/esm/src/core/dwn-error.js.map +1 -1
  17. package/dist/esm/src/core/grant-authorization.js +50 -52
  18. package/dist/esm/src/core/grant-authorization.js.map +1 -1
  19. package/dist/esm/src/core/message.js +85 -116
  20. package/dist/esm/src/core/message.js.map +1 -1
  21. package/dist/esm/src/core/messages-grant-authorization.js +63 -78
  22. package/dist/esm/src/core/messages-grant-authorization.js.map +1 -1
  23. package/dist/esm/src/core/protocol-authorization-action.js +266 -0
  24. package/dist/esm/src/core/protocol-authorization-action.js.map +1 -0
  25. package/dist/esm/src/core/protocol-authorization-validation.js +321 -0
  26. package/dist/esm/src/core/protocol-authorization-validation.js.map +1 -0
  27. package/dist/esm/src/core/protocol-authorization.js +144 -741
  28. package/dist/esm/src/core/protocol-authorization.js.map +1 -1
  29. package/dist/esm/src/core/protocols-grant-authorization.js +24 -38
  30. package/dist/esm/src/core/protocols-grant-authorization.js.map +1 -1
  31. package/dist/esm/src/core/record-chain.js +64 -0
  32. package/dist/esm/src/core/record-chain.js.map +1 -0
  33. package/dist/esm/src/core/records-grant-authorization.js +53 -72
  34. package/dist/esm/src/core/records-grant-authorization.js.map +1 -1
  35. package/dist/esm/src/core/resumable-task-manager.js +50 -65
  36. package/dist/esm/src/core/resumable-task-manager.js.map +1 -1
  37. package/dist/esm/src/core/tenant-gate.js +2 -13
  38. package/dist/esm/src/core/tenant-gate.js.map +1 -1
  39. package/dist/esm/src/dwn.js +108 -101
  40. package/dist/esm/src/dwn.js.map +1 -1
  41. package/dist/esm/src/event-stream/event-emitter-event-log.js +204 -0
  42. package/dist/esm/src/event-stream/event-emitter-event-log.js.map +1 -0
  43. package/dist/esm/src/handlers/messages-read.js +67 -81
  44. package/dist/esm/src/handlers/messages-read.js.map +1 -1
  45. package/dist/esm/src/handlers/messages-subscribe.js +51 -63
  46. package/dist/esm/src/handlers/messages-subscribe.js.map +1 -1
  47. package/dist/esm/src/handlers/messages-sync.js +75 -89
  48. package/dist/esm/src/handlers/messages-sync.js.map +1 -1
  49. package/dist/esm/src/handlers/protocols-configure.js +153 -163
  50. package/dist/esm/src/handlers/protocols-configure.js.map +1 -1
  51. package/dist/esm/src/handlers/protocols-query.js +52 -55
  52. package/dist/esm/src/handlers/protocols-query.js.map +1 -1
  53. package/dist/esm/src/handlers/records-count.js +97 -85
  54. package/dist/esm/src/handlers/records-count.js.map +1 -1
  55. package/dist/esm/src/handlers/records-delete.js +75 -93
  56. package/dist/esm/src/handlers/records-delete.js.map +1 -1
  57. package/dist/esm/src/handlers/records-query.js +116 -105
  58. package/dist/esm/src/handlers/records-query.js.map +1 -1
  59. package/dist/esm/src/handlers/records-read.js +130 -132
  60. package/dist/esm/src/handlers/records-read.js.map +1 -1
  61. package/dist/esm/src/handlers/records-subscribe.js +164 -104
  62. package/dist/esm/src/handlers/records-subscribe.js.map +1 -1
  63. package/dist/esm/src/handlers/records-write.js +213 -280
  64. package/dist/esm/src/handlers/records-write.js.map +1 -1
  65. package/dist/esm/src/index.js +5 -2
  66. package/dist/esm/src/index.js.map +1 -1
  67. package/dist/esm/src/interfaces/messages-read.js +24 -32
  68. package/dist/esm/src/interfaces/messages-read.js.map +1 -1
  69. package/dist/esm/src/interfaces/messages-subscribe.js +28 -41
  70. package/dist/esm/src/interfaces/messages-subscribe.js.map +1 -1
  71. package/dist/esm/src/interfaces/messages-sync.js +26 -40
  72. package/dist/esm/src/interfaces/messages-sync.js.map +1 -1
  73. package/dist/esm/src/interfaces/protocols-configure.js +87 -65
  74. package/dist/esm/src/interfaces/protocols-configure.js.map +1 -1
  75. package/dist/esm/src/interfaces/protocols-query.js +55 -68
  76. package/dist/esm/src/interfaces/protocols-query.js.map +1 -1
  77. package/dist/esm/src/interfaces/records-count.js +50 -66
  78. package/dist/esm/src/interfaces/records-count.js.map +1 -1
  79. package/dist/esm/src/interfaces/records-delete.js +45 -55
  80. package/dist/esm/src/interfaces/records-delete.js.map +1 -1
  81. package/dist/esm/src/interfaces/records-query.js +60 -76
  82. package/dist/esm/src/interfaces/records-query.js.map +1 -1
  83. package/dist/esm/src/interfaces/records-read.js +51 -67
  84. package/dist/esm/src/interfaces/records-read.js.map +1 -1
  85. package/dist/esm/src/interfaces/records-subscribe.js +53 -68
  86. package/dist/esm/src/interfaces/records-subscribe.js.map +1 -1
  87. package/dist/esm/src/interfaces/records-write-query.js +102 -0
  88. package/dist/esm/src/interfaces/records-write-query.js.map +1 -0
  89. package/dist/esm/src/interfaces/records-write-signing.js +81 -0
  90. package/dist/esm/src/interfaces/records-write-signing.js.map +1 -0
  91. package/dist/esm/src/interfaces/records-write.js +396 -610
  92. package/dist/esm/src/interfaces/records-write.js.map +1 -1
  93. package/dist/esm/src/jose/algorithms/signing/ed25519.js +10 -19
  94. package/dist/esm/src/jose/algorithms/signing/ed25519.js.map +1 -1
  95. package/dist/esm/src/jose/jws/general/builder.js +23 -35
  96. package/dist/esm/src/jose/jws/general/builder.js.map +1 -1
  97. package/dist/esm/src/jose/jws/general/verifier.js +56 -69
  98. package/dist/esm/src/jose/jws/general/verifier.js.map +1 -1
  99. package/dist/esm/src/protocols/permission-grant.js +43 -14
  100. package/dist/esm/src/protocols/permission-grant.js.map +1 -1
  101. package/dist/esm/src/protocols/permission-request.js +28 -14
  102. package/dist/esm/src/protocols/permission-request.js.map +1 -1
  103. package/dist/esm/src/protocols/permissions.js +325 -227
  104. package/dist/esm/src/protocols/permissions.js.map +1 -1
  105. package/dist/esm/src/smt/smt-store-level.js +42 -64
  106. package/dist/esm/src/smt/smt-store-level.js.map +1 -1
  107. package/dist/esm/src/smt/smt-store-memory.js +19 -45
  108. package/dist/esm/src/smt/smt-store-memory.js.map +1 -1
  109. package/dist/esm/src/smt/smt-utils.js +28 -45
  110. package/dist/esm/src/smt/smt-utils.js.map +1 -1
  111. package/dist/esm/src/smt/sparse-merkle-tree.js +426 -471
  112. package/dist/esm/src/smt/sparse-merkle-tree.js.map +1 -1
  113. package/dist/esm/src/state-index/state-index-level.js +113 -150
  114. package/dist/esm/src/state-index/state-index-level.js.map +1 -1
  115. package/dist/esm/src/store/blockstore-level.js +54 -156
  116. package/dist/esm/src/store/blockstore-level.js.map +1 -1
  117. package/dist/esm/src/store/blockstore-mock.js +48 -153
  118. package/dist/esm/src/store/blockstore-mock.js.map +1 -1
  119. package/dist/esm/src/store/data-store-level.js +137 -100
  120. package/dist/esm/src/store/data-store-level.js.map +1 -1
  121. package/dist/esm/src/store/index-level-compound.js +246 -0
  122. package/dist/esm/src/store/index-level-compound.js.map +1 -0
  123. package/dist/esm/src/store/index-level.js +307 -715
  124. package/dist/esm/src/store/index-level.js.map +1 -1
  125. package/dist/esm/src/store/level-wrapper.js +143 -244
  126. package/dist/esm/src/store/level-wrapper.js.map +1 -1
  127. package/dist/esm/src/store/message-store-level.js +71 -94
  128. package/dist/esm/src/store/message-store-level.js.map +1 -1
  129. package/dist/esm/src/store/resumable-task-store-level.js +62 -101
  130. package/dist/esm/src/store/resumable-task-store-level.js.map +1 -1
  131. package/dist/esm/src/store/storage-controller.js +131 -146
  132. package/dist/esm/src/store/storage-controller.js.map +1 -1
  133. package/dist/esm/src/types/permission-types.js.map +1 -1
  134. package/dist/esm/src/types/protocols-types.js +10 -0
  135. package/dist/esm/src/types/protocols-types.js.map +1 -1
  136. package/dist/esm/src/types/records-types.js.map +1 -1
  137. package/dist/esm/src/utils/abort.js +8 -19
  138. package/dist/esm/src/utils/abort.js.map +1 -1
  139. package/dist/esm/src/utils/array.js +15 -49
  140. package/dist/esm/src/utils/array.js.map +1 -1
  141. package/dist/esm/src/utils/cid.js +29 -77
  142. package/dist/esm/src/utils/cid.js.map +1 -1
  143. package/dist/esm/src/utils/data-stream.js +37 -65
  144. package/dist/esm/src/utils/data-stream.js.map +1 -1
  145. package/dist/esm/src/utils/encryption.js +136 -162
  146. package/dist/esm/src/utils/encryption.js.map +1 -1
  147. package/dist/esm/src/utils/filter.js +1 -12
  148. package/dist/esm/src/utils/filter.js.map +1 -1
  149. package/dist/esm/src/utils/hd-key.js +45 -71
  150. package/dist/esm/src/utils/hd-key.js.map +1 -1
  151. package/dist/esm/src/utils/jws.js +9 -20
  152. package/dist/esm/src/utils/jws.js.map +1 -1
  153. package/dist/esm/src/utils/memory-cache.js +12 -23
  154. package/dist/esm/src/utils/memory-cache.js.map +1 -1
  155. package/dist/esm/src/utils/messages.js +21 -33
  156. package/dist/esm/src/utils/messages.js.map +1 -1
  157. package/dist/esm/src/utils/private-key-signer.js +9 -17
  158. package/dist/esm/src/utils/private-key-signer.js.map +1 -1
  159. package/dist/esm/src/utils/protocols.js +62 -70
  160. package/dist/esm/src/utils/protocols.js.map +1 -1
  161. package/dist/esm/src/utils/records.js +103 -166
  162. package/dist/esm/src/utils/records.js.map +1 -1
  163. package/dist/esm/src/utils/secp256k1.js +60 -96
  164. package/dist/esm/src/utils/secp256k1.js.map +1 -1
  165. package/dist/esm/src/utils/secp256r1.js +54 -71
  166. package/dist/esm/src/utils/secp256r1.js.map +1 -1
  167. package/dist/esm/src/utils/time.js +5 -18
  168. package/dist/esm/src/utils/time.js.map +1 -1
  169. package/dist/esm/src/utils/url.js +3 -3
  170. package/dist/esm/src/utils/url.js.map +1 -1
  171. package/dist/esm/tests/core/auth.spec.js +3 -12
  172. package/dist/esm/tests/core/auth.spec.js.map +1 -1
  173. package/dist/esm/tests/core/message.spec.js +50 -59
  174. package/dist/esm/tests/core/message.spec.js.map +1 -1
  175. package/dist/esm/tests/core/protocol-authorization.spec.js +10 -18
  176. package/dist/esm/tests/core/protocol-authorization.spec.js.map +1 -1
  177. package/dist/esm/tests/dwn.spec.js +65 -89
  178. package/dist/esm/tests/dwn.spec.js.map +1 -1
  179. package/dist/esm/tests/event-emitter-event-log.spec.js +305 -0
  180. package/dist/esm/tests/event-emitter-event-log.spec.js.map +1 -0
  181. package/dist/esm/tests/features/author-delegated-grant.spec.js +337 -347
  182. package/dist/esm/tests/features/author-delegated-grant.spec.js.map +1 -1
  183. package/dist/esm/tests/features/owner-delegated-grant.spec.js +160 -172
  184. package/dist/esm/tests/features/owner-delegated-grant.spec.js.map +1 -1
  185. package/dist/esm/tests/features/owner-signature.spec.js +78 -82
  186. package/dist/esm/tests/features/owner-signature.spec.js.map +1 -1
  187. package/dist/esm/tests/features/permissions.spec.js +449 -184
  188. package/dist/esm/tests/features/permissions.spec.js.map +1 -1
  189. package/dist/esm/tests/features/protocol-composition.spec.js +981 -360
  190. package/dist/esm/tests/features/protocol-composition.spec.js.map +1 -1
  191. package/dist/esm/tests/features/protocol-create-action.spec.js +45 -54
  192. package/dist/esm/tests/features/protocol-create-action.spec.js.map +1 -1
  193. package/dist/esm/tests/features/protocol-delete-action.spec.js +99 -108
  194. package/dist/esm/tests/features/protocol-delete-action.spec.js.map +1 -1
  195. package/dist/esm/tests/features/protocol-update-action.spec.js +108 -117
  196. package/dist/esm/tests/features/protocol-update-action.spec.js.map +1 -1
  197. package/dist/esm/tests/features/records-immutable.spec.js +315 -0
  198. package/dist/esm/tests/features/records-immutable.spec.js.map +1 -0
  199. package/dist/esm/tests/features/records-prune.spec.js +178 -194
  200. package/dist/esm/tests/features/records-prune.spec.js.map +1 -1
  201. package/dist/esm/tests/features/records-record-limit.spec.js +542 -0
  202. package/dist/esm/tests/features/records-record-limit.spec.js.map +1 -0
  203. package/dist/esm/tests/features/records-tags.spec.js +456 -463
  204. package/dist/esm/tests/features/records-tags.spec.js.map +1 -1
  205. package/dist/esm/tests/features/resumable-tasks.spec.js +88 -98
  206. package/dist/esm/tests/features/resumable-tasks.spec.js.map +1 -1
  207. package/dist/esm/tests/handlers/messages-read.spec.js +215 -210
  208. package/dist/esm/tests/handlers/messages-read.spec.js.map +1 -1
  209. package/dist/esm/tests/handlers/messages-subscribe.spec.js +309 -171
  210. package/dist/esm/tests/handlers/messages-subscribe.spec.js.map +1 -1
  211. package/dist/esm/tests/handlers/messages-sync.spec.js +272 -199
  212. package/dist/esm/tests/handlers/messages-sync.spec.js.map +1 -1
  213. package/dist/esm/tests/handlers/protocols-configure.spec.js +247 -241
  214. package/dist/esm/tests/handlers/protocols-configure.spec.js.map +1 -1
  215. package/dist/esm/tests/handlers/protocols-query.spec.js +159 -172
  216. package/dist/esm/tests/handlers/protocols-query.spec.js.map +1 -1
  217. package/dist/esm/tests/handlers/records-count.spec.js +101 -105
  218. package/dist/esm/tests/handlers/records-count.spec.js.map +1 -1
  219. package/dist/esm/tests/handlers/records-delete.spec.js +266 -279
  220. package/dist/esm/tests/handlers/records-delete.spec.js.map +1 -1
  221. package/dist/esm/tests/handlers/records-query.spec.js +984 -996
  222. package/dist/esm/tests/handlers/records-query.spec.js.map +1 -1
  223. package/dist/esm/tests/handlers/records-read.spec.js +542 -671
  224. package/dist/esm/tests/handlers/records-read.spec.js.map +1 -1
  225. package/dist/esm/tests/handlers/records-subscribe.spec.js +433 -302
  226. package/dist/esm/tests/handlers/records-subscribe.spec.js.map +1 -1
  227. package/dist/esm/tests/handlers/records-write.spec.js +1216 -1140
  228. package/dist/esm/tests/handlers/records-write.spec.js.map +1 -1
  229. package/dist/esm/tests/interfaces/messages-get.spec.js +39 -48
  230. package/dist/esm/tests/interfaces/messages-get.spec.js.map +1 -1
  231. package/dist/esm/tests/interfaces/messages-subscribe.spec.js +4 -13
  232. package/dist/esm/tests/interfaces/messages-subscribe.spec.js.map +1 -1
  233. package/dist/esm/tests/interfaces/protocols-configure.spec.js +212 -88
  234. package/dist/esm/tests/interfaces/protocols-configure.spec.js.map +1 -1
  235. package/dist/esm/tests/interfaces/protocols-query.spec.js +8 -17
  236. package/dist/esm/tests/interfaces/protocols-query.spec.js.map +1 -1
  237. package/dist/esm/tests/interfaces/records-delete.spec.js +8 -17
  238. package/dist/esm/tests/interfaces/records-delete.spec.js.map +1 -1
  239. package/dist/esm/tests/interfaces/records-query.spec.js +20 -29
  240. package/dist/esm/tests/interfaces/records-query.spec.js.map +1 -1
  241. package/dist/esm/tests/interfaces/records-read.spec.js +42 -51
  242. package/dist/esm/tests/interfaces/records-read.spec.js.map +1 -1
  243. package/dist/esm/tests/interfaces/records-subscribe.spec.js +16 -25
  244. package/dist/esm/tests/interfaces/records-subscribe.spec.js.map +1 -1
  245. package/dist/esm/tests/interfaces/records-write.spec.js +190 -219
  246. package/dist/esm/tests/interfaces/records-write.spec.js.map +1 -1
  247. package/dist/esm/tests/jose/jws/general.spec.js +36 -45
  248. package/dist/esm/tests/jose/jws/general.spec.js.map +1 -1
  249. package/dist/esm/tests/protocols/permission-grant.spec.js +44 -50
  250. package/dist/esm/tests/protocols/permission-grant.spec.js.map +1 -1
  251. package/dist/esm/tests/protocols/permission-request.spec.js +23 -32
  252. package/dist/esm/tests/protocols/permission-request.spec.js.map +1 -1
  253. package/dist/esm/tests/protocols/permissions.spec.js +49 -55
  254. package/dist/esm/tests/protocols/permissions.spec.js.map +1 -1
  255. package/dist/esm/tests/scenarios/aggregator.spec.js +127 -138
  256. package/dist/esm/tests/scenarios/aggregator.spec.js.map +1 -1
  257. package/dist/esm/tests/scenarios/deleted-record.spec.js +372 -36
  258. package/dist/esm/tests/scenarios/deleted-record.spec.js.map +1 -1
  259. package/dist/esm/tests/scenarios/end-to-end-tests.spec.js +55 -64
  260. package/dist/esm/tests/scenarios/end-to-end-tests.spec.js.map +1 -1
  261. package/dist/esm/tests/scenarios/nested-roles.spec.js +66 -76
  262. package/dist/esm/tests/scenarios/nested-roles.spec.js.map +1 -1
  263. package/dist/esm/tests/scenarios/subscriptions.spec.js +451 -354
  264. package/dist/esm/tests/scenarios/subscriptions.spec.js.map +1 -1
  265. package/dist/esm/tests/smt/smt-store-level.spec.js +76 -87
  266. package/dist/esm/tests/smt/smt-store-level.spec.js.map +1 -1
  267. package/dist/esm/tests/smt/sparse-merkle-tree.spec.js +344 -353
  268. package/dist/esm/tests/smt/sparse-merkle-tree.spec.js.map +1 -1
  269. package/dist/esm/tests/state-index/state-index-level.spec.js +117 -126
  270. package/dist/esm/tests/state-index/state-index-level.spec.js.map +1 -1
  271. package/dist/esm/tests/store/blockstore-level.spec.js +44 -99
  272. package/dist/esm/tests/store/blockstore-level.spec.js.map +1 -1
  273. package/dist/esm/tests/store/blockstore-mock.spec.js +40 -120
  274. package/dist/esm/tests/store/blockstore-mock.spec.js.map +1 -1
  275. package/dist/esm/tests/store/data-store-level.spec.js +160 -108
  276. package/dist/esm/tests/store/data-store-level.spec.js.map +1 -1
  277. package/dist/esm/tests/store/index-level.spec.js +404 -414
  278. package/dist/esm/tests/store/index-level.spec.js.map +1 -1
  279. package/dist/esm/tests/store/message-store-level.spec.js +13 -22
  280. package/dist/esm/tests/store/message-store-level.spec.js.map +1 -1
  281. package/dist/esm/tests/store/message-store.spec.js +229 -238
  282. package/dist/esm/tests/store/message-store.spec.js.map +1 -1
  283. package/dist/esm/tests/test-event-stream.js +12 -13
  284. package/dist/esm/tests/test-event-stream.js.map +1 -1
  285. package/dist/esm/tests/test-stores.js +16 -13
  286. package/dist/esm/tests/test-stores.js.map +1 -1
  287. package/dist/esm/tests/test-suite.js +8 -15
  288. package/dist/esm/tests/test-suite.js.map +1 -1
  289. package/dist/esm/tests/utils/cid.spec.js +24 -33
  290. package/dist/esm/tests/utils/cid.spec.js.map +1 -1
  291. package/dist/esm/tests/utils/data-stream.spec.js +48 -57
  292. package/dist/esm/tests/utils/data-stream.spec.js.map +1 -1
  293. package/dist/esm/tests/utils/encryption-callbacks.spec.js +45 -54
  294. package/dist/esm/tests/utils/encryption-callbacks.spec.js.map +1 -1
  295. package/dist/esm/tests/utils/encryption.spec.js +229 -82
  296. package/dist/esm/tests/utils/encryption.spec.js.map +1 -1
  297. package/dist/esm/tests/utils/filters.spec.js +46 -55
  298. package/dist/esm/tests/utils/filters.spec.js.map +1 -1
  299. package/dist/esm/tests/utils/hd-key.spec.js +10 -19
  300. package/dist/esm/tests/utils/hd-key.spec.js.map +1 -1
  301. package/dist/esm/tests/utils/jws.spec.js +3 -12
  302. package/dist/esm/tests/utils/jws.spec.js.map +1 -1
  303. package/dist/esm/tests/utils/memory-cache.spec.js +9 -18
  304. package/dist/esm/tests/utils/memory-cache.spec.js.map +1 -1
  305. package/dist/esm/tests/utils/messages.spec.js +18 -20
  306. package/dist/esm/tests/utils/messages.spec.js.map +1 -1
  307. package/dist/esm/tests/utils/poller.js +22 -33
  308. package/dist/esm/tests/utils/poller.js.map +1 -1
  309. package/dist/esm/tests/utils/private-key-signer.spec.js +15 -24
  310. package/dist/esm/tests/utils/private-key-signer.spec.js.map +1 -1
  311. package/dist/esm/tests/utils/records.spec.js +14 -27
  312. package/dist/esm/tests/utils/records.spec.js.map +1 -1
  313. package/dist/esm/tests/utils/secp256k1.spec.js +16 -25
  314. package/dist/esm/tests/utils/secp256k1.spec.js.map +1 -1
  315. package/dist/esm/tests/utils/secp256r1.spec.js +18 -27
  316. package/dist/esm/tests/utils/secp256r1.spec.js.map +1 -1
  317. package/dist/esm/tests/utils/test-data-generator.js +446 -467
  318. package/dist/esm/tests/utils/test-data-generator.js.map +1 -1
  319. package/dist/esm/tests/validation/json-schemas/definitions.spec.js +2 -11
  320. package/dist/esm/tests/validation/json-schemas/definitions.spec.js.map +1 -1
  321. package/dist/esm/tests/validation/json-schemas/jwk/general-jwk.spec.js +4 -13
  322. package/dist/esm/tests/validation/json-schemas/jwk/general-jwk.spec.js.map +1 -1
  323. package/dist/esm/tests/validation/json-schemas/jwk/public-jwk.spec.js +8 -17
  324. package/dist/esm/tests/validation/json-schemas/jwk/public-jwk.spec.js.map +1 -1
  325. package/dist/esm/tests/validation/json-schemas/jwk-verification-method.spec.js +3 -12
  326. package/dist/esm/tests/validation/json-schemas/jwk-verification-method.spec.js.map +1 -1
  327. package/dist/esm/tests/validation/json-schemas/protocols/protocols-configure.spec.js +4 -13
  328. package/dist/esm/tests/validation/json-schemas/protocols/protocols-configure.spec.js.map +1 -1
  329. package/dist/esm/tests/validation/json-schemas/records/records-query.spec.js +2 -11
  330. package/dist/esm/tests/validation/json-schemas/records/records-query.spec.js.map +1 -1
  331. package/dist/esm/tests/validation/json-schemas/records/records-read.spec.js +2 -11
  332. package/dist/esm/tests/validation/json-schemas/records/records-read.spec.js.map +1 -1
  333. package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js +44 -24
  334. package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js.map +1 -1
  335. package/dist/types/generated/precompiled-validators.d.ts +49 -40
  336. package/dist/types/generated/precompiled-validators.d.ts.map +1 -1
  337. package/dist/types/src/core/constants.d.ts +11 -0
  338. package/dist/types/src/core/constants.d.ts.map +1 -0
  339. package/dist/types/src/core/core-protocol.d.ts +89 -0
  340. package/dist/types/src/core/core-protocol.d.ts.map +1 -0
  341. package/dist/types/src/core/dwn-error.d.ts +9 -12
  342. package/dist/types/src/core/dwn-error.d.ts.map +1 -1
  343. package/dist/types/src/core/grant-authorization.d.ts +6 -2
  344. package/dist/types/src/core/grant-authorization.d.ts.map +1 -1
  345. package/dist/types/src/core/protocol-authorization-action.d.ts +42 -0
  346. package/dist/types/src/core/protocol-authorization-action.d.ts.map +1 -0
  347. package/dist/types/src/core/protocol-authorization-validation.d.ts +81 -0
  348. package/dist/types/src/core/protocol-authorization-validation.d.ts.map +1 -0
  349. package/dist/types/src/core/protocol-authorization.d.ts +24 -106
  350. package/dist/types/src/core/protocol-authorization.d.ts.map +1 -1
  351. package/dist/types/src/core/record-chain.d.ts +24 -0
  352. package/dist/types/src/core/record-chain.d.ts.map +1 -0
  353. package/dist/types/src/core/records-grant-authorization.d.ts.map +1 -1
  354. package/dist/types/src/dwn.d.ts +19 -7
  355. package/dist/types/src/dwn.d.ts.map +1 -1
  356. package/dist/types/src/event-stream/event-emitter-event-log.d.ts +50 -0
  357. package/dist/types/src/event-stream/event-emitter-event-log.d.ts.map +1 -0
  358. package/dist/types/src/handlers/messages-read.d.ts +3 -8
  359. package/dist/types/src/handlers/messages-read.d.ts.map +1 -1
  360. package/dist/types/src/handlers/messages-subscribe.d.ts +6 -10
  361. package/dist/types/src/handlers/messages-subscribe.d.ts.map +1 -1
  362. package/dist/types/src/handlers/messages-sync.d.ts +3 -8
  363. package/dist/types/src/handlers/messages-sync.d.ts.map +1 -1
  364. package/dist/types/src/handlers/protocols-configure.d.ts +3 -10
  365. package/dist/types/src/handlers/protocols-configure.d.ts.map +1 -1
  366. package/dist/types/src/handlers/protocols-query.d.ts +3 -8
  367. package/dist/types/src/handlers/protocols-query.d.ts.map +1 -1
  368. package/dist/types/src/handlers/records-count.d.ts +3 -6
  369. package/dist/types/src/handlers/records-count.d.ts.map +1 -1
  370. package/dist/types/src/handlers/records-delete.d.ts +3 -8
  371. package/dist/types/src/handlers/records-delete.d.ts.map +1 -1
  372. package/dist/types/src/handlers/records-query.d.ts +3 -8
  373. package/dist/types/src/handlers/records-query.d.ts.map +1 -1
  374. package/dist/types/src/handlers/records-read.d.ts +3 -8
  375. package/dist/types/src/handlers/records-read.d.ts.map +1 -1
  376. package/dist/types/src/handlers/records-subscribe.d.ts +8 -10
  377. package/dist/types/src/handlers/records-subscribe.d.ts.map +1 -1
  378. package/dist/types/src/handlers/records-write.d.ts +4 -24
  379. package/dist/types/src/handlers/records-write.d.ts.map +1 -1
  380. package/dist/types/src/index.d.ts +8 -4
  381. package/dist/types/src/index.d.ts.map +1 -1
  382. package/dist/types/src/interfaces/messages-subscribe.d.ts +5 -0
  383. package/dist/types/src/interfaces/messages-subscribe.d.ts.map +1 -1
  384. package/dist/types/src/interfaces/protocols-configure.d.ts.map +1 -1
  385. package/dist/types/src/interfaces/records-subscribe.d.ts +5 -0
  386. package/dist/types/src/interfaces/records-subscribe.d.ts.map +1 -1
  387. package/dist/types/src/interfaces/records-write-query.d.ts +33 -0
  388. package/dist/types/src/interfaces/records-write-query.d.ts.map +1 -0
  389. package/dist/types/src/interfaces/records-write-signing.d.ts +34 -0
  390. package/dist/types/src/interfaces/records-write-signing.d.ts.map +1 -0
  391. package/dist/types/src/interfaces/records-write.d.ts +13 -53
  392. package/dist/types/src/interfaces/records-write.d.ts.map +1 -1
  393. package/dist/types/src/protocols/permission-grant.d.ts +1 -1
  394. package/dist/types/src/protocols/permission-grant.d.ts.map +1 -1
  395. package/dist/types/src/protocols/permission-request.d.ts +1 -1
  396. package/dist/types/src/protocols/permission-request.d.ts.map +1 -1
  397. package/dist/types/src/protocols/permissions.d.ts +40 -3
  398. package/dist/types/src/protocols/permissions.d.ts.map +1 -1
  399. package/dist/types/src/state-index/state-index-level.d.ts.map +1 -1
  400. package/dist/types/src/store/data-store-level.d.ts +20 -4
  401. package/dist/types/src/store/data-store-level.d.ts.map +1 -1
  402. package/dist/types/src/store/index-level-compound.d.ts +70 -0
  403. package/dist/types/src/store/index-level-compound.d.ts.map +1 -0
  404. package/dist/types/src/store/index-level.d.ts +4 -58
  405. package/dist/types/src/store/index-level.d.ts.map +1 -1
  406. package/dist/types/src/store/storage-controller.d.ts +4 -4
  407. package/dist/types/src/store/storage-controller.d.ts.map +1 -1
  408. package/dist/types/src/types/message-types.d.ts +3 -3
  409. package/dist/types/src/types/message-types.d.ts.map +1 -1
  410. package/dist/types/src/types/messages-types.d.ts +12 -3
  411. package/dist/types/src/types/messages-types.d.ts.map +1 -1
  412. package/dist/types/src/types/method-handler.d.ts +24 -3
  413. package/dist/types/src/types/method-handler.d.ts.map +1 -1
  414. package/dist/types/src/types/permission-types.d.ts +7 -0
  415. package/dist/types/src/types/permission-types.d.ts.map +1 -1
  416. package/dist/types/src/types/protocols-types.d.ts +41 -1
  417. package/dist/types/src/types/protocols-types.d.ts.map +1 -1
  418. package/dist/types/src/types/records-types.d.ts +16 -6
  419. package/dist/types/src/types/records-types.d.ts.map +1 -1
  420. package/dist/types/src/types/subscriptions.d.ts +151 -13
  421. package/dist/types/src/types/subscriptions.d.ts.map +1 -1
  422. package/dist/types/src/utils/hd-key.d.ts +1 -9
  423. package/dist/types/src/utils/hd-key.d.ts.map +1 -1
  424. package/dist/types/src/utils/messages.d.ts +7 -5
  425. package/dist/types/src/utils/messages.d.ts.map +1 -1
  426. package/dist/types/src/utils/protocols.d.ts +5 -0
  427. package/dist/types/src/utils/protocols.d.ts.map +1 -1
  428. package/dist/types/src/utils/records.d.ts +1 -11
  429. package/dist/types/src/utils/records.d.ts.map +1 -1
  430. package/dist/types/tests/dwn.spec.d.ts.map +1 -1
  431. package/dist/types/tests/event-emitter-event-log.spec.d.ts +2 -0
  432. package/dist/types/tests/event-emitter-event-log.spec.d.ts.map +1 -0
  433. package/dist/types/tests/features/author-delegated-grant.spec.d.ts.map +1 -1
  434. package/dist/types/tests/features/owner-delegated-grant.spec.d.ts.map +1 -1
  435. package/dist/types/tests/features/owner-signature.spec.d.ts.map +1 -1
  436. package/dist/types/tests/features/permissions.spec.d.ts.map +1 -1
  437. package/dist/types/tests/features/protocol-composition.spec.d.ts.map +1 -1
  438. package/dist/types/tests/features/records-immutable.spec.d.ts +2 -0
  439. package/dist/types/tests/features/records-immutable.spec.d.ts.map +1 -0
  440. package/dist/types/tests/features/records-record-limit.spec.d.ts +2 -0
  441. package/dist/types/tests/features/records-record-limit.spec.d.ts.map +1 -0
  442. package/dist/types/tests/features/records-tags.spec.d.ts.map +1 -1
  443. package/dist/types/tests/features/resumable-tasks.spec.d.ts.map +1 -1
  444. package/dist/types/tests/handlers/messages-read.spec.d.ts.map +1 -1
  445. package/dist/types/tests/handlers/messages-subscribe.spec.d.ts.map +1 -1
  446. package/dist/types/tests/handlers/messages-sync.spec.d.ts.map +1 -1
  447. package/dist/types/tests/handlers/records-count.spec.d.ts.map +1 -1
  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/scenarios/deleted-record.spec.d.ts.map +1 -1
  454. package/dist/types/tests/scenarios/subscriptions.spec.d.ts.map +1 -1
  455. package/dist/types/tests/test-event-stream.d.ts +11 -12
  456. package/dist/types/tests/test-event-stream.d.ts.map +1 -1
  457. package/dist/types/tests/test-suite.d.ts +2 -2
  458. package/dist/types/tests/test-suite.d.ts.map +1 -1
  459. package/dist/types/tests/utils/test-data-generator.d.ts +18 -0
  460. package/dist/types/tests/utils/test-data-generator.d.ts.map +1 -1
  461. package/package.json +5 -4
  462. package/src/core/constants.ts +11 -0
  463. package/src/core/core-protocol.ts +129 -0
  464. package/src/core/dwn-error.ts +15 -12
  465. package/src/core/grant-authorization.ts +20 -3
  466. package/src/core/protocol-authorization-action.ts +377 -0
  467. package/src/core/protocol-authorization-validation.ts +487 -0
  468. package/src/core/protocol-authorization.ts +111 -856
  469. package/src/core/record-chain.ts +99 -0
  470. package/src/core/records-grant-authorization.ts +6 -8
  471. package/src/dwn.ts +58 -73
  472. package/src/event-stream/event-emitter-event-log.ts +283 -0
  473. package/src/handlers/messages-read.ts +8 -9
  474. package/src/handlers/messages-subscribe.ts +24 -28
  475. package/src/handlers/messages-sync.ts +10 -16
  476. package/src/handlers/protocols-configure.ts +47 -32
  477. package/src/handlers/protocols-query.ts +6 -9
  478. package/src/handlers/records-count.ts +11 -10
  479. package/src/handlers/records-delete.ts +12 -21
  480. package/src/handlers/records-query.ts +12 -12
  481. package/src/handlers/records-read.ts +34 -22
  482. package/src/handlers/records-subscribe.ts +47 -26
  483. package/src/handlers/records-write.ts +47 -104
  484. package/src/index.ts +9 -5
  485. package/src/interfaces/messages-subscribe.ts +7 -1
  486. package/src/interfaces/protocols-configure.ts +73 -8
  487. package/src/interfaces/records-count.ts +1 -1
  488. package/src/interfaces/records-delete.ts +1 -1
  489. package/src/interfaces/records-query.ts +1 -1
  490. package/src/interfaces/records-read.ts +1 -1
  491. package/src/interfaces/records-subscribe.ts +8 -1
  492. package/src/interfaces/records-write-query.ts +139 -0
  493. package/src/interfaces/records-write-signing.ts +123 -0
  494. package/src/interfaces/records-write.ts +66 -261
  495. package/src/protocols/permission-grant.ts +1 -1
  496. package/src/protocols/permission-request.ts +1 -1
  497. package/src/protocols/permissions.ts +148 -6
  498. package/src/state-index/state-index-level.ts +5 -7
  499. package/src/store/data-store-level.ts +124 -34
  500. package/src/store/index-level-compound.ts +324 -0
  501. package/src/store/index-level.ts +68 -341
  502. package/src/store/storage-controller.ts +11 -11
  503. package/src/types/message-types.ts +3 -3
  504. package/src/types/messages-types.ts +12 -3
  505. package/src/types/method-handler.ts +26 -4
  506. package/src/types/mitt.d.ts +28 -0
  507. package/src/types/permission-types.ts +7 -0
  508. package/src/types/protocols-types.ts +46 -0
  509. package/src/types/records-types.ts +16 -6
  510. package/src/types/subscriptions.ts +178 -14
  511. package/src/utils/hd-key.ts +0 -9
  512. package/src/utils/messages.ts +17 -37
  513. package/src/utils/protocols.ts +8 -0
  514. package/src/utils/records.ts +8 -59
  515. package/dist/esm/src/event-stream/event-emitter-stream.js +0 -60
  516. package/dist/esm/src/event-stream/event-emitter-stream.js.map +0 -1
  517. package/dist/esm/tests/event-stream/event-emitter-stream.spec.js +0 -77
  518. package/dist/esm/tests/event-stream/event-emitter-stream.spec.js.map +0 -1
  519. package/dist/esm/tests/event-stream/event-stream.spec.js +0 -123
  520. package/dist/esm/tests/event-stream/event-stream.spec.js.map +0 -1
  521. package/dist/types/src/event-stream/event-emitter-stream.d.ts +0 -23
  522. package/dist/types/src/event-stream/event-emitter-stream.d.ts.map +0 -1
  523. package/dist/types/tests/event-stream/event-emitter-stream.spec.d.ts +0 -2
  524. package/dist/types/tests/event-stream/event-emitter-stream.spec.d.ts.map +0 -1
  525. package/dist/types/tests/event-stream/event-stream.spec.d.ts +0 -2
  526. package/dist/types/tests/event-stream/event-stream.spec.d.ts.map +0 -1
  527. package/src/event-stream/event-emitter-stream.ts +0 -69
@@ -1,12 +1,3 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
1
  import { ResumableTaskManager } from '../../src/core/resumable-task-manager.js';
11
2
  import sinon from 'sinon';
12
3
  import { afterAll, beforeAll, beforeEach, describe, expect, it } from 'bun:test';
@@ -21,7 +12,7 @@ import { Message } from '../../src/core/message.js';
21
12
  import { normalizeSchemaUrl } from '../../src/utils/url.js';
22
13
  import { RecordsDeleteHandler } from '../../src/handlers/records-delete.js';
23
14
  import { TestDataGenerator } from '../utils/test-data-generator.js';
24
- import { TestEventStream } from '../test-event-stream.js';
15
+ import { TestEventLog } from '../test-event-stream.js';
25
16
  import { TestStores } from '../test-stores.js';
26
17
  import { TestStubGenerator } from '../utils/test-stub-generator.js';
27
18
  import { Time } from '../../src/utils/time.js';
@@ -35,7 +26,7 @@ export function testRecordsDeleteHandler() {
35
26
  let dataStore;
36
27
  let resumableTaskStore;
37
28
  let stateIndex;
38
- let eventStream;
29
+ let eventLog;
39
30
  let dwn;
40
31
  beforeEach(() => {
41
32
  sinon.restore();
@@ -46,519 +37,521 @@ export function testRecordsDeleteHandler() {
46
37
  describe('functional tests', () => {
47
38
  // important to follow the `before` and `after` pattern to initialize and clean the stores in tests
48
39
  // so that different test suites can reuse the same backend store for testing
49
- beforeAll(() => __awaiter(this, void 0, void 0, function* () {
40
+ beforeAll(async () => {
50
41
  didResolver = new UniversalResolver({ didResolvers: [DidKey] });
51
42
  const stores = TestStores.get();
52
43
  messageStore = stores.messageStore;
53
44
  dataStore = stores.dataStore;
54
45
  resumableTaskStore = stores.resumableTaskStore;
55
46
  stateIndex = stores.stateIndex;
56
- eventStream = TestEventStream.get();
57
- dwn = yield Dwn.create({ didResolver, messageStore, dataStore, stateIndex, eventStream, resumableTaskStore });
58
- }));
59
- beforeEach(() => __awaiter(this, void 0, void 0, function* () {
47
+ eventLog = TestEventLog.get();
48
+ dwn = await Dwn.create({ didResolver, messageStore, dataStore, stateIndex, eventLog, resumableTaskStore });
49
+ });
50
+ beforeEach(async () => {
60
51
  // clean up before each test rather than after so that a test does not depend on other tests to do the clean up
61
- yield messageStore.clear();
62
- yield dataStore.clear();
63
- yield resumableTaskStore.clear();
64
- yield stateIndex.clear();
65
- }));
66
- afterAll(() => __awaiter(this, void 0, void 0, function* () {
67
- yield dwn.close();
68
- }));
69
- it('should handle RecordsDelete successfully and return 404 if deleting a deleted record', () => __awaiter(this, void 0, void 0, function* () {
70
- var _a, _b;
71
- const alice = yield TestDataGenerator.generateDidKeyPersona();
52
+ await messageStore.clear();
53
+ await dataStore.clear();
54
+ await resumableTaskStore.clear();
55
+ await stateIndex.clear();
56
+ });
57
+ afterAll(async () => {
58
+ await dwn.close();
59
+ });
60
+ it('should handle RecordsDelete successfully and return 404 if deleting a deleted record', async () => {
61
+ const alice = await TestDataGenerator.generateDidKeyPersona();
62
+ await TestDataGenerator.installDefaultTestProtocol(dwn, alice);
72
63
  // insert data
73
- const { message, dataStream } = yield TestDataGenerator.generateRecordsWrite({ author: alice });
74
- const writeReply = yield dwn.processMessage(alice.did, message, { dataStream });
64
+ const { message, dataStream } = await TestDataGenerator.generateRecordsWrite({ author: alice });
65
+ const writeReply = await dwn.processMessage(alice.did, message, { dataStream });
75
66
  expect(writeReply.status.code).toBe(202);
76
67
  // ensure data is inserted
77
- const queryData = yield TestDataGenerator.generateRecordsQuery({
68
+ const queryData = await TestDataGenerator.generateRecordsQuery({
78
69
  author: alice,
79
70
  filter: { recordId: message.recordId }
80
71
  });
81
- const reply = yield dwn.processMessage(alice.did, queryData.message);
72
+ const reply = await dwn.processMessage(alice.did, queryData.message);
82
73
  expect(reply.status.code).toBe(200);
83
- expect((_a = reply.entries) === null || _a === void 0 ? void 0 : _a.length).toBe(1);
74
+ expect(reply.entries?.length).toBe(1);
84
75
  // testing delete
85
- const recordsDelete = yield RecordsDelete.create({
76
+ const recordsDelete = await RecordsDelete.create({
86
77
  recordId: message.recordId,
87
78
  signer: Jws.createSigner(alice)
88
79
  });
89
- const deleteReply = yield dwn.processMessage(alice.did, recordsDelete.message);
80
+ const deleteReply = await dwn.processMessage(alice.did, recordsDelete.message);
90
81
  expect(deleteReply.status.code).toBe(202);
91
82
  // ensure a query will no longer find the deleted record
92
- const reply2 = yield dwn.processMessage(alice.did, queryData.message);
83
+ const reply2 = await dwn.processMessage(alice.did, queryData.message);
93
84
  expect(reply2.status.code).toBe(200);
94
- expect((_b = reply2.entries) === null || _b === void 0 ? void 0 : _b.length).toBe(0);
85
+ expect(reply2.entries?.length).toBe(0);
95
86
  // testing deleting a deleted record
96
- const recordsDelete2 = yield RecordsDelete.create({
87
+ const recordsDelete2 = await RecordsDelete.create({
97
88
  recordId: message.recordId,
98
89
  signer: Jws.createSigner(alice)
99
90
  });
100
- const recordsDelete2Reply = yield dwn.processMessage(alice.did, recordsDelete2.message);
91
+ const recordsDelete2Reply = await dwn.processMessage(alice.did, recordsDelete2.message);
101
92
  expect(recordsDelete2Reply.status.code).toBe(404);
102
- }));
103
- it('should not affect other records or tenants with the same data', () => __awaiter(this, void 0, void 0, function* () {
104
- const alice = yield TestDataGenerator.generateDidKeyPersona();
105
- const bob = yield TestDataGenerator.generateDidKeyPersona();
93
+ });
94
+ it('should not affect other records or tenants with the same data', async () => {
95
+ const alice = await TestDataGenerator.generateDidKeyPersona();
96
+ const bob = await TestDataGenerator.generateDidKeyPersona();
97
+ await TestDataGenerator.installDefaultTestProtocol(dwn, alice);
98
+ await TestDataGenerator.installDefaultTestProtocol(dwn, bob);
106
99
  const data = Encoder.stringToBytes('test');
107
100
  // alice writes a records with data
108
- const aliceWriteData = yield TestDataGenerator.generateRecordsWrite({ author: alice, data });
109
- const aliceWriteReply = yield dwn.processMessage(alice.did, aliceWriteData.message, { dataStream: aliceWriteData.dataStream });
101
+ const aliceWriteData = await TestDataGenerator.generateRecordsWrite({ author: alice, data });
102
+ const aliceWriteReply = await dwn.processMessage(alice.did, aliceWriteData.message, { dataStream: aliceWriteData.dataStream });
110
103
  expect(aliceWriteReply.status.code).toBe(202);
111
104
  // alice writes another record with the same data
112
- const aliceWrite2Data = yield TestDataGenerator.generateRecordsWrite({ author: alice, data });
113
- const aliceWrite2Reply = yield dwn.processMessage(alice.did, aliceWrite2Data.message, { dataStream: aliceWrite2Data.dataStream });
105
+ const aliceWrite2Data = await TestDataGenerator.generateRecordsWrite({ author: alice, data });
106
+ const aliceWrite2Reply = await dwn.processMessage(alice.did, aliceWrite2Data.message, { dataStream: aliceWrite2Data.dataStream });
114
107
  expect(aliceWrite2Reply.status.code).toBe(202);
115
108
  // bob writes a records with same data
116
- const bobWriteData = yield TestDataGenerator.generateRecordsWrite({ author: bob, data });
117
- const bobWriteReply = yield dwn.processMessage(bob.did, bobWriteData.message, { dataStream: bobWriteData.dataStream });
109
+ const bobWriteData = await TestDataGenerator.generateRecordsWrite({ author: bob, data });
110
+ const bobWriteReply = await dwn.processMessage(bob.did, bobWriteData.message, { dataStream: bobWriteData.dataStream });
118
111
  expect(bobWriteReply.status.code).toBe(202);
119
112
  // bob writes another record with the same data
120
- const bobWrite2Data = yield TestDataGenerator.generateRecordsWrite({ author: bob, data });
121
- const bobWrite2Reply = yield dwn.processMessage(bob.did, bobWrite2Data.message, { dataStream: bobWrite2Data.dataStream });
113
+ const bobWrite2Data = await TestDataGenerator.generateRecordsWrite({ author: bob, data });
114
+ const bobWrite2Reply = await dwn.processMessage(bob.did, bobWrite2Data.message, { dataStream: bobWrite2Data.dataStream });
122
115
  expect(bobWrite2Reply.status.code).toBe(202);
123
116
  // alice deletes one of the two records
124
- const aliceDeleteWriteData = yield TestDataGenerator.generateRecordsDelete({
117
+ const aliceDeleteWriteData = await TestDataGenerator.generateRecordsDelete({
125
118
  author: alice,
126
119
  recordId: aliceWriteData.message.recordId
127
120
  });
128
- const aliceDeleteWriteReply = yield dwn.processMessage(alice.did, aliceDeleteWriteData.message);
121
+ const aliceDeleteWriteReply = await dwn.processMessage(alice.did, aliceDeleteWriteData.message);
129
122
  expect(aliceDeleteWriteReply.status.code).toBe(202);
130
123
  // verify the other record with the same data is unaffected
131
- const aliceRead1 = yield RecordsRead.create({
124
+ const aliceRead1 = await RecordsRead.create({
132
125
  filter: {
133
126
  recordId: aliceWrite2Data.message.recordId,
134
127
  },
135
128
  signer: Jws.createSigner(alice)
136
129
  });
137
- const aliceRead1Reply = yield dwn.processMessage(alice.did, aliceRead1.message);
130
+ const aliceRead1Reply = await dwn.processMessage(alice.did, aliceRead1.message);
138
131
  expect(aliceRead1Reply.status.code).toBe(200);
139
- const aliceDataFetched = yield DataStream.toBytes(aliceRead1Reply.entry.data);
132
+ const aliceDataFetched = await DataStream.toBytes(aliceRead1Reply.entry.data);
140
133
  expect(ArrayUtility.byteArraysEqual(aliceDataFetched, data)).toBe(true);
141
134
  // alice deletes the other record
142
- const aliceDeleteWrite2Data = yield TestDataGenerator.generateRecordsDelete({
135
+ const aliceDeleteWrite2Data = await TestDataGenerator.generateRecordsDelete({
143
136
  author: alice,
144
137
  recordId: aliceWrite2Data.message.recordId
145
138
  });
146
- const aliceDeleteWrite2Reply = yield dwn.processMessage(alice.did, aliceDeleteWrite2Data.message);
139
+ const aliceDeleteWrite2Reply = await dwn.processMessage(alice.did, aliceDeleteWrite2Data.message);
147
140
  expect(aliceDeleteWrite2Reply.status.code).toBe(202);
148
141
  // verify that alice can no longer fetch the 2nd record
149
- const aliceRead2Reply = yield dwn.processMessage(alice.did, aliceRead1.message);
142
+ const aliceRead2Reply = await dwn.processMessage(alice.did, aliceRead1.message);
150
143
  expect(aliceRead2Reply.status.code).toBe(404);
151
144
  // verify that bob can still fetch record with the same data
152
- const bobRead1 = yield RecordsRead.create({
145
+ const bobRead1 = await RecordsRead.create({
153
146
  filter: {
154
147
  recordId: bobWriteData.message.recordId,
155
148
  },
156
149
  signer: Jws.createSigner(bob)
157
150
  });
158
- const bobRead1Reply = yield dwn.processMessage(bob.did, bobRead1.message);
151
+ const bobRead1Reply = await dwn.processMessage(bob.did, bobRead1.message);
159
152
  expect(bobRead1Reply.status.code).toBe(200);
160
- const bobDataFetched = yield DataStream.toBytes(bobRead1Reply.entry.data);
153
+ const bobDataFetched = await DataStream.toBytes(bobRead1Reply.entry.data);
161
154
  expect(ArrayUtility.byteArraysEqual(bobDataFetched, data)).toBe(true);
162
- }));
163
- it('should return 404 if deleting a non-existent record', () => __awaiter(this, void 0, void 0, function* () {
164
- const alice = yield TestDataGenerator.generateDidKeyPersona();
155
+ });
156
+ it('should return 404 if deleting a non-existent record', async () => {
157
+ const alice = await TestDataGenerator.generateDidKeyPersona();
165
158
  // testing deleting a non-existent record
166
- const recordsDelete = yield RecordsDelete.create({
159
+ const recordsDelete = await RecordsDelete.create({
167
160
  recordId: 'nonExistentRecordId',
168
161
  signer: Jws.createSigner(alice)
169
162
  });
170
- const deleteReply = yield dwn.processMessage(alice.did, recordsDelete.message);
163
+ const deleteReply = await dwn.processMessage(alice.did, recordsDelete.message);
171
164
  expect(deleteReply.status.code).toBe(404);
172
- }));
173
- it('should be disallowed if there is a newer RecordsWrite already in the DWN ', () => __awaiter(this, void 0, void 0, function* () {
174
- var _a;
175
- const alice = yield TestDataGenerator.generateDidKeyPersona();
165
+ });
166
+ it('should be disallowed if there is a newer RecordsWrite already in the DWN ', async () => {
167
+ const alice = await TestDataGenerator.generateDidKeyPersona();
168
+ await TestDataGenerator.installDefaultTestProtocol(dwn, alice);
176
169
  // initial write
177
- const initialWriteData = yield TestDataGenerator.generateRecordsWrite({ author: alice });
178
- const initialWriteReply = yield dwn.processMessage(alice.did, initialWriteData.message, { dataStream: initialWriteData.dataStream });
170
+ const initialWriteData = await TestDataGenerator.generateRecordsWrite({ author: alice });
171
+ const initialWriteReply = await dwn.processMessage(alice.did, initialWriteData.message, { dataStream: initialWriteData.dataStream });
179
172
  expect(initialWriteReply.status.code).toBe(202);
180
173
  // generate subsequent write and delete with the delete having an earlier timestamp
181
174
  // NOTE: creating RecordsDelete first ensures it has an earlier `messageTimestamp` time
182
- const recordsDelete = yield RecordsDelete.create({
175
+ const recordsDelete = await RecordsDelete.create({
183
176
  recordId: initialWriteData.message.recordId,
184
177
  signer: Jws.createSigner(alice)
185
178
  });
186
- yield Time.minimalSleep();
187
- const subsequentWriteData = yield TestDataGenerator.generateFromRecordsWrite({
179
+ await Time.minimalSleep();
180
+ const subsequentWriteData = await TestDataGenerator.generateFromRecordsWrite({
188
181
  existingWrite: initialWriteData.recordsWrite,
189
182
  author: alice
190
183
  });
191
184
  // subsequent write
192
- const subsequentWriteReply = yield dwn.processMessage(alice.did, subsequentWriteData.message, { dataStream: subsequentWriteData.dataStream });
185
+ const subsequentWriteReply = await dwn.processMessage(alice.did, subsequentWriteData.message, { dataStream: subsequentWriteData.dataStream });
193
186
  expect(subsequentWriteReply.status.code).toBe(202);
194
187
  // test that a delete with an earlier `messageTimestamp` results in a 409
195
- const deleteReply = yield dwn.processMessage(alice.did, recordsDelete.message);
188
+ const deleteReply = await dwn.processMessage(alice.did, recordsDelete.message);
196
189
  expect(deleteReply.status.code).toBe(409);
197
190
  // ensure data still exists
198
- const queryData = yield TestDataGenerator.generateRecordsQuery({
191
+ const queryData = await TestDataGenerator.generateRecordsQuery({
199
192
  author: alice,
200
193
  filter: { recordId: initialWriteData.message.recordId }
201
194
  });
202
195
  const expectedEncodedData = Encoder.bytesToBase64Url(subsequentWriteData.dataBytes);
203
- const reply = yield dwn.processMessage(alice.did, queryData.message);
196
+ const reply = await dwn.processMessage(alice.did, queryData.message);
204
197
  expect(reply.status.code).toBe(200);
205
- expect((_a = reply.entries) === null || _a === void 0 ? void 0 : _a.length).toBe(1);
198
+ expect(reply.entries?.length).toBe(1);
206
199
  expect(reply.entries[0].encodedData).toBe(expectedEncodedData);
207
- }));
208
- it('should be able to delete then rewrite the same data', () => __awaiter(this, void 0, void 0, function* () {
209
- var _a, _b, _c;
210
- const alice = yield TestDataGenerator.generateDidKeyPersona();
200
+ });
201
+ it('should be able to delete then rewrite the same data', async () => {
202
+ const alice = await TestDataGenerator.generateDidKeyPersona();
203
+ await TestDataGenerator.installDefaultTestProtocol(dwn, alice);
211
204
  const data = Encoder.stringToBytes('test');
212
205
  const encodedData = Encoder.bytesToBase64Url(data);
213
206
  // alice writes a record
214
- const aliceWriteData = yield TestDataGenerator.generateRecordsWrite({
207
+ const aliceWriteData = await TestDataGenerator.generateRecordsWrite({
215
208
  author: alice,
216
209
  data
217
210
  });
218
- const aliceWriteReply = yield dwn.processMessage(alice.did, aliceWriteData.message, { dataStream: aliceWriteData.dataStream });
211
+ const aliceWriteReply = await dwn.processMessage(alice.did, aliceWriteData.message, { dataStream: aliceWriteData.dataStream });
219
212
  expect(aliceWriteReply.status.code).toBe(202);
220
- const aliceQueryWriteAfterAliceWriteData = yield TestDataGenerator.generateRecordsQuery({
213
+ const aliceQueryWriteAfterAliceWriteData = await TestDataGenerator.generateRecordsQuery({
221
214
  author: alice,
222
215
  filter: { recordId: aliceWriteData.message.recordId }
223
216
  });
224
- const aliceQueryWriteAfterAliceWriteReply = yield dwn.processMessage(alice.did, aliceQueryWriteAfterAliceWriteData.message);
217
+ const aliceQueryWriteAfterAliceWriteReply = await dwn.processMessage(alice.did, aliceQueryWriteAfterAliceWriteData.message);
225
218
  expect(aliceQueryWriteAfterAliceWriteReply.status.code).toBe(200);
226
- expect((_a = aliceQueryWriteAfterAliceWriteReply.entries) === null || _a === void 0 ? void 0 : _a.length).toBe(1);
219
+ expect(aliceQueryWriteAfterAliceWriteReply.entries?.length).toBe(1);
227
220
  expect(aliceQueryWriteAfterAliceWriteReply.entries[0].encodedData).toBe(encodedData);
228
221
  // alice deleting the record
229
- const aliceDeleteWriteData = yield TestDataGenerator.generateRecordsDelete({
222
+ const aliceDeleteWriteData = await TestDataGenerator.generateRecordsDelete({
230
223
  author: alice,
231
224
  recordId: aliceWriteData.message.recordId
232
225
  });
233
- const aliceDeleteWriteReply = yield dwn.processMessage(alice.did, aliceDeleteWriteData.message);
226
+ const aliceDeleteWriteReply = await dwn.processMessage(alice.did, aliceDeleteWriteData.message);
234
227
  expect(aliceDeleteWriteReply.status.code).toBe(202);
235
- const aliceQueryWriteAfterAliceDeleteData = yield TestDataGenerator.generateRecordsQuery({
228
+ const aliceQueryWriteAfterAliceDeleteData = await TestDataGenerator.generateRecordsQuery({
236
229
  author: alice,
237
230
  filter: { recordId: aliceWriteData.message.recordId }
238
231
  });
239
- const aliceQueryWriteAfterAliceDeleteReply = yield dwn.processMessage(alice.did, aliceQueryWriteAfterAliceDeleteData.message);
232
+ const aliceQueryWriteAfterAliceDeleteReply = await dwn.processMessage(alice.did, aliceQueryWriteAfterAliceDeleteData.message);
240
233
  expect(aliceQueryWriteAfterAliceDeleteReply.status.code).toBe(200);
241
- expect((_b = aliceQueryWriteAfterAliceDeleteReply.entries) === null || _b === void 0 ? void 0 : _b.length).toBe(0);
234
+ expect(aliceQueryWriteAfterAliceDeleteReply.entries?.length).toBe(0);
242
235
  // alice writes a new record with the same data
243
- const aliceRewriteData = yield TestDataGenerator.generateRecordsWrite({
236
+ const aliceRewriteData = await TestDataGenerator.generateRecordsWrite({
244
237
  author: alice,
245
238
  data
246
239
  });
247
- const aliceRewriteReply = yield dwn.processMessage(alice.did, aliceRewriteData.message, { dataStream: aliceRewriteData.dataStream });
240
+ const aliceRewriteReply = await dwn.processMessage(alice.did, aliceRewriteData.message, { dataStream: aliceRewriteData.dataStream });
248
241
  expect(aliceRewriteReply.status.code).toBe(202);
249
- const aliceQueryWriteAfterAliceRewriteData = yield TestDataGenerator.generateRecordsQuery({
242
+ const aliceQueryWriteAfterAliceRewriteData = await TestDataGenerator.generateRecordsQuery({
250
243
  author: alice,
251
244
  filter: { recordId: aliceRewriteData.message.recordId }
252
245
  });
253
- const aliceQueryWriteAfterAliceRewriteReply = yield dwn.processMessage(alice.did, aliceQueryWriteAfterAliceRewriteData.message);
246
+ const aliceQueryWriteAfterAliceRewriteReply = await dwn.processMessage(alice.did, aliceQueryWriteAfterAliceRewriteData.message);
254
247
  expect(aliceQueryWriteAfterAliceRewriteReply.status.code).toBe(200);
255
- expect((_c = aliceQueryWriteAfterAliceRewriteReply.entries) === null || _c === void 0 ? void 0 : _c.length).toBe(1);
248
+ expect(aliceQueryWriteAfterAliceRewriteReply.entries?.length).toBe(1);
256
249
  expect(aliceQueryWriteAfterAliceRewriteReply.entries[0].encodedData).toBe(encodedData);
257
- }));
250
+ });
258
251
  describe('protocol based deletes', () => {
259
- it('should allow delete with allow-anyone rule', () => __awaiter(this, void 0, void 0, function* () {
252
+ it('should allow delete with allow-anyone rule', async () => {
260
253
  // scenario: Alice creates a record in her DWN. Bob (anyone) is able to delete the record.
261
254
  const protocolDefinition = anyoneCollaborateProtocolDefinition;
262
- const alice = yield TestDataGenerator.generatePersona();
263
- const bob = yield TestDataGenerator.generatePersona();
264
- const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
255
+ const alice = await TestDataGenerator.generatePersona();
256
+ const bob = await TestDataGenerator.generatePersona();
257
+ const protocolsConfig = await TestDataGenerator.generateProtocolsConfigure({
265
258
  author: alice,
266
259
  protocolDefinition
267
260
  });
268
261
  // setting up a stub DID resolver
269
262
  TestStubGenerator.stubDidResolver(didResolver, [alice, bob]);
270
- const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
263
+ const protocolsConfigureReply = await dwn.processMessage(alice.did, protocolsConfig.message);
271
264
  expect(protocolsConfigureReply.status.code).toBe(202);
272
265
  // Alice writes a record
273
- const recordsWrite = yield TestDataGenerator.generateRecordsWrite({
266
+ const recordsWrite = await TestDataGenerator.generateRecordsWrite({
274
267
  author: alice,
275
268
  protocol: protocolDefinition.protocol,
276
269
  protocolPath: 'doc',
277
270
  });
278
- const recordsWriteReply = yield dwn.processMessage(alice.did, recordsWrite.message, { dataStream: recordsWrite.dataStream });
271
+ const recordsWriteReply = await dwn.processMessage(alice.did, recordsWrite.message, { dataStream: recordsWrite.dataStream });
279
272
  expect(recordsWriteReply.status.code).toBe(202);
280
273
  // Bob (anyone) is able to delete the record
281
- const recordsDelete = yield TestDataGenerator.generateRecordsDelete({
274
+ const recordsDelete = await TestDataGenerator.generateRecordsDelete({
282
275
  author: bob,
283
276
  recordId: recordsWrite.message.recordId,
284
277
  });
285
- const recordsDeleteReply = yield dwn.processMessage(alice.did, recordsDelete.message);
278
+ const recordsDeleteReply = await dwn.processMessage(alice.did, recordsDelete.message);
286
279
  expect(recordsDeleteReply.status.code).toBe(202);
287
- }));
280
+ });
288
281
  describe('recipient rules', () => {
289
- it('should allow delete with ancestor recipient rule', () => __awaiter(this, void 0, void 0, function* () {
282
+ it('should allow delete with ancestor recipient rule', async () => {
290
283
  // scenario: Alice creates a 'post' with Bob as recipient and a 'post/tag'. Bob is able to delete
291
284
  // the 'chat/tag' because he was recipient of the 'chat'. Carol is not able to delete.
292
285
  const protocolDefinition = recipientCanProtocolDefinition;
293
- const alice = yield TestDataGenerator.generatePersona();
294
- const bob = yield TestDataGenerator.generatePersona();
295
- const carol = yield TestDataGenerator.generatePersona();
296
- const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
286
+ const alice = await TestDataGenerator.generatePersona();
287
+ const bob = await TestDataGenerator.generatePersona();
288
+ const carol = await TestDataGenerator.generatePersona();
289
+ const protocolsConfig = await TestDataGenerator.generateProtocolsConfigure({
297
290
  author: alice,
298
291
  protocolDefinition
299
292
  });
300
293
  // setting up a stub DID resolver
301
294
  TestStubGenerator.stubDidResolver(didResolver, [alice, bob, carol]);
302
- const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
295
+ const protocolsConfigureReply = await dwn.processMessage(alice.did, protocolsConfig.message);
303
296
  expect(protocolsConfigureReply.status.code).toBe(202);
304
297
  // Alice writes a chat
305
- const chatRecordsWrite = yield TestDataGenerator.generateRecordsWrite({
298
+ const chatRecordsWrite = await TestDataGenerator.generateRecordsWrite({
306
299
  author: alice,
307
300
  recipient: bob.did,
308
301
  protocol: protocolDefinition.protocol,
309
302
  protocolPath: 'post',
310
303
  });
311
- const chatRecordsWriteReply = yield dwn.processMessage(alice.did, chatRecordsWrite.message, { dataStream: chatRecordsWrite.dataStream });
304
+ const chatRecordsWriteReply = await dwn.processMessage(alice.did, chatRecordsWrite.message, { dataStream: chatRecordsWrite.dataStream });
312
305
  expect(chatRecordsWriteReply.status.code).toBe(202);
313
306
  // Alice writes a 'chat/tag'
314
- const tagRecordsWrite = yield TestDataGenerator.generateRecordsWrite({
307
+ const tagRecordsWrite = await TestDataGenerator.generateRecordsWrite({
315
308
  author: alice,
316
309
  protocol: protocolDefinition.protocol,
317
310
  protocolPath: 'post/tag',
318
311
  parentContextId: chatRecordsWrite.message.contextId,
319
312
  });
320
- const tagRecordsWriteReply = yield dwn.processMessage(alice.did, tagRecordsWrite.message, { dataStream: tagRecordsWrite.dataStream });
313
+ const tagRecordsWriteReply = await dwn.processMessage(alice.did, tagRecordsWrite.message, { dataStream: tagRecordsWrite.dataStream });
321
314
  expect(tagRecordsWriteReply.status.code).toBe(202);
322
315
  // Carol is unable to delete the 'chat/tag'
323
- const recordsDeleteCarol = yield TestDataGenerator.generateRecordsDelete({
316
+ const recordsDeleteCarol = await TestDataGenerator.generateRecordsDelete({
324
317
  author: carol,
325
318
  recordId: tagRecordsWrite.message.recordId,
326
319
  });
327
- const recordsDeleteCarolReply = yield dwn.processMessage(alice.did, recordsDeleteCarol.message);
320
+ const recordsDeleteCarolReply = await dwn.processMessage(alice.did, recordsDeleteCarol.message);
328
321
  expect(recordsDeleteCarolReply.status.code).toBe(401);
329
322
  expect(recordsDeleteCarolReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationActionNotAllowed);
330
323
  // Bob is able to delete the 'chat/tag'
331
- const recordsDelete = yield TestDataGenerator.generateRecordsDelete({
324
+ const recordsDelete = await TestDataGenerator.generateRecordsDelete({
332
325
  author: bob,
333
326
  recordId: tagRecordsWrite.message.recordId,
334
327
  });
335
- const recordsDeleteReply = yield dwn.processMessage(alice.did, recordsDelete.message);
328
+ const recordsDeleteReply = await dwn.processMessage(alice.did, recordsDelete.message);
336
329
  expect(recordsDeleteReply.status.code).toBe(202);
337
- }));
338
- it('should allow delete with direct recipient rule', () => __awaiter(this, void 0, void 0, function* () {
330
+ });
331
+ it('should allow delete with direct recipient rule', async () => {
339
332
  // scenario: Alice creates a 'post' with Bob as recipient. Bob is able to delete
340
333
  // the 'post' because he was recipient of it. Carol is not able to delete.
341
334
  const protocolDefinition = recipientCanProtocolDefinition;
342
- const alice = yield TestDataGenerator.generatePersona();
343
- const bob = yield TestDataGenerator.generatePersona();
344
- const carol = yield TestDataGenerator.generatePersona();
345
- const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
335
+ const alice = await TestDataGenerator.generatePersona();
336
+ const bob = await TestDataGenerator.generatePersona();
337
+ const carol = await TestDataGenerator.generatePersona();
338
+ const protocolsConfig = await TestDataGenerator.generateProtocolsConfigure({
346
339
  author: alice,
347
340
  protocolDefinition
348
341
  });
349
342
  // setting up a stub DID resolver
350
343
  TestStubGenerator.stubDidResolver(didResolver, [alice, bob, carol]);
351
- const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
344
+ const protocolsConfigureReply = await dwn.processMessage(alice.did, protocolsConfig.message);
352
345
  expect(protocolsConfigureReply.status.code).toBe(202);
353
346
  // Alice creates a 'post' with Bob as recipient
354
- const recordsWrite = yield TestDataGenerator.generateRecordsWrite({
347
+ const recordsWrite = await TestDataGenerator.generateRecordsWrite({
355
348
  author: alice,
356
349
  recipient: bob.did,
357
350
  protocol: protocolDefinition.protocol,
358
351
  protocolPath: 'post',
359
352
  });
360
- const recordsWriteReply = yield dwn.processMessage(alice.did, recordsWrite.message, { dataStream: recordsWrite.dataStream });
353
+ const recordsWriteReply = await dwn.processMessage(alice.did, recordsWrite.message, { dataStream: recordsWrite.dataStream });
361
354
  expect(recordsWriteReply.status.code).toBe(202);
362
355
  // Carol is unable to delete the 'post'
363
- const carolRecordsDelete = yield TestDataGenerator.generateRecordsDelete({
356
+ const carolRecordsDelete = await TestDataGenerator.generateRecordsDelete({
364
357
  author: carol,
365
358
  recordId: recordsWrite.message.recordId,
366
359
  });
367
- const carolRecordsDeleteReply = yield dwn.processMessage(alice.did, carolRecordsDelete.message);
360
+ const carolRecordsDeleteReply = await dwn.processMessage(alice.did, carolRecordsDelete.message);
368
361
  expect(carolRecordsDeleteReply.status.code).toBe(401);
369
362
  expect(carolRecordsDeleteReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationActionNotAllowed);
370
363
  // Bob is able to delete the post
371
- const bobRecordsDelete = yield TestDataGenerator.generateRecordsDelete({
364
+ const bobRecordsDelete = await TestDataGenerator.generateRecordsDelete({
372
365
  author: bob,
373
366
  recordId: recordsWrite.message.recordId,
374
367
  });
375
- const bobRecordsDeleteReply = yield dwn.processMessage(alice.did, bobRecordsDelete.message);
368
+ const bobRecordsDeleteReply = await dwn.processMessage(alice.did, bobRecordsDelete.message);
376
369
  expect(bobRecordsDeleteReply.status.code).toBe(202);
377
- }));
370
+ });
378
371
  });
379
372
  describe('author action rules', () => {
380
- it('allow author to delete with ancestor author rule', () => __awaiter(this, void 0, void 0, function* () {
373
+ it('allow author to delete with ancestor author rule', async () => {
381
374
  // scenario: Bob writes a 'post' and Alice writes a 'post/comment' to her DWN. Bob deletes the comment
382
375
  // because author of post can delete. Carol is unable to delete the comment.
383
376
  const protocolDefinition = authorCanProtocolDefinition;
384
- const alice = yield TestDataGenerator.generatePersona();
385
- const bob = yield TestDataGenerator.generatePersona();
386
- const carol = yield TestDataGenerator.generatePersona();
387
- const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
377
+ const alice = await TestDataGenerator.generatePersona();
378
+ const bob = await TestDataGenerator.generatePersona();
379
+ const carol = await TestDataGenerator.generatePersona();
380
+ const protocolsConfig = await TestDataGenerator.generateProtocolsConfigure({
388
381
  author: alice,
389
382
  protocolDefinition
390
383
  });
391
384
  // setting up a stub DID resolver
392
385
  TestStubGenerator.stubDidResolver(didResolver, [alice, bob, carol]);
393
- const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
386
+ const protocolsConfigureReply = await dwn.processMessage(alice.did, protocolsConfig.message);
394
387
  expect(protocolsConfigureReply.status.code).toBe(202);
395
388
  // Bob writes a post
396
- const postRecordsWrite = yield TestDataGenerator.generateRecordsWrite({
389
+ const postRecordsWrite = await TestDataGenerator.generateRecordsWrite({
397
390
  author: bob,
398
391
  protocol: protocolDefinition.protocol,
399
392
  protocolPath: 'post',
400
393
  });
401
- const postRecordsWriteReply = yield dwn.processMessage(alice.did, postRecordsWrite.message, { dataStream: postRecordsWrite.dataStream });
394
+ const postRecordsWriteReply = await dwn.processMessage(alice.did, postRecordsWrite.message, { dataStream: postRecordsWrite.dataStream });
402
395
  expect(postRecordsWriteReply.status.code).toBe(202);
403
396
  // Alice writes a 'post/comment'
404
- const commentRecordsWrite = yield TestDataGenerator.generateRecordsWrite({
397
+ const commentRecordsWrite = await TestDataGenerator.generateRecordsWrite({
405
398
  author: alice,
406
399
  protocol: protocolDefinition.protocol,
407
400
  protocolPath: 'post/comment',
408
401
  parentContextId: postRecordsWrite.message.contextId,
409
402
  });
410
- const commentRecordsWriteReply = yield dwn.processMessage(alice.did, commentRecordsWrite.message, { dataStream: commentRecordsWrite.dataStream });
403
+ const commentRecordsWriteReply = await dwn.processMessage(alice.did, commentRecordsWrite.message, { dataStream: commentRecordsWrite.dataStream });
411
404
  expect(commentRecordsWriteReply.status.code).toBe(202);
412
405
  // Carol is unable to delete Alice's 'post/comment'
413
- const recordsDeleteCarol = yield TestDataGenerator.generateRecordsDelete({
406
+ const recordsDeleteCarol = await TestDataGenerator.generateRecordsDelete({
414
407
  author: carol,
415
408
  recordId: commentRecordsWrite.message.recordId,
416
409
  });
417
- const recordsDeleteCarolReply = yield dwn.processMessage(alice.did, recordsDeleteCarol.message);
410
+ const recordsDeleteCarolReply = await dwn.processMessage(alice.did, recordsDeleteCarol.message);
418
411
  expect(recordsDeleteCarolReply.status.code).toBe(401);
419
412
  expect(recordsDeleteCarolReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationActionNotAllowed);
420
413
  // Bob is able to delete the Alice's 'post/comment'
421
- const recordsDelete = yield TestDataGenerator.generateRecordsDelete({
414
+ const recordsDelete = await TestDataGenerator.generateRecordsDelete({
422
415
  author: bob,
423
416
  recordId: commentRecordsWrite.message.recordId,
424
417
  });
425
- const recordsDeleteReply = yield dwn.processMessage(alice.did, recordsDelete.message);
418
+ const recordsDeleteReply = await dwn.processMessage(alice.did, recordsDelete.message);
426
419
  expect(recordsDeleteReply.status.code).toBe(202);
427
- }));
420
+ });
428
421
  });
429
422
  describe('role based deletes', () => {
430
- it('should allow co-delete by invoking a context role', () => __awaiter(this, void 0, void 0, function* () {
423
+ it('should allow co-delete by invoking a context role', async () => {
431
424
  // scenario: Alice adds Bob as a 'thread/admin' role. She writes a 'thread/chat'.
432
425
  // Bob invokes his admin role to delete the 'thread/chat'. Carol is unable to delete
433
426
  // the 'thread/chat'.
434
- const alice = yield TestDataGenerator.generateDidKeyPersona();
435
- const bob = yield TestDataGenerator.generateDidKeyPersona();
436
- const carol = yield TestDataGenerator.generateDidKeyPersona();
427
+ const alice = await TestDataGenerator.generateDidKeyPersona();
428
+ const bob = await TestDataGenerator.generateDidKeyPersona();
429
+ const carol = await TestDataGenerator.generateDidKeyPersona();
437
430
  const protocolDefinition = threadRoleProtocolDefinition;
438
- const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
431
+ const protocolsConfig = await TestDataGenerator.generateProtocolsConfigure({
439
432
  author: alice,
440
433
  protocolDefinition
441
434
  });
442
- const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
435
+ const protocolsConfigureReply = await dwn.processMessage(alice.did, protocolsConfig.message);
443
436
  expect(protocolsConfigureReply.status.code).toBe(202);
444
437
  // Alice creates a thread
445
- const threadRecord = yield TestDataGenerator.generateRecordsWrite({
438
+ const threadRecord = await TestDataGenerator.generateRecordsWrite({
446
439
  author: alice,
447
440
  recipient: bob.did,
448
441
  protocol: protocolDefinition.protocol,
449
442
  protocolPath: 'thread'
450
443
  });
451
- const threadRecordReply = yield dwn.processMessage(alice.did, threadRecord.message, { dataStream: threadRecord.dataStream });
444
+ const threadRecordReply = await dwn.processMessage(alice.did, threadRecord.message, { dataStream: threadRecord.dataStream });
452
445
  expect(threadRecordReply.status.code).toBe(202);
453
446
  // Alice adds Bob as a 'thread/admin' in that thread
454
- const participantRecord = yield TestDataGenerator.generateRecordsWrite({
447
+ const participantRecord = await TestDataGenerator.generateRecordsWrite({
455
448
  author: alice,
456
449
  recipient: bob.did,
457
450
  protocol: protocolDefinition.protocol,
458
451
  protocolPath: 'thread/admin',
459
452
  parentContextId: threadRecord.message.contextId,
460
453
  });
461
- const participantRecordReply = yield dwn.processMessage(alice.did, participantRecord.message, { dataStream: participantRecord.dataStream });
454
+ const participantRecordReply = await dwn.processMessage(alice.did, participantRecord.message, { dataStream: participantRecord.dataStream });
462
455
  expect(participantRecordReply.status.code).toBe(202);
463
456
  // Alice writes a chat message in that thread
464
- const chatRecord = yield TestDataGenerator.generateRecordsWrite({
457
+ const chatRecord = await TestDataGenerator.generateRecordsWrite({
465
458
  author: alice,
466
459
  recipient: alice.did,
467
460
  protocol: protocolDefinition.protocol,
468
461
  protocolPath: 'thread/chat',
469
462
  parentContextId: threadRecord.message.contextId,
470
463
  });
471
- const chatRecordReply = yield dwn.processMessage(alice.did, chatRecord.message, { dataStream: chatRecord.dataStream });
464
+ const chatRecordReply = await dwn.processMessage(alice.did, chatRecord.message, { dataStream: chatRecord.dataStream });
472
465
  expect(chatRecordReply.status.code).toBe(202);
473
466
  // Verifies that Carol cannot delete without appropriate role
474
- const chatDeleteCarol = yield TestDataGenerator.generateRecordsDelete({
467
+ const chatDeleteCarol = await TestDataGenerator.generateRecordsDelete({
475
468
  author: carol,
476
469
  recordId: chatRecord.message.recordId,
477
470
  });
478
- const chatDeleteReplyCarol = yield dwn.processMessage(alice.did, chatDeleteCarol.message);
471
+ const chatDeleteReplyCarol = await dwn.processMessage(alice.did, chatDeleteCarol.message);
479
472
  expect(chatDeleteReplyCarol.status.code).toBe(401);
480
473
  expect(chatDeleteReplyCarol.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationActionNotAllowed);
481
474
  // Bob invokes the role to delete the chat message
482
- const chatDelete = yield TestDataGenerator.generateRecordsDelete({
475
+ const chatDelete = await TestDataGenerator.generateRecordsDelete({
483
476
  author: bob,
484
477
  recordId: chatRecord.message.recordId,
485
478
  protocolRole: 'thread/admin',
486
479
  });
487
- const chatDeleteReply = yield dwn.processMessage(alice.did, chatDelete.message);
480
+ const chatDeleteReply = await dwn.processMessage(alice.did, chatDelete.message);
488
481
  expect(chatDeleteReply.status.code).toBe(202);
489
- }));
490
- it('should allow co-delete invoking a root-level role', () => __awaiter(this, void 0, void 0, function* () {
482
+ });
483
+ it('should allow co-delete invoking a root-level role', async () => {
491
484
  // scenario: Alice adds Bob as a root-level 'admin' role. She writes a 'chat'.
492
485
  // Bob invokes his admin role to delete the 'chat'.
493
- const alice = yield TestDataGenerator.generateDidKeyPersona();
494
- const bob = yield TestDataGenerator.generateDidKeyPersona();
495
- const carol = yield TestDataGenerator.generateDidKeyPersona();
486
+ const alice = await TestDataGenerator.generateDidKeyPersona();
487
+ const bob = await TestDataGenerator.generateDidKeyPersona();
488
+ const carol = await TestDataGenerator.generateDidKeyPersona();
496
489
  const protocolDefinition = friendRoleProtocolDefinition;
497
- const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
490
+ const protocolsConfig = await TestDataGenerator.generateProtocolsConfigure({
498
491
  author: alice,
499
492
  protocolDefinition
500
493
  });
501
- const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
494
+ const protocolsConfigureReply = await dwn.processMessage(alice.did, protocolsConfig.message);
502
495
  expect(protocolsConfigureReply.status.code).toBe(202);
503
496
  // Alice adds Bob as a 'thread/admin' in that thread
504
- const participantRecord = yield TestDataGenerator.generateRecordsWrite({
497
+ const participantRecord = await TestDataGenerator.generateRecordsWrite({
505
498
  author: alice,
506
499
  recipient: bob.did,
507
500
  protocol: protocolDefinition.protocol,
508
501
  protocolPath: 'admin',
509
502
  });
510
- const participantRecordReply = yield dwn.processMessage(alice.did, participantRecord.message, { dataStream: participantRecord.dataStream });
503
+ const participantRecordReply = await dwn.processMessage(alice.did, participantRecord.message, { dataStream: participantRecord.dataStream });
511
504
  expect(participantRecordReply.status.code).toBe(202);
512
505
  // Alice writes a chat message in that thread
513
- const chatRecord = yield TestDataGenerator.generateRecordsWrite({
506
+ const chatRecord = await TestDataGenerator.generateRecordsWrite({
514
507
  author: alice,
515
508
  recipient: alice.did,
516
509
  protocol: protocolDefinition.protocol,
517
510
  protocolPath: 'chat',
518
511
  });
519
- const chatRecordReply = yield dwn.processMessage(alice.did, chatRecord.message, { dataStream: chatRecord.dataStream });
512
+ const chatRecordReply = await dwn.processMessage(alice.did, chatRecord.message, { dataStream: chatRecord.dataStream });
520
513
  expect(chatRecordReply.status.code).toBe(202);
521
514
  // Carol is unable to delete the chat message
522
- const chatDeleteCarol = yield TestDataGenerator.generateRecordsDelete({
515
+ const chatDeleteCarol = await TestDataGenerator.generateRecordsDelete({
523
516
  author: carol,
524
517
  recordId: chatRecord.message.recordId,
525
518
  });
526
- const chatDeleteCarolReply = yield dwn.processMessage(alice.did, chatDeleteCarol.message);
519
+ const chatDeleteCarolReply = await dwn.processMessage(alice.did, chatDeleteCarol.message);
527
520
  expect(chatDeleteCarolReply.status.code).toBe(401);
528
521
  expect(chatDeleteCarolReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationActionNotAllowed);
529
522
  // Bob invokes the role to delete the chat message
530
- const chatDelete = yield TestDataGenerator.generateRecordsDelete({
523
+ const chatDelete = await TestDataGenerator.generateRecordsDelete({
531
524
  author: bob,
532
525
  recordId: chatRecord.message.recordId,
533
526
  protocolRole: 'admin',
534
527
  });
535
- const chatDeleteReply = yield dwn.processMessage(alice.did, chatDelete.message);
528
+ const chatDeleteReply = await dwn.processMessage(alice.did, chatDelete.message);
536
529
  expect(chatDeleteReply.status.code).toBe(202);
537
- }));
530
+ });
538
531
  });
539
532
  });
540
- it('should return 401 if message is not authorized', () => __awaiter(this, void 0, void 0, function* () {
533
+ it('should return 401 if message is not authorized', async () => {
541
534
  // scenario: Alice creates a record and Bob is unable to delete it.
542
- const alice = yield TestDataGenerator.generateDidKeyPersona();
543
- const bob = yield TestDataGenerator.generateDidKeyPersona();
544
- const recordsWrite = yield TestDataGenerator.generateRecordsWrite({
535
+ const alice = await TestDataGenerator.generateDidKeyPersona();
536
+ const bob = await TestDataGenerator.generateDidKeyPersona();
537
+ await TestDataGenerator.installDefaultTestProtocol(dwn, alice);
538
+ const recordsWrite = await TestDataGenerator.generateRecordsWrite({
545
539
  author: alice,
546
540
  });
547
- const recordsWriteReply = yield dwn.processMessage(alice.did, recordsWrite.message, { dataStream: recordsWrite.dataStream });
541
+ const recordsWriteReply = await dwn.processMessage(alice.did, recordsWrite.message, { dataStream: recordsWrite.dataStream });
548
542
  expect(recordsWriteReply.status.code).toBe(202);
549
- const recordsDelete = yield TestDataGenerator.generateRecordsDelete({
543
+ const recordsDelete = await TestDataGenerator.generateRecordsDelete({
550
544
  author: bob,
551
545
  recordId: recordsWrite.message.recordId,
552
546
  });
553
- const recordsDeleteReply = yield dwn.processMessage(alice.did, recordsDelete.message);
547
+ const recordsDeleteReply = await dwn.processMessage(alice.did, recordsDelete.message);
554
548
  expect(recordsDeleteReply.status.code).toBe(401);
555
- expect(recordsDeleteReply.status.detail).toContain(DwnErrorCode.RecordsDeleteAuthorizationFailed);
556
- }));
549
+ });
557
550
  describe('grant based deletes', () => {
558
- it('should allow delete with a matching protocol grant scope', () => __awaiter(this, void 0, void 0, function* () {
551
+ it('should allow delete with a matching protocol grant scope', async () => {
559
552
  // scenario: Alice writes a protocol record, grants Bob delete permission, Bob deletes it.
560
- const alice = yield TestDataGenerator.generateDidKeyPersona();
561
- const bob = yield TestDataGenerator.generateDidKeyPersona();
553
+ const alice = await TestDataGenerator.generateDidKeyPersona();
554
+ const bob = await TestDataGenerator.generateDidKeyPersona();
562
555
  const protocolDefinition = {
563
556
  protocol: 'http://grant-delete-test.xyz',
564
557
  published: false,
@@ -566,22 +559,22 @@ export function testRecordsDeleteHandler() {
566
559
  structure: { foo: {} }
567
560
  };
568
561
  // Alice installs the protocol
569
- const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
562
+ const protocolsConfig = await TestDataGenerator.generateProtocolsConfigure({
570
563
  author: alice,
571
564
  protocolDefinition
572
565
  });
573
- const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
566
+ const protocolsConfigureReply = await dwn.processMessage(alice.did, protocolsConfig.message);
574
567
  expect(protocolsConfigureReply.status.code).toBe(202);
575
568
  // Alice writes a record
576
- const { recordsWrite, dataStream } = yield TestDataGenerator.generateRecordsWrite({
569
+ const { recordsWrite, dataStream } = await TestDataGenerator.generateRecordsWrite({
577
570
  author: alice,
578
571
  protocol: protocolDefinition.protocol,
579
572
  protocolPath: 'foo',
580
573
  });
581
- const writeReply = yield dwn.processMessage(alice.did, recordsWrite.message, { dataStream });
574
+ const writeReply = await dwn.processMessage(alice.did, recordsWrite.message, { dataStream });
582
575
  expect(writeReply.status.code).toBe(202);
583
576
  // Alice grants Bob delete permission scoped to the protocol
584
- const permissionGrant = yield PermissionsProtocol.createGrant({
577
+ const permissionGrant = await PermissionsProtocol.createGrant({
585
578
  signer: Jws.createSigner(alice),
586
579
  grantedTo: bob.did,
587
580
  dateExpires: Time.createOffsetTimestamp({ seconds: 60 * 60 * 24 }),
@@ -592,22 +585,22 @@ export function testRecordsDeleteHandler() {
592
585
  }
593
586
  });
594
587
  const grantDataStream = DataStream.fromBytes(permissionGrant.permissionGrantBytes);
595
- const grantWriteReply = yield dwn.processMessage(alice.did, permissionGrant.recordsWrite.message, { dataStream: grantDataStream });
588
+ const grantWriteReply = await dwn.processMessage(alice.did, permissionGrant.recordsWrite.message, { dataStream: grantDataStream });
596
589
  expect(grantWriteReply.status.code).toBe(202);
597
590
  // Bob deletes the record using the grant
598
- const recordsDelete = yield RecordsDelete.create({
591
+ const recordsDelete = await RecordsDelete.create({
599
592
  recordId: recordsWrite.message.recordId,
600
593
  signer: Jws.createSigner(bob),
601
594
  permissionGrantId: permissionGrant.recordsWrite.message.recordId,
602
595
  });
603
- const deleteReply = yield dwn.processMessage(alice.did, recordsDelete.message);
596
+ const deleteReply = await dwn.processMessage(alice.did, recordsDelete.message);
604
597
  expect(deleteReply.status.code).toBe(202);
605
- }));
606
- it('should reject delete when grant has mismatching protocol scope', () => __awaiter(this, void 0, void 0, function* () {
598
+ });
599
+ it('should reject delete when grant has mismatching protocol scope', async () => {
607
600
  // scenario: Alice grants Bob delete permission for protocol A,
608
601
  // Bob tries to delete a record in protocol B.
609
- const alice = yield TestDataGenerator.generateDidKeyPersona();
610
- const bob = yield TestDataGenerator.generateDidKeyPersona();
602
+ const alice = await TestDataGenerator.generateDidKeyPersona();
603
+ const bob = await TestDataGenerator.generateDidKeyPersona();
611
604
  const protocolA = {
612
605
  protocol: 'http://protocol-a.xyz',
613
606
  published: false,
@@ -621,20 +614,20 @@ export function testRecordsDeleteHandler() {
621
614
  structure: { foo: {} }
622
615
  };
623
616
  // Alice installs both protocols
624
- const configA = yield TestDataGenerator.generateProtocolsConfigure({ author: alice, protocolDefinition: protocolA });
625
- expect((yield dwn.processMessage(alice.did, configA.message)).status.code).toBe(202);
626
- const configB = yield TestDataGenerator.generateProtocolsConfigure({ author: alice, protocolDefinition: protocolB });
627
- expect((yield dwn.processMessage(alice.did, configB.message)).status.code).toBe(202);
617
+ const configA = await TestDataGenerator.generateProtocolsConfigure({ author: alice, protocolDefinition: protocolA });
618
+ expect((await dwn.processMessage(alice.did, configA.message)).status.code).toBe(202);
619
+ const configB = await TestDataGenerator.generateProtocolsConfigure({ author: alice, protocolDefinition: protocolB });
620
+ expect((await dwn.processMessage(alice.did, configB.message)).status.code).toBe(202);
628
621
  // Alice writes a record in protocol B
629
- const { recordsWrite, dataStream } = yield TestDataGenerator.generateRecordsWrite({
622
+ const { recordsWrite, dataStream } = await TestDataGenerator.generateRecordsWrite({
630
623
  author: alice,
631
624
  protocol: protocolB.protocol,
632
625
  protocolPath: 'foo',
633
626
  });
634
- const writeReply = yield dwn.processMessage(alice.did, recordsWrite.message, { dataStream });
627
+ const writeReply = await dwn.processMessage(alice.did, recordsWrite.message, { dataStream });
635
628
  expect(writeReply.status.code).toBe(202);
636
629
  // Alice grants Bob delete permission scoped to protocol A (not B)
637
- const permissionGrant = yield PermissionsProtocol.createGrant({
630
+ const permissionGrant = await PermissionsProtocol.createGrant({
638
631
  signer: Jws.createSigner(alice),
639
632
  grantedTo: bob.did,
640
633
  dateExpires: Time.createOffsetTimestamp({ seconds: 60 * 60 * 24 }),
@@ -645,133 +638,127 @@ export function testRecordsDeleteHandler() {
645
638
  }
646
639
  });
647
640
  const grantDataStream = DataStream.fromBytes(permissionGrant.permissionGrantBytes);
648
- expect((yield dwn.processMessage(alice.did, permissionGrant.recordsWrite.message, { dataStream: grantDataStream })).status.code).toBe(202);
641
+ expect((await dwn.processMessage(alice.did, permissionGrant.recordsWrite.message, { dataStream: grantDataStream })).status.code).toBe(202);
649
642
  // Bob tries to delete the protocol B record with the protocol A grant — should fail
650
- const recordsDelete = yield RecordsDelete.create({
643
+ const recordsDelete = await RecordsDelete.create({
651
644
  recordId: recordsWrite.message.recordId,
652
645
  signer: Jws.createSigner(bob),
653
646
  permissionGrantId: permissionGrant.recordsWrite.message.recordId,
654
647
  });
655
- const deleteReply = yield dwn.processMessage(alice.did, recordsDelete.message);
648
+ const deleteReply = await dwn.processMessage(alice.did, recordsDelete.message);
656
649
  expect(deleteReply.status.code).toBe(401);
657
650
  expect(deleteReply.status.detail).toContain(DwnErrorCode.RecordsGrantAuthorizationDeleteProtocolScopeMismatch);
658
- }));
659
- it('should reject delete without a grant when non-owner tries to delete a non-protocol record', () => __awaiter(this, void 0, void 0, function* () {
660
- // scenario: Alice writes a non-protocol record, Bob tries to delete it without any grant.
661
- // This test verifies the fallback error path is unchanged.
662
- const alice = yield TestDataGenerator.generateDidKeyPersona();
663
- const bob = yield TestDataGenerator.generateDidKeyPersona();
664
- const { recordsWrite, dataStream } = yield TestDataGenerator.generateRecordsWrite({ author: alice });
665
- expect((yield dwn.processMessage(alice.did, recordsWrite.message, { dataStream })).status.code).toBe(202);
666
- const recordsDelete = yield RecordsDelete.create({
667
- recordId: recordsWrite.message.recordId,
668
- signer: Jws.createSigner(bob),
669
- });
670
- const deleteReply = yield dwn.processMessage(alice.did, recordsDelete.message);
671
- expect(deleteReply.status.code).toBe(401);
672
- expect(deleteReply.status.detail).toContain(DwnErrorCode.RecordsDeleteAuthorizationFailed);
673
- }));
651
+ });
674
652
  });
675
- it('should index additional properties from the RecordsWrite being deleted', () => __awaiter(this, void 0, void 0, function* () {
676
- const alice = yield TestDataGenerator.generateDidKeyPersona();
653
+ it('should index additional properties from the RecordsWrite being deleted', async () => {
654
+ const alice = await TestDataGenerator.generateDidKeyPersona();
655
+ await TestDataGenerator.installDefaultTestProtocol(dwn, alice);
677
656
  // initial write
678
- const initialWriteData = yield TestDataGenerator.generateRecordsWrite({ author: alice, schema: 'testSchema' });
679
- const initialWriteReply = yield dwn.processMessage(alice.did, initialWriteData.message, { dataStream: initialWriteData.dataStream });
657
+ const initialWriteData = await TestDataGenerator.generateRecordsWrite({ author: alice, schema: 'testSchema' });
658
+ const initialWriteReply = await dwn.processMessage(alice.did, initialWriteData.message, { dataStream: initialWriteData.dataStream });
680
659
  expect(initialWriteReply.status.code).toBe(202);
681
660
  // generate subsequent write and delete with the delete having an earlier timestamp
682
661
  // NOTE: creating RecordsDelete first ensures it has an earlier `messageTimestamp` time
683
- const recordsDelete = yield RecordsDelete.create({
662
+ const recordsDelete = await RecordsDelete.create({
684
663
  recordId: initialWriteData.message.recordId,
685
664
  signer: Jws.createSigner(alice)
686
665
  });
687
- const deleteMessageCid = yield Message.getCid(recordsDelete.message);
688
- const deleteReply = yield dwn.processMessage(alice.did, recordsDelete.message);
666
+ const deleteMessageCid = await Message.getCid(recordsDelete.message);
667
+ const deleteReply = await dwn.processMessage(alice.did, recordsDelete.message);
689
668
  expect(deleteReply.status.code).toBe(202);
690
669
  // message store
691
- const { messages } = yield messageStore.query(alice.did, [{ schema: normalizeSchemaUrl('testSchema'), method: DwnMethodName.Delete }]);
670
+ const { messages } = await messageStore.query(alice.did, [{ schema: normalizeSchemaUrl('testSchema'), method: DwnMethodName.Delete }]);
692
671
  expect(messages.length).toBe(1);
693
- expect(yield Message.getCid(messages[0])).toBe(deleteMessageCid);
672
+ expect(await Message.getCid(messages[0])).toBe(deleteMessageCid);
694
673
  // state index
695
- const events = yield stateIndex.getLeaves(alice.did, []);
674
+ const events = await stateIndex.getLeaves(alice.did, []);
696
675
  expect(events).toContain(deleteMessageCid);
697
- }));
676
+ });
698
677
  describe('state index', () => {
699
- it('should include RecordsDelete event and keep initial RecordsWrite event', () => __awaiter(this, void 0, void 0, function* () {
700
- const alice = yield TestDataGenerator.generateDidKeyPersona();
701
- const { message, dataStream } = yield TestDataGenerator.generateRecordsWrite({ author: alice });
702
- const writeReply = yield dwn.processMessage(alice.did, message, { dataStream });
678
+ it('should include RecordsDelete event and keep initial RecordsWrite event', async () => {
679
+ const alice = await TestDataGenerator.generateDidKeyPersona();
680
+ await TestDataGenerator.installDefaultTestProtocol(dwn, alice);
681
+ const { message, dataStream } = await TestDataGenerator.generateRecordsWrite({ author: alice });
682
+ const writeReply = await dwn.processMessage(alice.did, message, { dataStream });
703
683
  expect(writeReply.status.code).toBe(202);
704
- const recordsDelete = yield RecordsDelete.create({
684
+ const recordsDelete = await RecordsDelete.create({
705
685
  recordId: message.recordId,
706
686
  signer: Jws.createSigner(alice)
707
687
  });
708
- const deleteReply = yield dwn.processMessage(alice.did, recordsDelete.message);
688
+ const deleteReply = await dwn.processMessage(alice.did, recordsDelete.message);
709
689
  expect(deleteReply.status.code).toBe(202);
710
- const events = yield stateIndex.getLeaves(alice.did, []);
711
- expect(events.length).toBe(2);
712
- const writeMessageCid = yield Message.getCid(message);
713
- const deleteMessageCid = yield Message.getCid(recordsDelete.message);
690
+ // NOTE: getLeaves returns ALL messageCids (including ProtocolsConfigure), so count is 3 not 2
691
+ const events = await stateIndex.getLeaves(alice.did, []);
692
+ expect(events.length).toBe(3);
693
+ const writeMessageCid = await Message.getCid(message);
694
+ const deleteMessageCid = await Message.getCid(recordsDelete.message);
714
695
  const expectedMessageCids = new Set([writeMessageCid, deleteMessageCid]);
715
696
  for (const messageCid of events) {
716
697
  expectedMessageCids.delete(messageCid);
717
698
  }
718
699
  expect(expectedMessageCids.size).toBe(0);
719
- }));
720
- it('should only keep first write and delete when subsequent writes happen', () => __awaiter(this, void 0, void 0, function* () {
721
- const { message, author, dataStream, recordsWrite } = yield TestDataGenerator.generateRecordsWrite();
700
+ });
701
+ it('should only keep first write and delete when subsequent writes happen', async () => {
702
+ const author = await TestDataGenerator.generatePersona();
722
703
  TestStubGenerator.stubDidResolver(didResolver, [author]);
723
- const reply = yield dwn.processMessage(author.did, message, { dataStream });
704
+ await TestDataGenerator.installDefaultTestProtocol(dwn, author);
705
+ const { message, dataStream, recordsWrite } = await TestDataGenerator.generateRecordsWrite({ author });
706
+ const reply = await dwn.processMessage(author.did, message, { dataStream });
724
707
  expect(reply.status.code).toBe(202);
725
- const newWrite = yield RecordsWrite.createFrom({
708
+ const newWrite = await RecordsWrite.createFrom({
726
709
  recordsWriteMessage: recordsWrite.message,
727
710
  published: true,
728
711
  signer: Jws.createSigner(author)
729
712
  });
730
- const newWriteReply = yield dwn.processMessage(author.did, newWrite.message);
713
+ const newWriteReply = await dwn.processMessage(author.did, newWrite.message);
731
714
  expect(newWriteReply.status.code).toBe(202);
732
- const recordsDelete = yield RecordsDelete.create({
715
+ const recordsDelete = await RecordsDelete.create({
733
716
  recordId: message.recordId,
734
717
  signer: Jws.createSigner(author)
735
718
  });
736
- const deleteReply = yield dwn.processMessage(author.did, recordsDelete.message);
719
+ const deleteReply = await dwn.processMessage(author.did, recordsDelete.message);
737
720
  expect(deleteReply.status.code).toBe(202);
738
- const events = yield stateIndex.getLeaves(author.did, []);
739
- expect(events.length).toBe(2);
740
- const deletedMessageCid = yield Message.getCid(newWrite.message);
721
+ const events = await stateIndex.getLeaves(author.did, []);
722
+ expect(events.length).toBe(3);
723
+ const deletedMessageCid = await Message.getCid(newWrite.message);
741
724
  for (const messageCid of events) {
742
725
  if (messageCid === deletedMessageCid) {
743
726
  throw new Error(`${messageCid} should not exist`);
744
727
  }
745
728
  }
746
- }));
729
+ });
747
730
  });
748
731
  });
749
- it('should return 401 if signature check fails', () => __awaiter(this, void 0, void 0, function* () {
750
- const { author, message } = yield TestDataGenerator.generateRecordsDelete();
732
+ it('should return 401 if signature check fails', async () => {
733
+ const { author, message } = await TestDataGenerator.generateRecordsDelete();
751
734
  const tenant = author.did;
752
735
  // setting up a stub did resolver & message store
753
736
  // intentionally not supplying the public key so a different public key is generated to simulate invalid signature
754
- const mismatchingPersona = yield TestDataGenerator.generatePersona({ did: author.did, keyId: author.keyId });
737
+ const mismatchingPersona = await TestDataGenerator.generatePersona({ did: author.did, keyId: author.keyId });
755
738
  const didResolver = TestStubGenerator.createDidResolverStub(mismatchingPersona);
756
739
  // setting up a stub method resolver & message store
757
740
  const messageStoreStub = sinon.createStubInstance(MessageStoreLevel);
758
741
  const resumableTaskManagerStub = sinon.createStubInstance(ResumableTaskManager);
759
- const recordsDeleteHandler = new RecordsDeleteHandler(didResolver, messageStoreStub, resumableTaskManagerStub);
760
- const reply = yield recordsDeleteHandler.handle({ tenant, message });
742
+ const recordsDeleteHandler = new RecordsDeleteHandler({
743
+ didResolver, messageStore: messageStoreStub, resumableTaskManager: resumableTaskManagerStub,
744
+ });
745
+ const reply = await recordsDeleteHandler.handle({ tenant, message });
761
746
  expect(reply.status.code).toBe(401);
762
- }));
763
- it('should return 400 if fail parsing the message', () => __awaiter(this, void 0, void 0, function* () {
764
- const { author, message } = yield TestDataGenerator.generateRecordsDelete();
747
+ });
748
+ it('should return 400 if fail parsing the message', async () => {
749
+ const { author, message } = await TestDataGenerator.generateRecordsDelete();
765
750
  const tenant = author.did;
766
751
  // setting up a stub method resolver & message store
767
752
  const messageStoreStub = sinon.createStubInstance(MessageStoreLevel);
768
753
  const resumableTaskManagerStub = sinon.createStubInstance(ResumableTaskManager);
769
- const recordsDeleteHandler = new RecordsDeleteHandler(didResolver, messageStoreStub, resumableTaskManagerStub);
754
+ const recordsDeleteHandler = new RecordsDeleteHandler({
755
+ didResolver, messageStore: messageStoreStub, resumableTaskManager: resumableTaskManagerStub,
756
+ });
770
757
  // stub the `parse()` function to throw an error
771
758
  sinon.stub(RecordsDelete, 'parse').throws('anyError');
772
- const reply = yield recordsDeleteHandler.handle({ tenant, message });
759
+ const reply = await recordsDeleteHandler.handle({ tenant, message });
773
760
  expect(reply.status.code).toBe(400);
774
- }));
761
+ });
775
762
  });
776
763
  }
777
764
  //# sourceMappingURL=records-delete.spec.js.map