@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,404 @@
1
+ import type { DataStore } from '../types/data-store.js';
2
+ import type { DidResolver } from '@enbox/dids';
3
+ import type { EventLog } from '../types/event-log.js';
4
+ import type { EventStream } from '../types/subscriptions.js';
5
+ import type { GenericMessageReply } from '../types/message-types.js';
6
+ import type { MessageStore } from '../types//message-store.js';
7
+ import type { MethodHandler } from '../types/method-handler.js';
8
+ import type { RecordsQueryReplyEntry, RecordsWriteMessage } from '../types/records-types.js';
9
+
10
+ import { authenticate } from '../core/auth.js';
11
+ import { Cid } from '../utils/cid.js';
12
+ import { DataStream } from '../utils/data-stream.js';
13
+ import { DwnConstant } from '../core/dwn-constant.js';
14
+ import { Encoder } from '../utils/encoder.js';
15
+ import { Message } from '../core/message.js';
16
+ import { messageReplyFromError } from '../core/message-reply.js';
17
+ import { PermissionsProtocol } from '../protocols/permissions.js';
18
+ import { ProtocolAuthorization } from '../core/protocol-authorization.js';
19
+ import { RecordsGrantAuthorization } from '../core/records-grant-authorization.js';
20
+ import { RecordsWrite } from '../interfaces/records-write.js';
21
+ import { StorageController } from '../store/storage-controller.js';
22
+ import { DwnError, DwnErrorCode } from '../core/dwn-error.js';
23
+ import { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';
24
+
25
+ type HandlerArgs = { tenant: string, message: RecordsWriteMessage, dataStream?: _Readable.Readable};
26
+
27
+ export class RecordsWriteHandler implements MethodHandler {
28
+
29
+ constructor(
30
+ private didResolver: DidResolver,
31
+ private messageStore: MessageStore,
32
+ private dataStore: DataStore,
33
+ private eventLog: EventLog,
34
+ private eventStream?: EventStream
35
+ ) { }
36
+
37
+ public async handle({
38
+ tenant,
39
+ message,
40
+ dataStream
41
+ }: HandlerArgs): Promise<GenericMessageReply> {
42
+ let recordsWrite: RecordsWrite;
43
+ try {
44
+ recordsWrite = await RecordsWrite.parse(message);
45
+
46
+ // Protocol-authorized record specific validation
47
+ if (message.descriptor.protocol !== undefined) {
48
+ await ProtocolAuthorization.validateReferentialIntegrity(tenant, recordsWrite, this.messageStore);
49
+ }
50
+ } catch (e) {
51
+ return messageReplyFromError(e, 400);
52
+ }
53
+
54
+ // authentication & authorization
55
+ try {
56
+ await authenticate(message.authorization, this.didResolver);
57
+ await RecordsWriteHandler.authorizeRecordsWrite(tenant, recordsWrite, this.messageStore);
58
+ } catch (e) {
59
+ return messageReplyFromError(e, 401);
60
+ }
61
+
62
+ // get existing messages matching the `recordId`
63
+ const query = {
64
+ interface : DwnInterfaceName.Records,
65
+ recordId : message.recordId
66
+ };
67
+ const { messages: existingMessages } = await this.messageStore.query(tenant, [ query ]);
68
+
69
+ // if the incoming write is not the initial write, then it must not modify any immutable properties defined by the initial write
70
+ const newMessageIsInitialWrite = await recordsWrite.isInitialWrite();
71
+ let initialWrite: RecordsWriteMessage | undefined;
72
+ if (!newMessageIsInitialWrite) {
73
+ try {
74
+ initialWrite = await RecordsWrite.getInitialWrite(existingMessages);
75
+ RecordsWrite.verifyEqualityOfImmutableProperties(initialWrite, message);
76
+ } catch (e) {
77
+ return messageReplyFromError(e, 400);
78
+ }
79
+ }
80
+
81
+ const newestExistingMessage = await Message.getNewestMessage(existingMessages);
82
+
83
+ let incomingMessageIsNewest = false;
84
+ let newestMessage; // keep reference of newest message for pruning later
85
+ if (newestExistingMessage === undefined || await Message.isNewer(message, newestExistingMessage)) {
86
+ incomingMessageIsNewest = true;
87
+ newestMessage = message;
88
+ } else { // existing message is the same age or newer than the incoming message
89
+ newestMessage = newestExistingMessage;
90
+ }
91
+
92
+ if (!incomingMessageIsNewest) {
93
+ return {
94
+ status: { code: 409, detail: 'Conflict' }
95
+ };
96
+ }
97
+
98
+ try {
99
+ if (newestExistingMessage?.descriptor.method === DwnMethodName.Delete) {
100
+ throw new DwnError(
101
+ DwnErrorCode.RecordsWriteNotAllowedAfterDelete,
102
+ 'RecordsWrite is not allowed after a RecordsDelete.'
103
+ );
104
+ }
105
+
106
+ // NOTE: We want to perform additional validation before storing the RecordsWrite.
107
+ // This is necessary for core DWN RecordsWrite that needs additional processing and allows us to fail before the storing and post processing.
108
+ //
109
+ // Example: Ensures that the protocol tag of a permission revocation RecordsWrite and the parent grant's scoped protocol match.
110
+ await this.preProcessingForCoreRecordsWrite(tenant, message);
111
+
112
+ // NOTE: We allow isLatestBaseState to be true ONLY if the incoming message comes with data, or if the incoming message is NOT an initial write
113
+ // This would allow an initial write to be written to the DB without data, but having it not queryable,
114
+ // because query implementation filters on `isLatestBaseState` being `true`
115
+ // thus preventing a user's attempt to gain authorized access to data by referencing the dataCid of a private data in their initial writes,
116
+ // See: https://github.com/TBD54566975/dwn-sdk-js/issues/359 for more info
117
+ let isLatestBaseState = false;
118
+ let messageWithOptionalEncodedData = message as RecordsQueryReplyEntry;
119
+
120
+ if (dataStream !== undefined) {
121
+ messageWithOptionalEncodedData = await this.processMessageWithDataStream(tenant, message, dataStream);
122
+ isLatestBaseState = true;
123
+ } else {
124
+ // else data stream is NOT provided
125
+
126
+ // if the incoming message is not an initial write, and no dataStream is provided, we would allow it provided it passes validation
127
+ // processMessageWithoutDataStream() abstracts that logic
128
+ if (!newMessageIsInitialWrite) {
129
+ const newestExistingWrite = newestExistingMessage as RecordsQueryReplyEntry;
130
+ messageWithOptionalEncodedData = await this.processMessageWithoutDataStream(tenant, message, newestExistingWrite );
131
+ isLatestBaseState = true;
132
+ }
133
+ }
134
+
135
+ const indexes = await recordsWrite.constructIndexes(isLatestBaseState);
136
+ await this.messageStore.put(tenant, messageWithOptionalEncodedData, indexes);
137
+ await this.eventLog.append(tenant, await Message.getCid(message), indexes);
138
+
139
+ // NOTE: We only emit a `RecordsWrite` when the message is the latest base state.
140
+ // Because we allow a `RecordsWrite` which is not the latest state to be written, but not queried, we shouldn't emit it either.
141
+ // It will be emitted as a part of a subsequent next write, if it is the latest base state.
142
+ if (this.eventStream !== undefined && isLatestBaseState) {
143
+ this.eventStream.emit(tenant, { message, initialWrite }, indexes);
144
+ }
145
+ } catch (error) {
146
+ const e = error as any;
147
+ if (e.code !== undefined) {
148
+ if (e.code === DwnErrorCode.RecordsWriteMissingEncodedDataInPrevious ||
149
+ e.code === DwnErrorCode.RecordsWriteMissingDataInPrevious ||
150
+ e.code === DwnErrorCode.RecordsWriteNotAllowedAfterDelete ||
151
+ e.code === DwnErrorCode.RecordsWriteDataCidMismatch ||
152
+ e.code === DwnErrorCode.RecordsWriteDataSizeMismatch ||
153
+ e.code.startsWith('PermissionsProtocolValidate') ||
154
+ e.code.startsWith('SchemaValidator')) {
155
+ return messageReplyFromError(error, 400);
156
+ }
157
+ }
158
+
159
+ // else throw
160
+ throw error;
161
+ }
162
+
163
+ const messageReply = {
164
+ // In order to discern between something that was accepted as a queryable write and something that was accepted
165
+ // as an initial state we use separate response codes. See https://github.com/TBD54566975/dwn-sdk-js/issues/695
166
+ // for more details.
167
+ status: (newMessageIsInitialWrite && dataStream === undefined) ?
168
+ { code: 204, detail: 'No Content' } :
169
+ { code: 202, detail: 'Accepted' }
170
+ };
171
+
172
+ // delete all existing messages of the same record that are not newest, except for the initial write
173
+ await StorageController.deleteAllOlderMessagesButKeepInitialWrite(
174
+ tenant, existingMessages, newestMessage, this.messageStore, this.dataStore, this.eventLog
175
+ );
176
+
177
+ await this.postProcessingForCoreRecordsWrite(tenant, recordsWrite);
178
+
179
+ return messageReply;
180
+ };
181
+
182
+ /**
183
+ * Performs additional necessary validation before storing the RecordsWrite if it is a core DWN RecordsWrite that needs additional processing.
184
+ * For instance: a Permission revocation RecordsWrite.
185
+ */
186
+ private async preProcessingForCoreRecordsWrite(tenant: string, recordsWriteMessage: RecordsWriteMessage): Promise<void> {
187
+
188
+ // we validate the protocol tag of the revocation message against the grant's scoped protocol
189
+ // to do this we will fetch the grant, and compare the the scoped protocol value to the protocol tag of the revocation message
190
+ if (recordsWriteMessage.descriptor.protocol === PermissionsProtocol.uri &&
191
+ recordsWriteMessage.descriptor.protocolPath === PermissionsProtocol.revocationPath) {
192
+
193
+ // get the parentId of the revocation message, which is the permissionGrantId
194
+ // fetch the grant in order to get the grant's protocol
195
+ const permissionGrantId = recordsWriteMessage.descriptor.parentId!;
196
+ const grant = await PermissionsProtocol.fetchGrant(tenant, this.messageStore, permissionGrantId);
197
+
198
+ // get the protocol values of the revocation message from the protocol tag and the protocol from the grant scope if they are defined
199
+ // compare the two values ensuring they must match
200
+ const revokeTagProtocol = recordsWriteMessage.descriptor.tags?.protocol;
201
+ const grantProtocol = 'protocol' in grant.scope ? grant.scope.protocol : undefined;
202
+ if (grantProtocol !== revokeTagProtocol) {
203
+ throw new DwnError(
204
+ DwnErrorCode.PermissionsProtocolValidateRevocationProtocolTagMismatch,
205
+ `Revocation protocol ${revokeTagProtocol} does not match grant protocol ${grantProtocol}`
206
+ );
207
+ }
208
+ }
209
+ }
210
+
211
+ private static validateSchemaForCoreRecordsWrite(recordsWriteMessage: RecordsWriteMessage, dataBytes: Uint8Array): void {
212
+ if (recordsWriteMessage.descriptor.protocol === PermissionsProtocol.uri) {
213
+ PermissionsProtocol.validateSchema(recordsWriteMessage, dataBytes);
214
+ }
215
+ }
216
+
217
+ /**
218
+ * Performs additional necessary tasks if the RecordsWrite handled is a core DWN RecordsWrite that need additional processing.
219
+ * For instance: a Permission revocation RecordsWrite.
220
+ */
221
+ private async postProcessingForCoreRecordsWrite(tenant: string, recordsWrite: RecordsWrite): Promise<void> {
222
+ // If this message is a Permission revocation, we need to delete all grant-authorized messages with timestamp after revocation
223
+ // TODO: https://github.com/TBD54566975/dwn-sdk-js/issues/716
224
+ // This code is a direct copy and paste from the original PermissionsRevokeHandler (no longer exists),
225
+ // but it appears that there was no test for it and it does not look like the code worked:
226
+ // - not seeing `permissionGrantId` being an index
227
+ // - not seeing `this.dataStore` being called to delete actual data
228
+ // - test coverage is missing for the main delete logic
229
+ if (recordsWrite.message.descriptor.protocol === PermissionsProtocol.uri &&
230
+ recordsWrite.message.descriptor.protocolPath === PermissionsProtocol.revocationPath) {
231
+ const permissionGrantId = recordsWrite.message.descriptor.parentId!;
232
+ const grantAuthorizedMessagesQuery = {
233
+ permissionGrantId,
234
+ dateCreated: { gte: recordsWrite.message.descriptor.messageTimestamp },
235
+ };
236
+ const { messages: grantAuthorizedMessagesAfterRevoke } = await this.messageStore.query(tenant, [ grantAuthorizedMessagesQuery ]);
237
+ const grantAuthorizedMessageCidsAfterRevoke: string[] = [];
238
+ for (const grantAuthorizedMessage of grantAuthorizedMessagesAfterRevoke) {
239
+ const messageCid = await Message.getCid(grantAuthorizedMessage);
240
+ await this.messageStore.delete(tenant, messageCid);
241
+ }
242
+ this.eventLog.deleteEventsByCid(tenant, grantAuthorizedMessageCidsAfterRevoke);
243
+ }
244
+ }
245
+
246
+ /**
247
+ * Returns a `RecordsQueryReplyEntry` with a copy of the incoming message and the incoming data encoded to `Base64URL`.
248
+ */
249
+ public async cloneAndAddEncodedData(message: RecordsWriteMessage, dataBytes: Uint8Array):Promise<RecordsQueryReplyEntry> {
250
+ const recordsWrite: RecordsQueryReplyEntry = { ...message };
251
+ recordsWrite.encodedData = Encoder.bytesToBase64Url(dataBytes);
252
+ return recordsWrite;
253
+ }
254
+
255
+ private async processMessageWithDataStream(
256
+ tenant: string,
257
+ message: RecordsWriteMessage,
258
+ dataStream: _Readable.Readable,
259
+ ):Promise<RecordsQueryReplyEntry> {
260
+ let messageWithOptionalEncodedData: RecordsQueryReplyEntry = message;
261
+
262
+ // if data is below the threshold, we store it within MessageStore
263
+ if (message.descriptor.dataSize <= DwnConstant.maxDataSizeAllowedToBeEncoded) {
264
+ // validate data integrity before setting.
265
+ const dataBytes = await DataStream.toBytes(dataStream!);
266
+ const dataCid = await Cid.computeDagPbCidFromBytes(dataBytes);
267
+ RecordsWriteHandler.validateDataIntegrity(message.descriptor.dataCid, message.descriptor.dataSize, dataCid, dataBytes.length);
268
+
269
+ RecordsWriteHandler.validateSchemaForCoreRecordsWrite(message, dataBytes);
270
+
271
+ messageWithOptionalEncodedData = await this.cloneAndAddEncodedData(message, dataBytes);
272
+ } else {
273
+ // split the dataStream into two: one for CID computation and one for storage
274
+ const [dataStreamCopy1, dataStreamCopy2] = DataStream.duplicateDataStream(dataStream, 2);
275
+
276
+ try {
277
+ // perform storage and CID computation in parallel
278
+ const [dataCid, DataStorePutResult] = await Promise.all([
279
+ Cid.computeDagPbCidFromStream(dataStreamCopy1),
280
+ this.dataStore.put(tenant, message.recordId, message.descriptor.dataCid, dataStreamCopy2)
281
+ ]);
282
+
283
+ RecordsWriteHandler.validateDataIntegrity(message.descriptor.dataCid, message.descriptor.dataSize, dataCid, DataStorePutResult.dataSize);
284
+ } catch (error) {
285
+ // unwind/delete data if we have issue with storage or the data failed integrity validation
286
+ await this.dataStore.delete(tenant, message.recordId, message.descriptor.dataCid);
287
+
288
+ throw error;
289
+ }
290
+ }
291
+
292
+ return messageWithOptionalEncodedData;
293
+ }
294
+
295
+ private async processMessageWithoutDataStream(
296
+ tenant: string,
297
+ message: RecordsWriteMessage,
298
+ newestExistingWrite: RecordsQueryReplyEntry,
299
+ ):Promise<RecordsQueryReplyEntry> {
300
+ const messageWithOptionalEncodedData: RecordsQueryReplyEntry = { ...message }; // clone
301
+ const { dataCid, dataSize } = message.descriptor;
302
+
303
+ // Since incoming message is not an initial write, and no dataStream is provided, we first check integrity against newest existing write.
304
+ // we preform the dataCid check in case a user attempts to gain access to data by referencing a different known dataCid,
305
+ // so we insure that the data is already associated with the existing newest message
306
+ // See: https://github.com/TBD54566975/dwn-sdk-js/issues/359 for more info
307
+ RecordsWriteHandler.validateDataIntegrity(dataCid, dataSize, newestExistingWrite.descriptor.dataCid, newestExistingWrite.descriptor.dataSize);
308
+
309
+ if (dataSize <= DwnConstant.maxDataSizeAllowedToBeEncoded) {
310
+ // we encode the data from the original write if it is smaller than the data-store threshold
311
+ if (newestExistingWrite.encodedData !== undefined) {
312
+ messageWithOptionalEncodedData.encodedData = newestExistingWrite.encodedData;
313
+ } else {
314
+ throw new DwnError(
315
+ DwnErrorCode.RecordsWriteMissingEncodedDataInPrevious,
316
+ `No dataStream was provided and unable to get data from previous message`
317
+ );
318
+ }
319
+ } else {
320
+ // else just make sure the data is in the data store
321
+
322
+ // attempt to retrieve the data from the previous message
323
+ const DataStoreGetResult = await this.dataStore.get(tenant, newestExistingWrite.recordId, message.descriptor.dataCid);
324
+
325
+ if (DataStoreGetResult === undefined) {
326
+ throw new DwnError(
327
+ DwnErrorCode.RecordsWriteMissingDataInPrevious,
328
+ `No dataStream was provided and unable to get data from previous message`
329
+ );
330
+ }
331
+ }
332
+
333
+ return messageWithOptionalEncodedData;
334
+ }
335
+
336
+ /**
337
+ * Validates the expected `dataCid` and `dataSize` in the descriptor vs the received data.
338
+ *
339
+ * @throws {DwnError} with `DwnErrorCode.RecordsWriteDataCidMismatch`
340
+ * if the data stream resulted in a data CID that mismatches with `dataCid` in the given message
341
+ * @throws {DwnError} with `DwnErrorCode.RecordsWriteDataSizeMismatch`
342
+ * if `dataSize` in `descriptor` given mismatches the actual data size
343
+ */
344
+ private static validateDataIntegrity(
345
+ expectedDataCid: string,
346
+ expectedDataSize: number,
347
+ actualDataCid: string,
348
+ actualDataSize: number
349
+ ): void {
350
+ if (expectedDataCid !== actualDataCid) {
351
+ throw new DwnError(
352
+ DwnErrorCode.RecordsWriteDataCidMismatch,
353
+ `actual data CID ${actualDataCid} does not match dataCid in descriptor: ${expectedDataCid}`
354
+ );
355
+ }
356
+
357
+ if (expectedDataSize !== actualDataSize) {
358
+ throw new DwnError(
359
+ DwnErrorCode.RecordsWriteDataSizeMismatch,
360
+ `actual data size ${actualDataSize} bytes does not match dataSize in descriptor: ${expectedDataSize}`
361
+ );
362
+ }
363
+ }
364
+
365
+ private static async authorizeRecordsWrite(tenant: string, recordsWrite: RecordsWrite, messageStore: MessageStore): Promise<void> {
366
+ // if owner signature is given (`owner` is not `undefined`), it must be the same as the tenant DID
367
+ if (recordsWrite.owner !== undefined && recordsWrite.owner !== tenant) {
368
+ throw new DwnError(
369
+ DwnErrorCode.RecordsWriteOwnerAndTenantMismatch,
370
+ `Owner ${recordsWrite.owner} must be the same as tenant ${tenant} when specified.`
371
+ );
372
+ }
373
+
374
+ if (recordsWrite.isSignedByAuthorDelegate) {
375
+ await recordsWrite.authorizeAuthorDelegate(messageStore);
376
+ }
377
+
378
+ if (recordsWrite.isSignedByOwnerDelegate) {
379
+ await recordsWrite.authorizeOwnerDelegate(messageStore);
380
+ }
381
+
382
+ if (recordsWrite.owner !== undefined) {
383
+ // if incoming message is a write retained by this tenant, we by-design always allow
384
+ // NOTE: the "owner === tenant" check is already done earlier in this method
385
+ return;
386
+ } else if (recordsWrite.author === tenant) {
387
+ // if author is the same as the target tenant, we can directly grant access
388
+ return;
389
+ } else if (recordsWrite.author !== undefined && recordsWrite.signaturePayload!.permissionGrantId !== undefined) {
390
+ const permissionGrant = await PermissionsProtocol.fetchGrant(tenant, messageStore, recordsWrite.signaturePayload!.permissionGrantId);
391
+ await RecordsGrantAuthorization.authorizeWrite({
392
+ recordsWriteMessage : recordsWrite.message,
393
+ expectedGrantor : tenant,
394
+ expectedGrantee : recordsWrite.author,
395
+ permissionGrant,
396
+ messageStore
397
+ });
398
+ } else if (recordsWrite.message.descriptor.protocol !== undefined) {
399
+ await ProtocolAuthorization.authorizeWrite(tenant, recordsWrite, messageStore);
400
+ } else {
401
+ throw new DwnError(DwnErrorCode.RecordsWriteAuthorizationFailed, 'message failed authorization');
402
+ }
403
+ }
404
+ }
package/src/index.ts ADDED
@@ -0,0 +1,67 @@
1
+ // export everything that we want to be consumable
2
+ export type { DwnConfig } from './dwn.js';
3
+ export type { EventLog } from './types/event-log.js';
4
+ export type { EventListener, EventStream, EventSubscription, MessageEvent, SubscriptionReply } from './types/subscriptions.js';
5
+ export type { AuthorizationModel, Descriptor, DelegatedGrantRecordsWriteMessage, GenericMessage, GenericMessageReply, GenericSignaturePayload, MessageSort, MessageSubscription, Pagination, QueryResultEntry, Status } from './types/message-types.js';
6
+ export type { MessagesFilter, MessagesReadMessage as MessagesReadMessage, MessagesReadReply as MessagesReadReply, MessagesReadReplyEntry as MessagesReadReplyEntry, MessagesReadDescriptor, MessagesQueryDescriptor, MessagesQueryMessage, MessagesQueryReply, MessagesSubscribeDescriptor, MessagesSubscribeMessage, MessagesSubscribeReply, MessageSubscriptionHandler, MessagesSubscribeMessageOptions } from './types/messages-types.js';
7
+ export type { GT, LT, Filter, FilterValue, KeyValues, EqualFilter, OneOfFilter, RangeFilter, RangeCriterion, PaginationCursor, QueryOptions, RangeValue, StartsWithFilter } from './types/query-types.js';
8
+ export type { ProtocolsConfigureDescriptor, ProtocolDefinition, ProtocolTypes, ProtocolRuleSet, ProtocolsQueryFilter, ProtocolsConfigureMessage, ProtocolsQueryMessage, ProtocolsQueryReply, ProtocolActionRule, ProtocolPathEncryption, ProtocolsQueryDescriptor, ProtocolType } from './types/protocols-types.js';
9
+ export type { DataEncodedRecordsWriteMessage, EncryptedKey, EncryptionProperty, RecordsDeleteMessage, RecordsFilter, RecordsQueryMessage, RecordsQueryReply, RecordsQueryReplyEntry, RecordsReadMessage, RecordsReadReply, RecordsSubscribeDescriptor, RecordsSubscribeMessage, RecordsSubscribeReply, RecordSubscriptionHandler, RecordsWriteDescriptor, RecordsWriteTags, RecordsWriteTagValue, RecordsWriteMessage, RecordsWriteSignaturePayload, RecordsDeleteDescriptor, RecordsQueryDescriptor, RecordsReadDescriptor, RecordsSubscribeMessageOptions, RecordsWriteMessageOptions, InternalRecordsWriteMessage, RecordEvent, RecordsWriteTagsFilter } from './types/records-types.js';
10
+ export type { GeneralJws, SignatureEntry } from './types/jws-types.js';
11
+ export { authenticate } from './core/auth.js';
12
+ export { ActiveTenantCheckResult, AllowAllTenantGate, TenantGate } from './core/tenant-gate.js';
13
+ export { Cid } from './utils/cid.js';
14
+ export { RecordsQuery, RecordsQueryOptions } from './interfaces/records-query.js';
15
+ export { DataStore, DataStorePutResult, DataStoreGetResult } from './types/data-store.js';
16
+ export { ResumableTaskStore, ManagedResumableTask } from './types/resumable-task-store.js';
17
+ export { DataStream } from './utils/data-stream.js';
18
+ export { DerivedPrivateJwk, HdKey, KeyDerivationScheme } from './utils/hd-key.js';
19
+ export { Dwn, MessageOptions } from './dwn.js';
20
+ export { DwnConstant } from './core/dwn-constant.js';
21
+ export { DwnError, DwnErrorCode } from './core/dwn-error.js';
22
+ export { DwnInterfaceName, DwnMethodName } from './enums/dwn-interface-method.js';
23
+ export { Encoder } from './utils/encoder.js';
24
+ export { MessagesSubscribe as MessagesSubscribe, MessagesSubscribeOptions as MessagesSubscribeOptions } from './interfaces/messages-subscribe.js';
25
+ export { Encryption, EncryptionAlgorithm, EciesEncryptionOutput, EciesEncryptionInput } from './utils/encryption.js';
26
+ export { EncryptionInput, KeyEncryptionInput, RecordsWrite, RecordsWriteOptions, CreateFromOptions } from './interfaces/records-write.js';
27
+ export { executeUnlessAborted } from './utils/abort.js';
28
+ export { Jws } from './utils/jws.js';
29
+ export { KeyMaterial, PrivateJwk, PublicJwk, Jwk } from './types/jose-types.js';
30
+ export { Message } from './core/message.js';
31
+ export { MessagesRead as MessagesRead, MessagesReadOptions as MessagesReadOptions } from './interfaces/messages-read.js';
32
+ export { MessagesQuery, MessagesQueryOptions } from './interfaces/messages-query.js';
33
+ export { UnionMessageReply } from './core/message-reply.js';
34
+ export { MessageStore, MessageStoreOptions } from './types/message-store.js';
35
+ export { MessageInterface } from './types/message-interface.js';
36
+ export { PermissionGrant } from './protocols/permission-grant.js';
37
+ export { PermissionRequest } from './protocols/permission-request.js';
38
+ export { PermissionsProtocol, PermissionGrantCreateOptions, PermissionRequestCreateOptions, PermissionRevocationCreateOptions } from './protocols/permissions.js';
39
+ export { PrivateKeySigner, PrivateKeySignerOptions } from './utils/private-key-signer.js';
40
+ export { Protocols } from './utils/protocols.js';
41
+ export { ProtocolsConfigure, ProtocolsConfigureOptions } from './interfaces/protocols-configure.js';
42
+ export { ProtocolsQuery, ProtocolsQueryOptions } from './interfaces/protocols-query.js';
43
+ export { Records } from './utils/records.js';
44
+ export { RecordsDelete, RecordsDeleteOptions } from './interfaces/records-delete.js';
45
+ export { RecordsRead, RecordsReadOptions } from './interfaces/records-read.js';
46
+ export { RecordsSubscribe, RecordsSubscribeOptions } from './interfaces/records-subscribe.js';
47
+ export { Secp256k1 } from './utils/secp256k1.js';
48
+ export { Secp256r1 } from './utils/secp256r1.js';
49
+ export { Signer } from './types/signer.js';
50
+ export { SortDirection } from './types/query-types.js';
51
+ export { Time } from './utils/time.js';
52
+ export * from './types/permission-types.js';
53
+ export * from './types/records-types.js';
54
+
55
+ // concrete implementations of stores and event stream
56
+ export { BlockstoreLevel, BlockstoreLevelConfig } from './store/blockstore-level.js';
57
+ export { DataStoreLevel, DataStoreLevelConfig } from './store/data-store-level.js';
58
+ export { EventLogLevel, EventLogLevelConfig } from './event-log/event-log-level.js';
59
+ export { IndexLevel, IndexLevelConfig, IndexedItem, IndexLevelOptions } from './store/index-level.js';
60
+ export { createLevelDatabase, CreateLevelDatabaseOptions, LevelDatabase, LevelWrapper, LevelWrapperConfig, LevelWrapperBatchOperation, LevelWrapperOptions, LevelWrapperIteratorOptions } from './store/level-wrapper.js';
61
+ export { MessageStoreLevel, MessageStoreLevelConfig } from './store/message-store-level.js';
62
+ export { ResumableTaskStoreLevel, ResumableTaskStoreLevelConfig } from './store/resumable-task-store-level.js';
63
+ export { EventEmitterStream, EventEmitterStreamConfig } from './event-log/event-emitter-stream.js';
64
+
65
+ // test library exports
66
+ export { GenerateFromRecordsWriteOut, GenerateGrantCreateOutput, GenerateMessagesQueryOutput, GenerateMessagesReadOutput, GenerateMessagesSubscribeOutput, GenerateProtocolsConfigureOutput, GenerateProtocolsQueryOutput, GenerateRecordsDeleteOutput, GenerateRecordsQueryOutput, GenerateRecordsSubscribeOutput, GenerateRecordsWriteOutput, Persona, TestDataGenerator, GenerateFromRecordsWriteInput, GenerateGrantCreateInput, GenerateMessagesQueryInput, GenerateMessagesReadInput, GenerateMessagesSubscribeInput, GenerateProtocolsConfigureInput, GenerateProtocolsQueryInput, GenerateRecordsDeleteInput, GenerateRecordsQueryInput, GenerateRecordsSubscribeInput, GenerateRecordsWriteInput } from '../tests/utils/test-data-generator.js';
67
+ export { Poller } from '../tests/utils/poller.js';
@@ -0,0 +1,60 @@
1
+ import type { PaginationCursor } from '../types/query-types.js';
2
+ import type { Signer } from '../types/signer.js';
3
+ import type { MessagesFilter, MessagesQueryDescriptor, MessagesQueryMessage } from '../types/messages-types.js';
4
+
5
+ import { AbstractMessage } from '../core/abstract-message.js';
6
+ import { Message } from '../core/message.js';
7
+ import { Messages } from '../utils/messages.js';
8
+ import { removeUndefinedProperties } from '../utils/object.js';
9
+ import { Time } from '../utils/time.js';
10
+ import { validateProtocolUrlNormalized } from '../utils/url.js';
11
+ import { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';
12
+
13
+ export type MessagesQueryOptions = {
14
+ signer: Signer;
15
+ filters?: MessagesFilter[];
16
+ cursor?: PaginationCursor;
17
+ messageTimestamp?: string;
18
+ permissionGrantId?: string;
19
+ };
20
+
21
+ export class MessagesQuery extends AbstractMessage<MessagesQueryMessage>{
22
+
23
+ public static async parse(message: MessagesQueryMessage): Promise<MessagesQuery> {
24
+ Message.validateJsonSchema(message);
25
+ await Message.validateSignatureStructure(message.authorization.signature, message.descriptor);
26
+
27
+ for (const filter of message.descriptor.filters) {
28
+ if ('protocol' in filter && filter.protocol !== undefined) {
29
+ validateProtocolUrlNormalized(filter.protocol);
30
+ }
31
+ }
32
+
33
+ return new MessagesQuery(message);
34
+ }
35
+
36
+ public static async create(options: MessagesQueryOptions): Promise<MessagesQuery> {
37
+ const descriptor: MessagesQueryDescriptor = {
38
+ interface : DwnInterfaceName.Messages,
39
+ method : DwnMethodName.Query,
40
+ filters : options.filters ? Messages.normalizeFilters(options.filters) : [],
41
+ messageTimestamp : options.messageTimestamp ?? Time.getCurrentTimestamp(),
42
+ cursor : options.cursor,
43
+ };
44
+
45
+ removeUndefinedProperties(descriptor);
46
+
47
+ const { permissionGrantId, signer } = options;
48
+ const authorization = await Message.createAuthorization({
49
+ descriptor,
50
+ signer,
51
+ permissionGrantId
52
+ });
53
+
54
+ const message = { descriptor, authorization };
55
+
56
+ Message.validateJsonSchema(message);
57
+
58
+ return new MessagesQuery(message);
59
+ }
60
+ }
@@ -0,0 +1,63 @@
1
+ import type { Signer } from '../types/signer.js';
2
+ import type { MessagesReadDescriptor, MessagesReadMessage } from '../types/messages-types.js';
3
+
4
+ import { AbstractMessage } from '../core/abstract-message.js';
5
+ import { Cid } from '../utils/cid.js';
6
+ import { Message } from '../core/message.js';
7
+ import { Time } from '../utils/time.js';
8
+ import { DwnError, DwnErrorCode } from '../core/dwn-error.js';
9
+ import { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';
10
+
11
+ export type MessagesReadOptions = {
12
+ messageCid: string;
13
+ signer: Signer;
14
+ messageTimestamp?: string;
15
+ permissionGrantId?: string;
16
+ };
17
+
18
+ export class MessagesRead extends AbstractMessage<MessagesReadMessage> {
19
+ public static async parse(message: MessagesReadMessage): Promise<MessagesRead> {
20
+ Message.validateJsonSchema(message);
21
+ this.validateMessageCid(message.descriptor.messageCid);
22
+
23
+ await Message.validateSignatureStructure(message.authorization.signature, message.descriptor);
24
+ Time.validateTimestamp(message.descriptor.messageTimestamp);
25
+
26
+ return new MessagesRead(message);
27
+ }
28
+
29
+ public static async create(options: MessagesReadOptions): Promise<MessagesRead> {
30
+ const descriptor: MessagesReadDescriptor = {
31
+ interface : DwnInterfaceName.Messages,
32
+ method : DwnMethodName.Read,
33
+ messageCid : options.messageCid,
34
+ messageTimestamp : options.messageTimestamp ?? Time.getCurrentTimestamp(),
35
+ };
36
+
37
+ const { signer, permissionGrantId } = options;
38
+ const authorization = await Message.createAuthorization({
39
+ descriptor,
40
+ signer,
41
+ permissionGrantId,
42
+ });
43
+ const message = { descriptor, authorization };
44
+
45
+ Message.validateJsonSchema(message);
46
+ MessagesRead.validateMessageCid(options.messageCid);
47
+
48
+ return new MessagesRead(message);
49
+ }
50
+
51
+ /**
52
+ * validates the provided cid
53
+ * @param messageCid - the cid in question
54
+ * @throws {DwnError} if an invalid cid is found.
55
+ */
56
+ private static validateMessageCid(messageCid: string): void {
57
+ try {
58
+ Cid.parseCid(messageCid);
59
+ } catch (_) {
60
+ throw new DwnError(DwnErrorCode.MessagesReadInvalidCid, `${messageCid} is not a valid CID`);
61
+ }
62
+ }
63
+ }
@@ -0,0 +1,64 @@
1
+ import type { MessagesFilter } from '../types/messages-types.js';
2
+ import type { Signer } from '../types/signer.js';
3
+ import type { MessagesSubscribeDescriptor, MessagesSubscribeMessage } from '../types/messages-types.js';
4
+
5
+ import { AbstractMessage } from '../core/abstract-message.js';
6
+ import { Message } from '../core/message.js';
7
+ import { removeUndefinedProperties } from '../utils/object.js';
8
+ import { Time } from '../utils/time.js';
9
+ import { validateProtocolUrlNormalized } from '../utils/url.js';
10
+ import { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';
11
+
12
+
13
+ export type MessagesSubscribeOptions = {
14
+ signer: Signer;
15
+ messageTimestamp?: string;
16
+ filters?: MessagesFilter[]
17
+ permissionGrantId?: string;
18
+ };
19
+
20
+ export class MessagesSubscribe extends AbstractMessage<MessagesSubscribeMessage> {
21
+ public static async parse(message: MessagesSubscribeMessage): Promise<MessagesSubscribe> {
22
+ Message.validateJsonSchema(message);
23
+ await Message.validateSignatureStructure(message.authorization.signature, message.descriptor);
24
+
25
+ for (const filter of message.descriptor.filters) {
26
+ if ('protocol' in filter && filter.protocol !== undefined) {
27
+ validateProtocolUrlNormalized(filter.protocol);
28
+ }
29
+ }
30
+
31
+ Time.validateTimestamp(message.descriptor.messageTimestamp);
32
+ return new MessagesSubscribe(message);
33
+ }
34
+
35
+ /**
36
+ * Creates a MessagesSubscribe message.
37
+ *
38
+ * @throws {DwnError} if json schema validation fails.
39
+ */
40
+ public static async create(
41
+ options: MessagesSubscribeOptions
42
+ ): Promise<MessagesSubscribe> {
43
+ const currentTime = Time.getCurrentTimestamp();
44
+
45
+ const descriptor: MessagesSubscribeDescriptor = {
46
+ interface : DwnInterfaceName.Messages,
47
+ method : DwnMethodName.Subscribe,
48
+ filters : options.filters ?? [],
49
+ messageTimestamp : options.messageTimestamp ?? currentTime,
50
+ };
51
+
52
+ removeUndefinedProperties(descriptor);
53
+ const { permissionGrantId, signer } = options;
54
+ const authorization = await Message.createAuthorization({
55
+ descriptor,
56
+ signer,
57
+ permissionGrantId
58
+ });
59
+
60
+ const message: MessagesSubscribeMessage = { descriptor, authorization };
61
+ Message.validateJsonSchema(message);
62
+ return new MessagesSubscribe(message);
63
+ }
64
+ }