@enbox/dwn-sdk-js 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (810) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +352 -0
  3. package/dist/bundles/dwn.js +153 -0
  4. package/dist/cjs/index.js +36749 -0
  5. package/dist/cjs/package.json +1 -0
  6. package/dist/esm/generated/precompiled-validators.js +11973 -0
  7. package/dist/esm/generated/precompiled-validators.js.map +1 -0
  8. package/dist/esm/json-schemas/definitions.json +23 -0
  9. package/dist/esm/src/core/abstract-message.js +47 -0
  10. package/dist/esm/src/core/abstract-message.js.map +1 -0
  11. package/dist/esm/src/core/auth.js +39 -0
  12. package/dist/esm/src/core/auth.js.map +1 -0
  13. package/dist/esm/src/core/dwn-constant.js +10 -0
  14. package/dist/esm/src/core/dwn-constant.js.map +1 -0
  15. package/dist/esm/src/core/dwn-error.js +169 -0
  16. package/dist/esm/src/core/dwn-error.js.map +1 -0
  17. package/dist/esm/src/core/grant-authorization.js +97 -0
  18. package/dist/esm/src/core/grant-authorization.js.map +1 -0
  19. package/dist/esm/src/core/message-reply.js +5 -0
  20. package/dist/esm/src/core/message-reply.js.map +1 -0
  21. package/dist/esm/src/core/message.js +233 -0
  22. package/dist/esm/src/core/message.js.map +1 -0
  23. package/dist/esm/src/core/messages-grant-authorization.js +101 -0
  24. package/dist/esm/src/core/messages-grant-authorization.js.map +1 -0
  25. package/dist/esm/src/core/protocol-authorization.js +608 -0
  26. package/dist/esm/src/core/protocol-authorization.js.map +1 -0
  27. package/dist/esm/src/core/protocols-grant-authorization.js +66 -0
  28. package/dist/esm/src/core/protocols-grant-authorization.js.map +1 -0
  29. package/dist/esm/src/core/records-grant-authorization.js +132 -0
  30. package/dist/esm/src/core/records-grant-authorization.js.map +1 -0
  31. package/dist/esm/src/core/resumable-task-manager.js +109 -0
  32. package/dist/esm/src/core/resumable-task-manager.js.map +1 -0
  33. package/dist/esm/src/core/tenant-gate.js +20 -0
  34. package/dist/esm/src/core/tenant-gate.js.map +1 -0
  35. package/dist/esm/src/dwn.js +164 -0
  36. package/dist/esm/src/dwn.js.map +1 -0
  37. package/dist/esm/src/enums/dwn-interface-method.js +16 -0
  38. package/dist/esm/src/enums/dwn-interface-method.js.map +1 -0
  39. package/dist/esm/src/event-log/event-emitter-stream.js +60 -0
  40. package/dist/esm/src/event-log/event-emitter-stream.js.map +1 -0
  41. package/dist/esm/src/event-log/event-log-level.js +63 -0
  42. package/dist/esm/src/event-log/event-log-level.js.map +1 -0
  43. package/dist/esm/src/handlers/messages-query.js +71 -0
  44. package/dist/esm/src/handlers/messages-query.js.map +1 -0
  45. package/dist/esm/src/handlers/messages-read.js +102 -0
  46. package/dist/esm/src/handlers/messages-read.js.map +1 -0
  47. package/dist/esm/src/handlers/messages-subscribe.js +81 -0
  48. package/dist/esm/src/handlers/messages-subscribe.js.map +1 -0
  49. package/dist/esm/src/handlers/protocols-configure.js +133 -0
  50. package/dist/esm/src/handlers/protocols-configure.js.map +1 -0
  51. package/dist/esm/src/handlers/protocols-query.js +73 -0
  52. package/dist/esm/src/handlers/protocols-query.js.map +1 -0
  53. package/dist/esm/src/handlers/records-delete.js +107 -0
  54. package/dist/esm/src/handlers/records-delete.js.map +1 -0
  55. package/dist/esm/src/handlers/records-query.js +210 -0
  56. package/dist/esm/src/handlers/records-query.js.map +1 -0
  57. package/dist/esm/src/handlers/records-read.js +169 -0
  58. package/dist/esm/src/handlers/records-read.js.map +1 -0
  59. package/dist/esm/src/handlers/records-subscribe.js +172 -0
  60. package/dist/esm/src/handlers/records-subscribe.js.map +1 -0
  61. package/dist/esm/src/handlers/records-write.js +344 -0
  62. package/dist/esm/src/handlers/records-write.js.map +1 -0
  63. package/dist/esm/src/index.js +49 -0
  64. package/dist/esm/src/index.js.map +1 -0
  65. package/dist/esm/src/interfaces/messages-query.js +53 -0
  66. package/dist/esm/src/interfaces/messages-query.js.map +1 -0
  67. package/dist/esm/src/interfaces/messages-read.js +61 -0
  68. package/dist/esm/src/interfaces/messages-read.js.map +1 -0
  69. package/dist/esm/src/interfaces/messages-subscribe.js +58 -0
  70. package/dist/esm/src/interfaces/messages-subscribe.js.map +1 -0
  71. package/dist/esm/src/interfaces/protocols-configure.js +271 -0
  72. package/dist/esm/src/interfaces/protocols-configure.js.map +1 -0
  73. package/dist/esm/src/interfaces/protocols-query.js +84 -0
  74. package/dist/esm/src/interfaces/protocols-query.js.map +1 -0
  75. package/dist/esm/src/interfaces/records-delete.js +89 -0
  76. package/dist/esm/src/interfaces/records-delete.js.map +1 -0
  77. package/dist/esm/src/interfaces/records-query.js +104 -0
  78. package/dist/esm/src/interfaces/records-query.js.map +1 -0
  79. package/dist/esm/src/interfaces/records-read.js +84 -0
  80. package/dist/esm/src/interfaces/records-read.js.map +1 -0
  81. package/dist/esm/src/interfaces/records-subscribe.js +91 -0
  82. package/dist/esm/src/interfaces/records-subscribe.js.map +1 -0
  83. package/dist/esm/src/interfaces/records-write.js +795 -0
  84. package/dist/esm/src/interfaces/records-write.js.map +1 -0
  85. package/dist/esm/src/jose/algorithms/signing/ed25519.js +51 -0
  86. package/dist/esm/src/jose/algorithms/signing/ed25519.js.map +1 -0
  87. package/dist/esm/src/jose/algorithms/signing/signature-algorithms.js +20 -0
  88. package/dist/esm/src/jose/algorithms/signing/signature-algorithms.js.map +1 -0
  89. package/dist/esm/src/jose/jws/general/builder.js +47 -0
  90. package/dist/esm/src/jose/jws/general/builder.js.map +1 -0
  91. package/dist/esm/src/jose/jws/general/verifier.js +97 -0
  92. package/dist/esm/src/jose/jws/general/verifier.js.map +1 -0
  93. package/dist/esm/src/protocols/permission-grant.js +39 -0
  94. package/dist/esm/src/protocols/permission-grant.js.map +1 -0
  95. package/dist/esm/src/protocols/permission-request.js +35 -0
  96. package/dist/esm/src/protocols/permission-request.js.map +1 -0
  97. package/dist/esm/src/protocols/permissions.js +357 -0
  98. package/dist/esm/src/protocols/permissions.js.map +1 -0
  99. package/dist/esm/src/schema-validator.js +37 -0
  100. package/dist/esm/src/schema-validator.js.map +1 -0
  101. package/dist/esm/src/store/blockstore-level.js +187 -0
  102. package/dist/esm/src/store/blockstore-level.js.map +1 -0
  103. package/dist/esm/src/store/blockstore-mock.js +168 -0
  104. package/dist/esm/src/store/blockstore-mock.js.map +1 -0
  105. package/dist/esm/src/store/data-store-level.js +136 -0
  106. package/dist/esm/src/store/data-store-level.js.map +1 -0
  107. package/dist/esm/src/store/index-level.js +660 -0
  108. package/dist/esm/src/store/index-level.js.map +1 -0
  109. package/dist/esm/src/store/level-wrapper.js +305 -0
  110. package/dist/esm/src/store/level-wrapper.js.map +1 -0
  111. package/dist/esm/src/store/message-store-level.js +159 -0
  112. package/dist/esm/src/store/message-store-level.js.map +1 -0
  113. package/dist/esm/src/store/resumable-task-store-level.js +131 -0
  114. package/dist/esm/src/store/resumable-task-store-level.js.map +1 -0
  115. package/dist/esm/src/store/storage-controller.js +184 -0
  116. package/dist/esm/src/store/storage-controller.js.map +1 -0
  117. package/dist/esm/src/types/cache.js +2 -0
  118. package/dist/esm/src/types/cache.js.map +1 -0
  119. package/dist/esm/src/types/data-store.js +2 -0
  120. package/dist/esm/src/types/data-store.js.map +1 -0
  121. package/dist/esm/src/types/event-log.js +2 -0
  122. package/dist/esm/src/types/event-log.js.map +1 -0
  123. package/dist/esm/src/types/jose-types.js +2 -0
  124. package/dist/esm/src/types/jose-types.js.map +1 -0
  125. package/dist/esm/src/types/jws-types.js +2 -0
  126. package/dist/esm/src/types/jws-types.js.map +1 -0
  127. package/dist/esm/src/types/message-interface.js +2 -0
  128. package/dist/esm/src/types/message-interface.js.map +1 -0
  129. package/dist/esm/src/types/message-store.js +2 -0
  130. package/dist/esm/src/types/message-store.js.map +1 -0
  131. package/dist/esm/src/types/message-types.js +3 -0
  132. package/dist/esm/src/types/message-types.js.map +1 -0
  133. package/dist/esm/src/types/messages-types.js +2 -0
  134. package/dist/esm/src/types/messages-types.js.map +1 -0
  135. package/dist/esm/src/types/method-handler.js +2 -0
  136. package/dist/esm/src/types/method-handler.js.map +1 -0
  137. package/dist/esm/src/types/permission-types.js +6 -0
  138. package/dist/esm/src/types/permission-types.js.map +1 -0
  139. package/dist/esm/src/types/protocols-types.js +20 -0
  140. package/dist/esm/src/types/protocols-types.js.map +1 -0
  141. package/dist/esm/src/types/query-types.js +6 -0
  142. package/dist/esm/src/types/query-types.js.map +1 -0
  143. package/dist/esm/src/types/records-types.js +8 -0
  144. package/dist/esm/src/types/records-types.js.map +1 -0
  145. package/dist/esm/src/types/resumable-task-store.js +2 -0
  146. package/dist/esm/src/types/resumable-task-store.js.map +1 -0
  147. package/dist/esm/src/types/signer.js +2 -0
  148. package/dist/esm/src/types/signer.js.map +1 -0
  149. package/dist/esm/src/types/subscriptions.js +2 -0
  150. package/dist/esm/src/types/subscriptions.js.map +1 -0
  151. package/dist/esm/src/utils/abort.js +40 -0
  152. package/dist/esm/src/utils/abort.js.map +1 -0
  153. package/dist/esm/src/utils/array.js +72 -0
  154. package/dist/esm/src/utils/array.js.map +1 -0
  155. package/dist/esm/src/utils/cid.js +130 -0
  156. package/dist/esm/src/utils/cid.js.map +1 -0
  157. package/dist/esm/src/utils/data-stream.js +100 -0
  158. package/dist/esm/src/utils/data-stream.js.map +1 -0
  159. package/dist/esm/src/utils/encoder.js +45 -0
  160. package/dist/esm/src/utils/encoder.js.map +1 -0
  161. package/dist/esm/src/utils/encryption.js +128 -0
  162. package/dist/esm/src/utils/encryption.js.map +1 -0
  163. package/dist/esm/src/utils/filter.js +229 -0
  164. package/dist/esm/src/utils/filter.js.map +1 -0
  165. package/dist/esm/src/utils/hd-key.js +114 -0
  166. package/dist/esm/src/utils/hd-key.js.map +1 -0
  167. package/dist/esm/src/utils/jws.js +89 -0
  168. package/dist/esm/src/utils/jws.js.map +1 -0
  169. package/dist/esm/src/utils/memory-cache.js +41 -0
  170. package/dist/esm/src/utils/memory-cache.js.map +1 -0
  171. package/dist/esm/src/utils/messages.js +84 -0
  172. package/dist/esm/src/utils/messages.js.map +1 -0
  173. package/dist/esm/src/utils/object.js +40 -0
  174. package/dist/esm/src/utils/object.js.map +1 -0
  175. package/dist/esm/src/utils/private-key-signer.js +43 -0
  176. package/dist/esm/src/utils/private-key-signer.js.map +1 -0
  177. package/dist/esm/src/utils/protocols.js +51 -0
  178. package/dist/esm/src/utils/protocols.js.map +1 -0
  179. package/dist/esm/src/utils/records.js +454 -0
  180. package/dist/esm/src/utils/records.js.map +1 -0
  181. package/dist/esm/src/utils/secp256k1.js +166 -0
  182. package/dist/esm/src/utils/secp256k1.js.map +1 -0
  183. package/dist/esm/src/utils/secp256r1.js +120 -0
  184. package/dist/esm/src/utils/secp256r1.js.map +1 -0
  185. package/dist/esm/src/utils/string.js +16 -0
  186. package/dist/esm/src/utils/string.js.map +1 -0
  187. package/dist/esm/src/utils/time.js +85 -0
  188. package/dist/esm/src/utils/time.js.map +1 -0
  189. package/dist/esm/src/utils/url.js +62 -0
  190. package/dist/esm/src/utils/url.js.map +1 -0
  191. package/dist/esm/tests/core/auth.spec.js +22 -0
  192. package/dist/esm/tests/core/auth.spec.js.map +1 -0
  193. package/dist/esm/tests/core/message-reply.spec.js +16 -0
  194. package/dist/esm/tests/core/message-reply.spec.js.map +1 -0
  195. package/dist/esm/tests/core/message.spec.js +146 -0
  196. package/dist/esm/tests/core/message.spec.js.map +1 -0
  197. package/dist/esm/tests/core/protocol-authorization.spec.js +48 -0
  198. package/dist/esm/tests/core/protocol-authorization.spec.js.map +1 -0
  199. package/dist/esm/tests/dwn.spec.js +166 -0
  200. package/dist/esm/tests/dwn.spec.js.map +1 -0
  201. package/dist/esm/tests/event-log/event-emitter-stream.spec.js +78 -0
  202. package/dist/esm/tests/event-log/event-emitter-stream.spec.js.map +1 -0
  203. package/dist/esm/tests/event-log/event-log-level.spec.js +44 -0
  204. package/dist/esm/tests/event-log/event-log-level.spec.js.map +1 -0
  205. package/dist/esm/tests/event-log/event-log.spec.js +236 -0
  206. package/dist/esm/tests/event-log/event-log.spec.js.map +1 -0
  207. package/dist/esm/tests/event-log/event-stream.spec.js +125 -0
  208. package/dist/esm/tests/event-log/event-stream.spec.js.map +1 -0
  209. package/dist/esm/tests/features/author-delegated-grant.spec.js +1273 -0
  210. package/dist/esm/tests/features/author-delegated-grant.spec.js.map +1 -0
  211. package/dist/esm/tests/features/owner-delegated-grant.spec.js +584 -0
  212. package/dist/esm/tests/features/owner-delegated-grant.spec.js.map +1 -0
  213. package/dist/esm/tests/features/owner-signature.spec.js +192 -0
  214. package/dist/esm/tests/features/owner-signature.spec.js.map +1 -0
  215. package/dist/esm/tests/features/permissions.spec.js +815 -0
  216. package/dist/esm/tests/features/permissions.spec.js.map +1 -0
  217. package/dist/esm/tests/features/protocol-create-action.spec.js +248 -0
  218. package/dist/esm/tests/features/protocol-create-action.spec.js.map +1 -0
  219. package/dist/esm/tests/features/protocol-delete-action.spec.js +492 -0
  220. package/dist/esm/tests/features/protocol-delete-action.spec.js.map +1 -0
  221. package/dist/esm/tests/features/protocol-update-action.spec.js +572 -0
  222. package/dist/esm/tests/features/protocol-update-action.spec.js.map +1 -0
  223. package/dist/esm/tests/features/records-prune.spec.js +812 -0
  224. package/dist/esm/tests/features/records-prune.spec.js.map +1 -0
  225. package/dist/esm/tests/features/records-tags.spec.js +2516 -0
  226. package/dist/esm/tests/features/records-tags.spec.js.map +1 -0
  227. package/dist/esm/tests/features/resumable-tasks.spec.js +349 -0
  228. package/dist/esm/tests/features/resumable-tasks.spec.js.map +1 -0
  229. package/dist/esm/tests/handlers/messages-query.spec.js +349 -0
  230. package/dist/esm/tests/handlers/messages-query.spec.js.map +1 -0
  231. package/dist/esm/tests/handlers/messages-read.spec.js +647 -0
  232. package/dist/esm/tests/handlers/messages-read.spec.js.map +1 -0
  233. package/dist/esm/tests/handlers/messages-subscribe.spec.js +432 -0
  234. package/dist/esm/tests/handlers/messages-subscribe.spec.js.map +1 -0
  235. package/dist/esm/tests/handlers/protocols-configure.spec.js +608 -0
  236. package/dist/esm/tests/handlers/protocols-configure.spec.js.map +1 -0
  237. package/dist/esm/tests/handlers/protocols-query.spec.js +454 -0
  238. package/dist/esm/tests/handlers/protocols-query.spec.js.map +1 -0
  239. package/dist/esm/tests/handlers/records-delete.spec.js +662 -0
  240. package/dist/esm/tests/handlers/records-delete.spec.js.map +1 -0
  241. package/dist/esm/tests/handlers/records-query.spec.js +2695 -0
  242. package/dist/esm/tests/handlers/records-query.spec.js.map +1 -0
  243. package/dist/esm/tests/handlers/records-read.spec.js +1724 -0
  244. package/dist/esm/tests/handlers/records-read.spec.js.map +1 -0
  245. package/dist/esm/tests/handlers/records-subscribe.spec.js +684 -0
  246. package/dist/esm/tests/handlers/records-subscribe.spec.js.map +1 -0
  247. package/dist/esm/tests/handlers/records-write.spec.js +3637 -0
  248. package/dist/esm/tests/handlers/records-write.spec.js.map +1 -0
  249. package/dist/esm/tests/interfaces/messages-get.spec.js +78 -0
  250. package/dist/esm/tests/interfaces/messages-get.spec.js.map +1 -0
  251. package/dist/esm/tests/interfaces/messages-subscribe.spec.js +30 -0
  252. package/dist/esm/tests/interfaces/messages-subscribe.spec.js.map +1 -0
  253. package/dist/esm/tests/interfaces/messagess-query.spec.js +127 -0
  254. package/dist/esm/tests/interfaces/messagess-query.spec.js.map +1 -0
  255. package/dist/esm/tests/interfaces/protocols-configure.spec.js +489 -0
  256. package/dist/esm/tests/interfaces/protocols-configure.spec.js.map +1 -0
  257. package/dist/esm/tests/interfaces/protocols-query.spec.js +46 -0
  258. package/dist/esm/tests/interfaces/protocols-query.spec.js.map +1 -0
  259. package/dist/esm/tests/interfaces/records-delete.spec.js +39 -0
  260. package/dist/esm/tests/interfaces/records-delete.spec.js.map +1 -0
  261. package/dist/esm/tests/interfaces/records-query.spec.js +85 -0
  262. package/dist/esm/tests/interfaces/records-query.spec.js.map +1 -0
  263. package/dist/esm/tests/interfaces/records-read.spec.js +62 -0
  264. package/dist/esm/tests/interfaces/records-read.spec.js.map +1 -0
  265. package/dist/esm/tests/interfaces/records-subscribe.spec.js +72 -0
  266. package/dist/esm/tests/interfaces/records-subscribe.spec.js.map +1 -0
  267. package/dist/esm/tests/interfaces/records-write.spec.js +423 -0
  268. package/dist/esm/tests/interfaces/records-write.spec.js.map +1 -0
  269. package/dist/esm/tests/jose/jws/general.spec.js +243 -0
  270. package/dist/esm/tests/jose/jws/general.spec.js.map +1 -0
  271. package/dist/esm/tests/protocols/permission-request.spec.js +40 -0
  272. package/dist/esm/tests/protocols/permission-request.spec.js.map +1 -0
  273. package/dist/esm/tests/protocols/permissions.spec.js +123 -0
  274. package/dist/esm/tests/protocols/permissions.spec.js.map +1 -0
  275. package/dist/esm/tests/scenarios/aggregator.spec.js +670 -0
  276. package/dist/esm/tests/scenarios/aggregator.spec.js.map +1 -0
  277. package/dist/esm/tests/scenarios/deleted-record.spec.js +102 -0
  278. package/dist/esm/tests/scenarios/deleted-record.spec.js.map +1 -0
  279. package/dist/esm/tests/scenarios/end-to-end-tests.spec.js +220 -0
  280. package/dist/esm/tests/scenarios/end-to-end-tests.spec.js.map +1 -0
  281. package/dist/esm/tests/scenarios/messages-query.spec.js +395 -0
  282. package/dist/esm/tests/scenarios/messages-query.spec.js.map +1 -0
  283. package/dist/esm/tests/scenarios/nested-roles.spec.js +300 -0
  284. package/dist/esm/tests/scenarios/nested-roles.spec.js.map +1 -0
  285. package/dist/esm/tests/scenarios/subscriptions.spec.js +886 -0
  286. package/dist/esm/tests/scenarios/subscriptions.spec.js.map +1 -0
  287. package/dist/esm/tests/store/blockstore-mock.spec.js +192 -0
  288. package/dist/esm/tests/store/blockstore-mock.spec.js.map +1 -0
  289. package/dist/esm/tests/store/data-store-level.spec.js +146 -0
  290. package/dist/esm/tests/store/data-store-level.spec.js.map +1 -0
  291. package/dist/esm/tests/store/index-level.spec.js +1208 -0
  292. package/dist/esm/tests/store/index-level.spec.js.map +1 -0
  293. package/dist/esm/tests/store/message-store-level.spec.js +48 -0
  294. package/dist/esm/tests/store/message-store-level.spec.js.map +1 -0
  295. package/dist/esm/tests/store/message-store.spec.js +404 -0
  296. package/dist/esm/tests/store/message-store.spec.js.map +1 -0
  297. package/dist/esm/tests/store-dependent-tests.spec.js +5 -0
  298. package/dist/esm/tests/store-dependent-tests.spec.js.map +1 -0
  299. package/dist/esm/tests/test-event-stream.js +25 -0
  300. package/dist/esm/tests/test-event-stream.js.map +1 -0
  301. package/dist/esm/tests/test-stores.js +45 -0
  302. package/dist/esm/tests/test-stores.js.map +1 -0
  303. package/dist/esm/tests/test-suite.js +88 -0
  304. package/dist/esm/tests/test-suite.js.map +1 -0
  305. package/dist/esm/tests/utils/cid.spec.js +80 -0
  306. package/dist/esm/tests/utils/cid.spec.js.map +1 -0
  307. package/dist/esm/tests/utils/data-stream.spec.js +27 -0
  308. package/dist/esm/tests/utils/data-stream.spec.js.map +1 -0
  309. package/dist/esm/tests/utils/encryption.spec.js +148 -0
  310. package/dist/esm/tests/utils/encryption.spec.js.map +1 -0
  311. package/dist/esm/tests/utils/filters.spec.js +295 -0
  312. package/dist/esm/tests/utils/filters.spec.js.map +1 -0
  313. package/dist/esm/tests/utils/hd-key.spec.js +35 -0
  314. package/dist/esm/tests/utils/hd-key.spec.js.map +1 -0
  315. package/dist/esm/tests/utils/jws.spec.js +8 -0
  316. package/dist/esm/tests/utils/jws.spec.js.map +1 -0
  317. package/dist/esm/tests/utils/memory-cache.spec.js +35 -0
  318. package/dist/esm/tests/utils/memory-cache.spec.js.map +1 -0
  319. package/dist/esm/tests/utils/messages.spec.js +101 -0
  320. package/dist/esm/tests/utils/messages.spec.js.map +1 -0
  321. package/dist/esm/tests/utils/object.spec.js +36 -0
  322. package/dist/esm/tests/utils/object.spec.js.map +1 -0
  323. package/dist/esm/tests/utils/poller.js +49 -0
  324. package/dist/esm/tests/utils/poller.js.map +1 -0
  325. package/dist/esm/tests/utils/private-key-signer.spec.js +44 -0
  326. package/dist/esm/tests/utils/private-key-signer.spec.js.map +1 -0
  327. package/dist/esm/tests/utils/records.spec.js +53 -0
  328. package/dist/esm/tests/utils/records.spec.js.map +1 -0
  329. package/dist/esm/tests/utils/secp256k1.spec.js +50 -0
  330. package/dist/esm/tests/utils/secp256k1.spec.js.map +1 -0
  331. package/dist/esm/tests/utils/secp256r1.spec.js +56 -0
  332. package/dist/esm/tests/utils/secp256r1.spec.js.map +1 -0
  333. package/dist/esm/tests/utils/test-data-generator.js +643 -0
  334. package/dist/esm/tests/utils/test-data-generator.js.map +1 -0
  335. package/dist/esm/tests/utils/test-stub-generator.js +39 -0
  336. package/dist/esm/tests/utils/test-stub-generator.js.map +1 -0
  337. package/dist/esm/tests/utils/time.spec.js +64 -0
  338. package/dist/esm/tests/utils/time.spec.js.map +1 -0
  339. package/dist/esm/tests/utils/url.spec.js +43 -0
  340. package/dist/esm/tests/utils/url.spec.js.map +1 -0
  341. package/dist/esm/tests/validation/json-schemas/definitions.spec.js +33 -0
  342. package/dist/esm/tests/validation/json-schemas/definitions.spec.js.map +1 -0
  343. package/dist/esm/tests/validation/json-schemas/jwk/general-jwk.spec.js +50 -0
  344. package/dist/esm/tests/validation/json-schemas/jwk/general-jwk.spec.js.map +1 -0
  345. package/dist/esm/tests/validation/json-schemas/jwk/public-jwk.spec.js +36 -0
  346. package/dist/esm/tests/validation/json-schemas/jwk/public-jwk.spec.js.map +1 -0
  347. package/dist/esm/tests/validation/json-schemas/jwk-verification-method.spec.js +82 -0
  348. package/dist/esm/tests/validation/json-schemas/jwk-verification-method.spec.js.map +1 -0
  349. package/dist/esm/tests/validation/json-schemas/protocols/protocols-configure.spec.js +75 -0
  350. package/dist/esm/tests/validation/json-schemas/protocols/protocols-configure.spec.js.map +1 -0
  351. package/dist/esm/tests/validation/json-schemas/records/records-query.spec.js +148 -0
  352. package/dist/esm/tests/validation/json-schemas/records/records-query.spec.js.map +1 -0
  353. package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js +421 -0
  354. package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js.map +1 -0
  355. package/dist/esm/tests/vectors/protocol-definitions/anyone-collaborate.json +21 -0
  356. package/dist/esm/tests/vectors/protocol-definitions/author-can.json +33 -0
  357. package/dist/esm/tests/vectors/protocol-definitions/chat.json +70 -0
  358. package/dist/esm/tests/vectors/protocol-definitions/credential-issuance.json +41 -0
  359. package/dist/esm/tests/vectors/protocol-definitions/dex.json +58 -0
  360. package/dist/esm/tests/vectors/protocol-definitions/email.json +62 -0
  361. package/dist/esm/tests/vectors/protocol-definitions/free-for-all.json +45 -0
  362. package/dist/esm/tests/vectors/protocol-definitions/friend-role.json +48 -0
  363. package/dist/esm/tests/vectors/protocol-definitions/message.json +37 -0
  364. package/dist/esm/tests/vectors/protocol-definitions/minimal.json +10 -0
  365. package/dist/esm/tests/vectors/protocol-definitions/nested.json +31 -0
  366. package/dist/esm/tests/vectors/protocol-definitions/private-protocol.json +15 -0
  367. package/dist/esm/tests/vectors/protocol-definitions/recipient-can.json +33 -0
  368. package/dist/esm/tests/vectors/protocol-definitions/slack.json +242 -0
  369. package/dist/esm/tests/vectors/protocol-definitions/social-media.json +106 -0
  370. package/dist/esm/tests/vectors/protocol-definitions/thread-role.json +70 -0
  371. package/dist/types/generated/precompiled-validators.d.ts +597 -0
  372. package/dist/types/generated/precompiled-validators.d.ts.map +1 -0
  373. package/dist/types/src/core/abstract-message.d.ts +25 -0
  374. package/dist/types/src/core/abstract-message.d.ts.map +1 -0
  375. package/dist/types/src/core/auth.d.ts +9 -0
  376. package/dist/types/src/core/auth.d.ts.map +1 -0
  377. package/dist/types/src/core/dwn-constant.d.ts +10 -0
  378. package/dist/types/src/core/dwn-constant.d.ts.map +1 -0
  379. package/dist/types/src/core/dwn-error.d.ts +164 -0
  380. package/dist/types/src/core/dwn-error.d.ts.map +1 -0
  381. package/dist/types/src/core/grant-authorization.d.ts +43 -0
  382. package/dist/types/src/core/grant-authorization.d.ts.map +1 -0
  383. package/dist/types/src/core/message-reply.d.ts +32 -0
  384. package/dist/types/src/core/message-reply.d.ts.map +1 -0
  385. package/dist/types/src/core/message.d.ts +94 -0
  386. package/dist/types/src/core/message.d.ts.map +1 -0
  387. package/dist/types/src/core/messages-grant-authorization.d.ts +34 -0
  388. package/dist/types/src/core/messages-grant-authorization.d.ts.map +1 -0
  389. package/dist/types/src/core/protocol-authorization.d.ts +103 -0
  390. package/dist/types/src/core/protocol-authorization.d.ts.map +1 -0
  391. package/dist/types/src/core/protocols-grant-authorization.d.ts +31 -0
  392. package/dist/types/src/core/protocols-grant-authorization.d.ts.map +1 -0
  393. package/dist/types/src/core/records-grant-authorization.d.ts +60 -0
  394. package/dist/types/src/core/records-grant-authorization.d.ts.map +1 -0
  395. package/dist/types/src/core/resumable-task-manager.d.ts +43 -0
  396. package/dist/types/src/core/resumable-task-manager.d.ts.map +1 -0
  397. package/dist/types/src/core/tenant-gate.d.ts +29 -0
  398. package/dist/types/src/core/tenant-gate.d.ts.map +1 -0
  399. package/dist/types/src/dwn.d.ts +85 -0
  400. package/dist/types/src/dwn.d.ts.map +1 -0
  401. package/dist/types/src/enums/dwn-interface-method.d.ts +14 -0
  402. package/dist/types/src/enums/dwn-interface-method.d.ts.map +1 -0
  403. package/dist/types/src/event-log/event-emitter-stream.d.ts +23 -0
  404. package/dist/types/src/event-log/event-emitter-stream.d.ts.map +1 -0
  405. package/dist/types/src/event-log/event-log-level.d.ts +35 -0
  406. package/dist/types/src/event-log/event-log-level.d.ts.map +1 -0
  407. package/dist/types/src/handlers/messages-query.d.ts +17 -0
  408. package/dist/types/src/handlers/messages-query.d.ts.map +1 -0
  409. package/dist/types/src/handlers/messages-read.d.ts +22 -0
  410. package/dist/types/src/handlers/messages-read.d.ts.map +1 -0
  411. package/dist/types/src/handlers/messages-subscribe.d.ts +18 -0
  412. package/dist/types/src/handlers/messages-subscribe.d.ts.map +1 -0
  413. package/dist/types/src/handlers/protocols-configure.d.ts +24 -0
  414. package/dist/types/src/handlers/protocols-configure.d.ts.map +1 -0
  415. package/dist/types/src/handlers/protocols-query.d.ts +20 -0
  416. package/dist/types/src/handlers/protocols-query.d.ts.map +1 -0
  417. package/dist/types/src/handlers/records-delete.d.ts +23 -0
  418. package/dist/types/src/handlers/records-delete.d.ts.map +1 -0
  419. package/dist/types/src/handlers/records-query.d.ts +70 -0
  420. package/dist/types/src/handlers/records-query.d.ts.map +1 -0
  421. package/dist/types/src/handlers/records-read.d.ts +20 -0
  422. package/dist/types/src/handlers/records-read.d.ts.map +1 -0
  423. package/dist/types/src/handlers/records-subscribe.d.ts +62 -0
  424. package/dist/types/src/handlers/records-subscribe.d.ts.map +1 -0
  425. package/dist/types/src/handlers/records-write.d.ts +51 -0
  426. package/dist/types/src/handlers/records-write.d.ts.map +1 -0
  427. package/dist/types/src/index.d.ts +63 -0
  428. package/dist/types/src/index.d.ts.map +1 -0
  429. package/dist/types/src/interfaces/messages-query.d.ts +16 -0
  430. package/dist/types/src/interfaces/messages-query.d.ts.map +1 -0
  431. package/dist/types/src/interfaces/messages-read.d.ts +20 -0
  432. package/dist/types/src/interfaces/messages-read.d.ts.map +1 -0
  433. package/dist/types/src/interfaces/messages-subscribe.d.ts +20 -0
  434. package/dist/types/src/interfaces/messages-subscribe.d.ts.map +1 -0
  435. package/dist/types/src/interfaces/protocols-configure.d.ts +40 -0
  436. package/dist/types/src/interfaces/protocols-configure.d.ts.map +1 -0
  437. package/dist/types/src/interfaces/protocols-query.d.ts +17 -0
  438. package/dist/types/src/interfaces/protocols-query.d.ts.map +1 -0
  439. package/dist/types/src/interfaces/records-delete.d.ts +34 -0
  440. package/dist/types/src/interfaces/records-delete.d.ts.map +1 -0
  441. package/dist/types/src/interfaces/records-query.d.ts +31 -0
  442. package/dist/types/src/interfaces/records-query.d.ts.map +1 -0
  443. package/dist/types/src/interfaces/records-read.d.ts +36 -0
  444. package/dist/types/src/interfaces/records-read.d.ts.map +1 -0
  445. package/dist/types/src/interfaces/records-subscribe.d.ts +27 -0
  446. package/dist/types/src/interfaces/records-subscribe.d.ts.map +1 -0
  447. package/dist/types/src/interfaces/records-write.d.ts +309 -0
  448. package/dist/types/src/interfaces/records-write.d.ts.map +1 -0
  449. package/dist/types/src/jose/algorithms/signing/ed25519.d.ts +3 -0
  450. package/dist/types/src/jose/algorithms/signing/ed25519.d.ts.map +1 -0
  451. package/dist/types/src/jose/algorithms/signing/signature-algorithms.d.ts +3 -0
  452. package/dist/types/src/jose/algorithms/signing/signature-algorithms.d.ts.map +1 -0
  453. package/dist/types/src/jose/jws/general/builder.d.ts +10 -0
  454. package/dist/types/src/jose/jws/general/builder.d.ts.map +1 -0
  455. package/dist/types/src/jose/jws/general/verifier.d.ts +32 -0
  456. package/dist/types/src/jose/jws/general/verifier.d.ts.map +1 -0
  457. package/dist/types/src/protocols/permission-grant.d.ts +50 -0
  458. package/dist/types/src/protocols/permission-grant.d.ts.map +1 -0
  459. package/dist/types/src/protocols/permission-request.d.ts +35 -0
  460. package/dist/types/src/protocols/permission-request.d.ts.map +1 -0
  461. package/dist/types/src/protocols/permissions.d.ts +150 -0
  462. package/dist/types/src/protocols/permissions.d.ts.map +1 -0
  463. package/dist/types/src/schema-validator.d.ts +8 -0
  464. package/dist/types/src/schema-validator.d.ts.map +1 -0
  465. package/dist/types/src/store/blockstore-level.d.ts +34 -0
  466. package/dist/types/src/store/blockstore-level.d.ts.map +1 -0
  467. package/dist/types/src/store/blockstore-mock.d.ts +27 -0
  468. package/dist/types/src/store/blockstore-mock.d.ts.map +1 -0
  469. package/dist/types/src/store/data-store-level.d.ts +34 -0
  470. package/dist/types/src/store/data-store-level.d.ts.map +1 -0
  471. package/dist/types/src/store/index-level.d.ts +171 -0
  472. package/dist/types/src/store/index-level.d.ts.map +1 -0
  473. package/dist/types/src/store/level-wrapper.d.ts +48 -0
  474. package/dist/types/src/store/level-wrapper.d.ts.map +1 -0
  475. package/dist/types/src/store/message-store-level.d.ts +46 -0
  476. package/dist/types/src/store/message-store-level.d.ts.map +1 -0
  477. package/dist/types/src/store/resumable-task-store-level.d.ts +28 -0
  478. package/dist/types/src/store/resumable-task-store-level.d.ts.map +1 -0
  479. package/dist/types/src/store/storage-controller.d.ts +46 -0
  480. package/dist/types/src/store/storage-controller.d.ts.map +1 -0
  481. package/dist/types/src/types/cache.d.ts +16 -0
  482. package/dist/types/src/types/cache.d.ts.map +1 -0
  483. package/dist/types/src/types/data-store.d.ts +57 -0
  484. package/dist/types/src/types/data-store.d.ts.map +1 -0
  485. package/dist/types/src/types/event-log.d.ts +52 -0
  486. package/dist/types/src/types/event-log.d.ts.map +1 -0
  487. package/dist/types/src/types/jose-types.d.ts +75 -0
  488. package/dist/types/src/types/jose-types.d.ts.map +1 -0
  489. package/dist/types/src/types/jws-types.d.ts +27 -0
  490. package/dist/types/src/types/jws-types.d.ts.map +1 -0
  491. package/dist/types/src/types/message-interface.d.ts +27 -0
  492. package/dist/types/src/types/message-interface.d.ts.map +1 -0
  493. package/dist/types/src/types/message-store.d.ts +42 -0
  494. package/dist/types/src/types/message-store.d.ts.map +1 -0
  495. package/dist/types/src/types/message-types.d.ts +116 -0
  496. package/dist/types/src/types/message-types.d.ts.map +1 -0
  497. package/dist/types/src/types/messages-types.d.ts +65 -0
  498. package/dist/types/src/types/messages-types.d.ts.map +1 -0
  499. package/dist/types/src/types/method-handler.d.ts +19 -0
  500. package/dist/types/src/types/method-handler.d.ts.map +1 -0
  501. package/dist/types/src/types/permission-types.d.ts +93 -0
  502. package/dist/types/src/types/permission-types.d.ts.map +1 -0
  503. package/dist/types/src/types/protocols-types.d.ts +154 -0
  504. package/dist/types/src/types/protocols-types.d.ts.map +1 -0
  505. package/dist/types/src/types/query-types.d.ts +66 -0
  506. package/dist/types/src/types/query-types.d.ts.map +1 -0
  507. package/dist/types/src/types/records-types.d.ts +230 -0
  508. package/dist/types/src/types/records-types.d.ts.map +1 -0
  509. package/dist/types/src/types/resumable-task-store.d.ts +89 -0
  510. package/dist/types/src/types/resumable-task-store.d.ts.map +1 -0
  511. package/dist/types/src/types/signer.d.ts +26 -0
  512. package/dist/types/src/types/signer.d.ts.map +1 -0
  513. package/dist/types/src/types/subscriptions.d.ts +30 -0
  514. package/dist/types/src/types/subscriptions.d.ts.map +1 -0
  515. package/dist/types/src/utils/abort.d.ts +5 -0
  516. package/dist/types/src/utils/abort.d.ts.map +1 -0
  517. package/dist/types/src/utils/array.d.ts +18 -0
  518. package/dist/types/src/utils/array.d.ts.map +1 -0
  519. package/dist/types/src/utils/cid.d.ts +30 -0
  520. package/dist/types/src/utils/cid.d.ts.map +1 -0
  521. package/dist/types/src/utils/data-stream.d.ts +31 -0
  522. package/dist/types/src/utils/data-stream.d.ts.map +1 -0
  523. package/dist/types/src/utils/encoder.d.ts +14 -0
  524. package/dist/types/src/utils/encoder.d.ts.map +1 -0
  525. package/dist/types/src/utils/encryption.d.ts +44 -0
  526. package/dist/types/src/utils/encryption.d.ts.map +1 -0
  527. package/dist/types/src/utils/filter.d.ts +60 -0
  528. package/dist/types/src/utils/filter.d.ts.map +1 -0
  529. package/dist/types/src/utils/hd-key.d.ts +54 -0
  530. package/dist/types/src/utils/hd-key.d.ts.map +1 -0
  531. package/dist/types/src/utils/jws.d.ts +39 -0
  532. package/dist/types/src/utils/jws.d.ts.map +1 -0
  533. package/dist/types/src/utils/memory-cache.d.ts +15 -0
  534. package/dist/types/src/utils/memory-cache.d.ts.map +1 -0
  535. package/dist/types/src/utils/messages.d.ts +27 -0
  536. package/dist/types/src/utils/messages.d.ts.map +1 -0
  537. package/dist/types/src/utils/object.d.ts +13 -0
  538. package/dist/types/src/utils/object.d.ts.map +1 -0
  539. package/dist/types/src/utils/private-key-signer.d.ts +34 -0
  540. package/dist/types/src/utils/private-key-signer.d.ts.map +1 -0
  541. package/dist/types/src/utils/protocols.d.ts +14 -0
  542. package/dist/types/src/utils/protocols.d.ts.map +1 -0
  543. package/dist/types/src/utils/records.d.ts +122 -0
  544. package/dist/types/src/utils/records.d.ts.map +1 -0
  545. package/dist/types/src/utils/secp256k1.d.ts +59 -0
  546. package/dist/types/src/utils/secp256k1.d.ts.map +1 -0
  547. package/dist/types/src/utils/secp256r1.d.ts +39 -0
  548. package/dist/types/src/utils/secp256r1.d.ts.map +1 -0
  549. package/dist/types/src/utils/string.d.ts +6 -0
  550. package/dist/types/src/utils/string.d.ts.map +1 -0
  551. package/dist/types/src/utils/time.d.ts +50 -0
  552. package/dist/types/src/utils/time.d.ts.map +1 -0
  553. package/dist/types/src/utils/url.d.ts +5 -0
  554. package/dist/types/src/utils/url.d.ts.map +1 -0
  555. package/dist/types/tests/core/auth.spec.d.ts +2 -0
  556. package/dist/types/tests/core/auth.spec.d.ts.map +1 -0
  557. package/dist/types/tests/core/message-reply.spec.d.ts +2 -0
  558. package/dist/types/tests/core/message-reply.spec.d.ts.map +1 -0
  559. package/dist/types/tests/core/message.spec.d.ts +2 -0
  560. package/dist/types/tests/core/message.spec.d.ts.map +1 -0
  561. package/dist/types/tests/core/protocol-authorization.spec.d.ts +2 -0
  562. package/dist/types/tests/core/protocol-authorization.spec.d.ts.map +1 -0
  563. package/dist/types/tests/dwn.spec.d.ts +2 -0
  564. package/dist/types/tests/dwn.spec.d.ts.map +1 -0
  565. package/dist/types/tests/event-log/event-emitter-stream.spec.d.ts +2 -0
  566. package/dist/types/tests/event-log/event-emitter-stream.spec.d.ts.map +1 -0
  567. package/dist/types/tests/event-log/event-log-level.spec.d.ts +2 -0
  568. package/dist/types/tests/event-log/event-log-level.spec.d.ts.map +1 -0
  569. package/dist/types/tests/event-log/event-log.spec.d.ts +2 -0
  570. package/dist/types/tests/event-log/event-log.spec.d.ts.map +1 -0
  571. package/dist/types/tests/event-log/event-stream.spec.d.ts +2 -0
  572. package/dist/types/tests/event-log/event-stream.spec.d.ts.map +1 -0
  573. package/dist/types/tests/features/author-delegated-grant.spec.d.ts +2 -0
  574. package/dist/types/tests/features/author-delegated-grant.spec.d.ts.map +1 -0
  575. package/dist/types/tests/features/owner-delegated-grant.spec.d.ts +2 -0
  576. package/dist/types/tests/features/owner-delegated-grant.spec.d.ts.map +1 -0
  577. package/dist/types/tests/features/owner-signature.spec.d.ts +2 -0
  578. package/dist/types/tests/features/owner-signature.spec.d.ts.map +1 -0
  579. package/dist/types/tests/features/permissions.spec.d.ts +2 -0
  580. package/dist/types/tests/features/permissions.spec.d.ts.map +1 -0
  581. package/dist/types/tests/features/protocol-create-action.spec.d.ts +2 -0
  582. package/dist/types/tests/features/protocol-create-action.spec.d.ts.map +1 -0
  583. package/dist/types/tests/features/protocol-delete-action.spec.d.ts +2 -0
  584. package/dist/types/tests/features/protocol-delete-action.spec.d.ts.map +1 -0
  585. package/dist/types/tests/features/protocol-update-action.spec.d.ts +2 -0
  586. package/dist/types/tests/features/protocol-update-action.spec.d.ts.map +1 -0
  587. package/dist/types/tests/features/records-prune.spec.d.ts +2 -0
  588. package/dist/types/tests/features/records-prune.spec.d.ts.map +1 -0
  589. package/dist/types/tests/features/records-tags.spec.d.ts +2 -0
  590. package/dist/types/tests/features/records-tags.spec.d.ts.map +1 -0
  591. package/dist/types/tests/features/resumable-tasks.spec.d.ts +2 -0
  592. package/dist/types/tests/features/resumable-tasks.spec.d.ts.map +1 -0
  593. package/dist/types/tests/handlers/messages-query.spec.d.ts +2 -0
  594. package/dist/types/tests/handlers/messages-query.spec.d.ts.map +1 -0
  595. package/dist/types/tests/handlers/messages-read.spec.d.ts +2 -0
  596. package/dist/types/tests/handlers/messages-read.spec.d.ts.map +1 -0
  597. package/dist/types/tests/handlers/messages-subscribe.spec.d.ts +2 -0
  598. package/dist/types/tests/handlers/messages-subscribe.spec.d.ts.map +1 -0
  599. package/dist/types/tests/handlers/protocols-configure.spec.d.ts +2 -0
  600. package/dist/types/tests/handlers/protocols-configure.spec.d.ts.map +1 -0
  601. package/dist/types/tests/handlers/protocols-query.spec.d.ts +2 -0
  602. package/dist/types/tests/handlers/protocols-query.spec.d.ts.map +1 -0
  603. package/dist/types/tests/handlers/records-delete.spec.d.ts +2 -0
  604. package/dist/types/tests/handlers/records-delete.spec.d.ts.map +1 -0
  605. package/dist/types/tests/handlers/records-query.spec.d.ts +2 -0
  606. package/dist/types/tests/handlers/records-query.spec.d.ts.map +1 -0
  607. package/dist/types/tests/handlers/records-read.spec.d.ts +2 -0
  608. package/dist/types/tests/handlers/records-read.spec.d.ts.map +1 -0
  609. package/dist/types/tests/handlers/records-subscribe.spec.d.ts +2 -0
  610. package/dist/types/tests/handlers/records-subscribe.spec.d.ts.map +1 -0
  611. package/dist/types/tests/handlers/records-write.spec.d.ts +2 -0
  612. package/dist/types/tests/handlers/records-write.spec.d.ts.map +1 -0
  613. package/dist/types/tests/interfaces/messages-get.spec.d.ts +2 -0
  614. package/dist/types/tests/interfaces/messages-get.spec.d.ts.map +1 -0
  615. package/dist/types/tests/interfaces/messages-subscribe.spec.d.ts +2 -0
  616. package/dist/types/tests/interfaces/messages-subscribe.spec.d.ts.map +1 -0
  617. package/dist/types/tests/interfaces/messagess-query.spec.d.ts +2 -0
  618. package/dist/types/tests/interfaces/messagess-query.spec.d.ts.map +1 -0
  619. package/dist/types/tests/interfaces/protocols-configure.spec.d.ts +2 -0
  620. package/dist/types/tests/interfaces/protocols-configure.spec.d.ts.map +1 -0
  621. package/dist/types/tests/interfaces/protocols-query.spec.d.ts +2 -0
  622. package/dist/types/tests/interfaces/protocols-query.spec.d.ts.map +1 -0
  623. package/dist/types/tests/interfaces/records-delete.spec.d.ts +2 -0
  624. package/dist/types/tests/interfaces/records-delete.spec.d.ts.map +1 -0
  625. package/dist/types/tests/interfaces/records-query.spec.d.ts +2 -0
  626. package/dist/types/tests/interfaces/records-query.spec.d.ts.map +1 -0
  627. package/dist/types/tests/interfaces/records-read.spec.d.ts +2 -0
  628. package/dist/types/tests/interfaces/records-read.spec.d.ts.map +1 -0
  629. package/dist/types/tests/interfaces/records-subscribe.spec.d.ts +2 -0
  630. package/dist/types/tests/interfaces/records-subscribe.spec.d.ts.map +1 -0
  631. package/dist/types/tests/interfaces/records-write.spec.d.ts +2 -0
  632. package/dist/types/tests/interfaces/records-write.spec.d.ts.map +1 -0
  633. package/dist/types/tests/jose/jws/general.spec.d.ts +2 -0
  634. package/dist/types/tests/jose/jws/general.spec.d.ts.map +1 -0
  635. package/dist/types/tests/protocols/permission-request.spec.d.ts +2 -0
  636. package/dist/types/tests/protocols/permission-request.spec.d.ts.map +1 -0
  637. package/dist/types/tests/protocols/permissions.spec.d.ts +2 -0
  638. package/dist/types/tests/protocols/permissions.spec.d.ts.map +1 -0
  639. package/dist/types/tests/scenarios/aggregator.spec.d.ts +2 -0
  640. package/dist/types/tests/scenarios/aggregator.spec.d.ts.map +1 -0
  641. package/dist/types/tests/scenarios/deleted-record.spec.d.ts +2 -0
  642. package/dist/types/tests/scenarios/deleted-record.spec.d.ts.map +1 -0
  643. package/dist/types/tests/scenarios/end-to-end-tests.spec.d.ts +2 -0
  644. package/dist/types/tests/scenarios/end-to-end-tests.spec.d.ts.map +1 -0
  645. package/dist/types/tests/scenarios/messages-query.spec.d.ts +2 -0
  646. package/dist/types/tests/scenarios/messages-query.spec.d.ts.map +1 -0
  647. package/dist/types/tests/scenarios/nested-roles.spec.d.ts +2 -0
  648. package/dist/types/tests/scenarios/nested-roles.spec.d.ts.map +1 -0
  649. package/dist/types/tests/scenarios/subscriptions.spec.d.ts +2 -0
  650. package/dist/types/tests/scenarios/subscriptions.spec.d.ts.map +1 -0
  651. package/dist/types/tests/store/blockstore-mock.spec.d.ts +2 -0
  652. package/dist/types/tests/store/blockstore-mock.spec.d.ts.map +1 -0
  653. package/dist/types/tests/store/data-store-level.spec.d.ts +2 -0
  654. package/dist/types/tests/store/data-store-level.spec.d.ts.map +1 -0
  655. package/dist/types/tests/store/index-level.spec.d.ts +2 -0
  656. package/dist/types/tests/store/index-level.spec.d.ts.map +1 -0
  657. package/dist/types/tests/store/message-store-level.spec.d.ts +2 -0
  658. package/dist/types/tests/store/message-store-level.spec.d.ts.map +1 -0
  659. package/dist/types/tests/store/message-store.spec.d.ts +2 -0
  660. package/dist/types/tests/store/message-store.spec.d.ts.map +1 -0
  661. package/dist/types/tests/store-dependent-tests.spec.d.ts +2 -0
  662. package/dist/types/tests/store-dependent-tests.spec.d.ts.map +1 -0
  663. package/dist/types/tests/test-event-stream.d.ts +22 -0
  664. package/dist/types/tests/test-event-stream.d.ts.map +1 -0
  665. package/dist/types/tests/test-stores.d.ts +33 -0
  666. package/dist/types/tests/test-stores.d.ts.map +1 -0
  667. package/dist/types/tests/test-suite.d.ts +18 -0
  668. package/dist/types/tests/test-suite.d.ts.map +1 -0
  669. package/dist/types/tests/utils/cid.spec.d.ts +2 -0
  670. package/dist/types/tests/utils/cid.spec.d.ts.map +1 -0
  671. package/dist/types/tests/utils/data-stream.spec.d.ts +2 -0
  672. package/dist/types/tests/utils/data-stream.spec.d.ts.map +1 -0
  673. package/dist/types/tests/utils/encryption.spec.d.ts +2 -0
  674. package/dist/types/tests/utils/encryption.spec.d.ts.map +1 -0
  675. package/dist/types/tests/utils/filters.spec.d.ts +2 -0
  676. package/dist/types/tests/utils/filters.spec.d.ts.map +1 -0
  677. package/dist/types/tests/utils/hd-key.spec.d.ts +2 -0
  678. package/dist/types/tests/utils/hd-key.spec.d.ts.map +1 -0
  679. package/dist/types/tests/utils/jws.spec.d.ts +2 -0
  680. package/dist/types/tests/utils/jws.spec.d.ts.map +1 -0
  681. package/dist/types/tests/utils/memory-cache.spec.d.ts +2 -0
  682. package/dist/types/tests/utils/memory-cache.spec.d.ts.map +1 -0
  683. package/dist/types/tests/utils/messages.spec.d.ts +2 -0
  684. package/dist/types/tests/utils/messages.spec.d.ts.map +1 -0
  685. package/dist/types/tests/utils/object.spec.d.ts +2 -0
  686. package/dist/types/tests/utils/object.spec.d.ts.map +1 -0
  687. package/dist/types/tests/utils/poller.d.ts +21 -0
  688. package/dist/types/tests/utils/poller.d.ts.map +1 -0
  689. package/dist/types/tests/utils/private-key-signer.spec.d.ts +2 -0
  690. package/dist/types/tests/utils/private-key-signer.spec.d.ts.map +1 -0
  691. package/dist/types/tests/utils/records.spec.d.ts +2 -0
  692. package/dist/types/tests/utils/records.spec.d.ts.map +1 -0
  693. package/dist/types/tests/utils/secp256k1.spec.d.ts +2 -0
  694. package/dist/types/tests/utils/secp256k1.spec.d.ts.map +1 -0
  695. package/dist/types/tests/utils/secp256r1.spec.d.ts +2 -0
  696. package/dist/types/tests/utils/secp256r1.spec.d.ts.map +1 -0
  697. package/dist/types/tests/utils/test-data-generator.d.ts +342 -0
  698. package/dist/types/tests/utils/test-data-generator.d.ts.map +1 -0
  699. package/dist/types/tests/utils/test-stub-generator.d.ts +16 -0
  700. package/dist/types/tests/utils/test-stub-generator.d.ts.map +1 -0
  701. package/dist/types/tests/utils/time.spec.d.ts +2 -0
  702. package/dist/types/tests/utils/time.spec.d.ts.map +1 -0
  703. package/dist/types/tests/utils/url.spec.d.ts +2 -0
  704. package/dist/types/tests/utils/url.spec.d.ts.map +1 -0
  705. package/dist/types/tests/validation/json-schemas/definitions.spec.d.ts +2 -0
  706. package/dist/types/tests/validation/json-schemas/definitions.spec.d.ts.map +1 -0
  707. package/dist/types/tests/validation/json-schemas/jwk/general-jwk.spec.d.ts +2 -0
  708. package/dist/types/tests/validation/json-schemas/jwk/general-jwk.spec.d.ts.map +1 -0
  709. package/dist/types/tests/validation/json-schemas/jwk/public-jwk.spec.d.ts +2 -0
  710. package/dist/types/tests/validation/json-schemas/jwk/public-jwk.spec.d.ts.map +1 -0
  711. package/dist/types/tests/validation/json-schemas/jwk-verification-method.spec.d.ts +2 -0
  712. package/dist/types/tests/validation/json-schemas/jwk-verification-method.spec.d.ts.map +1 -0
  713. package/dist/types/tests/validation/json-schemas/protocols/protocols-configure.spec.d.ts +2 -0
  714. package/dist/types/tests/validation/json-schemas/protocols/protocols-configure.spec.d.ts.map +1 -0
  715. package/dist/types/tests/validation/json-schemas/records/records-query.spec.d.ts +2 -0
  716. package/dist/types/tests/validation/json-schemas/records/records-query.spec.d.ts.map +1 -0
  717. package/dist/types/tests/validation/json-schemas/records/records-write.spec.d.ts +2 -0
  718. package/dist/types/tests/validation/json-schemas/records/records-write.spec.d.ts.map +1 -0
  719. package/package.json +167 -0
  720. package/src/core/abstract-message.ts +62 -0
  721. package/src/core/auth.ts +36 -0
  722. package/src/core/dwn-constant.ts +9 -0
  723. package/src/core/dwn-error.ts +167 -0
  724. package/src/core/grant-authorization.ts +148 -0
  725. package/src/core/message-reply.ts +41 -0
  726. package/src/core/message.ts +259 -0
  727. package/src/core/messages-grant-authorization.ts +134 -0
  728. package/src/core/protocol-authorization.ts +903 -0
  729. package/src/core/protocols-grant-authorization.ts +88 -0
  730. package/src/core/records-grant-authorization.ts +197 -0
  731. package/src/core/resumable-task-manager.ts +114 -0
  732. package/src/core/tenant-gate.ts +33 -0
  733. package/src/dwn.ts +264 -0
  734. package/src/enums/dwn-interface-method.ts +14 -0
  735. package/src/event-log/event-emitter-stream.ts +69 -0
  736. package/src/event-log/event-log-level.ts +72 -0
  737. package/src/handlers/messages-query.ts +67 -0
  738. package/src/handlers/messages-read.ts +103 -0
  739. package/src/handlers/messages-subscribe.ts +89 -0
  740. package/src/handlers/protocols-configure.ts +137 -0
  741. package/src/handlers/protocols-query.ts +82 -0
  742. package/src/handlers/records-delete.ts +124 -0
  743. package/src/handlers/records-query.ts +262 -0
  744. package/src/handlers/records-read.ts +187 -0
  745. package/src/handlers/records-subscribe.ts +218 -0
  746. package/src/handlers/records-write.ts +404 -0
  747. package/src/index.ts +67 -0
  748. package/src/interfaces/messages-query.ts +60 -0
  749. package/src/interfaces/messages-read.ts +63 -0
  750. package/src/interfaces/messages-subscribe.ts +64 -0
  751. package/src/interfaces/protocols-configure.ts +340 -0
  752. package/src/interfaces/protocols-query.ts +96 -0
  753. package/src/interfaces/records-delete.ts +117 -0
  754. package/src/interfaces/records-query.ts +131 -0
  755. package/src/interfaces/records-read.ts +100 -0
  756. package/src/interfaces/records-subscribe.ts +104 -0
  757. package/src/interfaces/records-write.ts +1072 -0
  758. package/src/jose/algorithms/signing/ed25519.ts +58 -0
  759. package/src/jose/algorithms/signing/signature-algorithms.ts +22 -0
  760. package/src/jose/jws/general/builder.ts +48 -0
  761. package/src/jose/jws/general/verifier.ts +112 -0
  762. package/src/protocols/permission-grant.ts +86 -0
  763. package/src/protocols/permission-request.ts +63 -0
  764. package/src/protocols/permissions.ts +508 -0
  765. package/src/schema-validator.ts +46 -0
  766. package/src/store/blockstore-level.ts +113 -0
  767. package/src/store/blockstore-mock.ts +80 -0
  768. package/src/store/data-store-level.ts +120 -0
  769. package/src/store/index-level.ts +691 -0
  770. package/src/store/level-wrapper.ts +272 -0
  771. package/src/store/message-store-level.ts +195 -0
  772. package/src/store/resumable-task-store-level.ts +120 -0
  773. package/src/store/storage-controller.ts +240 -0
  774. package/src/types/cache.ts +16 -0
  775. package/src/types/data-store.ts +64 -0
  776. package/src/types/event-log.ts +52 -0
  777. package/src/types/jose-types.ts +76 -0
  778. package/src/types/jws-types.ts +28 -0
  779. package/src/types/message-interface.ts +30 -0
  780. package/src/types/message-store.ts +57 -0
  781. package/src/types/message-types.ts +132 -0
  782. package/src/types/messages-types.ts +77 -0
  783. package/src/types/method-handler.ts +19 -0
  784. package/src/types/permission-types.ts +110 -0
  785. package/src/types/protocols-types.ts +177 -0
  786. package/src/types/query-types.ts +61 -0
  787. package/src/types/records-types.ts +263 -0
  788. package/src/types/resumable-task-store.ts +96 -0
  789. package/src/types/signer.ts +27 -0
  790. package/src/types/subscriptions.ts +34 -0
  791. package/src/utils/abort.ts +31 -0
  792. package/src/utils/array.ts +39 -0
  793. package/src/utils/cid.ts +101 -0
  794. package/src/utils/data-stream.ts +99 -0
  795. package/src/utils/encoder.ts +54 -0
  796. package/src/utils/encryption.ts +145 -0
  797. package/src/utils/filter.ts +245 -0
  798. package/src/utils/hd-key.ts +126 -0
  799. package/src/utils/jws.ts +95 -0
  800. package/src/utils/memory-cache.ts +31 -0
  801. package/src/utils/messages.ts +109 -0
  802. package/src/utils/object.ts +43 -0
  803. package/src/utils/private-key-signer.ts +72 -0
  804. package/src/utils/protocols.ts +50 -0
  805. package/src/utils/records.ts +559 -0
  806. package/src/utils/secp256k1.ts +157 -0
  807. package/src/utils/secp256r1.ts +142 -0
  808. package/src/utils/string.ts +13 -0
  809. package/src/utils/time.ts +78 -0
  810. package/src/utils/url.ts +65 -0
