@enbox/dwn-sdk-js 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (601) hide show
  1. package/README.md +52 -301
  2. package/dist/bundles/dwn.js +19 -21
  3. package/dist/esm/generated/precompiled-validators.js +2764 -1773
  4. package/dist/esm/generated/precompiled-validators.js.map +1 -1
  5. package/dist/esm/src/core/dwn-error.js +27 -3
  6. package/dist/esm/src/core/dwn-error.js.map +1 -1
  7. package/dist/esm/src/core/message.js.map +1 -1
  8. package/dist/esm/src/core/messages-grant-authorization.js +17 -6
  9. package/dist/esm/src/core/messages-grant-authorization.js.map +1 -1
  10. package/dist/esm/src/core/protocol-authorization.js +245 -69
  11. package/dist/esm/src/core/protocol-authorization.js.map +1 -1
  12. package/dist/esm/src/core/resumable-task-manager.js +4 -4
  13. package/dist/esm/src/core/resumable-task-manager.js.map +1 -1
  14. package/dist/esm/src/dwn.js +10 -8
  15. package/dist/esm/src/dwn.js.map +1 -1
  16. package/dist/esm/src/enums/dwn-interface-method.js +4 -2
  17. package/dist/esm/src/enums/dwn-interface-method.js.map +1 -1
  18. package/dist/esm/src/event-stream/event-emitter-stream.js.map +1 -0
  19. package/dist/esm/src/handlers/messages-subscribe.js +1 -1
  20. package/dist/esm/src/handlers/messages-subscribe.js.map +1 -1
  21. package/dist/esm/src/handlers/messages-sync.js +116 -0
  22. package/dist/esm/src/handlers/messages-sync.js.map +1 -0
  23. package/dist/esm/src/handlers/protocols-configure.js +149 -16
  24. package/dist/esm/src/handlers/protocols-configure.js.map +1 -1
  25. package/dist/esm/src/handlers/protocols-query.js +2 -2
  26. package/dist/esm/src/handlers/protocols-query.js.map +1 -1
  27. package/dist/esm/src/handlers/records-count.js +143 -0
  28. package/dist/esm/src/handlers/records-count.js.map +1 -0
  29. package/dist/esm/src/handlers/records-query.js +4 -0
  30. package/dist/esm/src/handlers/records-query.js.map +1 -1
  31. package/dist/esm/src/handlers/records-read.js +4 -6
  32. package/dist/esm/src/handlers/records-read.js.map +1 -1
  33. package/dist/esm/src/handlers/records-write.js +17 -18
  34. package/dist/esm/src/handlers/records-write.js.map +1 -1
  35. package/dist/esm/src/index.js +9 -5
  36. package/dist/esm/src/index.js.map +1 -1
  37. package/dist/esm/src/interfaces/messages-read.js +2 -7
  38. package/dist/esm/src/interfaces/messages-read.js.map +1 -1
  39. package/dist/esm/src/interfaces/messages-subscribe.js +1 -0
  40. package/dist/esm/src/interfaces/messages-subscribe.js.map +1 -1
  41. package/dist/esm/src/interfaces/{messages-query.js → messages-sync.js} +11 -12
  42. package/dist/esm/src/interfaces/messages-sync.js.map +1 -0
  43. package/dist/esm/src/interfaces/protocols-configure.js +153 -30
  44. package/dist/esm/src/interfaces/protocols-configure.js.map +1 -1
  45. package/dist/esm/src/interfaces/protocols-query.js +1 -0
  46. package/dist/esm/src/interfaces/protocols-query.js.map +1 -1
  47. package/dist/esm/src/interfaces/records-count.js +91 -0
  48. package/dist/esm/src/interfaces/records-count.js.map +1 -0
  49. package/dist/esm/src/interfaces/records-read.js +15 -1
  50. package/dist/esm/src/interfaces/records-read.js.map +1 -1
  51. package/dist/esm/src/interfaces/records-write.js +64 -15
  52. package/dist/esm/src/interfaces/records-write.js.map +1 -1
  53. package/dist/esm/src/jose/algorithms/signing/ed25519.js.map +1 -1
  54. package/dist/esm/src/jose/algorithms/signing/signature-algorithms.js.map +1 -1
  55. package/dist/esm/src/jose/jws/general/builder.js.map +1 -1
  56. package/dist/esm/src/jose/jws/general/verifier.js.map +1 -1
  57. package/dist/esm/src/protocols/permission-grant.js +30 -0
  58. package/dist/esm/src/protocols/permission-grant.js.map +1 -1
  59. package/dist/esm/src/protocols/permission-request.js +24 -0
  60. package/dist/esm/src/protocols/permission-request.js.map +1 -1
  61. package/dist/esm/src/protocols/permissions.js +1 -1
  62. package/dist/esm/src/protocols/permissions.js.map +1 -1
  63. package/dist/esm/src/schema-validator.js +0 -1
  64. package/dist/esm/src/schema-validator.js.map +1 -1
  65. package/dist/esm/src/smt/smt-store-level.js +125 -0
  66. package/dist/esm/src/smt/smt-store-level.js.map +1 -0
  67. package/dist/esm/src/smt/smt-store-memory.js +67 -0
  68. package/dist/esm/src/smt/smt-store-memory.js.map +1 -0
  69. package/dist/esm/src/smt/smt-utils.js +146 -0
  70. package/dist/esm/src/smt/smt-utils.js.map +1 -0
  71. package/dist/esm/src/smt/sparse-merkle-tree.js +622 -0
  72. package/dist/esm/src/smt/sparse-merkle-tree.js.map +1 -0
  73. package/dist/esm/src/state-index/state-index-level.js +228 -0
  74. package/dist/esm/src/state-index/state-index-level.js.map +1 -0
  75. package/dist/esm/src/store/data-store-level.js +6 -6
  76. package/dist/esm/src/store/data-store-level.js.map +1 -1
  77. package/dist/esm/src/store/index-level.js +375 -17
  78. package/dist/esm/src/store/index-level.js.map +1 -1
  79. package/dist/esm/src/store/message-store-level.js +56 -0
  80. package/dist/esm/src/store/message-store-level.js.map +1 -1
  81. package/dist/esm/src/store/storage-controller.js +19 -16
  82. package/dist/esm/src/store/storage-controller.js.map +1 -1
  83. package/dist/esm/src/types/encryption-types.js +2 -0
  84. package/dist/esm/src/types/encryption-types.js.map +1 -0
  85. package/dist/esm/src/types/message-types.js.map +1 -1
  86. package/dist/esm/src/types/protocols-types.js +0 -2
  87. package/dist/esm/src/types/protocols-types.js.map +1 -1
  88. package/dist/esm/src/types/records-types.js +2 -0
  89. package/dist/esm/src/types/records-types.js.map +1 -1
  90. package/dist/esm/src/types/smt-types.js +5 -0
  91. package/dist/esm/src/types/smt-types.js.map +1 -0
  92. package/dist/esm/src/types/state-index.js +2 -0
  93. package/dist/esm/src/types/state-index.js.map +1 -0
  94. package/dist/esm/src/utils/cid.js +2 -1
  95. package/dist/esm/src/utils/cid.js.map +1 -1
  96. package/dist/esm/src/utils/data-stream.js +84 -29
  97. package/dist/esm/src/utils/data-stream.js.map +1 -1
  98. package/dist/esm/src/utils/encryption.js +22 -31
  99. package/dist/esm/src/utils/encryption.js.map +1 -1
  100. package/dist/esm/src/utils/hd-key.js +3 -3
  101. package/dist/esm/src/utils/hd-key.js.map +1 -1
  102. package/dist/esm/src/utils/jws.js +4 -4
  103. package/dist/esm/src/utils/jws.js.map +1 -1
  104. package/dist/esm/src/utils/private-key-signer.js +4 -3
  105. package/dist/esm/src/utils/private-key-signer.js.map +1 -1
  106. package/dist/esm/src/utils/protocols.js +82 -9
  107. package/dist/esm/src/utils/protocols.js.map +1 -1
  108. package/dist/esm/src/utils/records.js +82 -26
  109. package/dist/esm/src/utils/records.js.map +1 -1
  110. package/dist/esm/src/utils/secp256k1.js +4 -3
  111. package/dist/esm/src/utils/secp256k1.js.map +1 -1
  112. package/dist/esm/src/utils/secp256r1.js +3 -2
  113. package/dist/esm/src/utils/secp256r1.js.map +1 -1
  114. package/dist/esm/src/utils/time.js +1 -1
  115. package/dist/esm/src/utils/url.js +1 -1
  116. package/dist/esm/src/utils/url.js.map +1 -1
  117. package/dist/esm/tests/core/auth.spec.js +2 -2
  118. package/dist/esm/tests/core/auth.spec.js.map +1 -1
  119. package/dist/esm/tests/core/message-reply.spec.js +3 -3
  120. package/dist/esm/tests/core/message-reply.spec.js.map +1 -1
  121. package/dist/esm/tests/core/message.spec.js +13 -13
  122. package/dist/esm/tests/core/message.spec.js.map +1 -1
  123. package/dist/esm/tests/core/protocol-authorization.spec.js +3 -3
  124. package/dist/esm/tests/core/protocol-authorization.spec.js.map +1 -1
  125. package/dist/esm/tests/dwn.spec.js +27 -37
  126. package/dist/esm/tests/dwn.spec.js.map +1 -1
  127. package/dist/esm/tests/{event-log → event-stream}/event-emitter-stream.spec.js +14 -15
  128. package/dist/esm/tests/event-stream/event-emitter-stream.spec.js.map +1 -0
  129. package/dist/esm/tests/{event-log → event-stream}/event-stream.spec.js +13 -15
  130. package/dist/esm/tests/event-stream/event-stream.spec.js.map +1 -0
  131. package/dist/esm/tests/features/author-delegated-grant.spec.js +281 -135
  132. package/dist/esm/tests/features/author-delegated-grant.spec.js.map +1 -1
  133. package/dist/esm/tests/features/owner-delegated-grant.spec.js +57 -59
  134. package/dist/esm/tests/features/owner-delegated-grant.spec.js.map +1 -1
  135. package/dist/esm/tests/features/owner-signature.spec.js +32 -34
  136. package/dist/esm/tests/features/owner-signature.spec.js.map +1 -1
  137. package/dist/esm/tests/features/permissions.spec.js +73 -95
  138. package/dist/esm/tests/features/permissions.spec.js.map +1 -1
  139. package/dist/esm/tests/features/protocol-composition.spec.js +1645 -0
  140. package/dist/esm/tests/features/protocol-composition.spec.js.map +1 -0
  141. package/dist/esm/tests/features/protocol-create-action.spec.js +25 -27
  142. package/dist/esm/tests/features/protocol-create-action.spec.js.map +1 -1
  143. package/dist/esm/tests/features/protocol-delete-action.spec.js +42 -44
  144. package/dist/esm/tests/features/protocol-delete-action.spec.js.map +1 -1
  145. package/dist/esm/tests/features/protocol-update-action.spec.js +53 -55
  146. package/dist/esm/tests/features/protocol-update-action.spec.js.map +1 -1
  147. package/dist/esm/tests/features/records-prune.spec.js +126 -100
  148. package/dist/esm/tests/features/records-prune.spec.js.map +1 -1
  149. package/dist/esm/tests/features/records-tags.spec.js +272 -272
  150. package/dist/esm/tests/features/records-tags.spec.js.map +1 -1
  151. package/dist/esm/tests/features/resumable-tasks.spec.js +35 -37
  152. package/dist/esm/tests/features/resumable-tasks.spec.js.map +1 -1
  153. package/dist/esm/tests/handlers/messages-read.spec.js +112 -112
  154. package/dist/esm/tests/handlers/messages-read.spec.js.map +1 -1
  155. package/dist/esm/tests/handlers/messages-subscribe.spec.js +78 -76
  156. package/dist/esm/tests/handlers/messages-subscribe.spec.js.map +1 -1
  157. package/dist/esm/tests/handlers/messages-sync.spec.js +528 -0
  158. package/dist/esm/tests/handlers/messages-sync.spec.js.map +1 -0
  159. package/dist/esm/tests/handlers/protocols-configure.spec.js +545 -152
  160. package/dist/esm/tests/handlers/protocols-configure.spec.js.map +1 -1
  161. package/dist/esm/tests/handlers/protocols-query.spec.js +70 -72
  162. package/dist/esm/tests/handlers/protocols-query.spec.js.map +1 -1
  163. package/dist/esm/tests/handlers/records-count.spec.js +313 -0
  164. package/dist/esm/tests/handlers/records-count.spec.js.map +1 -0
  165. package/dist/esm/tests/handlers/records-delete.spec.js +106 -109
  166. package/dist/esm/tests/handlers/records-delete.spec.js.map +1 -1
  167. package/dist/esm/tests/handlers/records-query.spec.js +863 -463
  168. package/dist/esm/tests/handlers/records-query.spec.js.map +1 -1
  169. package/dist/esm/tests/handlers/records-read.spec.js +439 -209
  170. package/dist/esm/tests/handlers/records-read.spec.js.map +1 -1
  171. package/dist/esm/tests/handlers/records-subscribe.spec.js +292 -97
  172. package/dist/esm/tests/handlers/records-subscribe.spec.js.map +1 -1
  173. package/dist/esm/tests/handlers/records-write.spec.js +481 -483
  174. package/dist/esm/tests/handlers/records-write.spec.js.map +1 -1
  175. package/dist/esm/tests/interfaces/messages-get.spec.js +31 -11
  176. package/dist/esm/tests/interfaces/messages-get.spec.js.map +1 -1
  177. package/dist/esm/tests/interfaces/messages-subscribe.spec.js +5 -5
  178. package/dist/esm/tests/interfaces/messages-subscribe.spec.js.map +1 -1
  179. package/dist/esm/tests/interfaces/protocols-configure.spec.js +64 -134
  180. package/dist/esm/tests/interfaces/protocols-configure.spec.js.map +1 -1
  181. package/dist/esm/tests/interfaces/protocols-query.spec.js +4 -6
  182. package/dist/esm/tests/interfaces/protocols-query.spec.js.map +1 -1
  183. package/dist/esm/tests/interfaces/records-delete.spec.js +3 -5
  184. package/dist/esm/tests/interfaces/records-delete.spec.js.map +1 -1
  185. package/dist/esm/tests/interfaces/records-query.spec.js +9 -11
  186. package/dist/esm/tests/interfaces/records-query.spec.js.map +1 -1
  187. package/dist/esm/tests/interfaces/records-read.spec.js +76 -7
  188. package/dist/esm/tests/interfaces/records-read.spec.js.map +1 -1
  189. package/dist/esm/tests/interfaces/records-subscribe.spec.js +7 -9
  190. package/dist/esm/tests/interfaces/records-subscribe.spec.js.map +1 -1
  191. package/dist/esm/tests/interfaces/records-write.spec.js +244 -48
  192. package/dist/esm/tests/interfaces/records-write.spec.js.map +1 -1
  193. package/dist/esm/tests/jose/jws/general.spec.js +15 -18
  194. package/dist/esm/tests/jose/jws/general.spec.js.map +1 -1
  195. package/dist/esm/tests/protocols/permission-grant.spec.js +114 -0
  196. package/dist/esm/tests/protocols/permission-grant.spec.js.map +1 -0
  197. package/dist/esm/tests/protocols/permission-request.spec.js +43 -7
  198. package/dist/esm/tests/protocols/permission-request.spec.js.map +1 -1
  199. package/dist/esm/tests/protocols/permissions.spec.js +9 -11
  200. package/dist/esm/tests/protocols/permissions.spec.js.map +1 -1
  201. package/dist/esm/tests/scenarios/aggregator.spec.js +90 -92
  202. package/dist/esm/tests/scenarios/aggregator.spec.js.map +1 -1
  203. package/dist/esm/tests/scenarios/deleted-record.spec.js +17 -19
  204. package/dist/esm/tests/scenarios/deleted-record.spec.js.map +1 -1
  205. package/dist/esm/tests/scenarios/end-to-end-tests.spec.js +27 -29
  206. package/dist/esm/tests/scenarios/end-to-end-tests.spec.js.map +1 -1
  207. package/dist/esm/tests/scenarios/nested-roles.spec.js +37 -39
  208. package/dist/esm/tests/scenarios/nested-roles.spec.js.map +1 -1
  209. package/dist/esm/tests/scenarios/subscriptions.spec.js +163 -163
  210. package/dist/esm/tests/scenarios/subscriptions.spec.js.map +1 -1
  211. package/dist/esm/tests/smt/smt-store-level.spec.js +143 -0
  212. package/dist/esm/tests/smt/smt-store-level.spec.js.map +1 -0
  213. package/dist/esm/tests/smt/sparse-merkle-tree.spec.js +741 -0
  214. package/dist/esm/tests/smt/sparse-merkle-tree.spec.js.map +1 -0
  215. package/dist/esm/tests/state-index/state-index-level.spec.js +254 -0
  216. package/dist/esm/tests/state-index/state-index-level.spec.js.map +1 -0
  217. package/dist/esm/tests/store/blockstore-level.spec.js +136 -0
  218. package/dist/esm/tests/store/blockstore-level.spec.js.map +1 -0
  219. package/dist/esm/tests/store/blockstore-mock.spec.js +29 -28
  220. package/dist/esm/tests/store/blockstore-mock.spec.js.map +1 -1
  221. package/dist/esm/tests/store/data-store-level.spec.js +23 -25
  222. package/dist/esm/tests/store/data-store-level.spec.js.map +1 -1
  223. package/dist/esm/tests/store/index-level.spec.js +544 -194
  224. package/dist/esm/tests/store/index-level.spec.js.map +1 -1
  225. package/dist/esm/tests/store/message-store-level.spec.js +4 -4
  226. package/dist/esm/tests/store/message-store-level.spec.js.map +1 -1
  227. package/dist/esm/tests/store/message-store.spec.js +147 -73
  228. package/dist/esm/tests/store/message-store.spec.js.map +1 -1
  229. package/dist/esm/tests/store-dependent-tests.spec.js +1 -0
  230. package/dist/esm/tests/store-dependent-tests.spec.js.map +1 -1
  231. package/dist/esm/tests/test-stores.js +5 -5
  232. package/dist/esm/tests/test-stores.js.map +1 -1
  233. package/dist/esm/tests/test-suite.js +9 -8
  234. package/dist/esm/tests/test-suite.js.map +1 -1
  235. package/dist/esm/tests/utils/cid.spec.js +8 -11
  236. package/dist/esm/tests/utils/cid.spec.js.map +1 -1
  237. package/dist/esm/tests/utils/data-stream.spec.js +167 -13
  238. package/dist/esm/tests/utils/data-stream.spec.js.map +1 -1
  239. package/dist/esm/tests/utils/encryption-callbacks.spec.js +233 -0
  240. package/dist/esm/tests/utils/encryption-callbacks.spec.js.map +1 -0
  241. package/dist/esm/tests/utils/encryption.spec.js +34 -85
  242. package/dist/esm/tests/utils/encryption.spec.js.map +1 -1
  243. package/dist/esm/tests/utils/filters.spec.js +67 -69
  244. package/dist/esm/tests/utils/filters.spec.js.map +1 -1
  245. package/dist/esm/tests/utils/hd-key.spec.js +3 -3
  246. package/dist/esm/tests/utils/hd-key.spec.js.map +1 -1
  247. package/dist/esm/tests/utils/jws.spec.js +54 -3
  248. package/dist/esm/tests/utils/jws.spec.js.map +1 -1
  249. package/dist/esm/tests/utils/memory-cache.spec.js +6 -9
  250. package/dist/esm/tests/utils/memory-cache.spec.js.map +1 -1
  251. package/dist/esm/tests/utils/messages.spec.js +63 -29
  252. package/dist/esm/tests/utils/messages.spec.js.map +1 -1
  253. package/dist/esm/tests/utils/object.spec.js +3 -3
  254. package/dist/esm/tests/utils/object.spec.js.map +1 -1
  255. package/dist/esm/tests/utils/poller.js +1 -1
  256. package/dist/esm/tests/utils/poller.js.map +1 -1
  257. package/dist/esm/tests/utils/private-key-signer.spec.js +6 -6
  258. package/dist/esm/tests/utils/private-key-signer.spec.js.map +1 -1
  259. package/dist/esm/tests/utils/records.spec.js +37 -5
  260. package/dist/esm/tests/utils/records.spec.js.map +1 -1
  261. package/dist/esm/tests/utils/secp256k1.spec.js +7 -7
  262. package/dist/esm/tests/utils/secp256k1.spec.js.map +1 -1
  263. package/dist/esm/tests/utils/secp256r1.spec.js +7 -7
  264. package/dist/esm/tests/utils/secp256r1.spec.js.map +1 -1
  265. package/dist/esm/tests/utils/test-data-generator.js +47 -28
  266. package/dist/esm/tests/utils/test-data-generator.js.map +1 -1
  267. package/dist/esm/tests/utils/time.spec.js +7 -7
  268. package/dist/esm/tests/utils/time.spec.js.map +1 -1
  269. package/dist/esm/tests/utils/url.spec.js +25 -27
  270. package/dist/esm/tests/utils/url.spec.js.map +1 -1
  271. package/dist/esm/tests/validation/json-schemas/definitions.spec.js +4 -4
  272. package/dist/esm/tests/validation/json-schemas/definitions.spec.js.map +1 -1
  273. package/dist/esm/tests/validation/json-schemas/jwk/general-jwk.spec.js +15 -3
  274. package/dist/esm/tests/validation/json-schemas/jwk/general-jwk.spec.js.map +1 -1
  275. package/dist/esm/tests/validation/json-schemas/jwk/public-jwk.spec.js +8 -8
  276. package/dist/esm/tests/validation/json-schemas/jwk/public-jwk.spec.js.map +1 -1
  277. package/dist/esm/tests/validation/json-schemas/jwk-verification-method.spec.js +8 -18
  278. package/dist/esm/tests/validation/json-schemas/jwk-verification-method.spec.js.map +1 -1
  279. package/dist/esm/tests/validation/json-schemas/protocols/protocols-configure.spec.js +3 -3
  280. package/dist/esm/tests/validation/json-schemas/protocols/protocols-configure.spec.js.map +1 -1
  281. package/dist/esm/tests/validation/json-schemas/records/records-query.spec.js +9 -9
  282. package/dist/esm/tests/validation/json-schemas/records/records-query.spec.js.map +1 -1
  283. package/dist/esm/tests/validation/json-schemas/records/records-read.spec.js +106 -0
  284. package/dist/esm/tests/validation/json-schemas/records/records-read.spec.js.map +1 -0
  285. package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js +18 -18
  286. package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js.map +1 -1
  287. package/dist/esm/tests/vectors/protocol-definitions/email.json +1 -1
  288. package/dist/esm/tests/vectors/protocol-definitions/friend-role.json +2 -4
  289. package/dist/esm/tests/vectors/protocol-definitions/slack.json +2 -6
  290. package/dist/esm/tests/vectors/protocol-definitions/thread-role.json +2 -6
  291. package/dist/types/generated/precompiled-validators.d.ts +82 -64
  292. package/dist/types/generated/precompiled-validators.d.ts.map +1 -1
  293. package/dist/types/src/core/dwn-error.d.ts +27 -3
  294. package/dist/types/src/core/dwn-error.d.ts.map +1 -1
  295. package/dist/types/src/core/message-reply.d.ts +1 -1
  296. package/dist/types/src/core/message.d.ts +3 -3
  297. package/dist/types/src/core/message.d.ts.map +1 -1
  298. package/dist/types/src/core/messages-grant-authorization.d.ts +4 -4
  299. package/dist/types/src/core/messages-grant-authorization.d.ts.map +1 -1
  300. package/dist/types/src/core/protocol-authorization.d.ts +43 -2
  301. package/dist/types/src/core/protocol-authorization.d.ts.map +1 -1
  302. package/dist/types/src/core/records-grant-authorization.d.ts +2 -2
  303. package/dist/types/src/core/records-grant-authorization.d.ts.map +1 -1
  304. package/dist/types/src/core/resumable-task-manager.d.ts +1 -0
  305. package/dist/types/src/core/resumable-task-manager.d.ts.map +1 -1
  306. package/dist/types/src/dwn.d.ts +8 -8
  307. package/dist/types/src/dwn.d.ts.map +1 -1
  308. package/dist/types/src/enums/dwn-interface-method.d.ts +5 -3
  309. package/dist/types/src/enums/dwn-interface-method.d.ts.map +1 -1
  310. package/dist/types/src/event-stream/event-emitter-stream.d.ts.map +1 -0
  311. package/dist/types/src/handlers/messages-sync.d.ts +21 -0
  312. package/dist/types/src/handlers/messages-sync.d.ts.map +1 -0
  313. package/dist/types/src/handlers/protocols-configure.d.ts +24 -4
  314. package/dist/types/src/handlers/protocols-configure.d.ts.map +1 -1
  315. package/dist/types/src/handlers/protocols-query.d.ts.map +1 -1
  316. package/dist/types/src/handlers/records-count.d.ts +43 -0
  317. package/dist/types/src/handlers/records-count.d.ts.map +1 -0
  318. package/dist/types/src/handlers/records-query.d.ts.map +1 -1
  319. package/dist/types/src/handlers/records-read.d.ts.map +1 -1
  320. package/dist/types/src/handlers/records-write.d.ts +5 -5
  321. package/dist/types/src/handlers/records-write.d.ts.map +1 -1
  322. package/dist/types/src/index.d.ts +72 -37
  323. package/dist/types/src/index.d.ts.map +1 -1
  324. package/dist/types/src/interfaces/messages-read.d.ts +2 -2
  325. package/dist/types/src/interfaces/messages-read.d.ts.map +1 -1
  326. package/dist/types/src/interfaces/messages-subscribe.d.ts +2 -2
  327. package/dist/types/src/interfaces/messages-subscribe.d.ts.map +1 -1
  328. package/dist/types/src/interfaces/messages-sync.d.ts +16 -0
  329. package/dist/types/src/interfaces/messages-sync.d.ts.map +1 -0
  330. package/dist/types/src/interfaces/protocols-configure.d.ts +22 -2
  331. package/dist/types/src/interfaces/protocols-configure.d.ts.map +1 -1
  332. package/dist/types/src/interfaces/protocols-query.d.ts +2 -2
  333. package/dist/types/src/interfaces/protocols-query.d.ts.map +1 -1
  334. package/dist/types/src/interfaces/records-count.d.ts +27 -0
  335. package/dist/types/src/interfaces/records-count.d.ts.map +1 -0
  336. package/dist/types/src/interfaces/records-delete.d.ts +2 -2
  337. package/dist/types/src/interfaces/records-delete.d.ts.map +1 -1
  338. package/dist/types/src/interfaces/records-query.d.ts +2 -2
  339. package/dist/types/src/interfaces/records-query.d.ts.map +1 -1
  340. package/dist/types/src/interfaces/records-read.d.ts +4 -2
  341. package/dist/types/src/interfaces/records-read.d.ts.map +1 -1
  342. package/dist/types/src/interfaces/records-subscribe.d.ts +2 -2
  343. package/dist/types/src/interfaces/records-subscribe.d.ts.map +1 -1
  344. package/dist/types/src/interfaces/records-write.d.ts +37 -15
  345. package/dist/types/src/interfaces/records-write.d.ts.map +1 -1
  346. package/dist/types/src/jose/algorithms/signing/ed25519.d.ts.map +1 -1
  347. package/dist/types/src/jose/algorithms/signing/signature-algorithms.d.ts +5 -1
  348. package/dist/types/src/jose/algorithms/signing/signature-algorithms.d.ts.map +1 -1
  349. package/dist/types/src/jose/jws/general/builder.d.ts +3 -3
  350. package/dist/types/src/jose/jws/general/builder.d.ts.map +1 -1
  351. package/dist/types/src/protocols/permission-grant.d.ts +11 -0
  352. package/dist/types/src/protocols/permission-grant.d.ts.map +1 -1
  353. package/dist/types/src/protocols/permission-request.d.ts +11 -0
  354. package/dist/types/src/protocols/permission-request.d.ts.map +1 -1
  355. package/dist/types/src/protocols/permissions.d.ts +4 -4
  356. package/dist/types/src/protocols/permissions.d.ts.map +1 -1
  357. package/dist/types/src/schema-validator.d.ts +1 -1
  358. package/dist/types/src/schema-validator.d.ts.map +1 -1
  359. package/dist/types/src/smt/smt-store-level.d.ts +32 -0
  360. package/dist/types/src/smt/smt-store-level.d.ts.map +1 -0
  361. package/dist/types/src/smt/smt-store-memory.d.ts +22 -0
  362. package/dist/types/src/smt/smt-store-memory.d.ts.map +1 -0
  363. package/dist/types/src/smt/smt-utils.d.ts +58 -0
  364. package/dist/types/src/smt/smt-utils.d.ts.map +1 -0
  365. package/dist/types/src/smt/sparse-merkle-tree.d.ts +124 -0
  366. package/dist/types/src/smt/sparse-merkle-tree.d.ts.map +1 -0
  367. package/dist/types/src/state-index/state-index-level.d.ts +83 -0
  368. package/dist/types/src/state-index/state-index-level.d.ts.map +1 -0
  369. package/dist/types/src/store/data-store-level.d.ts +1 -2
  370. package/dist/types/src/store/data-store-level.d.ts.map +1 -1
  371. package/dist/types/src/store/index-level.d.ts +98 -2
  372. package/dist/types/src/store/index-level.d.ts.map +1 -1
  373. package/dist/types/src/store/level-wrapper.d.ts.map +1 -1
  374. package/dist/types/src/store/message-store-level.d.ts +5 -0
  375. package/dist/types/src/store/message-store-level.d.ts.map +1 -1
  376. package/dist/types/src/store/storage-controller.d.ts +7 -7
  377. package/dist/types/src/store/storage-controller.d.ts.map +1 -1
  378. package/dist/types/src/types/data-store.d.ts +2 -3
  379. package/dist/types/src/types/data-store.d.ts.map +1 -1
  380. package/dist/types/src/types/encryption-types.d.ts +48 -0
  381. package/dist/types/src/types/encryption-types.d.ts.map +1 -0
  382. package/dist/types/src/types/jose-types.d.ts +9 -40
  383. package/dist/types/src/types/jose-types.d.ts.map +1 -1
  384. package/dist/types/src/types/message-store.d.ts +5 -0
  385. package/dist/types/src/types/message-store.d.ts.map +1 -1
  386. package/dist/types/src/types/message-types.d.ts +19 -0
  387. package/dist/types/src/types/message-types.d.ts.map +1 -1
  388. package/dist/types/src/types/messages-types.d.ts +16 -11
  389. package/dist/types/src/types/messages-types.d.ts.map +1 -1
  390. package/dist/types/src/types/method-handler.d.ts +1 -2
  391. package/dist/types/src/types/method-handler.d.ts.map +1 -1
  392. package/dist/types/src/types/permission-types.d.ts +2 -2
  393. package/dist/types/src/types/permission-types.d.ts.map +1 -1
  394. package/dist/types/src/types/protocols-types.d.ts +49 -5
  395. package/dist/types/src/types/protocols-types.d.ts.map +1 -1
  396. package/dist/types/src/types/records-types.d.ts +23 -7
  397. package/dist/types/src/types/records-types.d.ts.map +1 -1
  398. package/dist/types/src/types/signer.d.ts +1 -1
  399. package/dist/types/src/types/signer.d.ts.map +1 -1
  400. package/dist/types/src/types/smt-types.d.ts +81 -0
  401. package/dist/types/src/types/smt-types.d.ts.map +1 -0
  402. package/dist/types/src/types/state-index.d.ts +90 -0
  403. package/dist/types/src/types/state-index.d.ts.map +1 -0
  404. package/dist/types/src/utils/cid.d.ts +1 -2
  405. package/dist/types/src/utils/cid.d.ts.map +1 -1
  406. package/dist/types/src/utils/data-stream.d.ts +14 -7
  407. package/dist/types/src/utils/data-stream.d.ts.map +1 -1
  408. package/dist/types/src/utils/encryption.d.ts +2 -3
  409. package/dist/types/src/utils/encryption.d.ts.map +1 -1
  410. package/dist/types/src/utils/hd-key.d.ts +4 -4
  411. package/dist/types/src/utils/hd-key.d.ts.map +1 -1
  412. package/dist/types/src/utils/jws.d.ts +7 -7
  413. package/dist/types/src/utils/jws.d.ts.map +1 -1
  414. package/dist/types/src/utils/private-key-signer.d.ts +4 -4
  415. package/dist/types/src/utils/private-key-signer.d.ts.map +1 -1
  416. package/dist/types/src/utils/protocols.d.ts +46 -3
  417. package/dist/types/src/utils/protocols.d.ts.map +1 -1
  418. package/dist/types/src/utils/records.d.ts +33 -6
  419. package/dist/types/src/utils/records.d.ts.map +1 -1
  420. package/dist/types/src/utils/secp256k1.d.ts +11 -11
  421. package/dist/types/src/utils/secp256k1.d.ts.map +1 -1
  422. package/dist/types/src/utils/secp256r1.d.ts +8 -8
  423. package/dist/types/src/utils/secp256r1.d.ts.map +1 -1
  424. package/dist/types/src/utils/time.d.ts +1 -1
  425. package/dist/types/tests/dwn.spec.d.ts.map +1 -1
  426. package/dist/types/tests/event-stream/event-emitter-stream.spec.d.ts.map +1 -0
  427. package/dist/types/tests/event-stream/event-stream.spec.d.ts.map +1 -0
  428. package/dist/types/tests/features/author-delegated-grant.spec.d.ts.map +1 -1
  429. package/dist/types/tests/features/owner-delegated-grant.spec.d.ts.map +1 -1
  430. package/dist/types/tests/features/owner-signature.spec.d.ts.map +1 -1
  431. package/dist/types/tests/features/permissions.spec.d.ts.map +1 -1
  432. package/dist/types/tests/features/protocol-composition.spec.d.ts +5 -0
  433. package/dist/types/tests/features/protocol-composition.spec.d.ts.map +1 -0
  434. package/dist/types/tests/features/protocol-create-action.spec.d.ts.map +1 -1
  435. package/dist/types/tests/features/protocol-delete-action.spec.d.ts.map +1 -1
  436. package/dist/types/tests/features/protocol-update-action.spec.d.ts.map +1 -1
  437. package/dist/types/tests/features/records-prune.spec.d.ts.map +1 -1
  438. package/dist/types/tests/features/records-tags.spec.d.ts.map +1 -1
  439. package/dist/types/tests/features/resumable-tasks.spec.d.ts.map +1 -1
  440. package/dist/types/tests/handlers/messages-read.spec.d.ts.map +1 -1
  441. package/dist/types/tests/handlers/messages-subscribe.spec.d.ts.map +1 -1
  442. package/dist/types/tests/handlers/messages-sync.spec.d.ts +2 -0
  443. package/dist/types/tests/handlers/messages-sync.spec.d.ts.map +1 -0
  444. package/dist/types/tests/handlers/protocols-configure.spec.d.ts.map +1 -1
  445. package/dist/types/tests/handlers/protocols-query.spec.d.ts.map +1 -1
  446. package/dist/types/tests/handlers/records-count.spec.d.ts +2 -0
  447. package/dist/types/tests/handlers/records-count.spec.d.ts.map +1 -0
  448. package/dist/types/tests/handlers/records-delete.spec.d.ts.map +1 -1
  449. package/dist/types/tests/handlers/records-query.spec.d.ts.map +1 -1
  450. package/dist/types/tests/handlers/records-read.spec.d.ts.map +1 -1
  451. package/dist/types/tests/handlers/records-subscribe.spec.d.ts.map +1 -1
  452. package/dist/types/tests/handlers/records-write.spec.d.ts.map +1 -1
  453. package/dist/types/tests/protocols/permission-grant.spec.d.ts +2 -0
  454. package/dist/types/tests/protocols/permission-grant.spec.d.ts.map +1 -0
  455. package/dist/types/tests/scenarios/deleted-record.spec.d.ts.map +1 -1
  456. package/dist/types/tests/scenarios/end-to-end-tests.spec.d.ts.map +1 -1
  457. package/dist/types/tests/scenarios/nested-roles.spec.d.ts.map +1 -1
  458. package/dist/types/tests/smt/smt-store-level.spec.d.ts +2 -0
  459. package/dist/types/tests/smt/smt-store-level.spec.d.ts.map +1 -0
  460. package/dist/types/tests/smt/sparse-merkle-tree.spec.d.ts +2 -0
  461. package/dist/types/tests/smt/sparse-merkle-tree.spec.d.ts.map +1 -0
  462. package/dist/types/tests/state-index/state-index-level.spec.d.ts +2 -0
  463. package/dist/types/tests/state-index/state-index-level.spec.d.ts.map +1 -0
  464. package/dist/types/tests/store/blockstore-level.spec.d.ts +2 -0
  465. package/dist/types/tests/store/blockstore-level.spec.d.ts.map +1 -0
  466. package/dist/types/tests/store/message-store.spec.d.ts.map +1 -1
  467. package/dist/types/tests/test-stores.d.ts +4 -4
  468. package/dist/types/tests/test-stores.d.ts.map +1 -1
  469. package/dist/types/tests/test-suite.d.ts +2 -2
  470. package/dist/types/tests/test-suite.d.ts.map +1 -1
  471. package/dist/types/tests/utils/encryption-callbacks.spec.d.ts +2 -0
  472. package/dist/types/tests/utils/encryption-callbacks.spec.d.ts.map +1 -0
  473. package/dist/types/tests/utils/test-data-generator.d.ts +31 -28
  474. package/dist/types/tests/utils/test-data-generator.d.ts.map +1 -1
  475. package/dist/types/tests/validation/json-schemas/records/records-read.spec.d.ts +2 -0
  476. package/dist/types/tests/validation/json-schemas/records/records-read.spec.d.ts.map +1 -0
  477. package/package.json +26 -45
  478. package/src/core/dwn-error.ts +27 -3
  479. package/src/core/message-reply.ts +1 -1
  480. package/src/core/message.ts +5 -5
  481. package/src/core/messages-grant-authorization.ts +22 -8
  482. package/src/core/protocol-authorization.ts +345 -68
  483. package/src/core/records-grant-authorization.ts +2 -2
  484. package/src/core/resumable-task-manager.ts +4 -5
  485. package/src/dwn.ts +25 -20
  486. package/src/enums/dwn-interface-method.ts +5 -3
  487. package/src/handlers/messages-subscribe.ts +1 -1
  488. package/src/handlers/messages-sync.ts +129 -0
  489. package/src/handlers/protocols-configure.ts +195 -17
  490. package/src/handlers/protocols-query.ts +7 -5
  491. package/src/handlers/records-count.ts +184 -0
  492. package/src/handlers/records-query.ts +4 -0
  493. package/src/handlers/records-read.ts +4 -8
  494. package/src/handlers/records-write.ts +20 -21
  495. package/src/index.ts +74 -37
  496. package/src/interfaces/messages-read.ts +6 -5
  497. package/src/interfaces/messages-subscribe.ts +7 -6
  498. package/src/interfaces/messages-sync.ts +59 -0
  499. package/src/interfaces/protocols-configure.ts +211 -33
  500. package/src/interfaces/protocols-query.ts +7 -6
  501. package/src/interfaces/records-count.ts +106 -0
  502. package/src/interfaces/records-delete.ts +2 -2
  503. package/src/interfaces/records-query.ts +2 -2
  504. package/src/interfaces/records-read.ts +26 -3
  505. package/src/interfaces/records-subscribe.ts +2 -2
  506. package/src/interfaces/records-write.ts +115 -46
  507. package/src/jose/algorithms/signing/ed25519.ts +13 -12
  508. package/src/jose/algorithms/signing/signature-algorithms.ts +6 -1
  509. package/src/jose/jws/general/builder.ts +3 -3
  510. package/src/jose/jws/general/verifier.ts +3 -3
  511. package/src/protocols/permission-grant.ts +51 -0
  512. package/src/protocols/permission-request.ts +37 -0
  513. package/src/protocols/permissions.ts +5 -5
  514. package/src/schema-validator.ts +11 -3
  515. package/src/smt/smt-store-level.ts +143 -0
  516. package/src/smt/smt-store-memory.ts +53 -0
  517. package/src/smt/smt-utils.ts +149 -0
  518. package/src/smt/sparse-merkle-tree.ts +698 -0
  519. package/src/state-index/state-index-level.ts +241 -0
  520. package/src/store/data-store-level.ts +8 -7
  521. package/src/store/index-level.ts +415 -19
  522. package/src/store/level-wrapper.ts +1 -1
  523. package/src/store/message-store-level.ts +62 -0
  524. package/src/store/storage-controller.ts +21 -19
  525. package/src/types/data-store.ts +2 -4
  526. package/src/types/encryption-types.ts +52 -0
  527. package/src/types/jose-types.ts +10 -42
  528. package/src/types/message-store.ts +11 -0
  529. package/src/types/message-types.ts +21 -0
  530. package/src/types/messages-types.ts +21 -15
  531. package/src/types/method-handler.ts +1 -2
  532. package/src/types/permission-types.ts +2 -2
  533. package/src/types/protocols-types.ts +55 -6
  534. package/src/types/records-types.ts +26 -7
  535. package/src/types/signer.ts +1 -1
  536. package/src/types/smt-types.ts +95 -0
  537. package/src/types/state-index.ts +100 -0
  538. package/src/utils/cid.ts +3 -4
  539. package/src/utils/data-stream.ts +75 -38
  540. package/src/utils/encryption.ts +24 -39
  541. package/src/utils/hd-key.ts +6 -6
  542. package/src/utils/jws.ts +9 -9
  543. package/src/utils/private-key-signer.ts +9 -8
  544. package/src/utils/protocols.ts +132 -6
  545. package/src/utils/records.ts +118 -29
  546. package/src/utils/secp256k1.ts +23 -21
  547. package/src/utils/secp256r1.ts +17 -15
  548. package/src/utils/time.ts +1 -1
  549. package/src/utils/url.ts +1 -1
  550. package/dist/cjs/index.js +0 -36749
  551. package/dist/cjs/package.json +0 -1
  552. package/dist/esm/src/event-log/event-emitter-stream.js.map +0 -1
  553. package/dist/esm/src/event-log/event-log-level.js +0 -63
  554. package/dist/esm/src/event-log/event-log-level.js.map +0 -1
  555. package/dist/esm/src/handlers/messages-query.js +0 -71
  556. package/dist/esm/src/handlers/messages-query.js.map +0 -1
  557. package/dist/esm/src/interfaces/messages-query.js.map +0 -1
  558. package/dist/esm/src/types/event-log.js +0 -2
  559. package/dist/esm/src/types/event-log.js.map +0 -1
  560. package/dist/esm/tests/event-log/event-emitter-stream.spec.js.map +0 -1
  561. package/dist/esm/tests/event-log/event-log-level.spec.js +0 -44
  562. package/dist/esm/tests/event-log/event-log-level.spec.js.map +0 -1
  563. package/dist/esm/tests/event-log/event-log.spec.js +0 -236
  564. package/dist/esm/tests/event-log/event-log.spec.js.map +0 -1
  565. package/dist/esm/tests/event-log/event-stream.spec.js.map +0 -1
  566. package/dist/esm/tests/handlers/messages-query.spec.js +0 -349
  567. package/dist/esm/tests/handlers/messages-query.spec.js.map +0 -1
  568. package/dist/esm/tests/interfaces/messagess-query.spec.js +0 -127
  569. package/dist/esm/tests/interfaces/messagess-query.spec.js.map +0 -1
  570. package/dist/esm/tests/scenarios/messages-query.spec.js +0 -395
  571. package/dist/esm/tests/scenarios/messages-query.spec.js.map +0 -1
  572. package/dist/types/src/event-log/event-emitter-stream.d.ts.map +0 -1
  573. package/dist/types/src/event-log/event-log-level.d.ts +0 -35
  574. package/dist/types/src/event-log/event-log-level.d.ts.map +0 -1
  575. package/dist/types/src/handlers/messages-query.d.ts +0 -17
  576. package/dist/types/src/handlers/messages-query.d.ts.map +0 -1
  577. package/dist/types/src/interfaces/messages-query.d.ts +0 -16
  578. package/dist/types/src/interfaces/messages-query.d.ts.map +0 -1
  579. package/dist/types/src/types/event-log.d.ts +0 -52
  580. package/dist/types/src/types/event-log.d.ts.map +0 -1
  581. package/dist/types/tests/event-log/event-emitter-stream.spec.d.ts.map +0 -1
  582. package/dist/types/tests/event-log/event-log-level.spec.d.ts +0 -2
  583. package/dist/types/tests/event-log/event-log-level.spec.d.ts.map +0 -1
  584. package/dist/types/tests/event-log/event-log.spec.d.ts +0 -2
  585. package/dist/types/tests/event-log/event-log.spec.d.ts.map +0 -1
  586. package/dist/types/tests/event-log/event-stream.spec.d.ts.map +0 -1
  587. package/dist/types/tests/handlers/messages-query.spec.d.ts +0 -2
  588. package/dist/types/tests/handlers/messages-query.spec.d.ts.map +0 -1
  589. package/dist/types/tests/interfaces/messagess-query.spec.d.ts +0 -2
  590. package/dist/types/tests/interfaces/messagess-query.spec.d.ts.map +0 -1
  591. package/dist/types/tests/scenarios/messages-query.spec.d.ts +0 -2
  592. package/dist/types/tests/scenarios/messages-query.spec.d.ts.map +0 -1
  593. package/src/event-log/event-log-level.ts +0 -72
  594. package/src/handlers/messages-query.ts +0 -67
  595. package/src/interfaces/messages-query.ts +0 -60
  596. package/src/types/event-log.ts +0 -52
  597. /package/dist/esm/src/{event-log → event-stream}/event-emitter-stream.js +0 -0
  598. /package/dist/types/src/{event-log → event-stream}/event-emitter-stream.d.ts +0 -0
  599. /package/dist/types/tests/{event-log → event-stream}/event-emitter-stream.spec.d.ts +0 -0
  600. /package/dist/types/tests/{event-log → event-stream}/event-stream.spec.d.ts +0 -0
  601. /package/src/{event-log → event-stream}/event-emitter-stream.ts +0 -0