@@ -0,0 +1,812 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import chaiAsPromised from 'chai-as-promised';
11
+ import sinon from 'sinon';
12
+ import chai, { expect } from 'chai';
13
+ import messageProtocolDefinition from '../vectors/protocol-definitions/message.json' assert { type: 'json' };
14
+ import nestedProtocolDefinition from '../vectors/protocol-definitions/nested.json' assert { type: 'json' };
15
+ import { DwnInterfaceName } from '../../src/enums/dwn-interface-method.js';
16
+ import { Message } from '../../src/core/message.js';
17
+ import { TestDataGenerator } from '../utils/test-data-generator.js';
18
+ import { TestEventStream } from '../test-event-stream.js';
19
+ import { TestStores } from '../test-stores.js';
20
+ import { DataStream, Dwn, DwnConstant, DwnErrorCode, Jws, ProtocolsConfigure, RecordsDelete, RecordsQuery, RecordsWrite, SortDirection } from '../../src/index.js';
21
+ import { DidKey, UniversalResolver } from '@enbox/dids';
22
+ chai.use(chaiAsPromised);
23
+ export function testRecordsPrune() {
24
+ describe('records pruning', () => {
25
+ let didResolver;
26
+ let messageStore;
27
+ let dataStore;
28
+ let resumableTaskStore;
29
+ let eventLog;
30
+ let eventStream;
31
+ let dwn;
32
+ // important to follow the `before` and `after` pattern to initialize and clean the stores in tests
33
+ // so that different test suites can reuse the same backend store for testing
34
+ before(() => __awaiter(this, void 0, void 0, function* () {
35
+ didResolver = new UniversalResolver({ didResolvers: [DidKey] });
36
+ const stores = TestStores.get();
37
+ messageStore = stores.messageStore;
38
+ dataStore = stores.dataStore;
39
+ resumableTaskStore = stores.resumableTaskStore;
40
+ eventLog = stores.eventLog;
41
+ eventStream = TestEventStream.get();
42
+ dwn = yield Dwn.create({ didResolver, messageStore, dataStore, eventLog, eventStream, resumableTaskStore });
43
+ }));
44
+ beforeEach(() => __awaiter(this, void 0, void 0, function* () {
45
+ sinon.restore(); // wipe all previous stubs/spies/mocks/fakes
46
+ // clean up before each test rather than after so that a test does not depend on other tests to do the clean up
47
+ yield messageStore.clear();
48
+ yield dataStore.clear();
49
+ yield resumableTaskStore.clear();
50
+ yield eventLog.clear();
51
+ }));
52
+ after(() => __awaiter(this, void 0, void 0, function* () {
53
+ yield dwn.close();
54
+ }));
55
+ it('should prune all descendants when given RecordsDelete with `prune` set to `true`', () => __awaiter(this, void 0, void 0, function* () {
56
+ var _a;
57
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
58
+ // install a protocol with foo <- bar <- baz structure
59
+ const nestedProtocol = nestedProtocolDefinition;
60
+ const protocolsConfig = yield ProtocolsConfigure.create({
61
+ definition: nestedProtocol,
62
+ signer: Jws.createSigner(alice)
63
+ });
64
+ const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
65
+ expect(protocolsConfigureReply.status.code).to.equal(202);
66
+ // writes 2 foos, 2 bars under foo1, and 2 bazes under bar1
67
+ // write 2 foos
68
+ const fooData = TestDataGenerator.randomBytes(100);
69
+ const fooOptions = {
70
+ signer: Jws.createSigner(alice),
71
+ protocol: nestedProtocol.protocol,
72
+ protocolPath: 'foo',
73
+ schema: nestedProtocol.types.foo.schema,
74
+ dataFormat: nestedProtocol.types.foo.dataFormats[0],
75
+ data: fooData
76
+ };
77
+ const foo1 = yield RecordsWrite.create(fooOptions);
78
+ const foo1WriteResponse = yield dwn.processMessage(alice.did, foo1.message, { dataStream: DataStream.fromBytes(fooData) });
79
+ expect(foo1WriteResponse.status.code).equals(202);
80
+ const foo2 = yield RecordsWrite.create(fooOptions);
81
+ const foo2WriteResponse = yield dwn.processMessage(alice.did, foo2.message, { dataStream: DataStream.fromBytes(fooData) });
82
+ expect(foo2WriteResponse.status.code).equals(202);
83
+ // write 2 bars under foo1 with data large enough to be required to be stored in the data store so we can test purge in data store
84
+ const barData = TestDataGenerator.randomBytes(DwnConstant.maxDataSizeAllowedToBeEncoded + 1);
85
+ const barOptions = {
86
+ signer: Jws.createSigner(alice),
87
+ protocol: nestedProtocol.protocol,
88
+ protocolPath: 'foo/bar',
89
+ schema: nestedProtocol.types.bar.schema,
90
+ dataFormat: nestedProtocol.types.bar.dataFormats[0],
91
+ parentContextId: foo1.message.contextId,
92
+ data: barData
93
+ };
94
+ const bar1 = yield RecordsWrite.create(Object.assign({}, barOptions));
95
+ const bar1WriteResponse = yield dwn.processMessage(alice.did, bar1.message, { dataStream: DataStream.fromBytes(barData) });
96
+ expect(bar1WriteResponse.status.code).equals(202);
97
+ const bar2 = yield RecordsWrite.create(Object.assign({}, barOptions));
98
+ const bar2WriteResponse = yield dwn.processMessage(alice.did, bar2.message, { dataStream: DataStream.fromBytes(barData) });
99
+ expect(bar2WriteResponse.status.code).equals(202);
100
+ // write 2 bazes under bar1, each has more than 1 message associated with the record so we can test multi-message purge
101
+ const bazData = TestDataGenerator.randomBytes(100);
102
+ const bazOptions = {
103
+ signer: Jws.createSigner(alice),
104
+ protocol: nestedProtocol.protocol,
105
+ protocolPath: 'foo/bar/baz',
106
+ schema: nestedProtocol.types.baz.schema,
107
+ dataFormat: nestedProtocol.types.baz.dataFormats[0],
108
+ parentContextId: bar1.message.contextId,
109
+ data: bazData
110
+ };
111
+ const baz1 = yield RecordsWrite.create(Object.assign({}, bazOptions));
112
+ const baz1WriteResponse = yield dwn.processMessage(alice.did, baz1.message, { dataStream: DataStream.fromBytes(bazData) });
113
+ expect(baz1WriteResponse.status.code).equals(202);
114
+ const baz2 = yield RecordsWrite.create(Object.assign({}, bazOptions));
115
+ const baz2WriteResponse = yield dwn.processMessage(alice.did, baz2.message, { dataStream: DataStream.fromBytes(bazData) });
116
+ expect(baz2WriteResponse.status.code).equals(202);
117
+ // make latest state of baz1 a `RecordsWrite`
118
+ const newBaz1Data = TestDataGenerator.randomBytes(100);
119
+ const baz1Update = yield RecordsWrite.createFrom({
120
+ signer: Jws.createSigner(alice),
121
+ recordsWriteMessage: baz1.message,
122
+ data: newBaz1Data
123
+ });
124
+ const baz1UpdateResponse = yield dwn.processMessage(alice.did, baz1Update.message, { dataStream: DataStream.fromBytes(newBaz1Data) });
125
+ expect(baz1UpdateResponse.status.code).equals(202);
126
+ // make latest state of baz2 a `RecordsDelete`
127
+ const baz2Delete = yield RecordsDelete.create({
128
+ signer: Jws.createSigner(alice),
129
+ recordId: baz2.message.recordId
130
+ });
131
+ const baz2DeleteResponse = yield dwn.processMessage(alice.did, baz2Delete.message);
132
+ expect(baz2DeleteResponse.status.code).equals(202);
133
+ // sanity test messages are inserted in message store
134
+ const queryFilter = [{
135
+ interface: DwnInterfaceName.Records,
136
+ protocol: nestedProtocol.protocol
137
+ }];
138
+ const queryResult = yield messageStore.query(alice.did, queryFilter);
139
+ expect(queryResult.messages.length).to.equal(8); // 2 foos, 2 bars, 2 bazes x 2 messages each
140
+ // sanity test events are inserted in event log
141
+ const { events } = yield eventLog.queryEvents(alice.did, queryFilter);
142
+ expect(events.length).to.equal(8);
143
+ // sanity test data is inserted in data store
144
+ const bar1DataGetResult = yield dataStore.get(alice.did, bar1.message.recordId, bar1.message.descriptor.dataCid);
145
+ const bar2DataGetResult = yield dataStore.get(alice.did, bar2.message.recordId, bar2.message.descriptor.dataCid);
146
+ expect(bar1DataGetResult).to.not.be.undefined;
147
+ expect(bar2DataGetResult).to.not.be.undefined;
148
+ // Delete foo1 with prune enabled
149
+ const foo1Delete = yield RecordsDelete.create({
150
+ recordId: foo1.message.recordId,
151
+ prune: true,
152
+ signer: Jws.createSigner(alice)
153
+ });
154
+ const deleteReply = yield dwn.processMessage(alice.did, foo1Delete.message);
155
+ expect(deleteReply.status.code).to.equal(202);
156
+ // verify all bar and baz message are permanently deleted
157
+ const queryResult2 = yield messageStore.query(alice.did, queryFilter, { messageTimestamp: SortDirection.Ascending });
158
+ expect(queryResult2.messages.length).to.equal(3); // foo2 RecordsWrite, foo1 RecordsWrite and RecordsDelete
159
+ expect(queryResult2.messages[0]).to.deep.include(foo1.message);
160
+ expect(queryResult2.messages[1]).to.deep.include(foo2.message);
161
+ expect(queryResult2.messages[2]).to.deep.include(foo1Delete.message);
162
+ // verify all bar and baz events are permanently deleted
163
+ const { events: events2 } = yield eventLog.queryEvents(alice.did, queryFilter);
164
+ expect(events2.length).to.equal(3);
165
+ const foo1RecordsWriteCid = yield Message.getCid(foo1.message);
166
+ const foo2RecordsWriteCid = yield Message.getCid(foo2.message);
167
+ const foo2RecordsDeleteCid = yield Message.getCid(foo1Delete.message);
168
+ expect(events2).to.contain.members([foo1RecordsWriteCid, foo2RecordsWriteCid, foo2RecordsDeleteCid]);
169
+ // verify all bar data are permanently deleted
170
+ const bar1DataGetResult2 = yield dataStore.get(alice.did, bar1.message.recordId, bar1.message.descriptor.dataCid);
171
+ const bar2DataGetResult2 = yield dataStore.get(alice.did, bar2.message.recordId, bar2.message.descriptor.dataCid);
172
+ expect(bar1DataGetResult2).to.be.undefined;
173
+ expect(bar2DataGetResult2).to.be.undefined;
174
+ // sanity test an external query will no longer return the deleted records
175
+ const queryData = yield RecordsQuery.create({
176
+ signer: Jws.createSigner(alice),
177
+ filter: { protocol: nestedProtocol.protocol }
178
+ });
179
+ const reply2 = yield dwn.processMessage(alice.did, queryData.message);
180
+ expect(reply2.status.code).to.equal(200);
181
+ expect((_a = reply2.entries) === null || _a === void 0 ? void 0 : _a.length).to.equal(1); // only foo2 is left
182
+ expect(reply2.entries[0]).to.deep.include(foo2.message);
183
+ }));
184
+ it('should allow pruning against a deleted record that is not already pruned', () => __awaiter(this, void 0, void 0, function* () {
185
+ // Scenario:
186
+ // 1. Alice has a record `foo` with a descendent chain
187
+ // 2. Alice deletes the record `foo` WITHOUT prune, leaving the descendants intact
188
+ // 3. Verify that Alice is able to perform a prune on `foo` to delete all its descendants
189
+ var _a, _b, _c;
190
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
191
+ // install a protocol with foo <- bar <- baz structure
192
+ const nestedProtocol = nestedProtocolDefinition;
193
+ const protocolsConfig = yield ProtocolsConfigure.create({
194
+ definition: nestedProtocol,
195
+ signer: Jws.createSigner(alice)
196
+ });
197
+ const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
198
+ expect(protocolsConfigureReply.status.code).to.equal(202);
199
+ // 1. Alice has a record `foo` with a descendent chain
200
+ // write foo <- bar <- baz records
201
+ const fooData = TestDataGenerator.randomBytes(100);
202
+ const fooOptions = {
203
+ signer: Jws.createSigner(alice),
204
+ protocol: nestedProtocol.protocol,
205
+ protocolPath: 'foo',
206
+ schema: nestedProtocol.types.foo.schema,
207
+ dataFormat: nestedProtocol.types.foo.dataFormats[0],
208
+ data: fooData
209
+ };
210
+ const foo = yield RecordsWrite.create(fooOptions);
211
+ const fooWriteResponse = yield dwn.processMessage(alice.did, foo.message, { dataStream: DataStream.fromBytes(fooData) });
212
+ expect(fooWriteResponse.status.code).equals(202);
213
+ const barData = TestDataGenerator.randomBytes(100);
214
+ const barOptions = {
215
+ signer: Jws.createSigner(alice),
216
+ protocol: nestedProtocol.protocol,
217
+ protocolPath: 'foo/bar',
218
+ schema: nestedProtocol.types.bar.schema,
219
+ dataFormat: nestedProtocol.types.bar.dataFormats[0],
220
+ parentContextId: foo.message.contextId,
221
+ data: barData
222
+ };
223
+ const bar = yield RecordsWrite.create(Object.assign({}, barOptions));
224
+ const barWriteResponse = yield dwn.processMessage(alice.did, bar.message, { dataStream: DataStream.fromBytes(barData) });
225
+ expect(barWriteResponse.status.code).equals(202);
226
+ const bazData = TestDataGenerator.randomBytes(100);
227
+ const bazOptions = {
228
+ signer: Jws.createSigner(alice),
229
+ protocol: nestedProtocol.protocol,
230
+ protocolPath: 'foo/bar/baz',
231
+ schema: nestedProtocol.types.baz.schema,
232
+ dataFormat: nestedProtocol.types.baz.dataFormats[0],
233
+ parentContextId: bar.message.contextId,
234
+ data: bazData
235
+ };
236
+ const baz = yield RecordsWrite.create(Object.assign({}, bazOptions));
237
+ const bazWriteResponse = yield dwn.processMessage(alice.did, baz.message, { dataStream: DataStream.fromBytes(bazData) });
238
+ expect(bazWriteResponse.status.code).equals(202);
239
+ // sanity records are inserted in message store
240
+ const queryFilter = [{
241
+ interface: DwnInterfaceName.Records,
242
+ protocol: nestedProtocol.protocol
243
+ }];
244
+ const messagesBeforeDelete = yield messageStore.query(alice.did, queryFilter);
245
+ expect(messagesBeforeDelete.messages.length).to.equal(3);
246
+ // sanity verify RecordsQuery returns no records
247
+ const recordsQuery = yield RecordsQuery.create({
248
+ signer: Jws.createSigner(alice),
249
+ filter: { protocol: nestedProtocol.protocol }
250
+ });
251
+ const recordsQueryBeforeDeleteReply = yield dwn.processMessage(alice.did, recordsQuery.message);
252
+ expect(recordsQueryBeforeDeleteReply.status.code).to.equal(200);
253
+ expect((_a = recordsQueryBeforeDeleteReply.entries) === null || _a === void 0 ? void 0 : _a.length).to.equal(3);
254
+ // 2. Alice deletes the record `foo` WITHOUT prune, leaving the descendants intact
255
+ const fooDelete = yield RecordsDelete.create({
256
+ recordId: foo.message.recordId,
257
+ // prune : true, // intentionally showing that this is a RecordsDelete WITHOUT pruning
258
+ signer: Jws.createSigner(alice)
259
+ });
260
+ const deleteReply = yield dwn.processMessage(alice.did, fooDelete.message);
261
+ expect(deleteReply.status.code).to.equal(202);
262
+ // verify bar and baz messages still exists
263
+ const messagesAfterDelete = yield messageStore.query(alice.did, queryFilter, { messageTimestamp: SortDirection.Ascending });
264
+ expect(messagesAfterDelete.messages.length).to.equal(4); // RecordsWrite for foo, bar, baz, and RecordsDelete for foo
265
+ // sanity verify RecordsQuery returns the descendants
266
+ const recordsQueryAfterDeleteReply = yield dwn.processMessage(alice.did, recordsQuery.message);
267
+ expect(recordsQueryAfterDeleteReply.status.code).to.equal(200);
268
+ expect((_b = recordsQueryAfterDeleteReply.entries) === null || _b === void 0 ? void 0 : _b.length).to.equal(2);
269
+ // 3. Verify that Alice is able to perform a prune on `foo` to delete all its descendants
270
+ const fooPrune = yield RecordsDelete.create({
271
+ recordId: foo.message.recordId,
272
+ prune: true,
273
+ signer: Jws.createSigner(alice)
274
+ });
275
+ const pruneReply = yield dwn.processMessage(alice.did, fooPrune.message);
276
+ expect(pruneReply.status.code).to.equal(202);
277
+ // verify bar and baz messages are permanently deleted
278
+ const messagesAfterPrune = yield messageStore.query(alice.did, queryFilter, { messageTimestamp: SortDirection.Ascending });
279
+ expect(messagesAfterPrune.messages.length).to.equal(2); // just RecordsWrite and RecordsDelete for foo
280
+ expect(messagesAfterPrune.messages[0]).to.deep.include(foo.message);
281
+ expect(messagesAfterPrune.messages[1]).to.deep.include(fooPrune.message);
282
+ // sanity verify RecordsQuery returns no records
283
+ const recordsQueryAfterPruneReply = yield dwn.processMessage(alice.did, recordsQuery.message);
284
+ expect(recordsQueryAfterPruneReply.status.code).to.equal(200);
285
+ expect((_c = recordsQueryAfterPruneReply.entries) === null || _c === void 0 ? void 0 : _c.length).to.equal(0);
286
+ }));
287
+ it('should return 404 when attempting to prune against a record that is already pruned', () => __awaiter(this, void 0, void 0, function* () {
288
+ // Scenario:
289
+ // 1. Alice has a record `foo` with a descendent chain
290
+ // 2. Alice prunes the record `foo`
291
+ // 3. Verify that Alice is unable to perform a prune on `foo` again
292
+ var _a;
293
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
294
+ // install a protocol with foo <- bar <- baz structure
295
+ const nestedProtocol = nestedProtocolDefinition;
296
+ const protocolsConfig = yield ProtocolsConfigure.create({
297
+ definition: nestedProtocol,
298
+ signer: Jws.createSigner(alice)
299
+ });
300
+ const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
301
+ expect(protocolsConfigureReply.status.code).to.equal(202);
302
+ // 1. Alice has a record `foo` with a descendent chain
303
+ // write foo <- bar <- baz records
304
+ const fooData = TestDataGenerator.randomBytes(100);
305
+ const fooOptions = {
306
+ signer: Jws.createSigner(alice),
307
+ protocol: nestedProtocol.protocol,
308
+ protocolPath: 'foo',
309
+ schema: nestedProtocol.types.foo.schema,
310
+ dataFormat: nestedProtocol.types.foo.dataFormats[0],
311
+ data: fooData
312
+ };
313
+ const foo = yield RecordsWrite.create(fooOptions);
314
+ const fooWriteResponse = yield dwn.processMessage(alice.did, foo.message, { dataStream: DataStream.fromBytes(fooData) });
315
+ expect(fooWriteResponse.status.code).equals(202);
316
+ const barData = TestDataGenerator.randomBytes(100);
317
+ const barOptions = {
318
+ signer: Jws.createSigner(alice),
319
+ protocol: nestedProtocol.protocol,
320
+ protocolPath: 'foo/bar',
321
+ schema: nestedProtocol.types.bar.schema,
322
+ dataFormat: nestedProtocol.types.bar.dataFormats[0],
323
+ parentContextId: foo.message.contextId,
324
+ data: barData
325
+ };
326
+ const bar = yield RecordsWrite.create(Object.assign({}, barOptions));
327
+ const barWriteResponse = yield dwn.processMessage(alice.did, bar.message, { dataStream: DataStream.fromBytes(barData) });
328
+ expect(barWriteResponse.status.code).equals(202);
329
+ const bazData = TestDataGenerator.randomBytes(100);
330
+ const bazOptions = {
331
+ signer: Jws.createSigner(alice),
332
+ protocol: nestedProtocol.protocol,
333
+ protocolPath: 'foo/bar/baz',
334
+ schema: nestedProtocol.types.baz.schema,
335
+ dataFormat: nestedProtocol.types.baz.dataFormats[0],
336
+ parentContextId: bar.message.contextId,
337
+ data: bazData
338
+ };
339
+ const baz = yield RecordsWrite.create(Object.assign({}, bazOptions));
340
+ const bazWriteResponse = yield dwn.processMessage(alice.did, baz.message, { dataStream: DataStream.fromBytes(bazData) });
341
+ expect(bazWriteResponse.status.code).equals(202);
342
+ // sanity records are inserted in message store
343
+ const queryFilter = [{
344
+ interface: DwnInterfaceName.Records,
345
+ protocol: nestedProtocol.protocol
346
+ }];
347
+ const queryResult = yield messageStore.query(alice.did, queryFilter);
348
+ expect(queryResult.messages.length).to.equal(3);
349
+ // sanity verify RecordsQuery returns no records
350
+ const recordsQuery = yield RecordsQuery.create({
351
+ signer: Jws.createSigner(alice),
352
+ filter: { protocol: nestedProtocol.protocol }
353
+ });
354
+ const recordsQueryBeforeDeleteReply = yield dwn.processMessage(alice.did, recordsQuery.message);
355
+ expect(recordsQueryBeforeDeleteReply.status.code).to.equal(200);
356
+ expect((_a = recordsQueryBeforeDeleteReply.entries) === null || _a === void 0 ? void 0 : _a.length).to.equal(3);
357
+ // 2. Alice prunes the record `foo`
358
+ const fooPrune1 = yield RecordsDelete.create({
359
+ recordId: foo.message.recordId,
360
+ prune: true,
361
+ signer: Jws.createSigner(alice)
362
+ });
363
+ const prune1Reply = yield dwn.processMessage(alice.did, fooPrune1.message);
364
+ expect(prune1Reply.status.code).to.equal(202);
365
+ // 3. Verify that Alice is unable to perform a prune on `foo` again
366
+ const fooPrune2 = yield RecordsDelete.create({
367
+ recordId: foo.message.recordId,
368
+ prune: true,
369
+ signer: Jws.createSigner(alice)
370
+ });
371
+ const prune2Reply = yield dwn.processMessage(alice.did, fooPrune2.message);
372
+ expect(prune2Reply.status.code).to.equal(404);
373
+ }));
374
+ describe('prune and co-prune protocol action', () => {
375
+ it('should only allow a non-owner author to prune if `prune` is allowed and set to `true` in RecordsDelete', () => __awaiter(this, void 0, void 0, function* () {
376
+ // Scenario:
377
+ // 1. Alice installs a protocol allowing others to add and prune records.
378
+ // 2. Bob writes a record + a descendant in Alice's DWN.
379
+ // 3. Verify Bob cannot prune the records if `prune` is not set to `true` in RecordsDelete.
380
+ // 4. Verify Bob can prune the records by setting `prune` to `true` in RecordsDelete.
381
+ var _a;
382
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
383
+ const bob = yield TestDataGenerator.generateDidKeyPersona();
384
+ // 1. Alice installs a protocol allowing others to add and prune records.
385
+ const protocolDefinition = {
386
+ protocol: 'http://post-protocol.xyz',
387
+ published: true,
388
+ types: {
389
+ post: {},
390
+ attachment: {}
391
+ },
392
+ structure: {
393
+ post: {
394
+ $actions: [
395
+ {
396
+ who: 'anyone',
397
+ can: [
398
+ 'create',
399
+ 'prune', // allowing author to prune, but not delete
400
+ 'read'
401
+ ]
402
+ }
403
+ ],
404
+ attachment: {
405
+ $actions: [
406
+ {
407
+ who: 'anyone',
408
+ can: ['read']
409
+ },
410
+ {
411
+ who: 'author',
412
+ of: 'post',
413
+ can: ['create']
414
+ }
415
+ ]
416
+ }
417
+ }
418
+ }
419
+ };
420
+ const protocolsConfig = yield ProtocolsConfigure.create({
421
+ definition: protocolDefinition,
422
+ signer: Jws.createSigner(alice)
423
+ });
424
+ const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
425
+ expect(protocolsConfigureReply.status.code).to.equal(202);
426
+ // 2. Bob writes a record + a descendant in Alice's DWN.
427
+ const postData = TestDataGenerator.randomBytes(100);
428
+ const postOptions = {
429
+ signer: Jws.createSigner(bob),
430
+ protocol: protocolDefinition.protocol,
431
+ protocolPath: 'post',
432
+ dataFormat: 'application/json',
433
+ data: postData
434
+ };
435
+ const post = yield RecordsWrite.create(postOptions);
436
+ const postWriteResponse = yield dwn.processMessage(alice.did, post.message, { dataStream: DataStream.fromBytes(postData) });
437
+ expect(postWriteResponse.status.code).equals(202);
438
+ const attachmentData = TestDataGenerator.randomBytes(100);
439
+ const attachmentOptions = {
440
+ signer: Jws.createSigner(bob),
441
+ protocol: protocolDefinition.protocol,
442
+ protocolPath: 'post/attachment',
443
+ parentContextId: post.message.contextId,
444
+ dataFormat: 'application/octet-stream',
445
+ data: attachmentData
446
+ };
447
+ const attachment = yield RecordsWrite.create(attachmentOptions);
448
+ const attachmentWriteResponse = yield dwn.processMessage(alice.did, attachment.message, { dataStream: DataStream.fromBytes(attachmentData) });
449
+ expect(attachmentWriteResponse.status.code).equals(202);
450
+ // 3. Verify Bob cannot prune the records if `prune` is not set to `true` in RecordsDelete.
451
+ const unauthorizedPostPrune = yield RecordsDelete.create({
452
+ recordId: post.message.recordId,
453
+ // prune : true, // intentionally not setting `prune` to true
454
+ signer: Jws.createSigner(bob)
455
+ });
456
+ const unauthorizedPostPruneReply = yield dwn.processMessage(alice.did, unauthorizedPostPrune.message);
457
+ expect(unauthorizedPostPruneReply.status.code).to.equal(401);
458
+ expect(unauthorizedPostPruneReply.status.detail).to.contain(DwnErrorCode.ProtocolAuthorizationActionNotAllowed);
459
+ // 4. Verify Bob can prune the records by setting `prune` to `true` in RecordsDelete.
460
+ const postPrune = yield RecordsDelete.create({
461
+ recordId: post.message.recordId,
462
+ prune: true,
463
+ signer: Jws.createSigner(bob)
464
+ });
465
+ const pruneReply = yield dwn.processMessage(alice.did, postPrune.message);
466
+ expect(pruneReply.status.code).to.equal(202);
467
+ // sanity test `RecordsQuery` no longer returns the deleted record
468
+ const recordsQuery = yield RecordsQuery.create({
469
+ signer: Jws.createSigner(bob),
470
+ filter: { protocol: protocolDefinition.protocol }
471
+ });
472
+ const recordsQueryReply = yield dwn.processMessage(alice.did, recordsQuery.message);
473
+ expect(recordsQueryReply.status.code).to.equal(200);
474
+ expect((_a = recordsQueryReply.entries) === null || _a === void 0 ? void 0 : _a.length).to.equal(0);
475
+ }));
476
+ it('should not allow a non-owner author to prune if `prune` is not an authorized action', () => __awaiter(this, void 0, void 0, function* () {
477
+ // Scenario:
478
+ // 1. Alice installs a protocol allowing others to add records but not prune.
479
+ // 2. Bob writes a record + a descendant in Alice's DWN.
480
+ // 3. Verify Bob cannot prune the records.
481
+ var _a;
482
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
483
+ const bob = yield TestDataGenerator.generateDidKeyPersona();
484
+ // 1. Alice installs a protocol allowing others to add records but not prune.
485
+ const protocolDefinition = messageProtocolDefinition;
486
+ const protocolsConfig = yield ProtocolsConfigure.create({
487
+ definition: protocolDefinition,
488
+ signer: Jws.createSigner(alice)
489
+ });
490
+ const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
491
+ expect(protocolsConfigureReply.status.code).to.equal(202);
492
+ // 2. Bob writes a record + a descendant in Alice's DWN.
493
+ const messageData = TestDataGenerator.randomBytes(100);
494
+ const messageOptions = {
495
+ signer: Jws.createSigner(bob),
496
+ protocol: protocolDefinition.protocol,
497
+ protocolPath: 'message',
498
+ schema: protocolDefinition.types.message.schema,
499
+ dataFormat: protocolDefinition.types.message.dataFormats[0],
500
+ data: messageData
501
+ };
502
+ const message = yield RecordsWrite.create(messageOptions);
503
+ const messageWriteResponse = yield dwn.processMessage(alice.did, message.message, { dataStream: DataStream.fromBytes(messageData) });
504
+ expect(messageWriteResponse.status.code).equals(202);
505
+ const attachmentData = TestDataGenerator.randomBytes(100);
506
+ const attachmentOptions = {
507
+ signer: Jws.createSigner(bob),
508
+ protocol: protocolDefinition.protocol,
509
+ protocolPath: 'message/attachment',
510
+ parentContextId: message.message.contextId,
511
+ dataFormat: 'application/octet-stream',
512
+ data: attachmentData
513
+ };
514
+ const attachment = yield RecordsWrite.create(attachmentOptions);
515
+ const attachmentWriteResponse = yield dwn.processMessage(alice.did, attachment.message, { dataStream: DataStream.fromBytes(attachmentData) });
516
+ expect(attachmentWriteResponse.status.code).equals(202);
517
+ // 3. Verify Bob cannot prune the records.
518
+ const messagePrune = yield RecordsDelete.create({
519
+ recordId: message.message.recordId,
520
+ prune: true,
521
+ signer: Jws.createSigner(bob)
522
+ });
523
+ const deleteReply = yield dwn.processMessage(alice.did, messagePrune.message);
524
+ expect(deleteReply.status.code).to.equal(401);
525
+ expect(deleteReply.status.detail).to.contain(DwnErrorCode.ProtocolAuthorizationActionNotAllowed);
526
+ // sanity test `RecordsQuery` still returns the records
527
+ const recordsQuery = yield RecordsQuery.create({
528
+ signer: Jws.createSigner(alice),
529
+ filter: { protocol: protocolDefinition.protocol }
530
+ });
531
+ const recordsQueryReply = yield dwn.processMessage(alice.did, recordsQuery.message);
532
+ expect(recordsQueryReply.status.code).to.equal(200);
533
+ expect((_a = recordsQueryReply.entries) === null || _a === void 0 ? void 0 : _a.length).to.equal(2);
534
+ }));
535
+ it('should allow a non-author to prune if `co-prune` is allowed and `prune` is set to `true` in RecordsDelete', () => __awaiter(this, void 0, void 0, function* () {
536
+ // Scenario:
537
+ // 1. Alice installs a protocol allowing others to add and prune records.
538
+ // 2. Bob writes a record + a descendant in Alice's DWN.
539
+ // 3. Verify Carol cannot prune the records if `prune` is not set to `true` in RecordsDelete.
540
+ // 4. Verify Carol can prune the records by setting `prune` to `true` in RecordsDelete.
541
+ var _a;
542
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
543
+ const bob = yield TestDataGenerator.generateDidKeyPersona();
544
+ const carol = yield TestDataGenerator.generateDidKeyPersona();
545
+ // 1. Alice installs a protocol allowing others to add and prune records.
546
+ const protocolDefinition = {
547
+ protocol: 'http://post-protocol.xyz',
548
+ published: true,
549
+ types: {
550
+ post: {},
551
+ attachment: {}
552
+ },
553
+ structure: {
554
+ post: {
555
+ $actions: [
556
+ {
557
+ who: 'anyone',
558
+ can: [
559
+ 'create',
560
+ 'co-prune', // allowing anyone to prune
561
+ 'read'
562
+ ]
563
+ }
564
+ ],
565
+ attachment: {
566
+ $actions: [
567
+ {
568
+ who: 'anyone',
569
+ can: [
570
+ 'create',
571
+ 'read'
572
+ ]
573
+ }
574
+ ]
575
+ }
576
+ }
577
+ }
578
+ };
579
+ const protocolsConfig = yield ProtocolsConfigure.create({
580
+ definition: protocolDefinition,
581
+ signer: Jws.createSigner(alice)
582
+ });
583
+ const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
584
+ expect(protocolsConfigureReply.status.code).to.equal(202);
585
+ // 2. Bob writes a record + a descendant in Alice's DWN.
586
+ const postData = TestDataGenerator.randomBytes(100);
587
+ const postOptions = {
588
+ signer: Jws.createSigner(bob),
589
+ protocol: protocolDefinition.protocol,
590
+ protocolPath: 'post',
591
+ dataFormat: 'application/json',
592
+ data: postData
593
+ };
594
+ const post = yield RecordsWrite.create(postOptions);
595
+ const postWriteResponse = yield dwn.processMessage(alice.did, post.message, { dataStream: DataStream.fromBytes(postData) });
596
+ expect(postWriteResponse.status.code).equals(202);
597
+ const attachmentData = TestDataGenerator.randomBytes(100);
598
+ const attachmentOptions = {
599
+ signer: Jws.createSigner(bob),
600
+ protocol: protocolDefinition.protocol,
601
+ protocolPath: 'post/attachment',
602
+ parentContextId: post.message.contextId,
603
+ dataFormat: 'application/octet-stream',
604
+ data: attachmentData
605
+ };
606
+ const attachment = yield RecordsWrite.create(attachmentOptions);
607
+ const attachmentWriteResponse = yield dwn.processMessage(alice.did, attachment.message, { dataStream: DataStream.fromBytes(attachmentData) });
608
+ expect(attachmentWriteResponse.status.code).equals(202);
609
+ // 3. Verify Carol cannot prune the records if `prune` is not set to `true` in RecordsDelete.
610
+ const unauthorizedPostPrune = yield RecordsDelete.create({
611
+ recordId: post.message.recordId,
612
+ // prune : true, // intentionally not setting `prune` to true
613
+ signer: Jws.createSigner(carol)
614
+ });
615
+ const unauthorizedPostPruneReply = yield dwn.processMessage(alice.did, unauthorizedPostPrune.message);
616
+ expect(unauthorizedPostPruneReply.status.code).to.equal(401);
617
+ expect(unauthorizedPostPruneReply.status.detail).to.contain(DwnErrorCode.ProtocolAuthorizationActionNotAllowed);
618
+ // 4. Verify Carol can prune the records by setting `prune` to `true` in RecordsDelete.
619
+ const postPrune = yield RecordsDelete.create({
620
+ recordId: post.message.recordId,
621
+ prune: true,
622
+ signer: Jws.createSigner(carol)
623
+ });
624
+ const deleteReply = yield dwn.processMessage(alice.did, postPrune.message);
625
+ expect(deleteReply.status.code).to.equal(202);
626
+ // sanity test `RecordsQuery` no longer returns the deleted record
627
+ const recordsQuery = yield RecordsQuery.create({
628
+ signer: Jws.createSigner(bob),
629
+ filter: { protocol: protocolDefinition.protocol }
630
+ });
631
+ const recordsQueryReply = yield dwn.processMessage(alice.did, recordsQuery.message);
632
+ expect(recordsQueryReply.status.code).to.equal(200);
633
+ expect((_a = recordsQueryReply.entries) === null || _a === void 0 ? void 0 : _a.length).to.equal(0);
634
+ }));
635
+ it('should not allow a non-author to prune if `prune` is allowed but `co-prune` is not allowed', () => __awaiter(this, void 0, void 0, function* () {
636
+ // Scenario:
637
+ // 1. Alice installs a protocol allowing others to add records AND only author to prune.
638
+ // 2. Bob writes a record + a descendant in Alice's DWN.
639
+ // 3. Verify Carol cannot prune the records.
640
+ var _a;
641
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
642
+ const bob = yield TestDataGenerator.generateDidKeyPersona();
643
+ const carol = yield TestDataGenerator.generateDidKeyPersona();
644
+ // 1. Alice installs a protocol allowing others to add records AND only author to prune.
645
+ const protocolDefinition = {
646
+ protocol: 'http://post-protocol.xyz',
647
+ published: true,
648
+ types: {
649
+ post: {},
650
+ attachment: {}
651
+ },
652
+ structure: {
653
+ post: {
654
+ $actions: [
655
+ {
656
+ who: 'anyone',
657
+ can: [
658
+ 'create',
659
+ 'prune', // allowing author to prune, but not delete
660
+ 'read'
661
+ ]
662
+ }
663
+ ],
664
+ attachment: {
665
+ $actions: [
666
+ {
667
+ who: 'anyone',
668
+ can: ['read']
669
+ },
670
+ {
671
+ who: 'author',
672
+ of: 'post',
673
+ can: ['create']
674
+ }
675
+ ]
676
+ }
677
+ }
678
+ }
679
+ };
680
+ const protocolsConfig = yield ProtocolsConfigure.create({
681
+ definition: protocolDefinition,
682
+ signer: Jws.createSigner(alice)
683
+ });
684
+ const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
685
+ expect(protocolsConfigureReply.status.code).to.equal(202);
686
+ // 2. Bob writes a record + a descendant in Alice's DWN.
687
+ const postData = TestDataGenerator.randomBytes(100);
688
+ const postOptions = {
689
+ signer: Jws.createSigner(bob),
690
+ protocol: protocolDefinition.protocol,
691
+ protocolPath: 'post',
692
+ dataFormat: 'application/json',
693
+ data: postData
694
+ };
695
+ const post = yield RecordsWrite.create(postOptions);
696
+ const postWriteResponse = yield dwn.processMessage(alice.did, post.message, { dataStream: DataStream.fromBytes(postData) });
697
+ expect(postWriteResponse.status.code).equals(202);
698
+ const attachmentData = TestDataGenerator.randomBytes(100);
699
+ const attachmentOptions = {
700
+ signer: Jws.createSigner(bob),
701
+ protocol: protocolDefinition.protocol,
702
+ protocolPath: 'post/attachment',
703
+ parentContextId: post.message.contextId,
704
+ dataFormat: 'application/octet-stream',
705
+ data: attachmentData
706
+ };
707
+ const attachment = yield RecordsWrite.create(attachmentOptions);
708
+ const attachmentWriteResponse = yield dwn.processMessage(alice.did, attachment.message, { dataStream: DataStream.fromBytes(attachmentData) });
709
+ expect(attachmentWriteResponse.status.code).equals(202);
710
+ // 3. Verify Carol cannot prune the records.
711
+ const postPrune = yield RecordsDelete.create({
712
+ recordId: post.message.recordId,
713
+ prune: true,
714
+ signer: Jws.createSigner(carol)
715
+ });
716
+ const deleteReply = yield dwn.processMessage(alice.did, postPrune.message);
717
+ expect(deleteReply.status.code).to.equal(401);
718
+ expect(deleteReply.status.detail).to.contain(DwnErrorCode.ProtocolAuthorizationActionNotAllowed);
719
+ // sanity test `RecordsQuery` still returns the records
720
+ const recordsQuery = yield RecordsQuery.create({
721
+ signer: Jws.createSigner(bob),
722
+ filter: { protocol: protocolDefinition.protocol }
723
+ });
724
+ const recordsQueryReply = yield dwn.processMessage(alice.did, recordsQuery.message);
725
+ expect(recordsQueryReply.status.code).to.equal(200);
726
+ expect((_a = recordsQueryReply.entries) === null || _a === void 0 ? void 0 : _a.length).to.equal(2);
727
+ }));
728
+ it('should throw if only `delete` is allowed but received a RecordsDelete with `prune` set to `true`', () => __awaiter(this, void 0, void 0, function* () {
729
+ // Scenario:
730
+ // 1. Alice installs a protocol allowing others to add and delete (not prune) records.
731
+ // 2. Bob writes a record + a descendant in Alice's DWN.
732
+ // 3. Verify Bob cannot prune the records.
733
+ const alice = yield TestDataGenerator.generateDidKeyPersona();
734
+ const bob = yield TestDataGenerator.generateDidKeyPersona();
735
+ // 1. Alice installs a protocol allowing others to add and delete (not prune) records.
736
+ const protocolDefinition = {
737
+ protocol: 'http://post-protocol.xyz',
738
+ published: true,
739
+ types: {
740
+ post: {},
741
+ attachment: {}
742
+ },
743
+ structure: {
744
+ post: {
745
+ $actions: [
746
+ {
747
+ who: 'anyone',
748
+ can: [
749
+ 'create',
750
+ 'delete', // only allow delete, not prune
751
+ 'read'
752
+ ]
753
+ }
754
+ ],
755
+ attachment: {
756
+ $actions: [
757
+ {
758
+ who: 'anyone',
759
+ can: [
760
+ 'create',
761
+ 'read'
762
+ ]
763
+ }
764
+ ]
765
+ }
766
+ }
767
+ }
768
+ };
769
+ const protocolsConfig = yield ProtocolsConfigure.create({
770
+ definition: protocolDefinition,
771
+ signer: Jws.createSigner(alice)
772
+ });
773
+ const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
774
+ expect(protocolsConfigureReply.status.code).to.equal(202);
775
+ // 2. Bob writes a record + a descendant in Alice's DWN.
776
+ const postData = TestDataGenerator.randomBytes(100);
777
+ const postOptions = {
778
+ signer: Jws.createSigner(bob),
779
+ protocol: protocolDefinition.protocol,
780
+ protocolPath: 'post',
781
+ dataFormat: 'application/json',
782
+ data: postData
783
+ };
784
+ const post = yield RecordsWrite.create(postOptions);
785
+ const postWriteResponse = yield dwn.processMessage(alice.did, post.message, { dataStream: DataStream.fromBytes(postData) });
786
+ expect(postWriteResponse.status.code).equals(202);
787
+ const attachmentData = TestDataGenerator.randomBytes(100);
788
+ const attachmentOptions = {
789
+ signer: Jws.createSigner(bob),
790
+ protocol: protocolDefinition.protocol,
791
+ protocolPath: 'post/attachment',
792
+ parentContextId: post.message.contextId,
793
+ dataFormat: 'application/octet-stream',
794
+ data: attachmentData
795
+ };
796
+ const attachment = yield RecordsWrite.create(attachmentOptions);
797
+ const attachmentWriteResponse = yield dwn.processMessage(alice.did, attachment.message, { dataStream: DataStream.fromBytes(attachmentData) });
798
+ expect(attachmentWriteResponse.status.code).equals(202);
799
+ // 3. Verify Bob cannot prune the records.
800
+ const unauthorizedPostPrune = yield RecordsDelete.create({
801
+ recordId: post.message.recordId,
802
+ prune: true,
803
+ signer: Jws.createSigner(bob)
804
+ });
805
+ const unauthorizedPostPruneReply = yield dwn.processMessage(alice.did, unauthorizedPostPrune.message);
806
+ expect(unauthorizedPostPruneReply.status.code).to.equal(401);
807
+ expect(unauthorizedPostPruneReply.status.detail).to.contain(DwnErrorCode.ProtocolAuthorizationActionNotAllowed);
808
+ }));
809
+ });
810
+ });
811
+ }
812
+ //# sourceMappingURL=records-prune.spec.js.map