@@ -0,0 +1,184 @@
1
+ import type { DidResolver } from '@enbox/dids';
2
+ import type { Filter } from '../types/query-types.js';
3
+ import type { MessageStore } from '../types//message-store.js';
4
+ import type { MethodHandler } from '../types/method-handler.js';
5
+ import type { RecordsCountMessage, RecordsCountReply } from '../types/records-types.js';
6
+
7
+ import { authenticate } from '../core/auth.js';
8
+ import { Message } from '../core/message.js';
9
+ import { messageReplyFromError } from '../core/message-reply.js';
10
+ import { ProtocolAuthorization } from '../core/protocol-authorization.js';
11
+ import { Records } from '../utils/records.js';
12
+ import { RecordsCount } from '../interfaces/records-count.js';
13
+ import { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';
14
+
15
+ export class RecordsCountHandler implements MethodHandler {
16
+
17
+ constructor(private didResolver: DidResolver, private messageStore: MessageStore) { }
18
+
19
+ public async handle({
20
+ tenant,
21
+ message
22
+ }: {tenant: string, message: RecordsCountMessage}): Promise<RecordsCountReply> {
23
+ let recordsCount: RecordsCount;
24
+ try {
25
+ recordsCount = await RecordsCount.parse(message);
26
+ } catch (e) {
27
+ return messageReplyFromError(e, 400);
28
+ }
29
+
30
+ let count: number;
31
+
32
+ // if this is an anonymous count and the filter supports published records, count only published records
33
+ if (Records.filterIncludesPublishedRecords(recordsCount.message.descriptor.filter) && recordsCount.author === undefined) {
34
+ count = await this.countPublishedRecords(tenant, recordsCount);
35
+ } else {
36
+ // authentication and authorization
37
+ try {
38
+ await authenticate(message.authorization!, this.didResolver);
39
+
40
+ await RecordsCountHandler.authorizeRecordsCount(tenant, recordsCount, this.messageStore);
41
+ } catch (e) {
42
+ return messageReplyFromError(e, 401);
43
+ }
44
+
45
+ if (recordsCount.author === tenant) {
46
+ count = await this.countRecordsAsOwner(tenant, recordsCount);
47
+ } else {
48
+ count = await this.countRecordsAsNonOwner(tenant, recordsCount);
49
+ }
50
+ }
51
+
52
+ return {
53
+ status: { code: 200, detail: 'OK' },
54
+ count,
55
+ };
56
+ }
57
+
58
+ /**
59
+ * Counts records as the owner of the DWN with no additional filtering.
60
+ */
61
+ private async countRecordsAsOwner(tenant: string, recordsCount: RecordsCount): Promise<number> {
62
+ const { filter } = recordsCount.message.descriptor;
63
+ const countFilter = {
64
+ ...Records.convertFilter(filter),
65
+ interface : DwnInterfaceName.Records,
66
+ method : DwnMethodName.Write,
67
+ isLatestBaseState : true
68
+ };
69
+
70
+ return this.messageStore.count(tenant, [countFilter]);
71
+ }
72
+
73
+ /**
74
+ * Counts records as a non-owner, applying the same filter logic as RecordsQuery.
75
+ */
76
+ private async countRecordsAsNonOwner(tenant: string, recordsCount: RecordsCount): Promise<number> {
77
+ const { filter } = recordsCount.message.descriptor;
78
+ const filters: Filter[] = [];
79
+
80
+ if (Records.filterIncludesPublishedRecords(filter)) {
81
+ filters.push(RecordsCountHandler.buildPublishedRecordsFilter(recordsCount));
82
+ }
83
+
84
+ if (Records.filterIncludesUnpublishedRecords(filter)) {
85
+ if (Records.shouldBuildUnpublishedAuthorFilter(filter, recordsCount.author!)) {
86
+ filters.push(RecordsCountHandler.buildUnpublishedRecordsByCountAuthorFilter(recordsCount));
87
+ }
88
+
89
+ if (Records.shouldProtocolAuthorize(recordsCount.signaturePayload!)) {
90
+ filters.push(RecordsCountHandler.buildUnpublishedProtocolAuthorizedRecordsFilter(recordsCount));
91
+ }
92
+
93
+ if (Records.shouldBuildUnpublishedRecipientFilter(filter, recordsCount.author!)) {
94
+ filters.push(RecordsCountHandler.buildUnpublishedRecordsForCountAuthorFilter(recordsCount));
95
+ }
96
+ }
97
+
98
+ return this.messageStore.count(tenant, filters);
99
+ }
100
+
101
+ /**
102
+ * Counts only published records.
103
+ */
104
+ private async countPublishedRecords(tenant: string, recordsCount: RecordsCount): Promise<number> {
105
+ const filter = RecordsCountHandler.buildPublishedRecordsFilter(recordsCount);
106
+ return this.messageStore.count(tenant, [filter]);
107
+ }
108
+
109
+ private static buildPublishedRecordsFilter(recordsCount: RecordsCount): Filter {
110
+ const { filter } = recordsCount.message.descriptor;
111
+ return {
112
+ ...Records.convertFilter(filter),
113
+ interface : DwnInterfaceName.Records,
114
+ method : DwnMethodName.Write,
115
+ published : true,
116
+ isLatestBaseState : true
117
+ };
118
+ }
119
+
120
+ /**
121
+ * Creates a filter for unpublished records that are intended for the count author (where `recipient` is the author).
122
+ */
123
+ private static buildUnpublishedRecordsForCountAuthorFilter(recordsCount: RecordsCount): Filter {
124
+ const { filter } = recordsCount.message.descriptor;
125
+ return {
126
+ ...Records.convertFilter(filter),
127
+ interface : DwnInterfaceName.Records,
128
+ method : DwnMethodName.Write,
129
+ recipient : recordsCount.author!,
130
+ isLatestBaseState : true,
131
+ published : false
132
+ };
133
+ }
134
+
135
+ /**
136
+ * Creates a filter for unpublished records that are within the specified protocol.
137
+ */
138
+ private static buildUnpublishedProtocolAuthorizedRecordsFilter(recordsCount: RecordsCount): Filter {
139
+ const { filter } = recordsCount.message.descriptor;
140
+ return {
141
+ ...Records.convertFilter(filter),
142
+ interface : DwnInterfaceName.Records,
143
+ method : DwnMethodName.Write,
144
+ isLatestBaseState : true,
145
+ published : false
146
+ };
147
+ }
148
+
149
+ /**
150
+ * Creates a filter for only unpublished records where the author is the same as the count author.
151
+ */
152
+ private static buildUnpublishedRecordsByCountAuthorFilter(recordsCount: RecordsCount): Filter {
153
+ const { filter } = recordsCount.message.descriptor;
154
+ return {
155
+ ...Records.convertFilter(filter),
156
+ author : recordsCount.author!,
157
+ interface : DwnInterfaceName.Records,
158
+ method : DwnMethodName.Write,
159
+ isLatestBaseState : true,
160
+ published : false
161
+ };
162
+ }
163
+
164
+ /**
165
+ * @param messageStore Used to check if the grant has been revoked.
166
+ */
167
+ private static async authorizeRecordsCount(
168
+ tenant: string,
169
+ recordsCount: RecordsCount,
170
+ messageStore: MessageStore
171
+ ): Promise<void> {
172
+
173
+ if (Message.isSignedByAuthorDelegate(recordsCount.message)) {
174
+ await recordsCount.authorizeDelegate(messageStore);
175
+ }
176
+
177
+ // NOTE: not all RecordsCount messages require protocol authorization even if the filter includes protocol-related fields,
178
+ // this is because we dynamically filter out records that the caller is not authorized to see.
179
+ // Currently only run protocol authorization if message deliberately invokes a protocol role.
180
+ if (Records.shouldProtocolAuthorize(recordsCount.signaturePayload!)) {
181
+ await ProtocolAuthorization.authorizeQueryOrSubscribe(tenant, recordsCount, messageStore);
182
+ }
183
+ }
184
+ }
@@ -97,6 +97,10 @@ export class RecordsQueryHandler implements MethodHandler {
97
97
  return { datePublished: SortDirection.Ascending };
98
98
  case DateSort.PublishedDescending:
99
99
  return { datePublished: SortDirection.Descending };
100
+ case DateSort.UpdatedAscending:
101
+ return { messageTimestamp: SortDirection.Ascending };
102
+ case DateSort.UpdatedDescending:
103
+ return { messageTimestamp: SortDirection.Descending };
100
104
  default:
101
105
  return { dateCreated: SortDirection.Ascending };
102
106
  }
@@ -44,29 +44,25 @@ export class RecordsReadHandler implements MethodHandler {
44
44
  return messageReplyFromError(e, 401);
45
45
  }
46
46
 
47
- // get the latest active messages matching the supplied filter
47
+ // get the latest active message matching the supplied filter, sorted and limited to 1 result
48
48
  const query: Filter = {
49
49
  // NOTE: we don't filter by `method` so that we get both RecordsWrite and RecordsDelete messages
50
50
  interface : DwnInterfaceName.Records,
51
51
  isLatestBaseState : true,
52
52
  ...Records.convertFilter(message.descriptor.filter)
53
53
  };
54
- const { messages: existingMessages } = await this.messageStore.query(tenant, [ query ]);
54
+ const messageSort = Records.convertDateSort(message.descriptor.dateSort);
55
+ const { messages: existingMessages } = await this.messageStore.query(tenant, [ query ], messageSort, { limit: 1 });
55
56
  if (existingMessages.length === 0) {
56
57
  return {
57
58
  status: { code: 404, detail: 'Not Found' }
58
59
  };
59
- } else if (existingMessages.length > 1) {
60
- return messageReplyFromError(new DwnError(
61
- DwnErrorCode.RecordsReadReturnedMultiple,
62
- 'Multiple records exist for the RecordsRead filter'
63
- ), 400);
64
60
  }
65
61
 
66
62
  const matchedMessage = existingMessages[0];
67
63
 
68
64
  // if the matched message is a RecordsDelete, we mark the record as not-found and return both the RecordsDelete and the initial RecordsWrite
69
- // TODO: https://github.com/TBD54566975/dwn-sdk-js/issues/819:
65
+ // TODO: https://github.com/enboxorg/enbox/issues/819:
70
66
  // Consider performing authorization checks like when records exists before returning RecordsDelete and initial RecordsWrite of a deleted record
71
67
  if (matchedMessage.descriptor.method === DwnMethodName.Delete) {
72
68
  const recordsDeleteMessage = matchedMessage as RecordsDeleteMessage;
@@ -1,10 +1,10 @@
1
1
  import type { DataStore } from '../types/data-store.js';
2
2
  import type { DidResolver } from '@enbox/dids';
3
- import type { EventLog } from '../types/event-log.js';
4
3
  import type { EventStream } from '../types/subscriptions.js';
5
4
  import type { GenericMessageReply } from '../types/message-types.js';
6
- import type { MessageStore } from '../types//message-store.js';
5
+ import type { MessageStore } from '../types/message-store.js';
7
6
  import type { MethodHandler } from '../types/method-handler.js';
7
+ import type { StateIndex } from '../types/state-index.js';
8
8
  import type { RecordsQueryReplyEntry, RecordsWriteMessage } from '../types/records-types.js';
9
9
 
10
10
  import { authenticate } from '../core/auth.js';
@@ -22,7 +22,7 @@ import { StorageController } from '../store/storage-controller.js';
22
22
  import { DwnError, DwnErrorCode } from '../core/dwn-error.js';
23
23
  import { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';
24
24
 
25
- type HandlerArgs = { tenant: string, message: RecordsWriteMessage, dataStream?: _Readable.Readable};
25
+ type HandlerArgs = { tenant: string, message: RecordsWriteMessage, dataStream?: ReadableStream<Uint8Array>};
26
26
 
27
27
  export class RecordsWriteHandler implements MethodHandler {
28
28
 
@@ -30,7 +30,7 @@ export class RecordsWriteHandler implements MethodHandler {
30
30
  private didResolver: DidResolver,
31
31
  private messageStore: MessageStore,
32
32
  private dataStore: DataStore,
33
- private eventLog: EventLog,
33
+ private stateIndex: StateIndex,
34
34
  private eventStream?: EventStream
35
35
  ) { }
36
36
 
@@ -113,7 +113,7 @@ export class RecordsWriteHandler implements MethodHandler {
113
113
  // This would allow an initial write to be written to the DB without data, but having it not queryable,
114
114
  // because query implementation filters on `isLatestBaseState` being `true`
115
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
116
+ // See: https://github.com/enboxorg/enbox/issues/359 for more info
117
117
  let isLatestBaseState = false;
118
118
  let messageWithOptionalEncodedData = message as RecordsQueryReplyEntry;
119
119
 
@@ -134,7 +134,7 @@ export class RecordsWriteHandler implements MethodHandler {
134
134
 
135
135
  const indexes = await recordsWrite.constructIndexes(isLatestBaseState);
136
136
  await this.messageStore.put(tenant, messageWithOptionalEncodedData, indexes);
137
- await this.eventLog.append(tenant, await Message.getCid(message), indexes);
137
+ await this.stateIndex.insert(tenant, await Message.getCid(message), indexes);
138
138
 
139
139
  // NOTE: We only emit a `RecordsWrite` when the message is the latest base state.
140
140
  // Because we allow a `RecordsWrite` which is not the latest state to be written, but not queried, we shouldn't emit it either.
@@ -143,15 +143,14 @@ export class RecordsWriteHandler implements MethodHandler {
143
143
  this.eventStream.emit(tenant, { message, initialWrite }, indexes);
144
144
  }
145
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')) {
146
+ if (error instanceof DwnError) {
147
+ if (error.code === DwnErrorCode.RecordsWriteMissingEncodedDataInPrevious ||
148
+ error.code === DwnErrorCode.RecordsWriteMissingDataInPrevious ||
149
+ error.code === DwnErrorCode.RecordsWriteNotAllowedAfterDelete ||
150
+ error.code === DwnErrorCode.RecordsWriteDataCidMismatch ||
151
+ error.code === DwnErrorCode.RecordsWriteDataSizeMismatch ||
152
+ error.code.startsWith('PermissionsProtocolValidate') ||
153
+ error.code.startsWith('SchemaValidator')) {
155
154
  return messageReplyFromError(error, 400);
156
155
  }
157
156
  }
@@ -162,7 +161,7 @@ export class RecordsWriteHandler implements MethodHandler {
162
161
 
163
162
  const messageReply = {
164
163
  // 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
164
+ // as an initial state we use separate response codes. See https://github.com/enboxorg/enbox/issues/695
166
165
  // for more details.
167
166
  status: (newMessageIsInitialWrite && dataStream === undefined) ?
168
167
  { code: 204, detail: 'No Content' } :
@@ -171,7 +170,7 @@ export class RecordsWriteHandler implements MethodHandler {
171
170
 
172
171
  // delete all existing messages of the same record that are not newest, except for the initial write
173
172
  await StorageController.deleteAllOlderMessagesButKeepInitialWrite(
174
- tenant, existingMessages, newestMessage, this.messageStore, this.dataStore, this.eventLog
173
+ tenant, existingMessages, newestMessage, this.messageStore, this.dataStore, this.stateIndex
175
174
  );
176
175
 
177
176
  await this.postProcessingForCoreRecordsWrite(tenant, recordsWrite);
@@ -220,7 +219,7 @@ export class RecordsWriteHandler implements MethodHandler {
220
219
  */
221
220
  private async postProcessingForCoreRecordsWrite(tenant: string, recordsWrite: RecordsWrite): Promise<void> {
222
221
  // 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
222
+ // TODO: https://github.com/enboxorg/enbox/issues/716
224
223
  // This code is a direct copy and paste from the original PermissionsRevokeHandler (no longer exists),
225
224
  // but it appears that there was no test for it and it does not look like the code worked:
226
225
  // - not seeing `permissionGrantId` being an index
@@ -239,7 +238,7 @@ export class RecordsWriteHandler implements MethodHandler {
239
238
  const messageCid = await Message.getCid(grantAuthorizedMessage);
240
239
  await this.messageStore.delete(tenant, messageCid);
241
240
  }
242
- this.eventLog.deleteEventsByCid(tenant, grantAuthorizedMessageCidsAfterRevoke);
241
+ this.stateIndex.delete(tenant, grantAuthorizedMessageCidsAfterRevoke);
243
242
  }
244
243
  }
245
244
 
@@ -255,7 +254,7 @@ export class RecordsWriteHandler implements MethodHandler {
255
254
  private async processMessageWithDataStream(
256
255
  tenant: string,
257
256
  message: RecordsWriteMessage,
258
- dataStream: _Readable.Readable,
257
+ dataStream: ReadableStream<Uint8Array>,
259
258
  ):Promise<RecordsQueryReplyEntry> {
260
259
  let messageWithOptionalEncodedData: RecordsQueryReplyEntry = message;
261
260
 
@@ -303,7 +302,7 @@ export class RecordsWriteHandler implements MethodHandler {
303
302
  // Since incoming message is not an initial write, and no dataStream is provided, we first check integrity against newest existing write.
304
303
  // we preform the dataCid check in case a user attempts to gain access to data by referencing a different known dataCid,
305
304
  // 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
305
+ // See: https://github.com/enboxorg/enbox/issues/359 for more info
307
306
  RecordsWriteHandler.validateDataIntegrity(dataCid, dataSize, newestExistingWrite.descriptor.dataCid, newestExistingWrite.descriptor.dataSize);
308
307
 
309
308
  if (dataSize <= DwnConstant.maxDataSizeAllowedToBeEncoded) {
package/src/index.ts CHANGED
@@ -1,67 +1,104 @@
1
1
  // export everything that we want to be consumable
2
2
  export type { DwnConfig } from './dwn.js';
3
- export type { EventLog } from './types/event-log.js';
4
3
  export type { EventListener, EventStream, EventSubscription, MessageEvent, SubscriptionReply } from './types/subscriptions.js';
5
4
  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';
5
+ export type { MessagesFilter, MessagesReadMessage as MessagesReadMessage, MessagesReadReply as MessagesReadReply, MessagesReadReplyEntry as MessagesReadReplyEntry, MessagesReadDescriptor, MessagesSubscribeDescriptor, MessagesSubscribeMessage, MessagesSubscribeReply, MessageSubscriptionHandler, MessagesSubscribeMessageOptions, MessagesSyncAction, MessagesSyncDescriptor, MessagesSyncMessage, MessagesSyncReply } from './types/messages-types.js';
7
6
  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';
7
+ export type { ProtocolsConfigureDescriptor, ProtocolDefinition, ProtocolTypes, ProtocolRuleSet, ProtocolsQueryFilter, ProtocolsConfigureMessage, ProtocolsQueryMessage, ProtocolsQueryReply, ProtocolActionRule, ProtocolPathEncryption, ProtocolsQueryDescriptor, ProtocolType, ProtocolUses } from './types/protocols-types.js';
8
+ export type { DataEncodedRecordsWriteMessage, EncryptedKey, EncryptionProperty, RecordsCountDescriptor, RecordsCountMessage, RecordsCountReply, 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
9
  export type { GeneralJws, SignatureEntry } from './types/jws-types.js';
11
10
  export { authenticate } from './core/auth.js';
12
- export { ActiveTenantCheckResult, AllowAllTenantGate, TenantGate } from './core/tenant-gate.js';
11
+ export { AllowAllTenantGate } from './core/tenant-gate.js';
12
+ export type { ActiveTenantCheckResult, TenantGate } from './core/tenant-gate.js';
13
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';
14
+ export { RecordsCount } from './interfaces/records-count.js';
15
+ export type { RecordsCountOptions } from './interfaces/records-count.js';
16
+ export { RecordsQuery } from './interfaces/records-query.js';
17
+ export type { RecordsQueryOptions } from './interfaces/records-query.js';
18
+ export type { DataStore, DataStorePutResult, DataStoreGetResult } from './types/data-store.js';
19
+ export type { ResumableTaskStore, ManagedResumableTask } from './types/resumable-task-store.js';
17
20
  export { DataStream } from './utils/data-stream.js';
18
- export { DerivedPrivateJwk, HdKey, KeyDerivationScheme } from './utils/hd-key.js';
19
- export { Dwn, MessageOptions } from './dwn.js';
21
+ export { HdKey, KeyDerivationScheme } from './utils/hd-key.js';
22
+ export type { DerivedPrivateJwk } from './utils/hd-key.js';
23
+ export { Dwn } from './dwn.js';
24
+ export type { MessageOptions } from './dwn.js';
20
25
  export { DwnConstant } from './core/dwn-constant.js';
21
26
  export { DwnError, DwnErrorCode } from './core/dwn-error.js';
22
27
  export { DwnInterfaceName, DwnMethodName } from './enums/dwn-interface-method.js';
23
28
  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';
29
+ export { MessagesSubscribe as MessagesSubscribe } from './interfaces/messages-subscribe.js';
30
+ export type { MessagesSubscribeOptions as MessagesSubscribeOptions } from './interfaces/messages-subscribe.js';
31
+ export { Encryption, EncryptionAlgorithm } from './utils/encryption.js';
32
+ export type { EciesEncryptionOutput, EciesEncryptionInput } from './utils/encryption.js';
33
+ export { RecordsWrite } from './interfaces/records-write.js';
34
+ export type { EncryptionInput, KeyEncryptionInput, RecordsWriteOptions, CreateFromOptions } from './interfaces/records-write.js';
27
35
  export { executeUnlessAborted } from './utils/abort.js';
28
36
  export { Jws } from './utils/jws.js';
29
- export { KeyMaterial, PrivateJwk, PublicJwk, Jwk } from './types/jose-types.js';
37
+ export type { KeyMaterial, PrivateKeyJwk, PublicKeyJwk, Jwk } from './types/jose-types.js';
30
38
  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';
39
+ export { MessagesRead as MessagesRead } from './interfaces/messages-read.js';
40
+ export type { MessagesReadOptions as MessagesReadOptions } from './interfaces/messages-read.js';
41
+ export { MessagesSync } from './interfaces/messages-sync.js';
42
+ export type { MessagesSyncOptions } from './interfaces/messages-sync.js';
43
+ export type { UnionMessageReply } from './core/message-reply.js';
44
+ export type { MessageStore, MessageStoreOptions } from './types/message-store.js';
45
+ export type { MessageInterface } from './types/message-interface.js';
36
46
  export { PermissionGrant } from './protocols/permission-grant.js';
37
47
  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';
48
+ export { PermissionsProtocol } from './protocols/permissions.js';
49
+ export type { PermissionGrantCreateOptions, PermissionRequestCreateOptions, PermissionRevocationCreateOptions } from './protocols/permissions.js';
50
+ export { PrivateKeySigner } from './utils/private-key-signer.js';
51
+ export type { PrivateKeySignerOptions } from './utils/private-key-signer.js';
52
+ export { Protocols, parseCrossProtocolRef, isCrossProtocolRef, getRuleSetAtPath } from './utils/protocols.js';
53
+ export type { CrossProtocolRef } from './utils/protocols.js';
54
+ export { ProtocolsConfigure } from './interfaces/protocols-configure.js';
55
+ export type { ProtocolsConfigureOptions } from './interfaces/protocols-configure.js';
56
+ export { ProtocolsQuery } from './interfaces/protocols-query.js';
57
+ export type { ProtocolsQueryOptions } from './interfaces/protocols-query.js';
43
58
  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';
59
+ export { RecordsDelete } from './interfaces/records-delete.js';
60
+ export type { RecordsDeleteOptions } from './interfaces/records-delete.js';
61
+ export { RecordsRead } from './interfaces/records-read.js';
62
+ export type { RecordsReadOptions } from './interfaces/records-read.js';
63
+ export { RecordsSubscribe } from './interfaces/records-subscribe.js';
64
+ export type { RecordsSubscribeOptions } from './interfaces/records-subscribe.js';
47
65
  export { Secp256k1 } from './utils/secp256k1.js';
48
66
  export { Secp256r1 } from './utils/secp256r1.js';
49
- export { Signer } from './types/signer.js';
67
+ export type { SupportedCurve } from './jose/algorithms/signing/signature-algorithms.js';
68
+ export type { MessageSigner } from './types/signer.js';
50
69
  export { SortDirection } from './types/query-types.js';
70
+ export type { EncryptionKeyDeriver, KeyDecrypter } from './types/encryption-types.js';
51
71
  export { Time } from './utils/time.js';
52
72
  export * from './types/permission-types.js';
53
73
  export * from './types/records-types.js';
54
74
 
55
75
  // 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';
76
+ export { BlockstoreLevel } from './store/blockstore-level.js';
77
+ export type { BlockstoreLevelConfig } from './store/blockstore-level.js';
78
+ export { DataStoreLevel } from './store/data-store-level.js';
79
+ export type { DataStoreLevelConfig } from './store/data-store-level.js';
80
+ export { IndexLevel } from './store/index-level.js';
81
+ export type { CompoundIndexDefinition, IndexLevelConfig, IndexedItem, IndexLevelOptions } from './store/index-level.js';
82
+ export { createLevelDatabase, LevelWrapper } from './store/level-wrapper.js';
83
+ export type { CreateLevelDatabaseOptions, LevelDatabase, LevelWrapperConfig, LevelWrapperBatchOperation, LevelWrapperOptions, LevelWrapperIteratorOptions } from './store/level-wrapper.js';
84
+ export { MessageStoreLevel } from './store/message-store-level.js';
85
+ export type { MessageStoreLevelConfig } from './store/message-store-level.js';
86
+ export { ResumableTaskStoreLevel } from './store/resumable-task-store-level.js';
87
+ export type { ResumableTaskStoreLevelConfig } from './store/resumable-task-store-level.js';
88
+ export { EventEmitterStream } from './event-stream/event-emitter-stream.js';
89
+ export type { EventEmitterStreamConfig } from './event-stream/event-emitter-stream.js';
90
+
91
+ // Sparse Merkle Tree and StateIndex
92
+ export type { StateIndex } from './types/state-index.js';
93
+ export { StateIndexLevel } from './state-index/state-index-level.js';
94
+ export type { StateIndexLevelConfig } from './state-index/state-index-level.js';
95
+ export { SparseMerkleTree } from './smt/sparse-merkle-tree.js';
96
+ export { SMTStoreLevel } from './smt/smt-store-level.js';
97
+ export { SMTStoreMemory } from './smt/smt-store-memory.js';
98
+ export type { Hash, SMTNode, SMTInternalNode, SMTLeafNode, SMTProof, SMTDiffResult, SMTNodeStore } from './types/smt-types.js';
99
+ export { hashChildren, hashEquals, hashKey, hashLeaf, hashToHex, hexToHash, getBit, initDefaultHashes, getDefaultHashes, SMT_DEPTH, ZERO_HASH } from './smt/smt-utils.js';
64
100
 
65
101
  // 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';
102
+ export type { GenerateFromRecordsWriteInput, GenerateFromRecordsWriteOut, GenerateGrantCreateInput, GenerateGrantCreateOutput, GenerateMessagesReadInput, GenerateMessagesReadOutput, GenerateMessagesSubscribeInput, GenerateMessagesSubscribeOutput, GenerateProtocolsConfigureInput, GenerateProtocolsConfigureOutput, GenerateProtocolsQueryInput, GenerateProtocolsQueryOutput, GenerateRecordsCountInput, GenerateRecordsCountOutput, GenerateRecordsDeleteInput, GenerateRecordsDeleteOutput, GenerateRecordsQueryInput, GenerateRecordsQueryOutput, GenerateRecordsSubscribeInput, GenerateRecordsSubscribeOutput, GenerateRecordsWriteInput, GenerateRecordsWriteOutput, Persona } from '../tests/utils/test-data-generator.js';
103
+ export { TestDataGenerator } from '../tests/utils/test-data-generator.js';
67
104
  export { Poller } from '../tests/utils/poller.js';
@@ -1,4 +1,4 @@
1
- import type { Signer } from '../types/signer.js';
1
+ import type { MessageSigner } from '../types/signer.js';
2
2
  import type { MessagesReadDescriptor, MessagesReadMessage } from '../types/messages-types.js';
3
3
 
4
4
  import { AbstractMessage } from '../core/abstract-message.js';
@@ -10,7 +10,7 @@ import { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.j
10
10
 
11
11
  export type MessagesReadOptions = {
12
12
  messageCid: string;
13
- signer: Signer;
13
+ signer: MessageSigner;
14
14
  messageTimestamp?: string;
15
15
  permissionGrantId?: string;
16
16
  };
@@ -27,14 +27,15 @@ export class MessagesRead extends AbstractMessage<MessagesReadMessage> {
27
27
  }
28
28
 
29
29
  public static async create(options: MessagesReadOptions): Promise<MessagesRead> {
30
+ const { signer, permissionGrantId } = options;
31
+
30
32
  const descriptor: MessagesReadDescriptor = {
31
33
  interface : DwnInterfaceName.Messages,
32
34
  method : DwnMethodName.Read,
33
35
  messageCid : options.messageCid,
34
36
  messageTimestamp : options.messageTimestamp ?? Time.getCurrentTimestamp(),
37
+ ...(permissionGrantId !== undefined && { permissionGrantId }),
35
38
  };
36
-
37
- const { signer, permissionGrantId } = options;
38
39
  const authorization = await Message.createAuthorization({
39
40
  descriptor,
40
41
  signer,
@@ -56,7 +57,7 @@ export class MessagesRead extends AbstractMessage<MessagesReadMessage> {
56
57
  private static validateMessageCid(messageCid: string): void {
57
58
  try {
58
59
  Cid.parseCid(messageCid);
59
- } catch (_) {
60
+ } catch {
60
61
  throw new DwnError(DwnErrorCode.MessagesReadInvalidCid, `${messageCid} is not a valid CID`);
61
62
  }
62
63
  }
@@ -1,5 +1,5 @@
1
1
  import type { MessagesFilter } from '../types/messages-types.js';
2
- import type { Signer } from '../types/signer.js';
2
+ import type { MessageSigner } from '../types/signer.js';
3
3
  import type { MessagesSubscribeDescriptor, MessagesSubscribeMessage } from '../types/messages-types.js';
4
4
 
5
5
  import { AbstractMessage } from '../core/abstract-message.js';
@@ -11,7 +11,7 @@ import { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.j
11
11
 
12
12
 
13
13
  export type MessagesSubscribeOptions = {
14
- signer: Signer;
14
+ signer: MessageSigner;
15
15
  messageTimestamp?: string;
16
16
  filters?: MessagesFilter[]
17
17
  permissionGrantId?: string;
@@ -43,10 +43,11 @@ export class MessagesSubscribe extends AbstractMessage<MessagesSubscribeMessage>
43
43
  const currentTime = Time.getCurrentTimestamp();
44
44
 
45
45
  const descriptor: MessagesSubscribeDescriptor = {
46
- interface : DwnInterfaceName.Messages,
47
- method : DwnMethodName.Subscribe,
48
- filters : options.filters ?? [],
49
- messageTimestamp : options.messageTimestamp ?? currentTime,
46
+ interface : DwnInterfaceName.Messages,
47
+ method : DwnMethodName.Subscribe,
48
+ filters : options.filters ?? [],
49
+ messageTimestamp : options.messageTimestamp ?? currentTime,
50
+ permissionGrantId : options.permissionGrantId,
50
51
  };
51
52
 
52
53
  removeUndefinedProperties(descriptor);
@@ -0,0 +1,59 @@
1
+ import type { MessageSigner } from '../types/signer.js';
2
+ import type { MessagesSyncAction, MessagesSyncDescriptor, MessagesSyncMessage } from '../types/messages-types.js';
3
+
4
+ import { AbstractMessage } from '../core/abstract-message.js';
5
+ import { Message } from '../core/message.js';
6
+ import { removeUndefinedProperties } from '../utils/object.js';
7
+ import { Time } from '../utils/time.js';
8
+ import { validateProtocolUrlNormalized } from '../utils/url.js';
9
+ import { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';
10
+
11
+ export type MessagesSyncOptions = {
12
+ signer : MessageSigner;
13
+ action : MessagesSyncAction;
14
+ protocol? : string;
15
+ prefix? : string;
16
+ messageTimestamp? : string;
17
+ permissionGrantId? : string;
18
+ };
19
+
20
+ export class MessagesSync extends AbstractMessage<MessagesSyncMessage> {
21
+
22
+ public static async parse(message: MessagesSyncMessage): Promise<MessagesSync> {
23
+ Message.validateJsonSchema(message);
24
+ await Message.validateSignatureStructure(message.authorization.signature, message.descriptor);
25
+
26
+ if (message.descriptor.protocol !== undefined) {
27
+ validateProtocolUrlNormalized(message.descriptor.protocol);
28
+ }
29
+
30
+ return new MessagesSync(message);
31
+ }
32
+
33
+ public static async create(options: MessagesSyncOptions): Promise<MessagesSync> {
34
+ const descriptor: MessagesSyncDescriptor = {
35
+ interface : DwnInterfaceName.Messages,
36
+ method : DwnMethodName.Sync,
37
+ messageTimestamp : options.messageTimestamp ?? Time.getCurrentTimestamp(),
38
+ action : options.action,
39
+ protocol : options.protocol,
40
+ prefix : options.prefix,
41
+ permissionGrantId : options.permissionGrantId,
42
+ };
43
+
44
+ removeUndefinedProperties(descriptor);
45
+
46
+ const { permissionGrantId, signer } = options;
47
+ const authorization = await Message.createAuthorization({
48
+ descriptor,
49
+ signer,
50
+ permissionGrantId
51
+ });
52
+
53
+ const message = { descriptor, authorization };
54
+
55
+ Message.validateJsonSchema(message);
56
+
57
+ return new MessagesSync(message);
58
+ }
59
+ }